本指南介绍如何使用 fulfillment 将代理与服务集成。通过集成服务,您可以根据最终用户的表述来执行操作,并将动态响应发送回最终用户。
准备工作
如果您不打算使用 fulfillment,则可以跳过此快速入门。
这些步骤会使用 Cloud Functions,并假定您具备基本的 Node.js 知识。如果要使用自己的服务器或其他语言来创建 fulfillment,请参阅更详细的 fulfillment 文档。
在阅读本指南之前,请先完成以下事项:
- 阅读 Dialogflow 基础知识。
- 执行设置步骤。
- 执行构建代理快速入门指南中的步骤。以下步骤将继续处理同一代理。如果您不再拥有该代理,则可以下载
build-agent-quickstart.zip
并导入文件。
内嵌编辑器
Dialogflow 控制台有一个内置的代码编辑器,称为 内嵌编辑器 可用于创建 fulfillment 代码并将其部署到 Cloud Functions。 Cloud Functions 会产生相关费用,但该服务每月有大量的免费调用次数。请注意,您仍必须注册并提供有效的结算账号。您随时可以取消。
初次启用内嵌编辑器时,Node.js fulfillment 代码会预填充针对所有代理均包含的默认意图的默认处理程序。该代码中还会包含注释性说明,以便于您了解如何为开发者定义的意图添加处理程序。
内嵌编辑器适用于简单的 fulfillment 测试和原型设计。 如想构建生产应用,请先创建一个网络钩子服务。
使用内嵌编辑器启用和部署 fulfillment
如需使用内嵌编辑器启用和部署默认 fulfillment 代码,请执行以下操作:
- 点击左侧边栏菜单中的 Fulfillment。
- 将内嵌编辑器切换为已启用。
- 如果没有在设置步骤中启用结算功能,则系统会提示您立即启用结算功能。Cloud Functions 会产生相关费用,但该服务每月有大量的免费调用次数。请注意,您仍必须注册并提供结算账号。您随时可以取消订阅。
- 点击表单底部的部署,然后等待对话框指示已部署该映像。
您必须为每个需要使用 fulfillment 的意图启用 fulfillment。如需为默认欢迎意图启用 fulfillment,请执行以下操作:
- 点击左侧边栏菜单中的意图 (Intents)。
- 点击默认欢迎意图。
向下滚动到 Fulfillment 部分并将为此意图启用网络钩子调用 (Enable webhook call for this intent) 切换为开启。
点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。
现在,您可以在模拟器中测试您的 fulfillment。在模拟器中输入 Hi
,得到的响应为 Welcome to my agent!
。此响应是通过刚刚部署的 fulfillment 网络钩子发送的。具体而言,响应来自以下代码:
function welcome(agent) { agent.add(`Welcome to my agent!`); }
创建自定义 fulfillment 处理程序
上述步骤使用默认内嵌编辑器代码提供的处理程序。如需创建自定义处理程序,请执行以下操作:
- 为您在先前步骤中创建的
get-agent-name
意图启用 fulfillment。 - 点击左侧边栏菜单中的 Fulfillment,然后检查内嵌编辑器中的代码。
找到以下行:
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
onRequest
函数会处理来自 Dialogflow 的所有请求。在此函数的代码内,定义了特定的处理程序函数。匹配关联的意图时,系统将调用这些处理程序函数。例如,上一部分中使用的函数是function welcome(agent)
。在现有处理程序下方,为
get-agent-name
意图添加以下函数:function getAgentNameHandler(agent) { agent.add('From fulfillment: My name is Dialogflow!'); }
在处理程序函数定义下方,使用了
intentMap.set()
调用。这些调用会按名称将特定处理程序与意图相关联。例如,intentMap.set('Default Welcome Intent', welcome)
会将welcome
处理程序与名为Default Welcome Intent
的意图相关联。在现有
intentMap.set
调用下方,为get-agent-name
意图添加以下行:intentMap.set('get-agent-name', getAgentNameHandler);
点击表单底部的部署。
在模拟器中输入
What's your name?
。From fulfillment: My name is Dialogflow!
响应从新处理程序发送。
访问参数值
在前面的步骤中,您创建了 set-language
意图来标识人类和编程语言。该意图使用 language
和 language-programming
参数。在此部分中,您可以在 fulfillment 处理程序中访问这些参数的值。
如需添加此处理程序,请执行以下操作:
- 为
set-language
意图启用 fulfillment。 - 点击左侧边栏菜单中的 Fulfillment。
类似于上述步骤,添加以下处理程序和
intentMap
调用:function languageHandler(agent) { const language = agent.parameters.language; const programmingLanguage = agent.parameters['language-programming']; if (language) { agent.add(`From fulfillment: Wow! I didn't know you knew ${language}`); } else if (programmingLanguage) { agent.add(`From fulfillment: ${programmingLanguage} is cool`); } else { agent.add(`From fulfillment: What language do you know?`); } }
intentMap.set('set-language', languageHandler);
点击部署。
该处理程序会检索参数 language
和 language-programming
,并将其存储在变量中。它从 agent.parameters
特性中检索这些值,该特性是一个对象,包含最终用户在其请求中指定的所有参数名称和值。
如要试用此功能,请在模拟器中输入 I know how to speak German
。