Bot Builder SDK v4
背景
2018/5/7 (現地時間) に Microsoft Build 2018 にて Bot Builder SDK の v4 のプレビュー版が発表されました。
なので、Node.js で試しにボットを作成してみました。
環境
- macOS High Sierra
- Node.js 8.11.1 LTS
- generator-botbuilder 4.0.0
- botbuilder 4.0.0-preview1.1
- botbuilder-azure 4.0.0-preview1.2
ボットの作成
準備
プロジェクト用のディレクトリを作成し、移動します。
mkdir bot-builder-4-example
cd bot-builder-4-example
Yeoman と Yeoman の Bot Builder SDK 用のジェネレーターのプレビュー版をインストールします。
npm install --save-dev yo
npm install --save-dev generator-botbuilder@preview
./node_modules/.bin
をパスに設定します。
export PATH="$PATH:./node_modules/.bin"
プロジェクト作成
プロジェクトを生成します。
yo botbuilder
What ’s the name of your bot? で、現在のディレクトリと同じ名前を設定すると、 現在のディレクトリ内にプロジェクトが作成されます。 そうでない場合は、指定した bot 名でサブディレクトリが作成されます。
言語として JavaScript を選びました。
package.json
に次を追記します。
{
"scripts": {
"start": "node app.js"
},
}
ESLint
JavaScript の構文チェックのため ESLint の設定をしておきます。
インストールします。
npm install --save-dev eslint eslint-plugin-node
package.json
に Node.js のバージョンを設定します。
{
"engines": {
"node": ">=6.0.0"
}
}
.eslintrc.json
を作成します。
{
"extends": ["eslint:recommended", "plugin:node/recommended"],
"plugins": ["node"],
"env": {
"es6": true,
"node": true
},
"rules": {
"node/exports-style": "error",
"no-console": "warn"
}
}
Bot Framework Emulator インストール
次の場所から Bot Framework Emulator v4 をダウンロードしインストールします。
https://github.com/Microsoft/BotFramework-Emulator/releases
ローカル実行
サーバーを起動します。
npm start
Bot Framework Emulator を起動します。
Open Bot をクリックします。そして、作成したプロジェクトの bot-builder-4-example.bot
を
選択します。
ローカルサーバーと Bot Framework Emulator で動作を確認することができます。 テンプレートで Echo を選択しているので、こちらがポストした内容を表示してくれます。
Bot Service 作成
Microsoft Azure にアクセスします。
すべてのサービス をクリックし、Bot Service クリックします。
追加 > Web App Bot を選択し、作成をクリックします。
次の設定をします。
- ボット名: 任意の名前
- リソースグループ: 新規 任意の名前
- 場所: 任意の場所
- 価格レベル: F0
- アプリ名: 任意の名前
- ボットテンプレート: Basic (NodeJS)
作成をクリックします。
環境変数名を変更
ジェネレーターで生成したソースコード上の環境変数名が、Bot Service のアプリケーション環境変数名と異なっているので、ソースコードを修正します。
const adapter = new BotFrameworkAdapter({
appId: process.env.MICROSOFT_APP_ID,
appPassword: process.env.MICROSOFT_APP_PASSWORD
});
const adapter = new BotFrameworkAdapter({
appId: process.env.MicrosoftAppId,
appPassword: process.env.MicrosoftAppPassword
});
Azure Web App へローカルの git からデプロイ
Microsoft Azure にアクセスします。
Bot Service を選択し、作成した Bot Service を選択します。
App Service 設定 > すべての App Service 設定 をクリックします。
デプロイメント > デプロイメント オプション > セットアップ をクリックします。
ローカル git を選択します。
Azure Web App の概要から デプロイ先の Git クローン URL をコピーします。
プロジェクトのルートディレクトリで git の初期化を行います。
git init
コピーした Git クローン URL を、リモートリポジトリに azure という名前で登録します。
{git-clone-url} を上記 デプロイ先の Git クローン URL に置き換えます。
git remote add azure {git-clone-url}
コミットします。
git add -A
git commit -m "Initial commit"
azure リポジトリにプッシュします。
git push azure master
Web チャットでテスト
Azure Portal の Bot Service に用意されている Web チャットでテスト機能を使って 動作確認をします。
Microsoft Azure にアクセスします。
Bot Service を選択し、作成した Bot Service を選択します。
ボット管理 > Web チャットでテスト クリックします。
デプロイしたボットと会話できることを確認します。

ログの確認
デプロイしたボットと会話した際に、エラーとなった場合は、ログを確認します。
次の URL の DebugConsole にてログファイルを確認することができます。
https://{your-app-name}.scm.azurewebsites.net/DebugConsole
アプリケーションログは、 /LogFiles/Application/index.html
にあります。
https://{your-app-name}.scm.azurewebsites.net/api/vfs/LogFiles/Application/index.html
状態を Azure Table Storage に保存
ジェネレーターで生成したコードは、状態を MemoryStorage
に保存しています。
そのため、アプリケーションを再起動すると状態がリセットされてしまいます。
そこで状態を Azure Table Storage に保存するようにします。
まずは、botbuilder-azure をインストールします。
npm install --save botbuilder-azure@preview
app.js
のストレージの設定を修正します。
require を追記します。
const { TableStorage } = require('botbuilder-azure');
conversationState 生成のコードも、次のものから、
const conversationState = new ConversationState(new MemoryStorage());
adapter.use(conversationState);
次の通り修正します。
ローカル環境では、引き続き MemoryStorage を利用するようにしています。
const development = (process.env.NODE_ENV === 'development');
let conversationState = null;
if (development) {
conversationState = new ConversationState(new MemoryStorage());
adapter.use(conversationState);
} else {
const tableName = 'botdata';
const azureStorage = new TableStorage({
tableName,
storageAccountOrConnectionString: process.env.AzureWebJobsStorage
});
conversationState = new ConversationState(azureStorage);
adapter.use(conversationState);
}
ローカル環境で開発環境として動かす場合は次のよう実行します。
NODE_ENV=development npm start
Azure Web App にプッシュします。
git add -A
git commit -m "Use Azure Table Storage"
git push azure master
Bot Service を選択し、作成した Bot Service を選択します。
App Service 設定 > すべての App Service 設定 をクリックします。
概要 > 再起動 をクリックし、アプリを再起動します。
再起動しても state.count
がリセットされずインクリメントされることが確認できます。
コード
今回実装したコードは次の場所に置いてあります。
https://github.com/rysh25/bot-builder-4-example
参考
Create a bot using Bot Builder SDK for JavaScript - Bot Service | Microsoft Docs
次の場所に bot のサンプルコードがあります。
botbuilder-js/samples at master · Microsoft/botbuilder-js · GitHub