雑コラBotを作ろう①: 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が表示されることが確認できます。

スクリプト

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

module.exports = function (context, data) {

// 1. フォームデータをオブジェクトに変換
var body_elements = data.split('&')
var body = {}
for(let elem of body_elements){
elem = elem.split('=')
body[elem[0]] = elem[1]
}

// 2. slackbotからのメッセージを除外
if (body.user_name != 'slackbot') {

// 3. Slackにレスポンス
context.res = {text: 'BOT Start!'}

}
else {
context.res = {};
}
context.done();
}

スクリプトの説明

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

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