2017-07-06 6 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

これは正しいアプローチのようには見えません。あなたが(例えば、ウェブフックを経由してあなたのコードの例のように)戻って新しいメッセージを送信してはならないスラッシュコマンドに応答するためのコマンド

を大幅に削減するための対応

。代わりにあなたのメッセージの内容でスラックからのリクエストに応答してください。あなたが必要とするすべてである

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

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

。応答が唯一のスラッシュコマンド"ephemeral"

の発行者の詳細およびオプションのofficial documentationを参照してくださいすることにより、チャネル"in_channel"かのすべてのメンバーが見ることができる場合

response_typeを定義します。

送信追加メッセージ

あなたはもちろんスラッシュコマンドに応答して、あなたのスクリプトからメッセージを送信することができます。ただし、非公開チャンネルにメッセージを送信する場合は、非公開チャンネルで使用されているSlackからのスラッシュコマンドリクエストに正しいチャンネルIDが含まれないことに注意してください。私は現在、このための解決策または回避策はないと思います。

ただし、チャネルIDとしてユーザーのIDを使用すると、常に直接メッセージをユーザーに送信できます。

+0

ありがとう、Erik。これは素晴らしいですが、私が修正する必要がある2つのことがあります:それはまた、元のコマンドを返す(私はおそらくどのように取り除く方法を見つけることができます)しかし、最も重要なのは、コード。上記のように、私は "icon_url" => $ icon_urlを持っています。これはスラッシュコマンドの不可欠な部分です。あなたのアプローチにその行を追加しましたが、うまく機能しません。これができるかどうか知っていますか?再度、感謝します! – Irina

+0

お寄せください。 1. "in_channel"を使用すると、元のコマンドに常に応答します。それをオフにして "一時的な"ものを使用する唯一の方法ですが、応答は発行者だけが見ることができます。 2.スラッシュコマンドの応答メッセージにアイコンを設定することはできません。その代わりに、あなたは対応するスラックアプリのアイコンをアプリ設定で設定する必要があります。 –

+0

もう一度、ありがとう、Erik。その場合、アイコンを動的に設定してコマンドを非表示にする必要があるが、まだチャンネルに投稿する必要があるので、私は私の元のアプローチに従わなければならないのではないかと恐れている。私の元のコードは素晴らしいですが、いくつかのテストをした後、私はそれが少なくとも5人の人がいるチャンネルでのみ動作することを認識しました。なぜこれが起こりうるのか、それを修正する方法があるのか​​知っていますか?それは私のバグのようです。再度、感謝します! – Irina

1

私はスラッシュチームと話しましたが、これは非常に有益でした。私たちは問題が何かを理解しました。他の誰かが同じ問題に遭遇した場合、私はここでそれを共有しています。

問題は、パブリックチャネルまたはプライベートチャネルで使用されているコマンドに関する問題ではありませんでした。 Webhookを作成した人は、プライベートチャンネル(私たちのテストチャンネル)で動作するように設定したので、そのチャンネルや彼女が参加していたチャンネル(つまりすべてのパブリックチャンネル)でのみ動作します。彼女をプライベートチャンネルに追加するとすぐに、それはうまくいくはずです。

Webhookの作成者は、コードを編集するのではなく、Webhookだけを編集し、デフォルトでプライベートチャネルではなくパブリックチャネル(any)に設定するという解決策がありました。これにより、すべてのチャンネル、ダイレクトメッセージでも機能しました。

このようにして元のコードを使用することができました。メッセージを元に戻す代わりに、ユーザーアイコンを動的に変更することもできます。

他の人にも役立つことを願っています!

関連する問題