You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:无需Slack应用,通过Workflow Webhook发送格式化消息失败

问题解答

核心结论

不是只有Slack应用才能发送格式化消息,Workflow Webhook同样支持,但它的请求体格式和普通Incoming Webhook(应用创建的那种)存在差异,你的错误源于请求体结构不符合Workflow Webhook的要求。

错误原因分析

你直接将blocks数组作为请求体发送,但Slack Workflow Webhook要求请求体是一个包含对应输入字段的JSON对象,而非直接传递blocks数组。Workflow Webhook的触发逻辑依赖于你在Workflow Builder中定义的输入字段,请求体的键需要与这些字段名一一对应。

修正步骤与代码示例

  1. 配置Workflow Webhook触发器

    • 在Slack Workflow Builder中,找到你的Webhook触发器,添加一个自定义输入字段(例如命名为message_blocks),字段类型选择“文本”或“多行文本”。
    • 在后续的“发送消息”步骤中,选择“使用变量”填充消息内容,选中刚才定义的message_blocks字段,并将消息格式设置为“Blocks”(而非纯文本/Markdown)。
  2. 修正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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:55:27