如何获取Slack频道原始消息URL并添加至其他Slack频道
Slack告警推送附带源消息跳转链接实现方法
所有Slack工作区的频道、消息、线程都有固定可访问的永久链接,你只需要在bot转发告警的逻辑里补充取链接、附链接的步骤即可,不需要重构现有bot逻辑,具体实现步骤如下:
- 捕获源消息的核心参数
你的bot在监听频道消息触发告警转发时,Slack推送的事件payload里会自带所需的全部核心字段,无需额外查询:- 源频道ID:对应
event.channel字段 - 源消息时间戳:普通频道消息取
event.ts字段,如果告警是在线程内发布的,取线程根消息对应的event.thread_ts字段 - 工作区域名:即你团队访问Slack的二级域名,比如团队Slack地址是
https://dev-team.slack.com,域名就是dev-team,可以直接作为bot的固定配置项存储,不需要动态获取
- 源频道ID:对应
- 生成源消息的永久跳转链接
你有两种可选的生成方式,选一种就行:- 手动拼接(无额外接口调用,性能最好)
Slack公开消息的链接格式固定,直接按规则拼接字符串即可:普通频道消息链接格式:
https://<你的工作区域名>.slack.com/archives/<源频道ID>/p<移除小数点后的消息ts字符串>
举个实际拼接示例:工作区域名为dev-team,源频道ID为C02ABC123XY,消息ts为1690000000.456789,移除ts的小数点后得到1690000000456789,最终链接为https://dev-team.slack.com/archives/C02ABC123XY/p1690000000456789
如果是线程内消息,在上述链接末尾追加参数?thread_ts=<线程根消息ts>&cid=<源频道ID>,点击后可直接定位到对应线程位置。
注意:拼接时必须把ts值里的小数点完全移除,否则链接会失效 - 接口获取(容错率更高,不用记格式)
直接调用Slack官方的chat.getPermalink接口,传入源频道ID、消息ts两个参数,接口会直接返回已经拼好的、可直接使用的完整消息链接。该接口仅需要channels:history(公有频道)或groups:history(私有频道)权限,现有可监听频道消息的bot默认已经具备对应权限,不需要额外申请授权。
- 手动拼接(无额外接口调用,性能最好)
- 把链接嵌入告警推送内容
给目标用户/目标频道发送告警时,直接在消息体里增加来源入口即可,示例消息格式:
把尖括号内的文字替换成你生成的链接,Slack客户端会自动将其渲染为可点击的跳转入口,用户点击后会直接打开原始告警所在的频道/线程位置,不需要手动检索。🔔 服务告警通知 告警内容:支付接口响应超时超过30s 告警时间:2024-xx-xx xx:xx 来源入口:<跳转到原始告警位置>
补充说明:如果你的bot会转发私有频道的告警,只要接收告警的用户本身有该私有频道的访问权限,点击链接就可以正常查看,没有权限的用户会收到Slack原生的无权限提示,不需要你额外做权限判断。
内容的提问来源于stack exchange,提问作者Yuri Tsuprun
相关产品推荐
相关产品推荐

