使用 Business Messages 的语言区域和谷歌翻译的智能自动化功能 你可以使用 Google Cloud 中的 用户的首选语言。本教程将引导您完成概念验证 将 Google 翻译与 Business Messages 网络钩子集成。
所需条件
首先,您需要做好以下准备:
- 在 Business Messages 中注册完整且已获批准的合作伙伴。请参阅 注册成为合作伙伴指南。
- Business Messages 代理,包括您的服务账号密钥。要创建 请参阅创建您的第一个代理指南。
- 一台安装了 Google Cloud SDK 和 Node.js(版本 10 或更高版本)的计算机。 确保您已登录并 在以下位置设置有效的项目 ID: Google Cloud SDK
- 用于测试的 Android 或 iOS 设备。
获取代码
本教程将为您介绍 翻译。如需获取代码,请从 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 客户端。打开 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
变量中)。
检测传入语言
示例代码会检测传入语言是否已更改,如果已更改, 提示用户选择要在对话中使用的语言。 要在移动设备上试用此功能,只需在 英语以外的语言。如果您不懂任何其他语言,请尝试输入 “你好!”(这是西班牙语的“您好”!)。
代理会以提示询问用户是否要切换 语言。提示包含建议的回复,用户可以点击这些回复 切换到该语言。
我们先来看看语言检测功能。
/**
* 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);
});
});
}
此方法使用检测方法 翻译客户端上的语言。由于 Translate API 可能会检测多种语言, 以及不同的置信度(这还在于它支持 则此方法会返回一个结果数组。该样本首先 也就是置信度最高的结果。
使用经过解析的语言区域
有时,翻译 API 无法确定
自信。例如,如果你的猫在键盘上跑来跑去输入
无意义字符串,Translate API 仍会尝试检测语言,
检测到的语言可能不正确。(毕竟,谷歌翻译
目前尚不支持猫科动物语言!)Translate API 会用
为 translate.detect
的结果设置较低的置信度值。
在这种情况下,示例代码会回退到 Business Messages 已解析的语言区域、 这是 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))
);
});
}
代码会创建一个提示,将其翻译成当前语言(有关 ),然后将 建议的回复。用户可能希望采用以下任意一种方式交谈 语言:
- 检测到的传入语言。
- 当前对话语言。
- 服务器的内置语言。
由于这三种语言可能会有重叠(例如,如果当前的 语言已经是服务器语言),服务器会使用 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,
};
更改对话的语言
现在返回移动设备,尝试点击 生成相应的提示。例如,如果您输入了“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 方法 翻译 API。与检测方法一样,翻译方法 接受多项输入。由于服务器只提供一个输入,因此它会获取 来自 Translate API 的第一个结果。
查看回调方法中用于响应传入消息的部分: 当前语言:
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"。更复杂的系统可能还依赖于 选择合适的回答的方法,例如机器学习或评分 算法。使用 Business Messages 创建更智能的回复方法之一 与 Dialogflow 集成。
现在,我们来看一下将所选消息发送回用户的代码。
let serverResponse = chooseResponseMessage(normalizedMessage);
translateText(
serverResponse,
SERVER_LANGUAGE,
currentLanguage
).then((normalizedResponse) => {
sendResponse(normalizedResponse, conversationId, []);
});
示例代码会重复使用 translateText
方法,以转换所选的
以当前对话语言显示响应。然后,使用 sendResponse
方法
它负责创建新的 Message 对象并将其发送给用户。
摘要
在本教程中,您学习了如何创建 轻松集成 Cloud Translate API 并利用 Business Messages 语言区域功能覆盖更多用户。如果您 可以参考本教程中的示例代码来着手开发 也可以尝试一些新的功能!以下是一些建议:
- 发送包含原始邮件内容和 自动翻译的内容。
- 在用户开始 对话。
- 使用 Translate API 高级功能 例如术语库,可靠地翻译您的业务特有的字词。
通过集成 Translate API,您可以充分利用高质量机器翻译服务, 以便用他们最熟悉的语言与更多用户进行交流。 您的代理可以进行更高效、更高效的对话, 客户满意度和任务完成情况。