【问题标题】:How to add Slack message button to open direct chat with a user?如何添加 Slack 消息按钮以打开与用户的直接聊天?
【发布时间】:2019-04-17 14:27:54
【问题描述】:

我有一个 Slack 机器人,它需要返回一条消息,其中包括 Slack 用户列表和一个用于直接向每个用户发送消息的按钮。

我希望用户的参与体验保持一致。如果用户通过桌面 Slack 应用程序与机器人交互,那么我希望用户留在应用程序中(不要被带到 Web 客户端——他们可能没有经过身份验证)。

类似:

Results:

User A - click link to view User A's profile in Slack
[Message] - click button to open direct message with user A

User B - click link to view User B's profile in Slack
[Message] - click button to open direct message with user B

我遇到了几个问题:

  1. 如何链接到用户的个人资料,因为我不知道他们使用的是 Slack 应用程序还是 Slack 网络(因此如何在显示 slack://user?team=&id=..domain.slack.com/team/{id} 方法之间做出决定?这是假设我使用title_linkauthor_link 属性。

  2. 如何创建一个消息按钮来向用户打开直接消息(甚至更好地打开它并预先填充消息)?我目前一直在玩链接操作,但没有运气。

我想我可以通过让机器人发送 DM 然后@提及原始用户来解决这个问题。从用户体验的角度来看不是很好。

更新

感谢 Adil 和 Erik 的 cmets,我认为我有 最佳 可能的解决方案。我最终为每个结果制作了一个消息附件,如下所示:

    {
        "fallback": `${user['name']} likes pizza`,
        "text": `<@${user['uid']}>`,
        "actions": [
          {
            "type": "button",
            "text": "View Pizza Profile",
            "url": url(`/directory/${user['id']}`),
            "style": "primary"
          },
          {
            "type": "button",
            "text": "Order Pizza",
            "url": `https://slack.com/app_redirect?channel=${user['uid']}`
          }
        ]
    }

此解决方案提供:

  • 包含@提及用户的文本字段(单击它会在浏览器或本机中显示配置文件)。它使用文本作为邮件标题(并删除作者和标题字段)。
  • 链接操作按钮以通过app_redirect打开直接消息聊天

有几个严重的限制:

  1. 对于本机,直接消息链接会导致浏览器打开,然后(如果用户决定)重定向回应用程序。
  2. 用户必须使用一个浏览器窗口,该浏览器窗口已经通过与本地客户端相同的工作区的身份验证(这对于 UX 来说是一个巨大的问题,因为许多人打开了多个工作区,在这种情况下,重定向会失败并显示不明显错误消息)。

【问题讨论】:

    标签: slack slack-api botkit


    【解决方案1】:

    添加到 Adil 关于链接到用户个人资料的绝佳答案

    以下是如何提供链接以打开当前用户和其他用户之间的直接消息:

    您可以使用Slack's channel redirect feature 创建一个链接,该链接将为用户打开任何频道。通过提供目标用户的 ID,这也适用于直接消息通道。

    用户U12345678的示例:

    https://slack.com/app_redirect?channel=U12345678
    

    您可以通过链接按钮或文本链接提供此链接。

    请注意,这将始终打开一个新的浏览器选项卡/窗口,即使用户使用的是 Slack 本机客户端(不,没有办法确定用户是使用本机客户端还是浏览器) .

    另一种方法是在您的消息中提供用户提及,并让用户单击它以获取包含“直接消息”的菜单。这适用于每个用户和每个平台/客户端类型:

    只需在您的文本中包含标准的用户提及,并向用户提供一些说明:

    <@U12345678>
    

    【讨论】:

    • 谢谢!我认为这证实了(不幸的是)即使他们在桌面应用程序中,我也会为用户启动一个网络会话:(。我今天会尝试你和 Adil 的反馈并报告。也许@mention 会起作用,而且看起来不会太难看。
    【解决方案2】:

    要创建指向用户个人资料的链接,请尝试按照this page 上的步骤操作:

    通过将您的 Workspace URL 与成员的用户 ID 相结合来创建链接。方法如下:

    链接的第一部分是工作区 URL。例如,https://acmeco.slack.com。 链接的第二部分是用户 ID。可以使用users.list API 方法找到多个成员的用户 ID。或者,可以通过单击成员个人资料中的更多操作图标,然后选择复制成员 ID 来找到个人的用户 ID。 将用户 ID 附加到工作区 URL 的末尾。这是一个示例:https://acmeco.slack.com/team/U1H63D8SZ

    使用相同的用户 ID,使用 conversations.open API 方法到 create a DM/multi-person message with the target user

    from slackclient import SlackClient
    
    slack_token = os.environ["SLACK_API_TOKEN"]
    sc = SlackClient(slack_token)
    
    sc.api_call(
      "conversations.open",
      users=["W1234567890","U2345678901","U3456789012"]
    )
    

    【讨论】:

    • 感谢您的想法。您建议的用户配置文件链接完全正确,但问题是如果我在消息中引用 https:// ... 则桌面 Slack 应用程序将打开一个浏览器窗口(而不是仅在 slack 应用程序中打开配置文件) .如果仅适用于 Web,则该建议可以正常工作。我会深入研究第二个想法,多方聊天是个好主意!
    猜你喜欢
    • 2018-12-20
    • 2017-03-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多