求助:无需Slack应用,通过Workflow Webhook发送格式化消息失败
问题解答
核心结论
不是只有Slack应用才能发送格式化消息,Workflow Webhook同样支持,但它的请求体格式和普通Incoming Webhook(应用创建的那种)存在差异,你的错误源于请求体结构不符合Workflow Webhook的要求。
错误原因分析
你直接将blocks数组作为请求体发送,但Slack Workflow Webhook要求请求体是一个包含对应输入字段的JSON对象,而非直接传递blocks数组。Workflow Webhook的触发逻辑依赖于你在Workflow Builder中定义的输入字段,请求体的键需要与这些字段名一一对应。
修正步骤与代码示例
配置Workflow Webhook触发器
- 在Slack Workflow Builder中,找到你的Webhook触发器,添加一个自定义输入字段(例如命名为
message_blocks),字段类型选择“文本”或“多行文本”。 - 在后续的“发送消息”步骤中,选择“使用变量”填充消息内容,选中刚才定义的
message_blocks字段,并将消息格式设置为“Blocks”(而非纯文本/Markdown)。
- 在Slack Workflow Builder中,找到你的Webhook触发器,添加一个自定义输入字段(例如命名为
修正Python代码
将blocks数组包装在与输入字段名对应的JSON对象中发送:
import requests import json slack_channel = 'https://hooks.slack.com/workflows/my/slack/hook' blocks = [ { "type": "section", "text": { "type": "mrkdwn", "text": "testing" } } ] # 键名需与Workflow中定义的输入字段名完全一致 slack_data = json.dumps({"message_blocks": blocks}) req = requests.Session() response = req.post( slack_channel, data=slack_data, headers={"Content-Type": "application/json;utf-8"} ).json() print(response)
额外注意事项
- 如果Workflow未定义自定义输入字段,也可以尝试将blocks放在
payload字段下,但优先推荐匹配自定义输入字段的方式,兼容性更强。 - 确保“发送消息”步骤中已正确启用Blocks格式,否则即使传递了blocks数据,也会被当作纯文本处理。
内容的提问来源于stack exchange,提问作者Mark Larsen
相关产品推荐
相关产品推荐

