Mattermost传入的webhooks错误,"无法解析传入的数据"

时间:2017-05-17 20:51:21

标签: php-curl mattermost

根据那里的信息量来判断,这似乎不是执行mattermost webhooks的常用方法。我们有一个mattermost安装,我们有一个旧的Web应用程序用于查找库存,我们希望能够通过webhook向包含与零件搜索请求相关的一些信息的团队发送消息。

我几乎以为我可以通过"有效载荷"向webhook URL发出ajax post请求。设置为一个参数,但这会返回400"无法解析传入数据",我认为无论出于何种原因,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 .= '"}';

它按预期工作。

1 个答案:

答案 0 :(得分:2)

解决方案 -

文本请求的实际字符串需要有/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
});

超级简单,以及我最初试图实现的目标。