Microsoft Bot Framework と LINE を連携して賢いボットを開発

Microsoft はボット開発フレームワークとして Bot Framework http://dev.botframework.com を提供しています。主な機能としては

- 一度書けば様々なプラットフォームに展開が可能。(skype, facebook, skype for business, slack, sms, email, など)
- コンテキスト自動制御による、複雑な会話を実現するダイアログ機能
- C#/Node.js SDK
- Visual Studio 用テンプレートやエミュレーター
- Microsoft コグニティブサービスとのシームレスな連携

個人的にはダイアログのサポートが最高です。もし一問一答ボット作るだけなら不要ですが、前回会話の内容を保持するなどスクラッチでダイアログ機能を作ることを考えると気が遠くなります。

では何が問題かというと、LINE を連携先として現時点でサポートしていないという点です。

# 解決策

Bot Framework では汎用的に使えるダイレクトラインという接続方法を提供しているため、こちらを使えばどんなプラットフォームとも連携が可能です。また既に C# でコネクタを開発済です。

# 対象者

既に Bot Framework でボット開発をしていて、 LINE にもつなげたい開発者

LINE ボット開発者で Bot Framework を使いたい開発者

# 前提
- Microsoft Bot Framework bot アプリケーション。この記事では [GitHub](https://github.com/Microsoft/BotBuilder/tree/master/CSharp/Samples) にあるサンプルを使います。
- Visual Studio 2017
- Azure サブスクリプション
- LINE 開発者アカウントとボット登録
LINE 開発者アカウントとボットアカウントの登録は[以前の記事](https://qiita.com/kenakamu/items/acce01854ad6105df579)をご覧ください。

# セットアップ

## Bot Framework

まず Bot Framework 側から設定します。ここではサンプルのサンドウィッチボットを使いました。

1\. http://dev.botframework.com から登録済のボットを開き、"Channels" を確認。

<a href="https://msdnshared.blob.core.windows.net/media/2017/12/image81.png"><img title="image" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/12/image_thumb79.png" border="0" /></a>

2\. "Direct Line" をクリック。

<a href="https://msdnshared.blob.core.windows.net/media/2017/12/image82.png"><img title="image" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/12/image_thumb80.png" border="0" /></a>

3\. "Secret Keys" をコピーして、"Done" をクリック。

<a href="https://msdnshared.blob.core.windows.net/media/2017/12/image83.png"><img title="image" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/12/image_thumb81.png" border="0" /></a>

## Azure ストレージ

コネクターとなるアプリでは Azure ストレージを使って情報をトラックしているため、以下の手順でストレージを用意。

1\. Azure ポータルにログイン http://portal.azure.com/

2\. ストレージアカウントを作成、もしくは既にある場合はそちらも利用可能。

3\. アクセスキーのメニューより接続文字列をコピー。

## LINE ボット

1\. LINE 開発者ポータルよりボットアカウントを選択。

2\. チャネルシークレットとチャネルアクセストークンを取得。

## コネクター

1\. Visual Studio 2017 を開いてツール | 拡張機能と更新プログラムを選択。

<a href="https://msdnshared.blob.core.windows.net/media/2017/12/image298.png"><img title="image" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border: 0px" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/12/image_thumb288.png" border="0" /></a>

2\. オンラインを選択して、"LINE Bot C#" を検索してインストール。必要に応じて Visual Studio を再起動。

<a href="https://msdnshared.blob.core.windows.net/media/2017/12/image299.png"><img title="image" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border: 0px" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/12/image_thumb289.png" border="0" /></a>

3\. 新しいプロジェクトより "LineWithBotFrameworkApplication" テンプレートを選択してプロジェクトを作成。

<a href="https://msdnshared.blob.core.windows.net/media/2017/12/image300.png"><img title="image" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border: 0px" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/12/image_thumb290.png" border="0" /></a>

4\. web.config を開いてパラメーターを設定。

<a href="https://msdnshared.blob.core.windows.net/media/2017/12/image90.png"><img title="image" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/12/image_thumb88.png" border="0" /></a>

5\. 必要に応じて NuGet のリストアやアップデートを実施。

6\. プロジェクトを右クリックして、発行をクリック。

<a href="https://msdnshared.blob.core.windows.net/media/2017/12/image301.png"><img title="image" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border: 0px" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/12/image_thumb291.png" border="0" /></a>

7\. Azure などに公開してアドレスを確認。

8\. LINE 開発者ポータルで Webhook URL を更新。"/api/linebot" を末尾につけ忘れないように。

<a href="https://msdnshared.blob.core.windows.net/media/2017/12/image92.png"><img title="image" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/12/image_thumb90.png" border="0" /></a>

# テスト

最後に動作確認です。

1\. LINE クライアントから LINE 開発者ポータルにある QR コードを読み込んでボットを登録。

<a href="https://msdnshared.blob.core.windows.net/media/2017/12/image302.png"><img title="image" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border: 0px" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/12/image_thumb292.png" border="0" /></a>

2\. "hi" と送ってあとは期待通り動くか確認。

<a href="https://msdnshared.blob.core.windows.net/media/2017/12/IMG_1922.png"><img title="IMG_1922" alt="IMG_1922" src="https://msdnshared.blob.core.windows.net/media/2017/12/IMG_1922_thumb.png" border="0" /></a>

# 動作原理

基本的に LINE プラットフォームからきたデータを Bot Framework が分かるデータに書き換えて送り、返信はその逆をしているだけです。いくつか制限がありうまくできない場合もありますが、そこは都度調整が必要です。

中村 憲一郎