Ошибка входящих веб-перехватчиков Mattermost, невозможно проанализировать входящие данные

Судя по количеству доступной информации, это не похоже на распространенный способ выполнения наиболее важных веб-хуков. У нас самая важная установка, у нас есть старое веб-приложение, используемое для поиска запасов, мы хотели бы иметь возможность через веб-перехватчик отправлять сообщение команде, содержащее некоторую информацию, касающуюся запроса на поиск детали.

Я почти думал, что смогу уйти с отправкой ajax-запроса на URL-адрес веб-перехватчика с «полезной нагрузкой», установленной в качестве параметра, но это возвращает 400 «Невозможно проанализировать входящие данные», я подумал, что по какой-то причине запрос ajax был проблемой поэтому я создал PHP-скрипт для выполнения запроса на завивание, вот что у меня есть;

<?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 .= '"}';

Он работает так, как ожидалось.


person Mark Carpenter Jr    schedule 17.05.2017    source источник
comment
Ошибка 400 Bad Request может быть вызвана неправильно сформированной полезной нагрузкой. Пожалуйста, не могли бы вы добавить полезную нагрузку, которую вы отправляете, к вопросу?   -  person George    schedule 18.05.2017
comment
@George Обновлено, текст представляет собой таблицу прямо из самого важного примера.   -  person Mark Carpenter Jr    schedule 19.05.2017


Ответы (1)


Решение —

Фактическая строка для текстового запроса должна иметь разделители /n.


Как только мне удалось заставить работать один запрос, я смог провести рефакторинг вплоть до использования ajax-запроса jQ для отправки полезной нагрузки на веб-перехватчик. Я до сих пор не знаю на 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
});

супер просто, и то, что я изначально пытался достичь.

person Mark Carpenter Jr    schedule 19.05.2017
comment
Я не уверен в этом, но исходя из единственных различий, которые я вижу между вашими рабочими и нерабочими значениями, похоже, что у вас было значение JSON для text с фактическими новыми строками в нем, а не \ns. Я думаю, что это будет недопустимый JSON и, следовательно, причина ответа об ошибке 400 от сервера Mattermost. То, как вы это работаете, позволяет избежать проблемы, поскольку в значении JSON нет фактических новых строк. - person George; 19.05.2017
comment
@ Джордж, я согласен, \n имеет значение. - person Mark Carpenter Jr; 22.05.2017