Bot Framework SDKで作成したEcho BotをSlackで動かす

MicrosoftのBot Framework SDKは、対話型のチャットボットを簡単に構築できる強力なツールです。さらに、Azure Bot Service(以下、Bot Service)と組み合わせることで、さまざまなチャネル(Teams、Slack、LINEなど)上でボットを動かすことも可能になります。

一方で、Bot FrameworkからSlackへボットを連携させる際には、Azure App Service(以下、App Service)へのデプロイやBotのエンドポイント構成など、いくつか注意すべきポイントがあります。

本記事では、Bot Framework SDKで作成した基本的なEcho Botを、Azure上にデプロイし、Slackと連携して実際にSlack上で動作させるまでの手順を紹介します。

全体像

  1. Slackからユーザーがメッセージを送信すると、Slackチャネル連携を通じてBot Serviceに送られる

  2. メッセージを受け取ったBot ServiceはApp Service(上で動作するボット本体)へ渡す

  3. App Service(上で動作するボット本体)がメッセージを処理し、応答メッセージをBot Serviceへ返す

  4. Bot ServiceがSlackに返答メッセージを送信し、Slack上で表示される

前提

Echo botがローカルで動作することをBot Framework Emulator上で確認できていること。

「Bot Framework SDK を使用してボットを作成する」を参考にEcho botの作成と動作確認をしてください。

追加操作

Azure上で動かすために必要なパッケージをインストールします。

cd echo_bot
pip freeze > requirements.txt
pip install -r requirements.txt

作成したEcho botをApp Service上にデプロイする

ここでは、作成したEcho botをAzure上で動作できるようにします。

ゴールとしては、Azureポータル上のBot Service->設定->Web チャットでテスト で、ローカル同様に動作することです。

App ServiceとBot Serviceの作成

今回使用するリソースを作成します。

前提として、リソースグループが作成されている必要があります。(もし作成されていない場合は、こちらに沿って作成してください。)

App Serviceの作成

まず、App Serviceを作成します。

画像のWebアプリを選択し、作成をクリックします。

各パラメータの設定
  • リソースグループ-> 作成したリソースグループ名
  • 名前-> 任意の名前
  • 公開-> コード
  • ランタイムスタック-> Python 3.10
  • リージョン-> East US 2
  • Linuxプラン-> 新規作成or既存のものを使用
  • 価格プラン-> 任意

全て設定できたら確認および作成をクリックし、デプロイします。

デプロイが完了したら、リソースに移動-> 概要-> 既定のドメイン にアクセスし、”Your web app is runnning”と表示されるかを確認してください。

Bot Serviceの作成

続いて、Bot Serviceを作成します。

App Serviceと同様に、Azure Botと検索し、作成をクリックします。

各パラメータの設定
  • ボットハンドル-> 任意の名前
  • リソースグループ-> App Service同様
  • データ所在地-> グローバル
  • アプリの種類-> マルチテナント
  • 作成の種類-> 新しいMicrosoftアプリIDの作成

全て設定できたら確認および作成をクリックし、デプロイします。

ボットID情報追加

作成したBot ServiceのID情報を確認し、App Serviceの環境変数に登録します。 必要な情報としては、

  • MicrosoftAppType-> MultiTenant
  • MicrosoftAppId-> ボットのアプリID
  • MicrosoftAppPassword-> ボットのアプリパスワード

です。

MicrosoftAppIdは、ポータル上で Bot Service-> 設定-> 構成-> Microsoft App ID から確認できます。

MicrosoftAppPasswordは、 Microsoft App ID-> パスワードの管理-> 新しいクライアントシークレット から設定できます。この時作成される値がMicrosoftAppPasswordとなるので忘れずにメモしてください。

取得した情報を以下のように、App Serviceの環境変数として設定してください。

App ServiceにEcho Botをデプロイ

Azure CLIを使用してApp Serviceにローカルのボットをデプロイします。 macOSなら、

brew update && brew install azure-cli

でインストールできます。

まず、echo_botのzipファイルを作成します。

zip -r <zip-package-name> . -x '.??*'

そして、Azureにログインし、デプロイします。

az login
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <zip-package-path>

もしここで、デプロイは成功したけどアプリの起動が一向に終わらない問題が発生した場合、新たにstartup.shをecho_botディレクトリ内に作成し、それを含めたzipファイルを再度作成してください。(App ServiceにおいてPythonアプリを動かすための「明示的な手順指定」を行なっています)

以下にstartup.shの中身を示します。

#!/bin/sh

# 必要なパッケージのインストール
pip install --no-cache-dir -r /home/site/wwwroot/requirements.txt

# Gunicorn でアプリを起動
gunicorn --bind 0.0.0.0:$PORT --worker-class aiohttp.worker.GunicornWebWorker --timeout 600 app:APP

そして、App Service-> 設定-> 構成-> スタートアップコマンド に./startup.shを追記し、再度デプロイを実行してください。

最後に、ポータル上でBot Service-> 設定-> 構成-> メッセージングエンドポイント に、

https://<既定のドメイン>/api/messages

を入力します。

動作確認

デプロイがうまく行っていると、Bot Service->設定->Web チャットでテスト でEcho botが機能します。

Slackと連携

ここでは、Slackアプリを作成し、作成したボットをSlack上で動作させる手順を説明します。

ゴールとしては、Slack上でEcho botが使える状態になっていることです。

手順は、「ボットを Slack に接続する」に沿って行います。

最終的に、

このように、オウム返ししてくれることをSlack上で確認できました。