我正在编写一个脚本来使用curl 向Slack 发送消息。这是我的代码:
@echo off
@SETLOCAL EnableExtensions EnableDelayedExpansion
SET topic="Fw: *** Subject: Detail|detail|more-detail|detail:000"
echo %topic%
curl.exe -X POST -H "Content-Type: application/json" --data-urlencode "payload={\"channel\": \"#channelname\", \"username\": \"webhookbot\",\"text\": \"%topic\",\"icon_emoji\": \":ghost:\"}" SLACK_WEBHOOK -k
执行此脚本后,我会收到invalid_payload
错误以及回显结果。有人可以帮我解决这个问题吗?
我读过这个线,但我仍然不太确定如何解决它。
答案1
您似乎正在使用传入网络钩子。
选择以下其中一项:
a) 删除-H 'Content-type: application/json'
或更改为-H 'Cotent-type: application/x-www-form-urlencoded'
curl.exe -X POST --data-urlencode "payload={\"channel\": \"#channelname\", \"username\": \"webhookbot\",\"text\": \"%topic\",\"icon_emoji\": \":ghost:\"}" SLACK_WEBHOOK_URL
b) 保留内容类型照原样,但更改--data-urlencode
为数据并从数据中-d
删除payload=
curl.exe -X POST -H "Content-Type: application/json" -d "{\"channel\": \"#channelname\", \"username\": \"webhookbot\",\"text\": \"%topic\",\"icon_emoji\": \":ghost:\"}" SLACK_WEBHOOK_URL
但如果您使用 Slack API(例如 /chat.postMessage):
1)您需要使用令牌授权 - 添加curl选项-H "Authorization: Bearer YOUR_TOKEN_HERE"
2) 不要使用--data-urlencode
, 但是-d
来自文档:https://api.slack.com/methods/chat.postMessage
使用 application/x-www-form-urlencoded 数据进行 POST 时,可选的 Attachments 参数应包含 JSON 编码的附件数组。让自己轻松起来,并将整个消息作为 application/json 发送。
payload=
3)从数据中删除from data
curl.exe -X POST -H 'Content-Type: application/json' -H "Authorization: Bearer YOUR_TOKEN_HERE" -d "{ \"channel\": \"#channelname\", \"text\": \"message body\", \"username\": \"webhookbot\", \"icon_emoji\": \":ghost:\" }" "https://slack.com/api/chat.postMessage"