如何让AWS Lex、Azure Bot Framework创建的Slack机器人在消息线程内回复
AWS Lex 端实现方案
- 第一步从Slack触发的事件回调参数中提取
thread_ts值,若触发消息没有父线程,该值等于消息本身的ts参数,直接复用即可 - 关闭Lex默认的Slack响应模板,开启自定义响应配置,在返回给Slack的消息payload中新增
thread_ts字段,赋值为你提取到的对应值 - 若使用Lex V2版本,需在控制台的Slack集成配置页手动开启自定义响应开关,否则你附加的线程参数会被默认模板覆盖
- 额外权限校验:确保机器人在对应频道拥有
chat:write、channels:history(公域频道)/groups:history(私域频道)权限,避免线程参数失效
Azure Bot Framework 端实现方案
- 从接收到的Activity对象的
ChannelData属性中提取原消息的thread_ts值,无父线程时取ts参数值作为替代 - 构造回复Activity时,在
ChannelData中同步写入thread_ts参数,同时可搭配reply_broadcast参数控制是否将线程回复同步展示在频道主信息流中,设置为false时回复仅在线程内可见 - 参考代码示例(Python SDK v4):
from botbuilder.core import TurnContext async def on_message_activity(turn_context: TurnContext): # 提取线程ID channel_data = turn_context.activity.channel_data thread_ts = channel_data.get("thread_ts") or channel_data.get("ts") # 构造回复 reply = turn_context.activity.create_reply("线程内回复内容") reply.channel_data = { "thread_ts": thread_ts, "reply_broadcast": False } await turn_context.send_activity(reply)
- 权限校验:在Azure门户的Slack通道配置页,确认已申请并授权
channels:history、chat:write权限,重新部署后生效
内容的提问来源于stack exchange,提问作者creativated
相关产品推荐
相关产品推荐

