雑コラBotを作ろう①: Azure Functionsで簡易的なSlack BOTを作る

Michaelです。

前回、Azure FunctionsとFace APIを使った「雑コラBOT」を紹介しました。
今回からは、数回にわたってその作成の過程をご紹介します。1回目は、Azure Functionsでメッセージをそのまま返すオウム返しする簡易的なSlackのBOTを作成します。

構成

Slackに投稿したメッセージをAzure Functionsで受け、BOTの開始をSlackに通知します。

関数の作成とバインド設定

Azure Functionsの関数をJavaScriptで作成します。
関数のテンプレートから「Generic webhook」を選択し、JavaScriptで関数を作成します。

関数が作成されたら「統合」を選択し、トリガーの設定を変更します。
「Webhook type」をデフォルトの「Generic JSON」から「Slack」に変更します。

Slackカスタムインテグレーションの設定

Slackに投稿されたメッセージをAzure Functionsに送信するようにSlackを設定します。
SlackのAppディレクトリから「発信Webフック」を検索し、カスタムインテグレーションに追加します。

「発信Webフック」の設定を開き、メッセージを送信するURLを設定します。
URLには「https://{Functon App名}.azurewebsites.net/api/{関数名}?clientId={任意のclientId }」の形式でAzure Functionsの関数のURLを入力し、設定した「clientId」と「トークン」をメモにひかえておきます。
その他の項目は任意で設定をします。

clientIdとトークンの設定

Slackの設定が終わったら、控えておいたSlackの「clientId」と「トークン」をAzure Functionsに登録します。
関数の「管理」から「新しい関数キーの追加」をクリックします。

「名前」、「値」にそれぞれ先ほどのSlackの「clientId」、「トークン」を記入し、右の「保存」をクリックして設定を保存します。

関数のスクリプトエディタに戻り、「</>関数のURLの取得」をクリックします。
「キー」に追加したclientIdが追加され、選択するとSlackに設定したURLが表示されることが確認できます。

スクリプト

スクリプトは以下のように作成しました。

スクリプトの説明

レスポンスを速くするため、単純な処理でメッセージを処理しています。

  1. フォームデータをオブジェクトに変換
    Slackから送信されるフォームデータを扱いやすいようにオブジェクトに変換します。
  2. slackbotからのメッセージの除外
    Slackの設定によりますが、slackbotからのメッセージで関数が起動してしまうことがあるため、「user_name」を参照してslackbotからのメッセージでは処理を中断させます。
  3. Slackにレスポンス
    Slackにレスポンスを返し、BOTの実行を通知します。

実行結果

Slackの設定したチャンネルにメッセージを投稿すると、BOTの開始を通知する「BOT Start!」のメッセージがBOTから返されました。

まとめ

ここまでが、Azure FunctionsでSlack BOTを作成するための基本の操作となります。
次回は、Azure Functionsで受けたメッセージからURLを抽出してAzure Queue Storageに格納するまでを作成します。

この記事を書いた人

azure-recipe-user