我正在构建一个Bash shell脚本,以便在Jenkins中作为构建后任务运行。
此脚本有条件地设置一些信息,然后将其发送到Slack的入站Webhook API。
信息通过cURL请求发送,我发送的JSON对象可以接受指向对象数组的attachments
键。
这是我的附件数组和整个JSON对象的代码
attachments="[\"{\"fallback\":\"This\u0020is\u0020a\u0020fallback\u0020message\u0020just\u0020in\u0020case\",\"color\":\"#36a64f\",\"author_name\":\"$author_name\",\"text\":\"$text\"}\"]"
json="{\"channel\":\"$channel\",\"username\":\"$username\",\"icon_emoji\":\"$emoji\",\"attachments\":\"$attachments\"}"
在Jenkins的控制台输出中,我在cURL请求中看到以下翻译:
curl -X POST --data '{"channel":"#jenkinsslacktest","username":"Jenkins-Bot","icon_emoji":":rocket:","attachments":"["{"fallback":"This\u0020is\u0020a\u0020fallback\u0020message\u0020just\u0020in\u0020case","color":"#36a64f","author_name":"TestAuthor","text":":rocket:\u0020:rocket:\u0020SUCCESS!\u0020:rocket:\u0020:rocket:"}"]"}' https://hooks.slack.com/services/link-to-my-webhook
在格式化方式上,我的webhook没有正确触发,也没有消息发送到我选择的Slack频道。
如果我替换了attachments
键/值对,只是将text
行放在其位置,则此调用成功。
似乎我没有正确转义或格式化此attachments
值。我应该做些什么?
答案 0 :(得分:0)
这里唯一的问题是attachments
数组的JSON语法。您需要删除[
和]
周围的引号,以使其成为有效的JSON语法。然后它会工作。
这是正确的bash行:
curl -X POST --data '{"channel":"#jenkinsslacktest","username":"Jenkins-Bot","icon_emoji":":rocket:","attachments":[{"fallback":"This\u0020is\u0020a\u0020fallback\u0020message\u0020just\u0020in\u0020case","color":"#36a64f","author_name":"TestAuthor","text":":rocket:\u0020:rocket:\u0020SUCCESS!\u0020:rocket:\u0020:rocket:"}]}' https://hooks.slack.com/services/link-to-my-webhook
您可以使用JSONLint或JSONViewer等工具来验证您的JSON语法是否正确。