我们今天为我们的网站提供了一个聊天机器人,它不是使用Google技术构建的 . 机器人有一个JSON REST API,您可以在其中发送问题以及回复相应的答案 . 因此,现有的聊天机器人正在解决所有意图和实体 .
在Google智能助理/谷歌主页中包含此功能的最佳方法是什么?
对我来说,似乎我需要从发送到我们的web服务的JSON中提取“原始”问题(当我启用fullfilment时) .
但由于上下文用于交换“状态”,我必须找到一种方法来交换对话流和我们自己的聊天机器人之间的上下文(见上文) .
但也许还有其他方法吗?可以直接完成(调用我们的聊天机器人)(没有DialogFlow作为中间人)吗?
3 回答
对于那些不知道我在说什么的人来说,这可能是不够的,对于那些不知道我在做什么的人来说,这可能是不够的 . 开始:
听起来好像你需要使用Actions SDK而不是Dialog流来构建Action . 然后在Action中实现文本“intent” - 即每次用户说话时运行的文本 . 在该文本意图中,您向AoG平台询问文本 - 请参阅getRawInput() . 现在你做两件事 . 一,你接受原始输入并将其传递给你的机器人 . 第二,你答应告诉AoG你正在做一个回复,但你还没有回复 . 一旦履行承诺 - 即当您的机器人回复时 - 您回复您从机器人获得的文本 .
我在这里有一个名为法国鹦鹉的动作示例https://github.com/unclewill/french_parrot . 就言语而言,它只是简单地说出它听到的鹦鹉会说的话 . 它还转到翻译服务来翻译文本并返回(松散)法语等价物 .
如果你选择接受它,你的任务就是取样,剔除转换到翻译服务的代码并插入你机器人的代码 . :-)
我应该提两件事 . 一,它不是我在样本中找到的节点或JavaScript . 我能说什么 - 我认为世界其他地方感到困惑 . 真 . 二,我有一个大约50行的最小样本,避开这里的翻译https://github.com/unclewill/parrot . 另一个选择是使用它作为基础并添加代码来调用你的机器人和Promise-y代码来等待它 .
如果你去后一个路线,从动作包(action.json)中删除触发短语 .
因此,您已经拥有一个处理用户输入并发回响应的后端,并且您希望使用它来处理新的输入流(来自Google智能助理)?
实际上我的情况是,我作为Facebook Messenger ChatBot提供服务,最近开始为它开发Google Home Action .
这很简单 . 你只需要:
在这里创建一个动作https://console.actions.google.com
从这里下载GActions-Cli https://developers.google.com/actions/tools/gactions-cli
创建JSON文件
action.[fr/en/de/it].json
(选择一种语言) . 该文件用于定义您的意图和您的webhook的URL(您的后端和Google助手之间的中间件) . 它可能看起来像这样:使用
gactions update --action_package action.en.json --project PROJECT_ID
上传JSON文件AFAIK,只有一个Node.js客户端库,用于动作在谷歌https://github.com/actions-on-google/actions-on-google-nodejs,为什么你需要一个Node.js中间件,然后再打你的后端
现在,用户输入将发送到https://your_nodejs_middleware.com/托管的Node.js中间件( app.js ),其外观如下:
app.post('/',(req,res)=> {
req.body = JSON.parse(req.body);
const app = new ActionsSdkApp({
要求:req,
回复:res
});
//在此处创建处理请求的函数
function mainIntent(app){
let inputPrompt = app.buildInputPrompt(false,
'嘿!欢迎来到app name!');
app.ask(inputPrompt);
}
功能响应(app){
let userInput = app.getRawInput();
//在这里,您可以获得用户键入/说过Google智能助理的内容 .
//现在您可以将输入发送到BACKEND,处理它,获取response_from_your_backend并将其发回
app.ask(response_from_your_backend);
}
让actionMap = new Map();
actionMap.set('actions.intent.MAIN',mainIntent);
actionMap.set('actions.intent.TEXT',回复);
app.handleRequest(ActionMap中); });
希望有所帮助!
感谢所有的帮助,解决方案的主要部分已经给出,但我在这里总结一下
action.json 将所有内容传递给fullfilment服务
man在中间(在我的情况下是 IBM Cloud Function )在服务之间映射JSON
通过 conversationToken 属性共享上下文/状态
你可以在这里找到演示:Hey Google talk to Watson