Googleダイアログフローによる音声ボット
はじめに
このガイドでは、Dialogflow EssentialsとVonage WebSocketsインテグレーションを使用して、Dialogflowエージェントに電話をかける方法を紹介します。
下図はアーキテクチャの概要を示している。

前提条件
以下のステップで説明するアクションを実行するには、作成する必要があります:
ダイアログフローエージェントの作成
DialogflowはSaaS(Software as a Service)であり、会話型ユーザーインターフェースの構築に使用される自然言語理解プラットフォームです。
エージェントはDialogflowインスタンスであり、チャットボットアプリケーションと考えることができます。このインスタンスによって、ユーザが発言した内容を インテント そして、その回答を提供する。
手順に従ってください。
- を開く。 ダイアログフローコンソール
- 名前を付け、デフォルト言語を設定し、タイムゾーンを選択し、エージェントを作成するボタンをクリックしてエージェントを作成します。ボタンは
CreateまたはCreate Agent - 左のメニューから歯車のアイコンをクリックします。
- Googleプロジェクトで、プロジェクトID名をクリックします。例えば
VonageDFこれで Google Cloudコンソール

Google Cloud Consoleでサービスアカウントを作成する
Dialogflowで作成した同じプロジェクトを使って、Google Cloudコンソールを介してGoogle Cloudプロジェクトとリソースを管理するためにグラフィカルユーザーインターフェースを使用します。次のステップでは、アクセス制御と認証のためにサービスアカウントを作成します。
手順に従ってください。
- より Google Cloudコンソールをクリックする。
Go to project settings - 左のメニューから
Service accounts - 一番上のバーで
+ Create Service Account - 覚えやすいサービス・アカウント名をつける。
VonageDF - サービスアカウントの説明を追加する
- をクリックする。
Create and Continue - アンダー
Grant this service account access to projectフィルタリングして役割を選択するDialogflow API Admin

サービスアカウントのページに戻ります。
- の下にある3つの点をクリックする。
action - をクリックする。
Manage keys - をクリックする。
Add Key - をクリックする。
Create new Key - 選択
JSON - をクリックする。
Create - 1つだけ見える
.jsonファイルがダウンロードされました。このファイルを Dialogflow リファレンス接続 GitHub リポジトリ 次のステップでクローンを作る

Dialogflowリファレンス接続のセットアップ
ダイアログフローのリファレンス接続は ウェブソケット機能 の Voice API を使用します。音声通話が確立されると、Voice APIアプリケーションはVonage Voice APIへのWebSocket接続をトリガーします。 ダイアログフロー参照コネクション.音声通話の音声をリアルタイムでストリーミングします。
以下のステップでは、例として2つのオプションを示します。ngrokを使用して接続サーバーをトンネルし、Dialogflowエージェントと対話し、Herokuにデプロイする。
手順に従ってください。
- をクローンする。
dialogflow-reference-connectionリポジトリ をGitHubからダウンロードし、ディレクトリgit clone https://github.com/nexmo-community/dialogflow-reference-connection && cd dialogflow-reference-connection - お気に入りのIDEまたはテキストエディタでコードを開く。
- を追加する。
.jsonファイルをプロジェクトのルートにダウンロードする。 - を作成する。
.envファイルを.env.example - 環境変数を設定する:
GCLOUD_PROJECT_ID=<TheProjectIdFoundOnDialogflow>GOOGLE_CLOUD_CREDENTIALS=<TheJSONFileYouDownloaded.json>ターミナルから: - 依存関係をインストールする
npm install - Dialogflow接続サーバーのファイルを実行する
node df-connecting-server.jsApp Engine、Heroku、Cloud Runなど、多くのデプロイタイプがある。
このガイドでは ングロク トンネリング。 ngrokについて詳しく説明しているリンクはこちら。 そしてHerokuだ。
オプション1:ngrokを使った例
- 走る
ngrok http 5000 - コンソールで見つかったURLをメモしておく(例
xxxx.ngrok.io).この情報はDF_CONNECTING_SERVERガイドの「Dialogflow Voice APIサンプルアプリケーションのセットアップ」部分の説明

