Watson ConversationにFacebook MessangerとTelegramを接続する(How to build an enhanced chatbot with Watson Conversationの翻訳)

米国 developerWorks サイトの developerWorks Recipes に「[How to build an enhanced chatbot with Watson Conversation](https://developer.ibm.com/recipes/tutorials/how-to-build-an-enhanced-chatbot-with-watson-conversation/)」という興味深い投稿があったので、試しつつざっと訳してみます。

Watson conversation を利用したチャットボットを作成し、そこにFacebook Messenger と Telegram を接続するサンプルです。それぞれのサービスにある WebHook の仕組みをうまく活用したレシピだとおもいます。

## 最初に

基本は翻訳なので、基本的な著作権は元原稿の作者・所有者にあります。感謝はできれば元ページへお願いします。cyrille.benoit さんに感謝！

元原稿にないコンテンツ、つまり私が作成した全ての文章、画像、コード等は [Creative Commons Zero](https://creativecommons.org/publicdomain/zero/1.0/deed.ja) ライセンスです。元原稿由来の制限がない限り、自由に活用してください。内容は確認しつつ訳していますが、全て無保証です。勘違いや翻訳のミスはコメント欄で指摘をお願いします。

## 概要

対象読者: 誰でも (Any Skill Level)

このレシピはあなたのIBM Bluemix環境上で新しいボットをデプロイし、それをWebやFacebook Messengerからアクセス可能にします。それを10分以内で。またこのアプリはユーザーの入力、Watsonの出力、文脈そして表示ボタンを簡単に修正できるようになっています。

## 構成要素

* Bluemix アカウント - まだ所有していない場合には無料アカウントを申請してください
* [オプション] Facebook Account (Messenger 統合を試す場合) - まだ所有していない場合は登録してください
* [オプション] Telegram アカウント (Telegram 統合を試す場合)
* [オプション] Watson Conversation Workspace - 私のGitHubリポジトリにフランス語のサンプルが置いてあります

より詳細な情報は [Github リポジトリ](https://github.com/cyrillebenoit/conversationMaster) を参照してください。

フランス語ショーケース (Webアプリ) : http://conversationmaster-main.mybluemix.net
フランス語ショーケース (Telegram Messenger) : https://t.me/ConversationMasterBot



## ステップ･バイ･ステップ

### 1. Bluemixへのデプロイ

1. 最初にリンク https://bluemix.net/deploy?repository=https://github.com/cyrillebenoit/conversationMaster から、サンプルアプリを Blumix にデプロイします<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/def29614-ac3f-21c4-2e37-fa24a2bd03b0.png)
2. 今回のサンプルでは、このアプリの名称を ‘TelegramBotSampleJP’ とし、サービスへのリンクは telegrambotsamplejp.mybluemix.net とします<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/b39b6fc1-8399-b55f-501f-e22ecb9a61be.png)

### 2. 新しいFacebookページを作成する

https://www.facebook.com/pages/create/ サイトにアクセスし、ページを作成します。

【訳注】特に指定もなかったので今回は「ブランドまたは製品」を選んで作成しました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/aa76fbc8-61fa-ad91-7970-8df2a9b671cc.png)

### 3. 新しいFacebookアプリケーションを作成する

1. https://developers.facebook.com サイトにアクセス
2. ログインし右上のメニューから「新しいアプリを追加」する<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/731f9fab-061d-bdcc-ebef-33cef0a61790.png)
3. 「設定」ボタンでMessengerアプリを作成します<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/24bf2328-a015-fd17-d8fd-3fb31926cf3f.png)
4. トークン生成のセクションでさきほど作成したFacebookページを選択します 
5. ページアクセストークンをコピーして保持します<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/f61f0996-660e-4af8-5596-0cd99d4c6f8a.png)
6. ダッシュボードに移動し、app secret キーを入手します<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/c788fca6-0d13-52e7-e503-a999d15d42ef.png)

【訳注】以下のエラーメッセージは間違っていて「32文字以内」のようです
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/01076f6f-1929-a266-85da-7442cf58ab8d.png)

### 4. 新しいTelegramボットを作成する

1. [Telegram](https://telegram.org/) サイトで @BotFather と新しく会話を始めます
2. ‘/newbot’ と入力し、あなたのボットの名前とユーザーネームを入力します<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/d72bbe08-4569-a537-e60c-1f6250a7b2e5.png)
3. BotFather から返答される HTTP token をコピーして記録しておきます<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/1bcdf512-b9d5-21f7-c3df-b056919a3a84.png)
4. 任意のTelegram用の webhookEndpoint (例：/webhook1234)を作成し、コピーして保持しておきます。

