如何添加Slack消息按钮以打开与用户的直接聊天?

时间:2018-11-14 15:11:15

标签: slack slack-api botkit

我有一个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,然后@提及原始用户来解决此问题。从UX的角度来看不是很好。

更新

感谢阿迪尔(Adil)和埃里克(Erik)的评论,我认为我有最好的解决方案。我最终为每个结果制作了一个消息附件,如下所示:

    {
        "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来说,这是一个巨大的问题,因为许多人打开了多个工作空间,在这种情况下,重定向失败,并且显示的内容不明显错误消息。)

2 个答案:

答案 0 :(得分:2)

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

  

通过将您的工作区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"]
)

答案 1 :(得分:2)

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

以下是提供链接以在当前用户和另一个用户之间打开直接消息的方法:

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

用户Controls的示例:

U12345678

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

请注意,即使用户使用的是Slack本机客户端,这仍将始终打开新的浏览器选项卡/窗口(否,无法找到用户是否使用本机客户端或浏览器)

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

只需在文本中添加标准用户提及的内容,并向用户提供一些说明:

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