如何为Google智能助理包装现有的聊天机器人(Google Home)

时间:2018-01-05 14:37:24

标签: chatbot actions-on-google dialogflow

我们今天为我们的网站提供了一个聊天机器人,它不是使用Google技术构建的。机器人有一个JSON REST API,您可以在其中发送问题以及回复相应的答案。因此,现有的聊天机器人正在解决所有意图和实体。

在Google智能助理/谷歌主页中包装此功能的最佳方法是什么?

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

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

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

3 个答案:

答案 0 :(得分:1)

对于那些不知道我在说什么的人来说,这可能是不够的,对于那些不知道我在做什么的人来说,这可能是不够的。这是:

听起来好像你需要使用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)。

答案 1 :(得分:1)

因此,您已经拥有一个处理用户输入并发回响应的后端,并且您希望使用它来处理新的输入流(来自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); });

希望有所帮助!

答案 2 :(得分:0)

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

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

您可以在此处找到演示:Hey Google talk to Watson