Mattermost 传入 webhook 错误,"Unable to parse incoming data"
Mattermost incoming webhooks error, "Unable to parse incoming data"
从那里的信息量来看,这似乎不是执行 mattermost webhooks 的常用方法。我们有一个 mattermost 安装,我们有一个用于查找库存的旧 Web 应用程序,我们希望能够通过 Webhook 向团队发送一条消息,其中包含与零件搜索请求相关的一些信息。
我差点以为我可以通过 ajax post 请求 webhook URL 并将 "payload" 设置为参数,但是这个 returns 400 "Unable To Parse Incoming Data",无论出于何种原因,我认为 ajax 请求是问题所在,所以我创建了一个 PHP 脚本来执行 curl 请求,这就是我所拥有的;
<?php
$payload = json_encode($_REQUEST['payload']);
$ch = curl_init('http://dev2:8065/hooks/6isjcohwyibsf8kp5g9p6bcgoa');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, "$payload");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
echo $result;
此时任何建议都是值得的。这要么出于某种原因无法完成,要么太微不足道了,我想多了。
有效载荷样本,
正在发送的负载:
'payload={"text": "| Component | Tests Run | Tests Failed |
|:-----------|:------------|:-----------------------------------------------|
| Server | 948 | :white_check_mark: 0|
| Web Client | 123 | :warning: [2 (see details)(http://linktologs) |
| iOS Client | 78 | :warning: [3 (see details)](http://linktologs) |"}'
整个字符串都在请求中发送。
适用于此,
如果我像这样分解 php 中的有效载荷:
$body = '| Component | Tests Run | Tests Failed |\n|:-----------|:------------|:---------------------------------------------|\n| Server | 948 | :white_check_mark: 0 |\n| Web Client | 123 | :warning: [2 (see details)](http://linktologs) |\n| iOS Client | 78 | :warning: [3 (see details)](http://linktologs) |\n';
$payload = 'payload={"text": "';
$payload .= $body;
$payload .= '"}';
它按预期工作。
解决方案-
文本请求的实际字符串需要有 /n
个分隔符。
一旦我能够获得一个工作请求,我就能够一直重构到使用 jQ 的 ajax 请求将有效负载发送到 webhook。我仍然不是 100% 了解原因或方法。
这是工作中的 JS:
var body = 'payload={"text":"| Component | Tests Run | Tests Failed |\n' +
'|:-----------|:------------|:---------------------------------------------|\n'+
'| Server | 948 | :white_check_mark: 0 |\n' +
'| Web Client | 123 | :warning: [2 (see details)](http://linktologs) |\n' +
'| iOS Client | 78 | :warning: [3 (see details)](http://linktologs) |\n"}';
$.ajax({
type: 'POST',
url: "http://dev2:8065/hooks/6isjcohwyibsf8kp5g9p6bcgoa",
data: body
});
超级简单,也是我最初想要实现的目标。
从那里的信息量来看,这似乎不是执行 mattermost webhooks 的常用方法。我们有一个 mattermost 安装,我们有一个用于查找库存的旧 Web 应用程序,我们希望能够通过 Webhook 向团队发送一条消息,其中包含与零件搜索请求相关的一些信息。
我差点以为我可以通过 ajax post 请求 webhook URL 并将 "payload" 设置为参数,但是这个 returns 400 "Unable To Parse Incoming Data",无论出于何种原因,我认为 ajax 请求是问题所在,所以我创建了一个 PHP 脚本来执行 curl 请求,这就是我所拥有的;
<?php
$payload = json_encode($_REQUEST['payload']);
$ch = curl_init('http://dev2:8065/hooks/6isjcohwyibsf8kp5g9p6bcgoa');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, "$payload");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
echo $result;
此时任何建议都是值得的。这要么出于某种原因无法完成,要么太微不足道了,我想多了。
有效载荷样本,
正在发送的负载:
'payload={"text": "| Component | Tests Run | Tests Failed |
|:-----------|:------------|:-----------------------------------------------|
| Server | 948 | :white_check_mark: 0|
| Web Client | 123 | :warning: [2 (see details)(http://linktologs) |
| iOS Client | 78 | :warning: [3 (see details)](http://linktologs) |"}'
整个字符串都在请求中发送。
适用于此,
如果我像这样分解 php 中的有效载荷:
$body = '| Component | Tests Run | Tests Failed |\n|:-----------|:------------|:---------------------------------------------|\n| Server | 948 | :white_check_mark: 0 |\n| Web Client | 123 | :warning: [2 (see details)](http://linktologs) |\n| iOS Client | 78 | :warning: [3 (see details)](http://linktologs) |\n';
$payload = 'payload={"text": "';
$payload .= $body;
$payload .= '"}';
它按预期工作。
解决方案-
文本请求的实际字符串需要有 /n
个分隔符。
一旦我能够获得一个工作请求,我就能够一直重构到使用 jQ 的 ajax 请求将有效负载发送到 webhook。我仍然不是 100% 了解原因或方法。
这是工作中的 JS:
var body = 'payload={"text":"| Component | Tests Run | Tests Failed |\n' +
'|:-----------|:------------|:---------------------------------------------|\n'+
'| Server | 948 | :white_check_mark: 0 |\n' +
'| Web Client | 123 | :warning: [2 (see details)](http://linktologs) |\n' +
'| iOS Client | 78 | :warning: [3 (see details)](http://linktologs) |\n"}';
$.ajax({
type: 'POST',
url: "http://dev2:8065/hooks/6isjcohwyibsf8kp5g9p6bcgoa",
data: body
});
超级简单,也是我最初想要实现的目标。