我购买了 Synology DiskStation 并在其上安装了 Synology chat(2.4.0 版)。
根据 Synology 的文档,应该可以通过 传入 webhooks 将 Synology 聊天中的数据(例如文本)发送到频道。
所以我创建了一个传入的 webhook 并使用curl 编写了一个 shell 脚本来将文本发送到我的频道:
curl -k -X POST 'https://IP-ADDRESS:5001/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=THIS-IS-MY-TOKEN' -H 'Content-Type: application/json' -d '{"text": "This is a test"}'
但是,当我执行脚本时,它会抛出此错误:
{"error":{"code":120,"errors":{"name":"payload","reason":"required"}},"success":false}
我做错了什么?
通过curl发布对你的命令的修改对我有用:
curl -X POST 'https://IP-ADDRESS:5001/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=THIS-IS-MY-TOKEN' -H 'Content-Type: application/json' -d 'payload={"text": "This is a test"}'
Synology 并不真正使用 JSON 负载。有效负载的格式必须为:“payload={JSON String}”。
例如:
curl 'https://IP-ADDRESS:5001/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=THIS-IS-MY-TOKEN' -d 'payload={"text": "This is a test"}'
const options = {
method: 'POST',
body: 'payload=' + JSON.stringify({
text: "This is a test"
})
};
await fetch(`https://IP-ADDRESS:5001/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=THIS-IS-MY-TOKEN`, options);
文档:https://kb.synology.com/tr-tr/DSM/help/Chat/chat_integration?version=7
有两种方法可以将数据发送到 webhook URL:
JSON 字符串作为 POST 请求中的有效负载参数。一个 JSON 字符串作为 POST 请求的正文。