オプション2:Herokuを使った例
- インストール ギット
- インストール Herokuコマンドライン Herokuアカウントにログインします。
- まだローカルにgitリポジトリがない場合は、作成してください:
git init - Heroku CLIを使用してコマンドラインからHeroku上にこのアプリケーションを作成することから始めます。注:以下のコマンドでは
thisappnameをHerokuプラットフォーム全体でユニークな名前に変更します。heroku create thisappname - アプリケーションページが表示されているHerokuダッシュボード上で
Settingsボタンをクリックし、以下を追加する。Config Varsで、それぞれの値を設定する:
- アプリケーションのデプロイ
git push heroku masterまたはgit push heroku main支店名によって異なる。 - コンソールで見つかったURLをメモしておく(例
thisappname.herokuapp.com).この情報はDF_CONNECTING_SERVERガイドの「Dialogflow Voice APIサンプルアプリケーションのセットアップ」部分の議論
Vonage Voice API アプリケーションの認証情報と電話番号の設定
手順に従ってください。
- アプリケーションの作成 Vonage APIダッシュボード
- アプリケーションに名前をつける。
VonageDF - ボタンをクリックすると、公開鍵と秘密鍵が生成されます。
private.keyファイルがダウンロードされます。このファイルをDialogflow Voice APIサンプルアプリケーションに追加します。 - このアプリケーションに電話番号をリンクします。まだお持ちでない場合は、左のメニューから
NumbersそしてBuy Numbersをクリックし、手順に従って購入する。
Dialogflow Voice APIサンプルアプリケーションをセットアップし、このVonageアプリケーションダッシュボードに情報を追加します。
Dialogflow Voice API サンプルアプリケーションのセットアップ
このサンプルアプリケーションは、Vonage Voice APIを使用して着信した音声通話に応答し、各通話ごとにDialogflow参照接続との間で音声をストリーミングするためのWebSocket接続を設定します。
について ダイアログフロー参照接続 コードを作成する:
- 通話音声をDialogflowエージェントに送信します、
- Dialogflowエージェントからの音声応答をWebSocket経由で発信者にストリーミングします、
- Webhookのコールバックを介して、リアルタイムでトランスクリプトと発信者のスピーチセンチメントスコアをポストバックする。 Voice API サンプルアプリケーション.
このアプリケーションが実行されると、アプリケーションにリンクされた電話番号に電話をかけ、Dialogflowエージェントと音声で対話します。
ここでは、Dialogflowエージェントと相互作用する接続サーバーをトンネリングするためにngrokを使用しますが、Herokuを使用した例を見たい場合は、以下の手順に従ってください。 Dialogflow Voice API サンプルアプリケーション GitHubより。
手順に従ってください。
- ターミナルから Dialogflow Voice API サンプルアプリケーション をGitHubからダウンロードし、ディレクトリ
git clone https://github.com/nexmo-community/dialogflow-sample-voice-application && cd dialogflow-sample-voice-application以下のステップの説明、またはReadmeファイルの Dialogflow Voice API サンプルアプリケーション - を追加する。
private.keyVonage Dashboardから生成され、お使いのマシンのプロジェクトルートにダウンロードされます。 - より
.env.exampleを作成する。.envファイル - 環境変数に Vonage APIダッシュボード
- について
SERVICE_NUMBERは購入したバーチャルナンバーです。事前に国番号を00や+を付けないで追加することを忘れないでください。 - について
DF_CONNECTING_SERVERは、すでに実行されているDialogflowリファレンスのサーバーです。
依存関係をインストールする
npm installを実行する。
df-application.jsnode df-application.js以下にngrokとHerokuそれぞれの次のステップを示します:オプション1:以下はngrokを使用した手順である。
別のターミナルタブで
ngrok http 8000Vonage Dashboardのウェブサイトに戻り、「capabilities」の下にあります:音声を切り替えてこの機能を有効にする
で実行しているngrokのURLを追加する。
dialogflow-sample-voice-application続いて/answerをクリックします。HTTP GETが選択されていることを確認してください。で実行しているngrokのURLを追加する。
dialogflow-sample-voice-application続いて/eventをクリックします。HTTP POSTが選択されていることを確認してください。変更を保存をクリック

オプション2:Herokuを使用した以下のステップ
- 別のターミナルタブで、まだローカルにgitリポジトリがない場合は、作成してください:
git init - Heroku CLIを使用してコマンドラインからHeroku上にこのアプリケーションを作成することから始めます。注: コマンドで
myappnameをHerokuプラットフォーム全体でユニークな名前に変更します。heroku create myappname - アプリケーションページが表示されているHerokuダッシュボード上で
Settingsボタンをクリックし、以下を追加する。Config Varsにあるそれぞれの値を設定します。.envファイル。
パラメータ PRIVATE_KEY_FILE を持つ。 ./private.key
- アプリケーションページが表示されているHerokuダッシュボード上で
Open Appボタンをクリックし、URLをコピーする。 - では、アプリケーションをデプロイしてみましょう。Vonage Dashboardのウェブサイトに戻り、capabilitiesの下にある:
- 音声を切り替えてこの機能を有効にする
- それは
hostname(HerokuからコピーしたURL)が使用されます。/answerを選択してください。HTTP GETが選択されていることを確認してください。 - 同じことを
/eventを選択します。HTTP POSTが選択されていることを確認してください。 - 変更を保存をクリック

