【问题标题】:Matching Express Routes to Google Assistant intents将 Express Routes 与 Google Assistant 意图匹配
【发布时间】:2018-08-04 16:44:49
【问题描述】:

我有一个 Express 应用,正在尝试与 Google 助理集成。

我已经安装了 https://www.npmjs.com/package/actions-on-google 并关注了 https://codelabs.developers.google.com/codelabs/actions-1/#0,它将功能部署到 Firebase - 但是我想从自托管的 Express 服务器运行它们。

在我的 app.js 中,我进行了如下设置:

const {
  dialogflow,
  Image,
} = require('actions-on-google')

// Create an app instance

const gapp = dialogflow();
});

但是我不确定如何创建在 Dialogflow 控制台中添加为 webhook 的路由 - 我是否使用以下格式?

app.post('/webhook', function(req, res){
    gapp.intent('favorite color', (conv, {color}) => {
        const luckyNumber = color.length;
        // Respond with the user's lucky number and end the conversation.
        conv.close('Your lucky number is ' + luckyNumber);
    });
});

如果是这样,我的所有意图都走这条路线了吗?

编辑 更新以响应答案:

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

const {
  dialogflow,
  Image,
} = require('actions-on-google')

// Create a  google app instance

const gapp = dialogflow()

// Register handlers for Dialogflow intents

gapp.intent('Default Welcome Intent', conv => {
  conv.ask('Hi, how is it going?')
  conv.ask(`Here's a picture of a cat`)
  conv.ask(new Image({
    url: 'https://developers.google.com/web/fundamentals/accessibility/semantics-builtin/imgs/160204193356-01-cat-500.jpg',
    alt: 'A cat',
  }))
})

// Intent in Dialogflow called `Goodbye`
gapp.intent('Goodbye', conv => {
  conv.close('See you later!')
})

gapp.intent('Default Fallback Intent', conv => {
  conv.ask(`I didn't understand. Can you tell me something else?`)
})

app.post('/ga/webhook', gapp)

【问题讨论】:

    标签: node.js express actions-on-google dialogflow-es


    【解决方案1】:

    您可以在 Express 服务器启动时定义所有 gapp 意图,然后您可以将 gapp 对象传递到您定义的 webhook 中:

    const express = require('express')
    const bodyParser = require('body-parser')
    
    // ... gapp code here
    
    const expressApp = express().use(bodyParser.json())
    expressApp.post('/webhook', gapp)
    expressApp.listen(3000)
    

    【讨论】:

    • 非常感谢您的回复,非常感谢。我已经修改了我的代码并将其放在上面的问题中,但是我的应用程序崩溃并出现错误TypeError: Cannot convert undefined or null to object。你知道这是为什么吗?
    • 不,我不确定您在代码中的哪个位置看到了错误。在你使用它之前肯定没有定义一些东西
    • 对不起,我意识到我可能在这里遗漏了一些非常基本的东西。所有(我相信)处理请求的相关代码都在gist.github.com/jinky32/4bea02c1ecc48455808055a8ab1cb78d 中。我假设我没有正确处理请求,但找不到应该如何完成的示例。
    • 代码看起来正确。在您的错误中,通常有一个堆栈跟踪,包括错误行。这可能有助于诊断。
    • 我会将此标记为正确答案。一个问题是const expressApp = express().use(bodyParser.json()) 必须在gapp 代码之前定义。除此之外,Dialogflow 意图名称也有些奇怪。
    猜你喜欢
    • 2021-08-05
    • 2022-10-24
    • 2019-02-13
    • 1970-01-01
    • 2017-07-14
    • 2021-11-08
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多