Google Dialogflow 聊天机器人:使用 fulfillment 在 Google 上集成操作

2019-07-04 19:22:19 +08:00
 1722332572

此页面介绍了如何通过 Google 上的操作将 Dialogflow 聊天机器人连接到您的服务。Fulfillment 允许您将数据库中的动态数据显示给用户。

部署和启用 fulfillment

要启用 fulfillment:

  • 使用此文件中的代码替换内联编辑器中的代码。 代码

  • 单击页面底部的“部署”。

您需要为创建第一个聊天机器人程序中创建的“ name ”意图启用 fulfillment:

  • 单击左侧菜单中的 Intents,然后单击“ name ”意图。

  • 向下滚动到 Fulfillment 部分,然后单击开关以启用它。

注意:启用 fulfillment 会覆盖在意图的“响应”部分中设置的响应。

  • 单击“保存”按钮。

创建一个处理程序

处理程序是您可以在整个代码中调用的函数。这些处理程序设置为在匹配特定意图时运行。

单击左侧菜单中的 Fulfillment 导航回到 Fulfillment 页面,然后查看代码。

最后一行应如下所示:

exports.dialogflowFirebaseFulfillment = functions.https.onRequest ( app )

这是一个来自 Dialogflow 的处理 HTTP 请求的函数,它使用 Cloud Functions for Firebase。

在以 exports.dialogflowFirebaseFulfillment 开头的最后一行上方添加以下代码:

app.intent('name', conv => {
  conv.ask('My name is Dialogflow!')
})

当 Dialogflow 与“ name ”意图匹配时,上面的代码会响应用户的查询。

要测试它,请单击页面底部的“部署”。完成后,输入“你的名字是什么?”来调用“名字”意图。进入右侧的模拟器。你应该看到你的新消息作为回应!

在 fulfillment 中使用实体和上下文

注意:本节中的任务需要具有 Dialogflow 实体和上下文的经验。确保您知道如何使用实体提取数据并在继续之前使用上下文管理状态。

实体

实体用于从用户的查询中提取参数值。您希望从用户的请求中获取的任何重要数据都必须具有相应的实体。

在“使用实体提取数据”指南中,您创建了“语言”意图来识别语言和编程语言。意图有参数 language 和 ProgrammingLanguages。

要访问这些参数:

  • 单击左侧菜单中的 Intents,然后单击“ Languages ”意图。

  • 在 intent 的 Fulfillment 部分下,单击“为此 intent 启用 webhook 调用”选项的开关。

  • 单击意图页面顶部的“保存”按钮。

  • 单击左侧菜单中的 Fulfillment。

现在,您将编写一些代码来处理 fulfillment 中的“语言”意图。在以 exports.dialogflowFirebaseFulfillment 开头的最后一行上方添加以下代码:

app.intent('Languages', (conv, {language, ProgrammingLanguage}) => {
  if (language) {
    conv.ask(`Wow! I didn't know you knew ${language}`);
  } else if (ProgrammingLanguage) {
    conv.ask(`${ProgrammingLanguage} is cool.`);
  } else {
    conv.ask(`What language do you know?`)
  }
});

在此代码中,您将检索参数 language 和 ProgrammingLanguages。当任一参数从 Dialogflow 发送到您的 fulfillment 中时,您构建与我们的 fulfillment 中相同的响应。如果没有发送参数,您可以使用其他响应来询问用户他们所知道的语言。

要试用它,请单击“部署”并通过说“我知道如何说德语”之类的方式调用“语言”意图。

上下文

上下文表示用户请求的当前上下文。这有助于区分可能含糊不清或具有不同含义的短语,具体取决于用户的偏好,用户的地理位置,应用中的当前页面或对话主题。

在具有上下文的管理状态指南中,您创建了“语言”意图的后续意图。如该页面所述,后续意图通过从父意图设置输出上下文并使用相同的上下文作为子意图的输入来工作。

为了在您的实现中正确模仿相同的行为,您需要设置与 Dialogflow 相同的输出上下文,具有相同的生命周期(在上下文处于活动状态的会话轮次)和参数。 使用 conv.contexts.set 方法修改处理程序以包含上下文:


app.intent('Languages', (conv, {language, ProgrammingLanguage}) => {
  if (language) {
    conv.ask(`Wow! I didn't know you knew ${language}`);
    conv.contexts.set('Languages-followup', 2, {language: language})
  } else if (ProgrammingLanguage) {
    conv.ask(`${ProgrammingLanguage} is cool.`);
    conv.contexts.set('Languages-followup', 2, {ProgrammingLanguage: ProgrammingLanguage})
  } else {
    conv.ask(`What language do you know?`)
  }
});

在此代码中,您将在上下文中添加名为“ languages-followup ”的输出上下文,生命周期为 2 轮,以及参数值( language 或 ProgrammingLanguages )以供以后检索。 单击“部署”以试用它。

要在 fulfillment 中检索上下文,可以使用 conv.contexts.get 方法或使用 app.getContexts 获取所有上下文的列表。 例如,如果要为“ languages-followup ”后续意图创建 fulfillment 处理程序,它将如下所示:

app.intent('Languages - custom', (conv, {duration}) => {
  const langContext = conv.contexts.get('languages-followup')
  const language = langContext.parameters.language || langContext.parameters.ProgrammingLanguage;
  conv.ask(`I can't believe you've know ${language} for ${duration.amount} ${duration.unit}!`);
});

英文原文: https://dialogflow.com/docs/getting-started/integrate-services-actions-on-google

聊天机器人: http://www.panchuangai.com

1672 次点击
所在节点    Python
2 条回复
loryyang
2019-07-04 19:36:00 +08:00
前司做过 NLP 方面的工作,当时调研感觉这种类似的开放平台挺多的,还有一些是纯图形化操作,不过大部分的感觉还是很简单
NLP 在聊天方面的应用还是太难,就智能客服,FAQ 可以上。突破感觉还是看 alexa 和小冰吧,他们两个在两个不同的方向都做的挺好的
1722332572
2019-07-12 10:25:46 +08:00
@loryyang 现在开放平台使用挺简单的了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/580099

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX