GitHub Actions上传文件至Slack遇400错误排查:请求缺少Slack要求的Payload字段
问题:GitHub Actions上传文件到Slack时出现"no_text" 400错误
我尝试通过GitHub Actions将文件上传至Slack时,出现如下错误:
"no custom payload was passed in, using default payload that triggered the GitHub Action axios post failed, double check the payload being sent includes the keys Slack expects Error: no_text Error: Request failed with status code 400"以下是我在.yml文件中配置的内容:
- name: Send GitHub trigger payload to Slack Workflow Builder id: slack uses: slackapi/slack-github-action@v1.21.0 with: payload-file-path: "./stats.json" env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}请问我的配置中缺失了什么?
解决方案
这个400错误里的no_text提示是核心线索——Slack没有收到它预期的必填字段,结合你的配置来看,问题出在这几个关键点:
1. 混淆了「发送消息Payload」和「上传文件」的参数
你当前使用的payload-file-path参数是用来向Slack Webhook发送自定义JSON消息内容的,而非直接上传文件。如果你的目标是把stats.json文件本身传到Slack,应该改用file-path参数,同时补充必要的消息说明,修改后的配置如下:
- name: Upload stats file to Slack id: slack uses: slackapi/slack-github-action@v1.21.0 with: file-path: "./stats.json" initial-comment: "本次GitHub Actions运行生成的统计数据文件" env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
2. 若需发送JSON Payload,必须包含Slack要求的字段
如果你的需求是把stats.json里的内容作为消息发送(而非上传文件),那必须保证JSON结构符合Slack Webhook的要求:
- 对于普通Slack Incoming Webhook,
text是必填字段(比如{"text": "这里是要发送的消息内容"}) - 如果你对接的是Slack Workflow Builder的Webhook,要严格匹配你在Workflow中定义的触发参数(比如Workflow设置了接收
report_content字段,你的JSON里就必须包含这个键)
你可以先用curl手动测试Payload和Webhook的有效性,快速定位问题:
curl -X POST -H "Content-Type: application/json" -d @stats.json $SLACK_WEBHOOK_URL
如果curl也返回400,那就是stats.json的内容不符合Slack要求,补充对应字段即可。
3. 确认Webhook类型与配置匹配
不同类型的Slack Webhook对Payload的要求差异很大:
- Workflow Builder的Webhook需要完全匹配你创建Workflow时设定的触发参数,不能使用默认的
text字段 - 普通Incoming Webhook灵活性更高,但
text是必填项
内容的提问来源于stack exchange,提问作者jerry
相关产品推荐
相关产品推荐

