フォーム読み込み中
この記事は、ソフトバンク Advent Calendar 2022 の22日目の記事となります。
今回は、配送中継センター内での荷物の移動作業を例にとって、作業者に指示を与えながら業務の一部を完了させることを目的とした、任務遂行型の音声チャットボットを作ってみたいと思います。
チャットボットと聞いて思い浮かぶのは、人間が答えてほしい質問に対してロボットに回答させるといった、一問一答型のサービスが多いのではないかと思います。
それとは反対に、実行してほしい一連のタスクをロボットが人間に指示しながら、ミッションを完了させるようなチャットボットを「任務遂行型」と呼ぶことにします。
スマホの普及も相まって、テキストベースのチャットボットは雨後のタケノコのごとく出現しました。
一方、音声チャットボットと言えば、 電話による再配達の自動受け付けや、Siri や Alexa などのバーチャルアシスタントなどがありますね。
では、音声ベースのチャットボットはテキストベースに比べて、どのようなメリットがあるのでしょうか?
例をあげてみると、
上記のことから、何か作業をしていたり、移動中でも会話が進められるので、任務遂行型には音声チャットボットがうってつけではないでしょうか?
任務遂行型の音声チャットボットを実現するために、今回は IBM Cloud の チャットボット フレームワークである、Watson Assistant と、CPaaS の Twilio を利用します。
Twilio は 電話やテキストメッセージなどの通信機能をAPI化することでプログラムから利用可能にした、クラウドコミュニケーション プラットフォームサービス (CPaaS) と呼ばれています。
Elastic SIP Trunking という機能を利用することで、電話の音声とWatson Assistant を接続可能にしています。
IBM Watson Assistant は IBM Cloud のコグニティブ・サービスのプロダクトで、テキストベースのチャットボット フレームワークです。
電話統合というオプションを利用することで、Twilio などの CPaaSと連携して、音声ベースのチャットボットも構築できます。
また、SMS統合というオプションを利用すれば、ショートメッセージのインターフェースで会話することも可能になります。
IBM Watson Speech to Text も IBM Cloud のコグニティブ・サービスのプロダクトで、人間の声をテキストに書き起こしてくれるサービスです。
IBM Watson Text to Speech も IBM Cloud のコグニティブ・サービスのプロダクトで、テキストを人間らしい音声で読み上げてくれるサービスです。
⚠️ Twilio と IBM Cloud のアカウントはすでに用意されている前提です。
a. SIP Trunk を作成し、新しいTwilio番号(電話番号)を購入するか、既存のTwilio番号に紐づけます。
⚠️ まだ作業が残っているので、画面は開いておきます。
⚠️ Watson Assistantで電話統合を利用するためには、プラスプラン以上の料金プランのインスタンスが必要になります。(30日間お試しできるトライアルプランでも可能ですが、ライトプランは利用できません)
a. プロジェクトの新規作成
b. 電話統合(Integrations -> Phone)の作成
b-1.「Manage phone numbers」に、「1. Twilio コンソールでの作業-a」で紐づけたTwilio 電話番号を登録します。
b-2. Speech to Text のインスタンスを新規作成、または既存インスタンスを割り当てます。(言語モデルは日本語)
b-3. Text to Speech のインスタンスを新規作成、または既存インスタンスを割り当てます。(言語モデルは日本語)
a. 「1. Twilio コンソールでの作業-a」で作成した SIP Trunkの「Origination URI」に「2. Watson Assistant ツールキットでの作業-b」で払い出された SIP URI を登録します。
今回の通話開始後のシナリオは以下の流れを想定しています。
通話の開始 〜
指示者(ボット):「お疲れさまです。作業内容をお知らせします。」
指示者(ボット):「駐車場Aのトラックの荷物を検品してください。」
作業者(人間):「終わりました」
指示者(ボット):「駐車場Aのトラックの荷物を倉庫Bに移動してください。」
作業者(人間):「完了しました」
指示者(ボット):「では、事務所に戻って休憩してください。お疲れ様でした。」
〜 通話の終了
「Assistant settings」でダイアログ機能を有効にして、各ノードを作成します。
ダイアログの各ノードは以下のように構成します。
順序 | ノード名 | 条件 | アクション | 備考 |
---|---|---|---|---|
1 | ようこそ | welcome | 作業開始のメッセージを伝える |
|
2 | 作業1 | なし | 作業1の内容を伝える |
|
2-1 | 完了 | #完了 | ノード3にジャンプして、作業2の内容を伝える | ノード2の子ノード |
2-2 | タイムアウト | input.text == "vgwPostResponseTimeout" | ノード2-1にジャンプして、応答待ち | ノード2の子ノード |
2-3 | 緊急連絡 | #中止 | 電話をかける | ノード2の子ノード |
2-4 | Anything else | anything_else | 聞き返す ノード2にジャンプして、再度作業1を伝える | ノード2の子ノード |
3 | 作業2 | なし | 作業2の内容を伝える |
|
3-1 | 完了 | #完了 | ノード4にジャンプして、作業完了のメッセージを伝える | ノード3の子ノード |
3-2 | タイムアウト | input.text == "vgwPostResponseTimeout" | ノード3-1にジャンプして、応答待ち | ノード3の子ノード |
3-3 | 緊急連絡 | #中止 | 電話をかける | ノード3の子ノード |
3-4 | Anything else | anything_else | 聞き返す ノード3にジャンプして、再度作業2を伝える | ノード3の子ノード |
4 | 作業完了 | なし | 作業完了のメッセージを伝える 通話を切断する |
|
基本的な作り方はテキストベースと同じ考え方ですが、電話統合を利用するうえでのポイントについて説明します。
電話統合の場合、一定時間内(デフォルトは7秒)に応答がなかった場合はタイムアウトが発生し、入力テキストにタイムアウト定数がセットされます。
タイムアウト時間は長くすることも可能ですが、タスクの完了時間のばらつきを考慮して、タイムアウトをスキップするノードを用意します。
(制限時間のあるタスクの場合は、強制終了させるという使いかたも考えられますね)
1. ノードの「If assistant recognizes」の条件を以下のように設定します。
input.text == "vgwPostResponseTimeout"
2. 「Jump to」で直前の完了ノードに戻して、応答を待ちます。
タスクの継続が困難になった場合など、緊急時に管理者(人間)と直接会話するために電話をかけるノードを用意します。
1. ノードの「Assistant responds」でJSONエディターを開き、
2. output.genericに以下の要素を追加します。
{ "response_type": "connect_to_agent", "transfer_info": { "target": { "service_desk": { "sip": { "uri": "相手先電話番号" } } } }, "agent_available": { "message": "管理者に替わります。" }, "agent_unavailable": { "message": "管理者に繋がりませんでした。" }, "message_to_human_agent": "作業者が指示を仰いでます" }
「相手先電話番号」は transfer_info.target.service_desk.sip.url に以下の形式でセットします。
"tel:" + "+国番号" + "先頭の0を除いた電話番号"
例. 管理者の電話番号が「080-55-XXXXXXX」だった場合、"tel:+818055XXXXXXX" となります。
作業完了後、こちらから通話を切断します。
1. ノードの「Assistant responds」でJSONエディターを開き、
2. output.genericに以下の要素を追加します。
{ "response_type": "end_session", "channels": [ { "channel": "voice_telephony" } ] }
今回の例で取り上げた作業指示以外にも、1対多のさまざまな業務に応用できる可能性があると思っています。
実際にソフトバンクの社内では、営業への稟議のトレースなどに活用しています。
今回の記事で伝えたかったのは以下の3点になります。
IBM Watson も Twilio も無料で試すことができるので、ぜひ触ってみてください。
それでは、ソフトバンク Advent Calendar 2022 の 23日目にバトンを渡します。和田さんよろしくお願いします。
条件に該当するページがございません