2017-05-17 2 views
1

Gemessen an der Menge der Informationen da draußen scheint dies nicht wie eine gewöhnliche Art, um die meisten Webhooks auszuführen. Wir haben eine mattere Installation, wir haben eine ältere Webanwendung, die zum Nachschlagen des Inventars verwendet wird, wir möchten per Webhook eine Nachricht an ein Team senden können, das einige Informationen bezüglich einer Teilsuchanforderung enthält.Meistens ankommender Webhook-Fehler, "Nicht in der Lage, eingehende Daten zu analysieren"

Ich dachte fast, ich könnte mit Ajax Post-Anfrage auf die Webhook-URL mit der "Nutzlast" als ein Parameter gesetzt, aber dies gibt 400 "nicht in der Lage eingehende Daten zu parsen", dachte ich aus irgendeinem Grund der Ajax Anfrage war das Problem, also habe ich ein PHP-Skript erstellt, um die Curl-Anfrage zu machen, das ist was ich habe;

<?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; 

Jeder Vorschlag an dieser Stelle wäre lohnenswert. Dies kann entweder aus irgendeinem Grund nicht getan werden oder es ist so trivial, dass ich darüber nachdenke.


Nutzlast Probe

Die Nutzlast gesendet werden:

'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) |"}' 

Diese gesamte Zeichenfolge in der Anforderung gesendet wird.


Arbeiten mit diesem,

Wenn ich die Nutzlast innerhalb des php wie so brechen:

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

Es funktioniert wie erwartet.

+0

Der 400 Bad Request-Fehler kann durch eine fehlerhafte Nutzlast verursacht werden. Können Sie die Payload hinzufügen, die Sie an die Frage senden? – George

+0

@George Aktualisiert, der Text ist die Tabelle rechts vom äußersten Beispiel. –

Antwort

1

Die Lösung -

Die eigentliche Zeichenfolge für den Text Anfrage benötigt /n Begrenzer haben.


Einmal konnte ich eine Anfrage bekommen ich den ganzen Weg Refactoring dann in der Lage war zu arbeiten, um mit der jQ der Ajax-Anforderung eine Nutzlast an die Webhook zu senden. Ich bin immer noch nicht 100% auf das Warum oder das Wie.

Dies ist der Arbeits 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 
}); 

super einfach, und was ich ursprünglich versuchte zu acheive.

+0

Ich bin mir nicht sicher, aber basierend auf den einzigen Unterschieden, die ich zwischen Ihren Arbeits- und Nicht-Arbeitswerten sehen kann, sieht es so aus, als hätten Sie einen JSON-Wert für 'text' mit tatsächlichen neuen Zeilen anstelle von' \ n's. Ich denke, das wäre ein ungültiger JSON und somit die Ursache der 400 Fehlerantwort vom Mattermost Server. Die Art und Weise, wie Sie es funktionieren, vermeidet das Problem, indem Sie keine neuen Zeilen im JSON-Wert haben. – George

+0

@George Ich stimme zu, die '\ n''s machten den Unterschied. –

Verwandte Themen