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

使用curl搭配jq调用Slack Webhook时出现无效负载错误如何解决?

问题原因

你的报错核心是两个问题:

  1. 直接把jq处理逻辑写在了curl的--data字符串字面量里,shell不会自动执行字符串内的管道命令,只会把整段内容当普通文本提交,既拿不到jq处理后的值,还会破坏JSON结构。
  2. 手动嵌套转义引号极易出错,一旦job.message或者提取的value里包含双引号、换行、空格等特殊字符,直接拼出来的payload不符合JSON规范,就会触发Slack的无效负载报错。

解决方法

推荐用jq来统一完成值提取+JSON payload构造,完全规避手动转义问题,可靠性更高:

方案1:先存变量再提交(可读性更高)

# 先从job.message提取目标值存入变量
STATUS=$(echo "{{job.message}}" | jq -r '.[0].status')
# 用jq构造合法JSON,通过管道传给curl
jq -n --arg status "$STATUS" '{"text": $status}' | curl -vvv -X POST -H "Content-type: application/json" --data @- https://hooks.slack.com/services/xxxxx

参数说明:

  • --data @- 表示让curl从标准输入读取提交内容,直接接收jq输出的合法JSON
  • jq -n --arg 是把shell变量传入jq内部,自动完成特殊字符转义,保证生成的JSON一定合规

方案2:单行命令(无需额外变量)

echo "{{job.message}}" | jq -r '.[0].status' | jq -R '{"text": .}' | curl -vvv -X POST -H "Content-type: application/json" --data @- https://hooks.slack.com/services/xxxxx

参数说明:

  • jq -R 表示把输入的内容当做原始字符串处理,自动转义所有特殊字符,不用额外处理格式。

内容的提问来源于stack exchange,提问作者ds-user

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:09:03