2017-07-06 63 views
0

我編寫了幾個斜槓命令,它們在公共通道中顯示響應沒有任何問題,但是它們在專用通道或直接消息中不顯示任何響應。Slack Slash命令 - 不能在私人通道或直接消息中工作

如下所示,我使用in_channel響應類型。是否有任何其他響應類型可以使用,或者解決方法是否可以在任何地方使用?

$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); 

在此先感謝!

回答

2

這看起來不正確。

響應削減命令

用於響應命令斜線你不能發送新的消息發送回(例如,經由網絡掛接在您的代碼示例)。而只需要回覆Slack提供的消息內容。

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

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

這是你所需要的。

response_type定義如果響應可以通過一個信道"in_channel"或所有成員僅由斜線命令"ephemeral"

的發行者請參閱official documentation更多細節和選項可以看出。

發送其他消息

你當然也可以響應斜線命令從腳本發送消息。但是,如果您想發送消息給專用通道,請注意,如果在非公共通道中使用來自Slack的斜線命令請求,則不會包含正確的通道ID。我不認爲目前有任何解決方案或解決方法。

但是,您始終可以通過將用戶的ID用作通道ID來向用戶發送直接消息。

+0

謝謝你,Erik。這很棒,但我需要解決兩件事:它還將原始命令發回(我可能會弄清楚如何擺脫),但最重要的是,我需要能夠從內部設置圖標代碼。正如你在上面看到的,我有「icon_url」=> $ icon_url,這是斜線命令的一個組成部分。我將這一行添加到了您的方法中,但它不起作用。你知道這是否可以做到?再次感謝! – Irina

+0

樂於助人。 1.如果使用「in_channel」,它將始終響應原始命令。唯一的辦法就是將它關閉以使用「短暫」,但只有發行人才能看到迴應。 2.您不能在響應消息中爲斜槓命令設置圖標。相反,您可以在應用設置中爲相應的Slack應用設置圖標。 –

+0

再次感謝Erik。在那種情況下,恐怕我不得不採取我最初的方法,因爲我需要能夠動態設置圖標並隱藏命令,但仍然會在頻道中發佈。我的原始代碼效果很好,但是在做了一些測試之後,我意識到它只適用於至少有5個人的渠道。你知道這是爲什麼,或者有什麼方法可以解決這個問題嗎?這對我來說似乎是一個錯誤。再次感謝! – Irina

1

我跟Slash團隊交談,這非常有幫助,我們找出問題所在。如果有其他人遇到同樣的問題,我會在這裏分享。

問題不在於公共或私人渠道中使用的命令。創建webhook的人將它設置爲可以在私人頻道(我們的測試頻道)上使用,因此它只能在該頻道或任何她參與的頻道(所有公共頻道)中使用。只要我將她加入私人頻道,它就會起作用。

解決方案是爲webhook的創建者編輯它(不是代碼,只是webhook),並將其默認設置爲公共頻道(任意)而不是專用頻道。這使得它可以在每個頻道中工作,甚至可以直接發送消息

這樣,我就可以使用我的原始代碼,這也允許我動態地更改用戶圖標,而不是發回消息。

我希望能幫助其他人!

相關問題