なか日記

一度きりの人生、楽しく生きよう。

Microsoft Bot Frameworkでプロ生ちゃんBotを作ってみようとした話

この記事は「プロ生ちゃん Advent Calendar 2016」の20日目の記事です。

Microsoftが提供しているBot Frameworkについて書いてみようと思います。

この記事ではVisual Studio 2017 RCでC#を使っています。また、Webサービス側はAzure Web Appsを使っています。

Microsoft Bot Frameworkとは?

一言でいうと、Microsoftが提供しているBotを作るためのFrameworkです(おい
SlackやFacebook Messengerなどのサービスに対応したBotを作ることができます。

必要なもの

  • Microsoftアカウント
  • 自分が作ったWebサービスの置き場所(今回はAzure Web Apps)

作り方

Microsoft Bot FrameworkにてBotを登録

Microsoft Bot Framework のページから、「Register a Bot」します。

適当に名前やアイコンを設定して、

f:id:nakaji999:20161219040349p:plain

「Create Microsoft App ID and password」を押すと

f:id:nakaji999:20161219040613p:plain

別のタブでアプリケーション作成画面が開くので、必要事項を記入して作成します。 作成するとApp IDやパスワードが発行されるので大事に保管しておきます。

f:id:nakaji999:20161219040726p:plain

元の画面で作成したアプリケーションのApp IDやWebサービスのエンドポイントを指定しておしまいです。

ちなみに、エンドポイントはSSL接続できる必要があります。

f:id:nakaji999:20161219042223p:plain

作成が完了すると、My botsのページが開きます。

f:id:nakaji999:20161219043246p:plain

 Botアプリケーション作成用のテンプレートをダウンロード&インストール

Bot Framework用のプロジェクトテンプレートか公開されているますのでこれを利用しまう。

ここから、テンプレートをダウンロードします。

ダウンロードした「Bot Application.zip」をVisual Studioのテンプレートディレクトリ(%USERPROFILE%\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C#\)に保存します。

プロジェクトの作成

Visual Studioにて新しいプロジェクトを作成します。

f:id:nakaji999:20161219044520p:plain

ローカル実行はBot Framework Emulatorで

ローカル環境で実行するためのエミュレーターが公開されています。

インストールして実行すると、したのような画面が開きますので、ローカルのエンドポイントを指定してあげます。その際、App IDとApp Passwordを確認されますが、ローカル実行では空欄にしておきます。

f:id:nakaji999:20161219051053p:plain

作成したプロジェクトをデバッグ実行して、Bot Framework Emuratorからメッセージを送ると以下のようになります。

f:id:nakaji999:20161219094735p:plain

Web App の設定

Botに関する下記設定を Web App のプリケーション設定に追加します。

  • BotId
  • MicrosoftAppId
  • MicrosoftAppPassword

f:id:nakaji999:20161219101404p:plain

web.configに直接書いても動きますけど、うっかりすることがあるので直接書かない方がいいと思います。

発行

好きな方法でAzureに発行します。

動作確認

Bot Frameworkのポータル

Bot FrameworkのMy Botsページから、接続確認や実際にメッセージを送っての動作確認ができます。

f:id:nakaji999:20161219104345p:plain

Bot Framework Emulator

Bot Framework Emulatorでも同じように確認ができますが、リモートホストへの接続になるのでngrokが必要になります。

ngrokのダウンロードページから環境にあったバイナリをダウンロードして、適当な場所に解凍します。その後、Bot Framework EmulatorのApp Settingsからngrokのパスを設定します。

f:id:nakaji999:20161219104721p:plain

対応するWebサービスの設定

デプロイ&動作確認ができれば、このBotが使えるWebサービスの設定を行います。

Bot FrameworkのMy Botsページの下の方に対応しているWebサービス(Channel)の一覧が表示されています。今回はSlackで使えるようにしてみようと思いますので、「Add」をクリックします。

f:id:nakaji999:20161219105730p:plain

すると、Slackで使うためのHowToが表示されますのでそれに従って設定を行います(雑)

f:id:nakaji999:20161219105840p:plain

できた

f:id:nakaji999:20161219111319p:plain

まとめ

プログラムの中身はテンプレートそのままなのが残念ですね。Microsoft Translatorといった機械翻訳サービスを使って、送った日本語を英語で返してくれたりすると便利(?)かなぁなんて思ってましたが、間に合いませんでした。f:id:nakaji999:20161219112303p:plain

Slackでいうと、/コマンドやIncoming/Outgoing Web Hookを使用したアプリに比べて、Botアプリの作成はちょっと面倒そうなイメージがありましたが、これなら割と簡単に実装できますね!(本来解決したい問題に集中できる)

おしまい。