column

外部との連携 Slackでの投稿をKompiraに通知する

KompiraからSlackに通知する」では、KompiraからSlackのチャネルにメッセージを投稿する方法をご紹介しました。
今回は逆にSlackのチャネルに投稿したメッセージをKompiraで受信してみましょう。
(※) 本記事の内容を動作させるためには、Kompiraがインターネットから接続できる場所に配置されている必要がある点にご注意ください。

環境

ソフトウェア バージョン
Kompira 1.4.10.post3

Slackの設定

KompiraからSlackに通知する」の例と同様に、お使いのSlackのアカウントに#kompiraチャネルを利用します。

次にSlackの#kompiraチャネルに投稿されたら、それを外部に送信できるように、「Outgoing WebHooks」の設定をします。
channel settings > Add an app or integration > 検索窓に「Outgoing webhooks」と入力をしてOugoing Webhooksの設定ページを表示しましょう。
Outgoing WebHooks

左の「Add Configuration」ボタンをクリックします。

Outgoing WebHooks

「Add Outgoing Webhooks integration」をクリックします。

次に表示される画面で外部にリクエストを送る際の設定を行います。

項目名
Channel #kompira
Trigger Word(s) echo,shell
URL(s) http://(kompiraサーバのIPアドレス)/system/channels/Alert.send?format=json&token=XXXXX (KompiraのREST API呼び出し時のセキュリティートークン)

その他の項目はデフォルトのままで結構です。
「Trigger Word(s)」の項には「echo,shell」を設定しました。「echo」または「shell」から始まる投稿のみKompira側に通知されるようになります。

ここまでの設定で、Slackの#Kompiraチャネルでの投稿がKompiraのAlertチャネルに送信されるようになりました。

KompiraでSlackの投稿を受信

次の様なジョブフローを実行して、チャネルに送信されたデータを見てみましょう。

ここで#kompiraチャネルに「echo hello」と入力すると、Kompira側のコンソールには、次のような表示が現れます。

投稿した文字列「echo hello」だけでなく、ユーザ名、チャンネル名、マッチングしたトリガー名などの情報が含まれています。
トリガーと以降の文字列を分離したいので、簡単なライブラリを作成し、ジョブフロー「Slack受信」を以下のように書き換えてみましょう。

このジョブフローを実行させて再度Slack側で「echo hello」と投稿すると、以下のような結果となります。

これで、Triggerとなった文字列と以降の文字列を分けて扱えるようになりました。

受信文字列を利用してジョブを実行する

次に、Slackから受信した投稿内容ごとにジョブを作り、実行させてみましょう。
新しくジョブフロー「エコー」と「コマンド実行」を作成し、それを「Slack受信」から呼び出すように変更します。

Slackでの投稿が「echo」から始まっていればジョブフロー「エコー」が実行されます。「shell」から始まっていればジョブフロー「コマンド実行」が実行されます。
それぞれのジョブフローのreturnに渡された文字列は、ジョブフロー「Slackへ通知」をそのまま渡しています。このジョブフローは、「KompiraからSlackに通知する」で作成したものです。

「Slack受信」を実行させたまま、Slack側で発言をしてみましょう。

echoから始まる文字列のときは、echo以降に指定された文字列がそのまま帰ってきます。
shellから始まる文字列のときは、shell以降に指定された文字列をコマンドとして実行し、その結果が帰ってきます。

この機構を利用して、echo, shellの他にもいろんなコマンドを追加することができます。
本コラムでご紹介しているKompiraの機能と組み合わせてみてください。