通过谷歌翻译支持多种语言

使用 Business Messages 的语言区域和谷歌翻译的智能自动化功能 你可以使用 Google Cloud 中的 用户的首选语言。本教程将引导您完成概念验证 将 Google 翻译与 Business Messages 网络钩子集成。

所需条件

首先,您需要做好以下准备:

获取代码

本教程将为您介绍 翻译。如需获取代码,请从 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,您可以充分利用高质量机器翻译服务, 以便用他们最熟悉的语言与更多用户进行交流。 您的代理可以进行更高效、更高效的对话, 客户满意度和任务完成情况。