【问题标题】:How to programmatically link slack message如何以编程方式链接松弛消息
【发布时间】:2026-02-18 20:55:01
【问题描述】:

我有一个正在运行的 Slack 机器人,它可以从过去的 Slack 对话中提取信息。我想包含指向过去消息的链接,以便用户可以立即点击一个线程。我有每条消息的 ts、team、client_msg_id、channel 和 user。如何构建一个链接,将它们带到线程。

我试过了

https://company.slack.com/archives/{team}/{channel}/?ts={ts}
https://company.slack.com/archives/{channel}/{ts}
https://company.slack.com/archives/{channel}/?ts={ts}

我尝试的一切都会将我重定向到正确的频道,但不会重定向到线程。我可以看到某种以 p 开头的 id 被使​​用,但我不确定这个值来自哪里。

【问题讨论】:

    标签: python slack slack-api


    【解决方案1】:

    如果您想链接到消息,我会非常小心地重用您通过检查 HTML 页面找到的一些内部语法。这些不是官方的。它们可能暂时有效,但也可能随时更改。

    改为使用 API 方法 chat.permalink 为消息创建 HTML 链接。然后,您可以将其用作消息中的直接链接或链接按钮,并确保它始终有效。

    【讨论】:

      【解决方案2】:

      我在我使用的浏览器版本的 slack 中查找了这些“p”引用。

      以下是使用 chrome 检查器工具找到的一些链接:

      每个线程都有一个与时间戳非常相似的“p”引用。

      channel:
      https://company.slack.com/archives/chan/p1565761727026300
      
      thread:
      https://company.slack.com/archives/chan/p1565794300026800?thread_ts=1565761727.026300&cid=chan
      
      timestamp:
       1565761727.026300
      
      "p" references to 2 separate messages in a thread:
      p1565761727026300
      p1565794300026800
      

      看起来 p 是更多特定于线程中条目的时间戳。 但是粘贴这些链接(即使您能够弄清楚如何获取它们)只会将您转储到不会打开线程的频道中。

      我认为这意味着即使你拥有它们,Slack 也不会让你在线程视图中打开它们。

      【讨论】:

      • 我能够找出我的问题。链接格式为https://company.slack.com/archives/chan/p{ts without .}Mine 是因为当将 ts 值转换为字符串时,它正在删除尾随零,所以它被破坏了。