如何在应用程序频道中将直接消息作为应用程序发送给用户

How to send direct messages to a user as app in app channel

如何通过 user.id 作为应用程序直接向用户发送消息。

此应用程序具有范围:bot,channels:write,emoji:read,users:read,users:read.email

我找到了如何仅作为 DM 或通过 webhook 发送消息,但没有适用范围。有人有想法吗?

如果我对你的问题的理解正确,你想在应用程序渠道而不是标准 slackbot 渠道中向用户发送直接消息。

为此你需要

  1. 您的应用需要 bot 范围和机器人用户
  2. 从您的应用程序与 conversations.open 的用户建立直接消息渠道。您会得到一个直接消息 ID。
  3. 发送带有 chat.postMessage 的消息到直接消息频道 ID

确保使用您的 Slack 应用中的 bot 访问令牌(而不是用户访问令牌)。

bot 范围为您提​​供从机器人频道打开和发送 DM 给用户所需的所有权限。不需要其他范围。

您还可以使用新的 conversations 方法,该方法适用于所有类型的渠道以执行相同的操作。

另请参阅有关同一主题的

有另一种方法可以解决这个问题,如果您的应用程序使用机器人与 Slack 一起操作,这种方法会更合适API。

您需要调用 chat.postMessage API 方法并指定 channel 参数等于您要发送消息的用户 ID(例如 U0G9QF9C6)和 as_user 论证为真。 重要细节 - 确保您使用的是机器人访问令牌(了解 here 如何获取它)。

示例:

curl -X POST "https://slack.com/api/chat.postMessage" -H  "accept: application/json" -d token=BOT_ACCESS_TOKEN -d channel=U0G9QF3C6 -d text=Hello -d as_user=true

通过这种方式,您的消息将始终代表您的机器人(名称和图标)发送,并且会像直接消息一样显示在应用程序频道(Slack 侧边栏中的 YourAppChannel)中。

与@ErikKalkoken 的方法相比,您无需提前创建频道,因此可以跟踪其 ID(可能好也可能坏,具体取决于您的需要)。

对于那些仍在寻找详细答案的人:

  • 首先你需要调用这个endpoint。 您需要使用机器人令牌进行调用,并向用户提供您要发送消息的用户的参数值。 您还需要将 prevent_creationreturn_im 设置为 true。 示例:
Authorization: Bearer {your_bot_token}
{
  "users": "U12345679",
  "prevent_creation": true,
  "return_im": true
}
  • 之后,您将获得要向其发送消息的频道 ID。 响应示例:
{
    "ok": true,
    "no_op": true,
    "already_open": true,
    "channel": {
        "id": "D123456789", <-- this is your id
        ...
        "unread_count": 0,
        "unread_count_display": 0,
        "is_open": true,
        "priority": 0
    }
}
  • 然后使用相同的机器人令牌和用户 ID 在 this one
  • 的帮助下发送消息

Blockquote I keep getting {"ok":false,"error":"not_in_channel"} do i need to manually add the bot to a channel?? – Abhijeet Bajracharya Feb 4 '20 at 8:04

您需要获得允许发送这样的消息的范围

无需使用 conversation.info,您可以 post 消息 (DM),通过使用 users.list 端点并获取用户 ID,然后您可以使用在 chat.postMessage