
「デモ」ボットはなぜですか?
原理だから。 この記事では、Dialogflow + Voximplantでボットを作成する原理を示します。 したがって、たとえば、ボットとの対話は簡単になります。
ボット: -こんにちは、Habrauser! モスクワや他の都市の天気はどうですか。
Habrauser: -ロンドンの天気はどうですか?
ボット: -今日ロンドンの街で-曇り。
Voximplantを使用すると、電話番号を借りたり、音声を認識して文字起こししたり、Dialogflowやopenweathermap.orgサービスとやり取りしたりできます。 ユーザーの応答から書き起こされた文字列をDialogflowに送信します。その後、NLP(Natural Language Processing)がJSONに返されます。JSONには主格の都市名が含まれます。 openweathermap.orgに都市の名前を付けます。openweathermap.orgは、その都市の天気がどのようなものかを教えてくれます。
シークレットエージェントNLPを作成する
Dialogflowは、Googleが所有する強力なNLPサービスです。 このサービスは無料ですが、使用するにはGoogleアカウントが必要です。 https://dialogflow.com/にアクセスして登録します。 サービスは「エージェント」の概念を使用します-実際、エージェントはボットです。 デフォルトでは、新しいアカウントにはエージェントがありません。 サービスには事前構築エージェントがありますが、すぐに追加することはできません。 したがって、インストール済みのエージェントにアクセスするためだけに新しいエージェントを作成します。 松葉杖のように聞こえますが、信じてください、これです。

エージェントの名前を入力します。他のパラメーターはデフォルトで残すことができます。 Googleプロジェクトフィールドは、Firebaseのプロジェクトを意味します(Firebaseプロジェクトがない場合は、新しいプロジェクトが作成されます)。 [作成]をクリックしてDialogflowコンソールに入ります。これはサービスのメイン画面の名前です。 左側には垂直メニューがあり、[エージェントの事前構築]をクリックし、天気エージェントを見つけて[インポート]をクリックします。 完了しました。アカウントに天気エージェントが追加されました。
デフォルトでは、エージェントは英語のみをサポートしているため、エージェントを編集に使用します(同時に必要に応じて名前を変更できます)。[言語]タブに移動し、ロシア語を追加して[保存]をクリックします。
現在、エージェントは言語を選択できます。 悲しいかな、エージェントはロシア語で「箱から出して」通信する方法を知りませんが、何も教えません。 「ru」をクリックしてロシア語をアクティブにし、「Intents」で失敗します。

表示されるインテントリストで、一番上の天気を選択します。 新しい画面には、ユーザーのセクションが表示されます。ユーザーのレプリカがあるはずです。バリエーションが多いほど良いです。 今のところ、「モスクワの天気はどうですか」というフレーズで管理します。 入力すると、Dialogflowはほぼ即座に都市名を強調表示し、返されたJSONで対応を割り当てます! 必ずコードでこれを使用してください。 また、この画面では、コンテキスト/会話トピックの名前-天気を見ることができます。

これで、エージェントの動作をDialogflowサービス(右上隅、今すぐ試す)で確認するか、cURLを介してリクエストを行うことができます。 ドキュメントを少なくするために、ここでcURLと返されたJSONの例を見ることができます。
リクエスト:
curl 'https://api.dialogflow.com/v1/query?v=20170712&query=%D0%BA%D0%B0%D0%BA%D0%B0%D1%8F%20%D0%BF%D0%BE%D0%B3%D0%BE%D0%B4%D0%B0%20%D0%B2%20%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5%3F&lang=ru&sessionId=e2c9fe05-6219-4317-ae96-2dbb6a429df4&timezone=Europe/Moscow' -H 'Authorization:Bearer d146627e5ef843fc9757028t410faa80'
クエリテキストはURIエンコードする必要があり、ヘッダーでキーを渡す必要があることに注意してください(キーはエージェント設定で見つけることができます)。 コンテキストがリクエストで指定されている場合、コンテキストを「ミックス」しないように、後続のすべてのリクエストに一意のセッション番号を設定することをお勧めします。
リクエストへの応答:
ダイアログフロー応答
このリクエストは、クラウドシナリオから次のようになります。
const sessionId = () => Math.floor(100000 * Math.random()); Net.httpRequest("https://api.dialogflow.com/v1/query?v=20150910&contexts=weather&query=" + encodeURI(userSpeech) + "&lang=ru&sessionId=" + sessionId() + "&timezone=Europe/Moscow", (e) => { // JSON }, { headers: ["Authorization: bearer d146627e5ef843fc9757028t410faa80"]});
天気を尋ねる
都市がわかったので、天気をリクエストできます。 私は非常にシンプルなopenweathermap.org APIを使用しました。 登録してAPIキーを取得し、次の形式のリクエストを作成できます。
curl 'https://api.openweathermap.org/data/2.5/weather?q={CITY NAME}&lang=ru&appid={API_KEY}'
答えから、「曇り」/「曇り」/「小雪」など、説明フィールドから天気の最も単純な説明を取得します。
openweathermapレスポンス
天気がわかれば、この情報を呼び出しに統合できます。
すべて一緒に今..!
これらのすべてのステップをJavascriptスクリプトに反映するときが来ました。 それで、私たちは何をしたいのですか?
- ユーザーはレンタル番号に電話をかけます。
- ユーザーは「Hello、Habrauser! モスクワや他の都市の天気はどうですか。」
- 「{CITY NAME}の天気はどうですか」と尋ねられた場合、クラウドはリクエストを認識し、Dialogflowの結果の行でリクエストを行います。
- 回答を受け取った後、応答にテーマ天気の存在と、回答が都市であるかどうかを確認します。 何かがうまくいかなかった場合、ロボットはそれについて話し、再び天気について質問するように求めます。
- Dialogflowからの回答に都市がある場合、クラウドはopenweathermap.orgに変わり、この都市をリクエストに置き換えます。
- 天気に関する応答を受け取った後、ユーザーに「今日の街{都市名}-曇り/曇り/小雪」を告げて電話を切ります。
次のコードはこのロジックを提供します。
Voximplant JSシナリオ
Voximplantコントロールパネルで「アプリケーション」を作成し 、作成したスクリプトとレンタル番号を添付するだけです(詳細については、 当社のWebサイトをご覧ください)。