ビジネス メッセージの言語 / 地域と Google 翻訳のインテリジェントで 会話でやり取りすることでエージェントのリーチを広げることができます。 表示言語を設定できます。このチュートリアルでは、概念実証について説明します。 Google 翻訳とビジネス メッセージ Webhook の統合。
必要なもの
まず、次のものを用意する必要があります。
- ビジネス メッセージを使用した、承認済みのパートナーの完全な登録。詳しくは、 パートナー ガイドとして登録します。
- ビジネス メッセージ エージェント(サービス アカウント キーを含む)。新しい 最初のエージェントの作成ガイドをご覧ください。
- Google Cloud SDK と Node.js(バージョン 10 以降)がインストールされているパソコン。 ログインしていること、および アクティブなプロジェクト ID を設定する Google Cloud SDK を使用します
- テスト用の Android デバイスまたは iOS デバイス。
コードを取得する
このチュートリアルでは、Google Cloud と統合された Webhook のサンプルコードについて説明します。 翻訳。コードを取得するには、GitHub からリポジトリのクローンを作成します。
git clone https://github.com/google-business-communications/bm-nodejs-translation-tutorial
クローンを作成したディレクトリに移動し、サービス アカウント キーをリソース ディレクトリに配置します。
cp credentials.json bm-nodejs-translation-sample/resources/bm-agent-service-account-credentials.json
ヒント: サービスキーの設定やダウンロードについてサポートが必要な場合は、 サービス アカウントを管理するための Google Cloud ガイド。
これが完了したら、コードをデプロイできます。
gcloud app deploy
モバイル デバイスを使用して、エージェントにメッセージを送信します。次を メッセージをさまざまな言語で表示して、処理状況を確認します。
Translate API を設定する
サンプルコードには、Translate API の Node パッケージがすでに含まれています。 インストールされています。Node パッケージのインストール方法や 別のプログラミング言語で Translate API をインストールする方法については、 Cloud Translate API のドキュメント。
Translate API を使用するには、ライブラリをインポートして、Translate API を作成する必要があります。
API クライアント。routes/index.js
ファイルを開きます。関連する行は次のとおりです。
// Import the Translate API library.
const { Translate } = require("@google-cloud/translate").v2;
// Create a new Translate API client.
const translate = new Translate();
今後は、Translate オブジェクトで Translate API のメソッドにアクセスできます。
ファイルの先頭付近に作成された変数を確認します。
const SERVER_LANGUAGE = "en";
let currentLanguage = SERVER_LANGUAGE;
このサンプルコードでは、サーバーの言語を定数として保存しています。これは、
あります。ただし、会話の現在の言語は変更される可能性があるため、
currentLanguage
変数で指定する必要があります。
着信言語の検出
このサンプルコードでは、受信言語が変更されたかどうかが検出されます。変更されている場合は、 会話で使用する言語の選択をユーザーに促します。 モバイル デバイスでエージェントへのメッセージを入力して、この機能を試してみてください。 対応しています。他の言語がわからない場合は、次のように入力してください "Hola"(これはスペイン語で「Hello!」を意味します)。
エージェントは、ユーザーが切り替えたいかどうかを尋ねるプロンプトで応答します。 対応しています。メッセージには返信文の候補が含まれており、ユーザーはそれをクリックしてクリックできます。 その言語に切り替えます。
まず、言語検出機能について説明します。
/**
* Detects input text language.
*
* @param {string} text The text received from the consumer.
* @param {Context} context The user message request context.
* @return A Promise with the detected language code.
*/
async function detectLanguage(text, context) {
return new Promise(function (resolve, reject) {
translate
.detect(text)
.then((result) => {
if (result && result.length > 0) {
if (result[0].confidence > CONFIDENCE_THRESHOLD) {
resolve(result[0].language);
}
resolve(bcp47.parse(context.resolvedLocale).language);
} else {
reject("No language detected");
}
})
.catch((err) => {
console.error("ERROR:", err);
reject(err);
});
});
}
このメソッドは、detect メソッドを使用します。 必要があります。Translate API は複数の言語を検出する場合があるため、 (また、複数のルールがサポートされているため、 入力など)、このメソッドは結果の配列を返します。サンプルでは、最初の 最も信頼度の高い結果です
解決済みの言語 / 地域の使用
Translate API は、高レベルのメッセージ言語を判定できない
できます。たとえば猫がキーボードを横切って走って
意味をなさない文字列である場合、Translate API は引き続き言語を検出しようとしますが、
検出された言語が正しくない可能性があります。(結局、Google 翻訳は
まだ猫語には対応していません)。Translate API は、これを
translate.detect
の結果の信頼値を低く設定している。
このシナリオでは、サンプルコードは、 ビジネス メッセージの解決済みの言語 / 地域、 これは、Business Messages API で コンテキストで識別されます。解決されたロケールは BCP-47 形式であるため、 対応する Node.js パッケージを ロケールの言語コードを解析します。
この動作をテストするには、意味不明な内容の長い文字列をエージェントに入力します。イン ほとんどの場合、言語の変更を求めるメッセージは表示されません( 解決された言語 / 地域が現在の言語と異なる)。エージェントは リクエストを認識できません。
言語の変更を求めるメッセージ
言語の変更を検出すると、エージェントはプロンプトを 言語を変更します。
if (detectedLanguage != currentLanguage) {
translateText(
"Which language would you like to use?",
SERVER_LANGUAGE,
currentLanguage
).then((normalizedTranslationNotice) => {
sendResponse(
normalizedTranslationNotice,
conversationId,
[
...new Set([detectedLanguage, currentLanguage, SERVER_LANGUAGE]),
].map((x) => createSuggestedReply(x))
);
});
}
コードはプロンプトを作成し、それを現在の言語に翻訳します(詳しくは 「送信メッセージの翻訳」セクションに)を入力すると、 定型返信文。お客様は、以下のいずれかの方法で話したいと望んでいる可能性があります。 言語:
- 検出された着信言語。
- 現在の会話の言語。
- サーバーの組み込み言語。
これら 3 つの言語は重複することがあるため(たとえば、現在の言語が サーバーの言語がすでにサーバーの言語である場合、サーバーは set オブジェクトを使用して あります。次に、言語ごとに返信文の候補が作成されます。
/**
* Create a suggested reply for a language code.
* @param {string} languageCode A ISO 6391 language code.
* @return {Suggestion} The suggestion object for switching to the language.
*/
function createSuggestedReply(languageCode) {
return {
reply: {
text: ISO6391.getNativeName(languageCode),
postbackData: SWITCH_LANGUAGE_POSTBACK + languageCode,
},
};
}
定型返信文には、言語の名前がそれ自身の言語で表示されます。たとえば スペイン語は「Español」と表示されます。言語に関する情報を取得するには、 Node.js 用 ISO-639-1 ライブラリを使用できます。
ポストバック データは、ユーザーが おすすめします。ポストバック データはサーバーに応答方法を指示し、 提案に関するコンテキストです。
sendResponse
メソッドはこれらをアタッチします。
候補オブジェクト
返信します。
let messageObject = {
…
suggestions: suggestedReplies,
};
会話の言語の変更
モバイル デバイスに戻り、Google Chat で 確認します。たとえば「Hola」と入力すると[Español]をクリックして 返信文の候補が表示されます。
エージェントは新しい言語で回答します。送信内容を翻訳する方法を 返信は後ほど行います。ここでは、メッセージを受け取って処理するコードを クリックした返信文の候補が表示されます。
if (requestBody.suggestionResponse !== undefined) {
let postbackData = requestBody.suggestionResponse.postbackData;
if (postbackData.startsWith(SWITCH_LANGUAGE_POSTBACK)) {
let languageCode = postbackData.substr(SWITCH_LANGUAGE_POSTBACK.length);
currentLanguage = languageCode;
translateText(
"The language was set to " +
ISO6391.getName(languageCode) +
". Please repeat your request.",
SERVER_LANGUAGE,
languageCode
).then((translationNotice) => {
sendResponse(translationNotice, conversationId, []);
});
}
}
リクエストに候補に対する返信が含まれている場合、サーバーはポストバックを使用します。 どうすればよいか判断できますこの単純なケースでは、サーバーでサポートされるのは SWITCH_LANGUAGE_POSTBACK が返されます。これは、 その直後の言語に切り替わります。 できます。この言語コードを解析すると、サーバーは 言語が変更されたことをユーザーに知らせます。
受信メッセージの翻訳
言語を変更したら、その言語でエージェントにリクエストを送信できます。 言語を選択します。「ヘルプ」という言葉を送信してみてください新しい あります。言語をスペイン語に変更した場合は、「ayuda」と入力します。送信し、 表示されます。
サーバーはリクエストを理解し、次のメニューで応答します: 。ハードコードされたサンプル レスポンスを確認するには、次のいずれかを試してください。
サンプルコードでは、translateText
メソッドを使用して、受信と受信の両方を
制限します。実際に試してみましょう。
/**
* Translates text to a given target language. No translation if source and
* target language match.
*
* @param {string} text the text to translate
* @param {string} sourceLanguage The language of the source text.
* @param {string} targetLanguage The target language.
* @return A Promise with the translated text.
*/
async function translateText(text, sourceLanguage, targetLanguage) {
if (sourceLanguage === targetLanguage) {
return new Promise(function (resolve, reject) {
resolve(text);
});
}
return new Promise(function (resolve, reject) {
translate
.translate(text, targetLanguage)
.then((result) => {
if (result && result.length > 0) {
resolve(result[0]);
} else {
reject("Could not translate message");
}
})
.catch((err) => {
console.error("ERROR:", err);
reject(err);
});
});
}
ソース言語がターゲット言語と同じ場合、何もする必要はありません。 できます。それ以外の場合、サーバーは translate メソッド Translate API クライアント上で実行します。translate メソッドでは、detect メソッドと同様に、 多岐にわたります。サーバーは 1 つの入力しか提供しないため、 最初の結果が翻訳されます
受信メッセージに応答するコールバック メソッドのセクションを 現在の言語:
translateText(incomingMessage, currentLanguage, SERVER_LANGUAGE).then(
(normalizedMessage) => {
let serverResponse = chooseResponseMessage(normalizedMessage);
…
}
);
サーバーは translateText
からの出力を使用して、レスポンス メッセージを選択します。
次のセクションでは、返信メッセージとメッセージを選択するプロセスについて詳しく説明します。
あります。
アウトバウンド メッセージの翻訳
受信したメッセージをサーバーによりネイティブの英語に翻訳した後、
ユーザーのリクエストに対して適切な応答を選択、翻訳して、送信できます。
このサンプルコードでは、キーワードをレスポンスにマッピングする非常にシンプルなスキームを使用しています。持っている
chooseResponseMessage
メソッドを見てみましょう。
/**
* Select a topically appropriate response based on the message
* content that the user sent to the agent.
*
* @param {string} incomingMessage The content of the message that the user typed in.
* @param {string} conversationId The unique id for this user and agent.
* @return {string} A response message.
*/
function chooseResponseMessage(incomingMessage) {
let responseMapping = {
balance: "Your current balance is $500.",
deposit: "Please enter your deposit amount.",
transfer:
"Please enter the account number where you wish to transfer the funds.",
withdraw: "Please enter the amount you wish to withdraw.",
help: "Please choose what you'd like to do: balance, deposit, transfer, or withdraw.",
};
for (const [key, value] of Object.entries(responseMapping)) {
if (incomingMessage.toLowerCase().includes(key)) {
return value;
}
}
return "I didn't understand your request. Please try again.";
}
このスキームはサーバーで英語にのみ対応しているため、サーバーは すべての受信メールと送信メールを翻訳しますより高度なシステムでは 複数の言語をサポートし、他の言語でのリクエストにネイティブで応答できます。 たとえば、エージェントがスペイン語をサポートしている場合、 「ayuda」レスポンスマップで確認できます。より高度なシステムでは、他のシステムに依存する ML やスコアリングなど、適切な回答を選択するための手法 学習します。ビジネス メッセージでよりインテリジェントな返信を作成する方法の 1 つ Dialogflow との統合です
次に、選択したメッセージをユーザーに返すコードを確認します。
let serverResponse = chooseResponseMessage(normalizedMessage);
translateText(
serverResponse,
SERVER_LANGUAGE,
currentLanguage
).then((normalizedResponse) => {
sendResponse(normalizedResponse, conversationId, []);
});
サンプルコードでは、translateText
メソッドを再利用して、選択した
現在の会話言語に翻訳します。sendResponse
メソッドでは、
新しい Message オブジェクトを作成してユーザーに送信します。
概要
このチュートリアルでは、Terraform を使用して Cloud Translate API とのシンプルな統合 ビジネス メッセージの言語 / 地域機能を活用することで、より多くのユーザーにリーチできるようになります。もし このチュートリアルのサンプル コードを 独自の統合に挑戦することもできますし、新しいことに挑戦できます。以下のヒントをご覧ください。
- 元のメッセージのコンテンツと 自動的に翻訳されます。
- ユーザーがチャットを開始したときに、サポートされている言語の全メニューが表示される あります。
- 高度な Translate API の機能を利用する ビジネスに特化した言葉を確実に翻訳できます。
Translate API と統合することで、高品質の機械翻訳機能を活用できる より多くのユーザーと使いやすい言語でコミュニケーションできます。 エージェントは、より生産的で効率的な会話を行うことができ、 顧客満足度とタスク完了の指標です