【訳注】Telegramに関する前提知識がないと、このセクションの理解は難しい気がします。英語ですがYouTubeにある [Telegram Bot Tutorial](https://www.youtube.com/watch?v=hJBYojK7DO4) 動画や、[PART 1 Telegram Bot Tutorial – APIs and Webhooks](https://fullmeter.com/blog/?p=14) ページなど参考になります。また動画にも出てきたWebHook API情報は [コチラ](https://core.telegram.org/bots/api#setwebhook)。

【訳注】最後の webhookEndpoint ですが、ここで何かに入力するわけではないので、後のステップ6でFacebook用の値と一緒に決めれば大丈夫だとおもいます。

### 5. Watson Conversation workspace を作成またはインポートする

1. Bluemixダッシュボードから Conversation サービスを選択し、Watson Conversation toolを起動し、新しいworkspaceを作成する、またはjsonファイルをインポートする。<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/f540e925-9cdb-b60b-142c-a32c70e1e8fb.png)<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/c589d822-dd10-ea0b-4ef8-387eef05d464.png)
2. 三つのドットをクリックし、View detailsを選択<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/443e2947-c91c-869b-9c5f-1f6cb2b6ff4c.png)
3. 表示された Workspace ID をコピーして保持しておく。

【訳注】今回は新しくワークスペースを作り、会話ノードのところで、最初からある2つのノードに対し、挨拶などの文言の最後に！！！を付与しただけ、という手抜きをしています。

### 6. Bluemixで環境変数をセットする

Bluemix アプリの動作のため、環境変数に必要な情報をセットします。

1. https://bluemix.net にアクセスし、先ほど作成したアプリのランタイムで「環境変数」をクリック<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/893fb51c-068a-d2f7-979e-7f1f8d3da6d5.png)
2. 保持していたFacebook MessangerのPage Access Tokenを MESSENGER_PAGE_TOKEN にセット
3. 保持していたFacebook MessangerのSecret Keyを MESSENGER_APP_SECRET にセット
4. MESSENGER_VERIFY_TOKEN には任意の値をセットし、後のために保持しておく
5. Telegramの時と同じようにFacebook Messenger用のwebhook endpointを作成し MESSENGER_WEBHOOKENDPOINT にセット
6. 保持していた値を TELEGRAM_AUTH_TOKEN と TELEGRAM_WEBHOOKENDPOINT にセットする
7. 保持していたConversation用の WORKSPACE_ID をセットする<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/9a922f66-2c56-55e8-4175-14c2388cec5c.png)

【訳注】これでConversationアプリは単体で動作しますが、まだFacebook MessangerやTelegramとは接続されていません。それぞれ受け口を用意して待っている状態です。<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/95d3790e-2f14-d15d-47f1-713daa96f7ee.png)

### 7. Facebook webhooks を構成する

1. Messangerメニューにある「webhooksの設定」をクリック<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/e3765e45-2520-7506-c6be-7421723be6bb.png)
2. https://telegrambotsamplejp.mybluemix.net/messenger/webhook5678 をURLにセットします(これはサンプル用の値なので気をつけて) トークンもセットします
3. messages, messages_deliveries, messaging_postbacks, messaging_optinsをチェックします<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/eeab422c-514d-b948-bca8-da164268f62a.png)

【訳注】上記の設定の下にある、フォローするページのほうも指定しないと動きませんでした<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/06c64b22-9f42-46c9-ced1-e60daa3dc004.png)

【訳注】これでFacebookで作成したアプリ側が今回のサンプルアプリを認識し、指定したWebHookを通じてアプリと連携してくれるようになります。<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/822317e9-0f32-98e9-a702-536dadd80f03.png)


### 8. Telegram webhook を構成する

ページを開きます： https://api.telegram.org/botHTTP_TOKEN/setWebhook?url=https://telegrambotsamplejp.mybluemix.net/telegram/webhook1234 (これはサンプル用の値なので気をつけて)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/64f147d7-5ee1-b26f-8c3b-bfc9d13e5db5.png)

【訳注】エラー発生の可能性があるので事前に /getme でアクセスを確認しておきましょう。トークンの前に bot を忘れないように注意！![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/fddfeb3d-d4c2-10ee-84b9-4b2be0e037ab.png)

【訳注】これでTelegramで作成したボット側が今回のサンプルアプリを認識し、指定したWebHookを通じてアプリと連携してくれるようになりました！<br/>![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/dd6e328d-2218-64d8-48ff-fccd2a6fef6f.png)

### 9. ほぼ完成です！

あなたのアプリケーションはデプロイされ、Webから直接アクセスできますし、Messanger や Telegram からもアクセスできます！

しかし、現時点ではあなただけがこのFacebookアプリを利用できます。他にあなたのchatbotをFacebook経由で使いたい方がいれば、彼らをテスターもしくは開発者として登録する必要があります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/396f1581-2ada-acd3-c966-ac930c2a007b.png)

[コチラ](https://github.com/cyrillebenoit/conversationMaster/blob/master/full-functions.md) に私の追加した全てのコード片と、それをあなた自身のものにするための詳細なドキュメントがあります。 (MessengerとTelegram用の事前に用意した回答ボタンも含んでいます)

何か問題がありましたらお知らせください。