繁体   English   中英

如何为Google Assistant(Google Home)包装现有的聊天机器人

[英]How to wrap an existing chatbot for Google Assistant (Google Home)

今天,我们的网站有一个聊天机器人,它不是使用Google技术构建的。 该机器人具有JSON REST API,您可以在其中将问题发送到,并用相应的答案进行答复。 因此,所有的意图和实体都将由现有的聊天机器人来解决。

在Google Assistant / Google Home中包装此功能的最佳方法是什么?

对我来说,我似乎需要从发送到我们的Web服务的JSON中提取“原始”问题(启用全功能时)。

但是由于上下文是用来交换“状态”的,所以我必须找到一种方法在对话框流和我们自己的聊天机器人之间交换上下文(见上文)。

但是也许还有其他方法? 是否可以直接完成(调用我们的聊天机器人)(中间没有DialogFlow)?

对于那些不知道我在说什么的人来说,这可能是不够的,而对于那些知道我的人来说,这是太多的。 开始:

在我看来,您似乎需要使用Actions SDK而不是Dialog flow来构建Action。 然后,在您的操作中实现一个文本“意图”-即在用户每次说话时都会运行的文本。 在该文本意图中,您要求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。

这很简单。 您只需要:

  { "locale": "en", "actions": [ { "name": "MAIN", "description": "Default Welcome Intent", "fulfillment": { "conversationName": "app name" }, "intent": { "name": "actions.intent.MAIN", "trigger": { "queryPatterns": [ "Talk to app name" ] } } } ], "conversations": { "app name": { "name": "app name", "url": "https://your_nodejs_middleware.com/" } } } 
 //require express and all required staff to build a Node.js server, //look on internet how to build a simple web server in Node.js //if you a new to this domain. const { ActionsSdkApp } = require('actions-on-google'); app.post('/', (req, res) => { req.body = JSON.parse(req.body); const app = new ActionsSdkApp({ request: req, response: res }); // Create functions to handle requests here function mainIntent(app) { let inputPrompt = app.buildInputPrompt(false, 'Hey! Welcome to app name!'); app.ask(inputPrompt); } function respond(app) { let userInput = app.getRawInput(); //HERE you get what user typed/said to Google Assistant. //NOW you can send the input to your BACKEND, process it, get the response_from_your_backend and send it back app.ask(response_from_your_backend); } let actionMap = new Map(); actionMap.set('actions.intent.MAIN', mainIntent); actionMap.set('actions.intent.TEXT', respond); app.handleRequest(actionMap); }); 

希望能有所帮助!

感谢所有帮助,已经给出了解决方案的主要部分,但是我在这里总结一下

  • action.json ,将所有内容传递给fullfilment服务
  • 中间的人(在我的情况下为IBM Cloud Function )在服务之间映射JSON
  • 通过对话令牌属性共享上下文/状态

您可以在此处找到该演示: 嘿Google与Watson交谈

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM