Googleダイアログフローによる音声ボット

はじめに

このガイドでは、Dialogflow EssentialsとVonage WebSocketsインテグレーションを使用して、Dialogflowエージェントに電話をかける方法を紹介します。

下図はアーキテクチャの概要を示している。

Architecture overview showing how the parts are connected

前提条件

以下のステップで説明するアクションを実行するには、作成する必要があります:

  1. A ダイアログフローアカウント
  2. A Vonage API アカウント

ダイアログフローエージェントの作成

DialogflowはSaaS(Software as a Service)であり、会話型ユーザーインターフェースの構築に使用される自然言語理解プラットフォームです。

エージェントはDialogflowインスタンスであり、チャットボットアプリケーションと考えることができます。このインスタンスによって、ユーザが発言した内容を インテント そして、その回答を提供する。

手順に従ってください。

  1. を開く。 ダイアログフローコンソール
  2. 名前を付け、デフォルト言語を設定し、タイムゾーンを選択し、エージェントを作成するボタンをクリックしてエージェントを作成します。ボタンは Create または Create Agent
  3. 左のメニューから歯車のアイコンをクリックします。
  4. Googleプロジェクトで、プロジェクトID名をクリックします。例えば VonageDF これで Google Cloudコンソール
Gif showing the steps to create the dialogflow Agent

Google Cloud Consoleでサービスアカウントを作成する

Dialogflowで作成した同じプロジェクトを使って、Google Cloudコンソールを介してGoogle Cloudプロジェクトとリソースを管理するためにグラフィカルユーザーインターフェースを使用します。次のステップでは、アクセス制御と認証のためにサービスアカウントを作成します。

手順に従ってください。

  1. より Google Cloudコンソールをクリックする。 Go to project settings
  2. 左のメニューから Service accounts
  3. 一番上のバーで + Create Service Account
  4. 覚えやすいサービス・アカウント名をつける。 VonageDF
  5. サービスアカウントの説明を追加する
  6. をクリックする。 Create and Continue
  7. アンダー Grant this service account access to projectフィルタリングして役割を選択する Dialogflow API Admin
Gif showing the seven above steps while creating the Service Account

サービスアカウントのページに戻ります。

  1. の下にある3つの点をクリックする。 action
  2. をクリックする。 Manage keys
  3. をクリックする。 Add Key
  4. をクリックする。 Create new Key
  5. 選択 JSON
  6. をクリックする。 Create
  7. 1つだけ見える .json ファイルがダウンロードされました。このファイルを Dialogflow リファレンス接続 GitHub リポジトリ 次のステップでクローンを作る
Gif showing the above steps to generate the keys

Dialogflowリファレンス接続のセットアップ

ダイアログフローのリファレンス接続は ウェブソケット機能 の Voice API を使用します。音声通話が確立されると、Voice APIアプリケーションはVonage Voice APIへのWebSocket接続をトリガーします。 ダイアログフロー参照コネクション.音声通話の音声をリアルタイムでストリーミングします。

以下のステップでは、例として2つのオプションを示します。ngrokを使用して接続サーバーをトンネルし、Dialogflowエージェントと対話し、Herokuにデプロイする。

手順に従ってください。

  1. をクローンする。 dialogflow-reference-connection リポジトリ をGitHubからダウンロードし、ディレクトリ git clone https://github.com/nexmo-community/dialogflow-reference-connection && cd dialogflow-reference-connection
  2. お気に入りのIDEまたはテキストエディタでコードを開く。
  3. を追加する。 .json ファイルをプロジェクトのルートにダウンロードする。
  4. を作成する。 .env ファイルを .env.example
  5. 環境変数を設定する: GCLOUD_PROJECT_ID=<TheProjectIdFoundOnDialogflow> GOOGLE_CLOUD_CREDENTIALS=<TheJSONFileYouDownloaded.json> ターミナルから:
  6. 依存関係をインストールする npm install
  7. Dialogflow接続サーバーのファイルを実行する node df-connecting-server.js App Engine、Heroku、Cloud Runなど、多くのデプロイタイプがある。

このガイドでは ングロク トンネリング。 ngrokについて詳しく説明しているリンクはこちら。 そしてHerokuだ。

オプション1:ngrokを使った例

  1. 走る ngrok http 5000
  2. コンソールで見つかったURLをメモしておく(例 xxxx.ngrok.io).この情報は DF_CONNECTING_SERVER ガイドの「Dialogflow Voice APIサンプルアプリケーションのセットアップ」部分の説明
The ngrok URL highlighted on the Visual Studio Code IDE

オプション2:Herokuを使った例

  1. インストール ギット
  2. インストール Herokuコマンドライン Herokuアカウントにログインします。
  3. まだローカルにgitリポジトリがない場合は、作成してください: git init
  4. Heroku CLIを使用してコマンドラインからHeroku上にこのアプリケーションを作成することから始めます。注:以下のコマンドでは thisappname をHerokuプラットフォーム全体でユニークな名前に変更します。 heroku create thisappname
  5. アプリケーションページが表示されているHerokuダッシュボード上で Settings ボタンをクリックし、以下を追加する。 Config Vars で、それぞれの値を設定する:
GCLOUD_PROJECT_ID GOOGLE_APPLICATION_CREDENTIALS
  1. アプリケーションのデプロイ git push heroku master または git push heroku main 支店名によって異なる。
  2. コンソールで見つかったURLをメモしておく(例 thisappname.herokuapp.com).この情報は DF_CONNECTING_SERVER ガイドの「Dialogflow Voice APIサンプルアプリケーションのセットアップ」部分の議論

Vonage Voice API アプリケーションの認証情報と電話番号の設定

An image explaining that to complete this guide you need a VONAGE API Account and to purchase a virtual number

手順に従ってください。

  1. アプリケーションの作成 Vonage APIダッシュボード
  2. アプリケーションに名前をつける。 VonageDF
  3. ボタンをクリックすると、公開鍵と秘密鍵が生成されます。 private.key ファイルがダウンロードされます。このファイルをDialogflow Voice APIサンプルアプリケーションに追加します。
  4. このアプリケーションに電話番号をリンクします。まだお持ちでない場合は、左のメニューから 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より。

手順に従ってください。

  1. ターミナルから Dialogflow Voice API サンプルアプリケーション をGitHubからダウンロードし、ディレクトリ git clone https://github.com/nexmo-community/dialogflow-sample-voice-application && cd dialogflow-sample-voice-application 以下のステップの説明、またはReadmeファイルの Dialogflow Voice API サンプルアプリケーション
  2. を追加する。 private.key Vonage Dashboardから生成され、お使いのマシンのプロジェクトルートにダウンロードされます。
  3. より .env.example を作成する。 .env ファイル
  4. 環境変数に Vonage APIダッシュボード
  • について SERVICE_NUMBER は購入したバーチャルナンバーです。事前に国番号を00や+を付けないで追加することを忘れないでください。
  • について DF_CONNECTING_SERVER は、すでに実行されているDialogflowリファレンスのサーバーです。
  1. 依存関係をインストールする npm install

  2. を実行する。 df-application.js node df-application.js 以下にngrokとHerokuそれぞれの次のステップを示します:

    オプション1:以下はngrokを使用した手順である。

  3. 別のターミナルタブで ngrok http 8000 Vonage Dashboardのウェブサイトに戻り、「capabilities」の下にあります:

  4. 音声を切り替えてこの機能を有効にする

  5. で実行しているngrokのURLを追加する。 dialogflow-sample-voice-application 続いて /answer をクリックします。HTTP GETが選択されていることを確認してください。

  6. で実行しているngrokのURLを追加する。 dialogflow-sample-voice-application 続いて /event をクリックします。HTTP POSTが選択されていることを確認してください。

  7. 変更を保存をクリック

Vonage Dashboard

オプション2:Herokuを使用した以下のステップ

  1. 別のターミナルタブで、まだローカルにgitリポジトリがない場合は、作成してください: git init
  2. Heroku CLIを使用してコマンドラインからHeroku上にこのアプリケーションを作成することから始めます。注: コマンドで myappname をHerokuプラットフォーム全体でユニークな名前に変更します。 heroku create myappname
  3. アプリケーションページが表示されているHerokuダッシュボード上で Settings ボタンをクリックし、以下を追加する。 Config Vars にあるそれぞれの値を設定します。 .env ファイル。
API_KEY API_SECRET APP_ID SERVICE_NUMBER DF_CONNECTING_SERVER

パラメータ PRIVATE_KEY_FILE を持つ。 ./private.key

  1. アプリケーションページが表示されているHerokuダッシュボード上で Open App ボタンをクリックし、URLをコピーする。
  2. では、アプリケーションをデプロイしてみましょう。Vonage Dashboardのウェブサイトに戻り、capabilitiesの下にある:
  3. 音声を切り替えてこの機能を有効にする
  4. それは hostname (HerokuからコピーしたURL)が使用されます。 /answer を選択してください。HTTP GETが選択されていることを確認してください。
  5. 同じことを /event を選択します。HTTP POSTが選択されていることを確認してください。
  6. 変更を保存をクリック
Vonage Dashboard

ダイアログフローエージェントの改善

ガイドのこの時点で電話番号に電話をかけようとすると、Dialogflowの観点から会話の出発点である Default Welcome Intent.

ユーザーの応答リストから、発信者にメッセージが送り返される。しかし、他の会話の順番のために訓練された他のデータを持っていないので、会話は交代しない。

一歩下がって、Dialogflowのコンセプトのいくつかを探ってみましょう。ユーザーが発するかもしれない発話を追加し、返答を提供し、会話の終わりを追加することで、交互に行われる完全な会話を見ることができます。

エージェントを作成したら、会話を処理し、形成するインテントを作成します。

ユーザーの発話があった場合、Dialogflowは、NLPとユーザーがそのインテントにマッチする可能性のあるトレーニングフレーズに基づいて、発話された内容をインテントに照合する。インテントの分類が行われると、応答がユーザーに送り返される。

エンティティは、会話から抽出する情報のタイプです。後述するユースケースでは、電話でテーブルを予約します。会話から抽出する情報は以下のとおりです。 person, date そして time.

デフォルトのウェルカム・インテントを改良し、インテントを作成し、エンティティの概要を説明し、会話の終わりを追加してテストしてみましょう。

手順に従ってください。

  1. を開く。 ダイアログフローコンソール そして、このガイドのために正しいエージェントにいることを確認する。
  2. をクリックしてください。 Default Welcome Intent
  3. 下にスクロールし、回答を消して追加する: Welcome to our Demonstration Restaurant. When and for whom would you like to book a table?
  4. 保存をクリック
  5. Intentsメニュー項目をクリックする。
  6. 新しいインテント」ボタンをクリックします。
  7. という名前をつけよう。 Table Booker
  8. トレーニングフレーズの下に以下のトレーニングフレーズを追加する。
    • 10日の13時にニコールのテーブルをお願いします。
    • 2021年12月10日14:00の枠をジョセフのために予約できますか?
    • 10/09/2020の16:00にアマンダのテーブルを予約したい。 これらの文章を入力すると、いくつかの単語がカラフルなハイライトで表示されます。 @sys.person, @sys.date そして @sys.time.
  9. アクションとパラメータ]で required にとって person, date そして time
  10. 各パラメーターにプロンプトを追加することで、会話中に相手が特定の情報を言わなかった場合に、追加するよう促すことができる。
Training phrases examples
  1. レスポンスには次のように書き加える: Table booked for $person at $time on $date. Thank you!
  2. トグル Set this intent as end of conversation以下の回答
  3. 保存をクリック
Table Booker Intent Overview

ダイアログフローエージェントとの音声対話

さて、すべてのパーツをセットアップしたところで、バーチャル電話番号に電話をかけてテストしてみましょう!

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.

では、最後のステップに進み、すべての構成要素が実際に組み合わさっているところを見てみよう!

手順に従ってください。

  1. Voice APIアプリケーションにリンクされた電話番号に電話をかけ、Dialogflowエージェントと対話します。

  2. 会話をテストする方法として、こんなものが考えられる:

    1. Vonageウェブソケット:通話を接続しています。
    2. Bot: デモンストレーション・レストランへようこそ。いつ、誰のためにテーブルを予約しますか?
    3. あなた2022年09月01日10:00にターニャのテーブルを予約したいのですが。
    4. ボットの応答:2022年09月01日10:00にターニャさんのテーブルを予約しました。ありがとうございます!

    通話終了

おめでとう

Vonage WebSocketsインテグレーションを使用してDialogflowエージェントに電話をかけるガイドを完了しました。

リソース

を見つけることができます。 Dialogflow リファレンスサンプル そして GitHubのサンプル音声アプリケーション.

チェック WebSocketsリファレンスガイド.

チェック ngrokを説明するブログ記事.

を使った同様の例も見ることができる。 アマゾン・レックス・ボット.