【问题标题】:How to get the Slack DM channel ID of the Slack App如何获取 Slack App 的 Slack DM 频道 ID
【发布时间】:2022-02-01 00:33:53
【问题描述】:

我创建了一个简单的 Slack App 应用程序,其唯一目的是向频道发送消息。我知道有 conversations.list API 可以列出所有公共频道以获得正确的 ID。

但是,作为第一步,我只想将消息发送到应用程序频道本身。如果我使用 D... ID,它会按预期工作。无需频道邀请。但是我如何获得这个ID? conversations.list 只返回公共频道,不返回应用频道本身。

【问题讨论】:

    标签: slack-api


    【解决方案1】:

    在 Slack 中,没有应用程序的频道之类的东西。每个用户和您的应用程序/机器人之间都有一个 DM 通道。在这些术语中,要从您的应用程序/机器人向用户发送 DM 消息,您需要知道该用户的 ID 并将其指定为 postMessage API 请求的 channel 参数。

    【讨论】:

    • 所以每个用户都有应用程序的 DM 频道,对吧?
    • 可以,用户ID可以作为该频道的ID。
    • 现在我明白了。这很清楚。谢谢。
    • @RuslanIsay 进一步检查,这实际上仅适用于chat.postMessage(参见"Begin a conversation in a user's App Home")。其他需要通道 ID 的 API 方法不会接受用户 ID。
    【解决方案2】:

    将 Slack 用户 ID 作为channel 传递的能力在某种程度上是chat.postMessage 独有的。如果您尝试使用其他仅需要通道 ID (conversations.info) 的 API 方法,您将获得 "error": "channel_not_found"。文档状态:

    在用户的应用主页中开始对话

    在您的App Home 中与用户开始对话。

    启用chat:write 范围后,调用chat.postMessage 并将用户ID (U0G9QF9C6) 作为channel 的值传递到该用户的App Home 频道。您可以改用他们的直接消息频道 ID(例如,im.open)。


    来源:https://api.slack.com/methods/chat.postMessage#app_home

    注意:上述行为假设您使用的是机器人令牌。如果您改为提供用户令牌,您将自己制作用户 DM。

    现在,如果您*确实*需要获取用户的 App Home 频道 ID 以在 chat.postMessage 之外使用,请继续阅读...这里有三种方法,每种方法都有自己的自己的缺点:

    1。 chat.postMessage

    嗯,值得一提的是,如果您使用chat.postMessage,它会在其响应中返回已解析的频道ID:"channel": "D01234ABCDE"。您可以将其保存以备后用。

    2。 conversations.open

    上述文档中引用的API方法im.open已重命名为conversations.open,可用于获取用户的App Home频道ID:

    • 使用用户令牌,并将users 设置为应用程序机器人 ID,或者
    • 使用 bot 令牌,并将 users 设置为用户 ID。

    不过,我发现 conversations.open 有一些奇怪之处,这对您来说可能会或可能不会破坏交易:

    1. 它需要比chat.postMessage 用户发起私人 DM 所需的更强大的 OAuth 权限范围(chat:write 的机器人令牌是不够的),并且
    2. 它可能会以某种方式结束打开一个已经打开的对话...
      • 我使用用户令牌测试了此方法。
      • 该令牌的用户已经拥有应用程序的 DM 频道! (那不是说对话已经开始了吗?)
      • 奇怪的是,第一个回复有is_opened: false(随后的回复有is_opened: true)。

    3。 app_home_opened

    当用户打开您的 App Home 时会触发事件 app_home_opened。如果您处理此事件,则可以将 channel 保存在服务器上的事件负载中并稍后使用,无需稍后调用 conversations.open

    由于该事件仅在用户打开您应用的应用主页时发生,因此这种方法更多的是一种优化,而不是一种独立的解决方案。

    4。更好的方法...?

    由于上述缺点,如果有人知道为 Slack 用户获取 App Home 频道 ID 的更好方法,请对此答案发表评论!

    【讨论】:

      【解决方案3】:

      如果您满足以下条件,则可以通过 GUI 获取应用频道的频道 ID:

      1. 导航到频道中的消息
      2. 去更多的行动男人
      3. 选择复制链接

      频道 ID 将是 archives/ 之后的字符串,例如: {myorg}.slack.com/archives/{channel_ID}

      使用这种方法适用于 slack 应用程序中的任何渠道,尽管它不太可能是最好的方法,因为它是手动的,而不是更程序化的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-25
        • 1970-01-01
        • 2017-10-10
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 2016-08-21
        相关资源
        最近更新 更多