こんにちは!SCSKの江木です。
Dialogflow CXでチャットボットを作っていて、外部のAPIを利用することでチャットボットの機能を拡張したいと思うことがありました。
そのようなときに役立つのがWebhookです!
今回はチャットボットに翻訳機能を追加するために、WebhookでTranslation APIを叩いてみようと思います!
Webhookとは?
Webhookの説明をする前に、Dialogflow CXについて触れておきます。
Dialogflow CXは、Google Cloudが提供する、自然言語理解と会話型AIの機能を備えたサービスです。一言で言うと、チャットボットを作ることが出来るサービスになります。
WebhookはこのDialogflow CXの会話セッション中に、ビジネスロジックをホストしたり、他のサービスを呼び出したりするために使います。
WebhookはCloud Functionsで実装します。また、Webhookの実行時の挙動は以下の通りです。
Webhookを使うことで外部からデータを受け取ることが出来るようになるので、ただ決まりきったことを返すだけのチャットボットに「今日の天気を返す」、「翻訳」、「外部のデータベースを検索する」などの機能を追加することができるようになるのです。
Webhook作成
Webhook作成の前にDialogflow CXのフローを作成します。また、作成する際は以下の点に留意してください。
- APIキーの取り扱いには注意してください。
- 今回はGoogle Cloudのtranslation APIを使うので、Google Cloudに課金されますが、他のAPIを使う際はどこに課金されるのか把握しておいてください。
Dialogflow CXのフロー作成
翻訳機能をつけたいので、以下のようなフローを「asia-northeast1」リージョンで作成しました。
フローの流れは以下の通りです。
- Start Pageで「こんにちは」と入力すると、「翻訳しましょう」と表示するRouteが選択され、Translateページに遷移する
- Translateページにて、翻訳したい言語と文章を入力すると、翻訳された文章を返す
- End Sessionページに遷移する
Translateページの設定は以下の通りです。
翻訳言語のパラメータであるlangのentity typeを設定しました。
Entityの値は以下のTranslation APIのドキュメントを参考にしました。
Webhook作成
Translation APIに使用するAPIキーを作成
コンソールから[APIとサービス]→[認証情報]→[+認証情報を作成]→[APIキー]を押下し、APIキーをコピーします。
Cloud Functionsでwebhookを作成
1.Cloud Functionsのコンソールの[+ファンクションを作成]を押下します。
2.関数名を入力後、「asia-northeast1」リージョンを選択し、[次へ]を押下します。
webhookをコーディング
今回はpythonを使いたいので、ランタイムはPython 3.12としました。エントリーポイントはコードの関数名と同じく、webhookとしました。
以下、main.pyのコードになります。
import functions_framework import requests @functions_framework.http def webhook(request): response = request.get_json() #Dialogflow CXからパラメータの取得 lang = response["sessionInfo"]["parameters"]["lang"] text = response["sessionInfo"]["parameters"]["sentence"] tag = response["fulfillmentInfo"]["tag"] #$$$$$$$$$$$にはコピーしたAPIキーを入力してください。 url = "https://translation.googleapis.com/language/translate/v2?key=$$$$$$$$$$$" params = { "q": [text], "target": lang, "source": "ja" } #APIを叩く output = requests.post(url, json=params) if tag == "APITest": #結果を格納 output_text = output.json()["data"]["translations"][0]["translatedText"] else: output_text = tag response["fulfillmentResponse"] = { "messages": [ { "text": { "text": [ output_text ], "allowPlaybackInterruption": False } } ] } return response
続いて、requirement.txtは以下の通りです。こちらはmain.pyの実行に必要なpythonモジュールをインストールするために使用します。
functions-framework==3.* requests
Webhookをデプロイ
1.コードが書けたら、[デプロイ]を押下します。
2.作成したWebhookのURLをコピーします。
権限設定
Cloud Functionsの第2世代はCloud Runで動作しています。それゆえに、Cloud Runの起動元の権限をDialogflowのサービスアカウントに付与する必要があります。
Dialogflow CXのサービスアカウントを確認
1.Dialogflow CXコンソールの右側にある[Agent settings]を押下します。
2.[Share]タブを選択し、Dialogflow CXのサービスアカウントをコピーします。
Cloud Runの起動元の権限をDialogflowのサービスアカウントに付与
- Cloud Functionsコンソールで作成したwebhookを開き、[Powered by Cloud Run]を押下します。
- 画面上部の[サービスの詳細]を押下します。
- 作成したwebhookのCloud Runの左側ボックスにチャックを入れます。画面右の[権限]タブの中の[プリンシパルを追加]を押下します。
- 新しいプリンシパルにコピーしたDialogflow CXのサービスアカウントを入力し、ロールで[Cloud Run 起動元]を選択した後、[保存]を押下します。
Webhook設定
翻訳したい言語・文章をAPIに投げたいので、$page.params.status = “FINAL”ルートにWebhookを設定します。
- ルートの[Webhook settings]→[Enable webhook]にチェックを入れます。
- Webhookと書かれた枠内を押下し、[+Create Webhook]を選択します。
- [Display name]と、webhook作成の際にコピーした[Webhook URL]を設定し、[Save]を押下します。
- tagを設定し、[Save]を押下します。
実装結果
作成したAgentでテストし、翻訳機能が実装できているか確認します。
うまく翻訳機能を実装することができました。これらの他にもlangのentity typeに登録した言語であれば、翻訳することができます。
終わりに
今回はDialogflow CXのチャットボットにTranslation APIを利用して、翻訳機能をつけました。
多言語対応の翻訳機能なので、チャットボットの機能をかなり拡張できたと思います。
Translation APIの以外のAPIを利用することで様々な機能をチャットボットに搭載することが出来ます!!!
最後まで読んでいただき、ありがとうございました。