ダイアログフローエージェントの改善
ガイドのこの時点で電話番号に電話をかけようとすると、Dialogflowの観点から会話の出発点である Default Welcome Intent.
ユーザーの応答リストから、発信者にメッセージが送り返される。しかし、他の会話の順番のために訓練された他のデータを持っていないので、会話は交代しない。
一歩下がって、Dialogflowのコンセプトのいくつかを探ってみましょう。ユーザーが発するかもしれない発話を追加し、返答を提供し、会話の終わりを追加することで、交互に行われる完全な会話を見ることができます。
エージェントを作成したら、会話を処理し、形成するインテントを作成します。
ユーザーの発話があった場合、Dialogflowは、NLPとユーザーがそのインテントにマッチする可能性のあるトレーニングフレーズに基づいて、発話された内容をインテントに照合する。インテントの分類が行われると、応答がユーザーに送り返される。
エンティティは、会話から抽出する情報のタイプです。後述するユースケースでは、電話でテーブルを予約します。会話から抽出する情報は以下のとおりです。 person, date そして time.
デフォルトのウェルカム・インテントを改良し、インテントを作成し、エンティティの概要を説明し、会話の終わりを追加してテストしてみましょう。
手順に従ってください。
- を開く。 ダイアログフローコンソール そして、このガイドのために正しいエージェントにいることを確認する。
- をクリックしてください。
Default Welcome Intent - 下にスクロールし、回答を消して追加する:
Welcome to our Demonstration Restaurant. When and for whom would you like to book a table? - 保存をクリック
- Intentsメニュー項目をクリックする。
- 新しいインテント」ボタンをクリックします。
- という名前をつけよう。
Table Booker - トレーニングフレーズの下に以下のトレーニングフレーズを追加する。
- 10日の13時にニコールのテーブルをお願いします。
- 2021年12月10日14:00の枠をジョセフのために予約できますか?
- 10/09/2020の16:00にアマンダのテーブルを予約したい。
これらの文章を入力すると、いくつかの単語がカラフルなハイライトで表示されます。
@sys.person,@sys.dateそして@sys.time.
- アクションとパラメータ]で
requiredにとってperson,dateそしてtime - 各パラメーターにプロンプトを追加することで、会話中に相手が特定の情報を言わなかった場合に、追加するよう促すことができる。

- レスポンスには次のように書き加える:
Table booked for $person at $time on $date. Thank you! - トグル
Set this intent as end of conversation以下の回答 - 保存をクリック

ダイアログフローエージェントとの音声対話
さて、すべてのパーツをセットアップしたところで、バーチャル電話番号に電話をかけてテストしてみましょう!
Voice APIアプリケーションにリンクされた電話番号に電話をかけ、Dialogflow Agentと対話します。
確認メッセージが聞こえます: Connecting your call, please wait..Vonage APIプラットフォームからのText To Speechは、プラットフォームが電話に出るとすぐに再生されます。
WebSocketが確立されると、Vonage APIプラットフォームはText To Speechを再生します。 Hello をDialogflowエージェントに送信します(発信者には聞こえません)。
これで、Dialogflowエージェントが読み返す設定ができました。
この時点で、このガイドの前のセクションで設定したインテントと対話し、テーブルを予約します。
Dialogflowリファレンス接続アプリケーションコンソールおよびDialogflowサンプル音声APIアプリケーションコンソールでトランスクリプションが表示されます。
センチメント分析の結果を見たい場合は、Google CloudコンソールからCloud Natural APIを有効にする必要があります。有効になっていないと、次のようなエラーが表示されます。 PERMISSION_DENIED: Cloud Natural Language API has not been used in project xxxx before or it is disabled.
では、最後のステップに進み、すべての構成要素が実際に組み合わさっているところを見てみよう!
手順に従ってください。
Voice APIアプリケーションにリンクされた電話番号に電話をかけ、Dialogflowエージェントと対話します。
会話をテストする方法として、こんなものが考えられる:
- Vonageウェブソケット:通話を接続しています。
- Bot: デモンストレーション・レストランへようこそ。いつ、誰のためにテーブルを予約しますか?
- あなた2022年09月01日10:00にターニャのテーブルを予約したいのですが。
- ボットの応答:2022年09月01日10:00にターニャさんのテーブルを予約しました。ありがとうございます!
通話終了
おめでとう
Vonage WebSocketsインテグレーションを使用してDialogflowエージェントに電話をかけるガイドを完了しました。
リソース
を見つけることができます。 Dialogflow リファレンスサンプル そして GitHubのサンプル音声アプリケーション.
チェック WebSocketsリファレンスガイド.
チェック ngrokを説明するブログ記事.
を使った同様の例も見ることができる。 アマゾン・レックス・ボット.