2017-07-06 2 views
0

Ich habe mehrere Schrägstrichbefehle programmiert, die eine Antwort in öffentlichen Kanälen ohne Probleme zeigen, aber sie zeigen keine Antwort in privaten Kanälen oder direkten Nachrichten.Slack Slash Befehle - Funktioniert nicht in privaten Kanälen oder direkten Nachrichten

Wie unten gezeigt, verwende ich den Antworttyp in_channel. Gibt es einen anderen Antworttyp, den ich verwenden kann, oder einen Workaround, damit er überall funktioniert?

$data = array(
    "username" => "My_user", 
    "channel" => $channel_id, 
    "response_type" => "in_channel", 
    "text" => $text, 
    "mrkdwn" => true, 
    "icon_url" => $icon_url 

); 

$json_string = json_encode($data); 
$slack_call = curl_init($slack_webhook_url); 
curl_setopt($slack_call, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($slack_call, CURLOPT_POSTFIELDS, $json_string);  
curl_setopt($slack_call, CURLOPT_CRLF, true); 
curl_setopt($slack_call, CURLOPT_RETURNTRANSFER, true);                  
curl_setopt($slack_call, CURLOPT_HTTPHEADER, array(                   
    "Content-Type: application/json", 
    "Content-Length: " . strlen($json_string)) 
);                             
$result = curl_exec($slack_call); 
curl_close($slack_call); 

Vielen Dank im Voraus!

Antwort

2

Das sieht nicht wie der richtige Ansatz aus.

Reaktion Befehle

für die Reaktion auf einen Schrägstrich Befehl zerschneiden Sie müssen keine neue Nachricht zurück (beispielsweise über Webhook wie in Ihrem Codebeispiel) senden. Antworte einfach auf die Anfrage von Slack mit dem Inhalt deiner Nachricht.

Beispiel

$message = array (
    'response_type' => 'in_channel', 
    'text' => $text 
    ); 

header ('content-type: application/json'); 
echo json_encode ($message); 

, die alles, was Sie brauchen, ist.

response_type definiert, ob die Antwort kann von allen Mitgliedern eines Kanals "in_channel" oder nur durch den Emittenten des Schrägstrichs Befehl "ephemeral"

Bitte beachten Sie die official documentation, um weitere Informationen und Optionen zu sehen.

Senden zusätzliche Nachrichten

Sie können natürlich auch eine Nachricht von Ihrem Skript in Reaktion auf den Slash-Befehl senden. Wenn Sie jedoch eine Nachricht an einen privaten Kanal senden möchten, beachten Sie bitte, dass die Slash-Befehlsanforderung von Slack nicht die richtige Kanal-ID enthält, wenn sie in einem nichtöffentlichen Kanal verwendet wird. Ich glaube nicht, dass es derzeit eine Lösung oder einen Workaround dafür gibt.

Sie können jedoch immer eine direkte Nachricht an den Benutzer senden, indem Sie die ID des Benutzers als Kanal-ID verwenden.

+0

Danke, Erik.Das ist großartig, aber es gibt zwei Dinge, die ich beheben müsste: Es postet auch den ursprünglichen Befehl zurück (was ich wahrscheinlich herausfinden werde, wie man loswird), aber vor allem muss ich in der Lage sein, das Symbol von innen zu setzen der Code. Wie Sie oben sehen können, habe ich "icon_url" => $ icon_url, was ein integraler Bestandteil des Befehls slash ist. Ich habe diese Zeile zu Ihrem Ansatz hinzugefügt, aber es funktioniert nicht. Weißt du, ob das möglich ist? Danke noch einmal! – Irina

+0

Gerne helfen. 1. Es wird immer den ursprünglichen Befehl zurückgeben, wenn Sie "in_channel" verwenden. Nur eine Möglichkeit, dies auszuschalten, um "ephemere" zu verwenden, aber dann wird die Antwort nur vom Aussteller sichtbar sein. 2. Sie können kein Symbol in der Antwortnachricht für einen Schrägstrichbefehl festlegen. Stattdessen können Sie das Symbol für die entsprechende Slack-App in den App-Einstellungen festlegen. –

+0

Danke nochmal, Erik. In diesem Fall muss ich meiner ursprünglichen Herangehensweise folgen, da ich das Symbol dynamisch einstellen und den Befehl ausblenden, aber trotzdem im Kanal posten muss. Mein ursprünglicher Code funktioniert großartig, aber nach einigen Tests habe ich festgestellt, dass er nur in Kanälen mit mindestens 5 Personen funktioniert. Weißt du, warum das sein könnte, oder ob es einen Weg gibt, es zu beheben? Es scheint mir ein Fehler zu sein. Danke noch einmal! – Irina

1

Ich sprach mit dem Slash-Team, das sehr hilfreich war, und wir fanden heraus, was das Problem war. Ich teile es hier für den Fall, dass jemand anderes auf dasselbe Problem stößt.

Das Problem bestand nicht in den Befehlen, die in öffentlichen oder privaten Kanälen verwendet werden. Die Person, die den Webhook erstellt hat, hat sie so eingestellt, dass sie auf einem privaten Kanal (unserem Testkanal) funktioniert, so dass sie nur in diesem Kanal oder in allen Kanälen funktioniert, zu denen sie gehört (also alle öffentlichen Kanäle). Sobald ich sie einem privaten Kanal hinzugefügt habe, würde es funktionieren.

Die Lösung war für den Ersteller des Webhooks, das es (nicht den Code, nur den Webhook) zu bearbeiten und es standardmäßig auf einen öffentlichen Kanal (any) anstelle eines privaten Kanals einzustellen. Dadurch funktionierte es in jedem Kanal, sogar in direkten Nachrichten.

Auf diese Weise konnte ich meinen ursprünglichen Code verwenden, der es mir auch erlaubt, das Benutzersymbol dynamisch zu ändern, anstatt eine Nachricht zurückzusenden.

Ich hoffe das hilft auch anderen Menschen!

Verwandte Themen