将 Google Actions 与 API.AI Bot 集成





5.00/5 (1投票)
本文档的主要目的是了解使用 API.AI 开发 Google Actions 所需的步骤。
引言
Google Actions 提供了为 Google Assistant 构建对话聊天功能。您可以通过 Google Home 设备、Google Pixel 智能手机、Allo(消息应用)来使用此集成。此外,它还可以集成到 Google Assistant 可用的其他体验中。本文将详细介绍使用 api.ai 并与 Google Actions 集成来创建示例代理的步骤。
API.AI
API.AI 提供自然语言理解平台。为开发人员和非开发人员创建 NLU 界面非常简单方便。我们可以将对话式用户界面集成到移动应用、Web 应用、设备和机器人中。我们使用 Node.Js 作为开发平台。创建机器人并将其与 Google Actions 集成所涉及的主要步骤列在下面。
创建机器人
Agent 是我们应用程序的 NLU(自然语言理解)模块。其目的是将用户的自然语言转换为可操作的数据。登录 API.AI 并创建一个新的 agent,我创建的 agent 名为“OrderTracker
”。Order tracker agent 的任务是获取特定订单 ID 的订单状态。
下一步是创建实体。创建一个名为“orderid
”的实体,该实体应为字母数字组合。我提供了实体引用值和对应的同义词值(可选)。可以启用“允许自动扩展”选项,这样即使没有训练,具有相同组合的订单 ID 也能被识别。参考以下屏幕截图以获取示例。
接下来,我们创建“Order Status
”意图,并训练查询“show me order status for D55880006
”。创建意图时,我没有使用内置实体数据类型。因为我们创建了自己的“orderid
”实体,所以任何组合的订单 ID 都能被识别。将 Action 设置为“inputorderid
”。Action 名称可以手动定义。它是触发应用执行特定操作的触发词。它将在我们的 index.js 文件中访问,并在本文档稍后引用。
编写业务逻辑
在此示例中,我们使用了名为“actions-on-google
”的 NPM 模块。使用“npm install
”命令将其安装到您的项目路径中。package.json 文件包含依赖库的详细信息。package.json 文件应如下所示:
{
"name": "ordertracker",
"version": "1.0.0",
"private": true,
"scripts": {
"start": "node server.js",
"deploy": "Cloud path if you are using cloud deployment”
},
"description": "An agent to get the order status from your order id.",
"main": "index.js",
"repository": "",
"author": "Rethinavel Moorthy",
"dependencies": {
"actions-on-google": "^1.0.5"
}
}
创建 index.js 文件并粘贴以下代码。它包含两个函数,用于访问默认欢迎消息意图和订单状态意图。我编写了两个函数:“welcome Intent
”和“trackOrderStatus
”。第一个函数负责访问默认欢迎意图并设置欢迎消息。第二个函数负责从“order status
”意图中访问“orderid
”实体并设置响应文本。这两个函数将通过与 apiai-assistant
库映射来触发。
var apiaiAssistant = require ('actions-on-google').ApiAiAssistant;
//Intents
const WELCOMEINTENT = 'input.welcome';
const ORDER_STATUS = ‘input.orderstatus’;
//Entities
const ORDERID = 'orderid';
//Functions
function welcomeIntent(assistant) {
assistant.ask("With EShopping, you can get the product order status);
}
function trackOrderStatus(assistant) {
var orderidfromuser = assistant.getArgument(ORDERID);
var orderStatusMessage = "";
var orderDescription = "Your order” + orderidfromuser + “is";
if (orderidfromuser != null) {
assistant.ask (orderStatusMessage + "\n" +”is Available”);
}
else {
assistant.ask("please provide valid order id to check your order status");
}
}
exports.agent = function (request, response) {
var assistant = new ApiAiAssistant({request: request, response: response});
var actionMap = new Map ();
actionMap.set(WELCOMEINTENT, WelcomeIntent);
actionMap.set(ORDER_STATUS, trackOrderStatus);
assistant.handleRequest(actionMap);
};
现在,功能部分已完成,我们需要将部署服务器链接指向以运行此代码。我们可以在本地机器上运行该函数。API.AI 将通过 fulfillment 配置指向本地机器,其中会引用端点 URL。在完成此步骤后,我们可以对代码进行实时更改并测试这些更改。因此,我们将使用 Cloud Functions 模拟器,并使用 ngrok 工具,该工具允许我们通过公共 URL 将本地主机暴露给互联网。请参考本文档中显示的安装 Cloud Functions 模拟器的步骤。
- 在 Windows 命令提示符中打开项目根目录。
- 安装 Cloud Functions 模拟器
npm install -g @google-cloud/functions-emulator
- 为了在本地检索 index.js 文件并运行它,我们需要为项目安装 actions-on-google npm 模块。系统应至少具有 Node 版本 6.9。
npm install actions-on-google
- 定义您的 Agent 的项目 ID,我将项目 ID 命名为“
ordertracker-157615
”。您可以定义任何有意义的名称作为项目 ID。该项目 ID 将用于形成端点 URL。functions config set projectId ordertracker-157614
- 启动 Cloud Functions 模拟器。
functions start
- 使用以下命令在本地部署项目
functions deploy agent --trigger-http
- 如果函数成功部署在机器上,我们将看到以下内容:
- 记下资源 URL https://:8010/ordertracker-157614/us-entral1/agent
- 我们需要从 Web 访问此函数。在这种情况下,我们将使用 ngrok。下载 ngrok 工具并解压缩。使用以下命令运行 ngrok 工具。此处 8010 是项目访问的默认端口。因此,请使用端口 8010。
ngrok http 8010
- 获取 https 转发 URL,并将上面步骤中获取的资源 URL 转换为如下所示。此 URL 将作为端点 URL。
https://63ace30e.ngrok.io/what-time-is-it-157614/us-central1/agent
从菜单中打开 Fulfillment 选项。将从以上步骤获得的 Endpoint URL 粘贴到 URL 字段中。请参考下图以供参考。
在 API.AI 字段中打开意图,并在底部的 fulfillment 标签页中启用“使用 webhook”选项。此选项将在运行时查看 index.js 文件中的可用函数。
在 API.AI 字段中打开意图,并在底部的 fulfillment 标签页中启用“使用 webhook”选项。此选项将在运行时查看 index.js 文件中的可用函数。
使用 Google Actions 模拟器测试代码
在项目目录中创建一个 action.json 文件并粘贴以下内容。action.json 文件将被 Google Actions 模拟器引用,其中包含版本详细信息、Agent 信息、端点服务器 URL。每当更改 ngrok URL 时,都应在以下“url
”字段中进行替换。
{
"versionLabel": "1.0.0",
"agentInfo": {
"languageCode": "en-US",
"projectId": "ordertracker-157614",
"voiceName": "male_1"
},
"actions": [
{
"initialTrigger": {
"intent": "assistant.intent.action.MAIN"
},
"httpExecution": {
"url": "https:// 63ace30e.ngrok.io "
}
}
]
}
启用 Actions on Google
- 在 API.AI 控制台中,在左侧面板中选择 Integrations(集成)选项卡。
- 在 Actions on Google 卡片上启用切换开关。
- 点击 SETTINGS(设置),即可显示 Action on Google 界面。
- 为测试字段提供调用名称,输入对话操作的名称。在本例中,我们提供名称为 order tracker。
- Welcome Intent 是必需的,请从下拉列表中选择 Default Welcome Intent。默认欢迎意图的响应已从 index.js 发送。
- 您可以从可用选项中更改 TTS 语音。
- 点击右下角的 AUTHORIZE(授权)链接。按照说明授予客户端对模拟器上新对话的访问权限。
- 查看 Actions on Google 视图的右下角,然后点击 PREVIEW(预览)按钮。
- 如果 PREVIEW(预览)按钮不可用,请检查以下步骤是否匹配:
- 授权客户端访问 Conversation Action(点击 AUTHORIZE(授权)按钮)
- 检查用于测试的调用名称的值。
- 检查是否已提供 Welcome Intent。
- 在成功的情况下,右下角会提供一个指向 Google Home Web Simulator 的链接。
- 点击显示的 Google Home Web Simulator 链接。现在,通过说“
Talk to order tracker
”来开始测试您的对话。“Talk to
”是一个默认的对话启动语。