快速入门:Fulfillment

本指南介绍如何使用 fulfillment 将代理与服务集成。通过集成服务,您可以根据最终用户的表述来执行操作,并将动态响应发送回最终用户。

准备工作

如果您不打算使用 fulfillment,则可以跳过此快速入门。

这些步骤会使用 Cloud Functions,并假定您具备基本的 Node.js 知识。如果要使用自己的服务器或其他语言来创建 fulfillment,请参阅更详细的 fulfillment 文档

在阅读本指南之前,请先完成以下各项:

  1. 阅读 Dialogflow 基础知识
  2. 执行设置步骤
  3. 执行构建代理快速入门指南中的步骤。以下步骤将继续处理同一代理。如果您不再拥有该代理,则可以下载 build-agent-quickstart.zip导入文件

内嵌编辑器

Dialogflow 控制台的内置代码编辑器,也被称为内嵌编辑器,可用于创建 fulfillment 代码并将代码部署到 Cloud Functions 中。Cloud Functions 会产生相关费用,但该服务每月有大量的免费调用次数。内嵌编辑器仅支持 Node.js,并使用 Dialogflow fulfillment 库

初次启用内嵌编辑器时,fulfillment 代码会预填充针对所有代理均包含的默认意图的默认处理程序。 该代码中还会包含注释性说明,以便于您了解如何为开发者定义的意图添加处理程序。

内嵌编辑器适用于简单的 fulfillment 测试和原型设计。 如想构建生产应用,请先创建一个网络钩子服务

使用内嵌编辑器启用和部署 fulfillment

如需使用内嵌编辑器启用和部署默认 fulfillment 代码,请执行以下操作:

  1. 点击左侧边栏菜单中的 Fulfillment
  2. 内嵌编辑器切换为已启用
  3. 如果没有在设置步骤中启用结算功能,则系统会提示您立即启用结算功能。Cloud Functions 会产生相关费用,但该服务每月有大量的免费调用次数
  4. 点击表单底部的部署,然后等待对话框指示已部署该映像。

您必须为每个需要使用 fulfillment 的意图启用 fulfillment。如需为默认欢迎意图启用 fulfillment,请执行以下操作:

  1. 点击左侧边栏菜单中的意图 (Intents)。
  2. 点击默认欢迎意图
  3. 向下滚动到 Fulfillment 部分并将为此意图启用网络钩子调用 (Enable webhook call for this intent) 切换为开启。

  4. 点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。

现在,您可以在模拟器中测试您的 fulfillment。在模拟器中输入 Hi,得到的响应为 Welcome to my agent!。此响应是通过刚刚部署的 fulfillment 网络钩子发送的。具体而言,响应来自以下代码:

function welcome(agent) {
  agent.add(`Welcome to my agent!`);
}

创建自定义 fulfillment 处理程序

上述步骤使用默认内嵌编辑器代码提供的处理程序。如需创建自定义处理程序,请执行以下操作:

  1. 为您在先前步骤中创建的 get-agent-name 意图启用 fulfillment。
  2. 点击左侧边栏菜单中的 Fulfillment,然后检查内嵌编辑器中的代码。
  3. 找到以下行:

    exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
    

    onRequest 函数会处理来自 Dialogflow 的所有请求。在此函数的代码内,定义了特定的处理程序函数。匹配关联的意图时,系统将调用这些处理程序函数。例如,上一部分中使用的函数是 function welcome(agent)

  4. 在现有处理程序下方,为 get-agent-name 意图添加以下函数:

    function getAgentNameHandler(agent) {
      agent.add('From fulfillment: My name is Dialogflow!');
    }
    
  5. 在处理程序函数定义下方,使用了 intentMap.set() 调用。这些调用会按名称将特定处理程序与意图相关联。例如,intentMap.set('Default Welcome Intent', welcome) 会将 welcome 处理程序与名为 Default Welcome Intent 的意图相关联。

  6. 在现有 intentMap.set 调用下方,为 get-agent-name 意图添加以下行:

    intentMap.set('get-agent-name', getAgentNameHandler);
    
  7. 点击表单底部的部署

  8. 在模拟器中输入 What's your name?From fulfillment: My name is Dialogflow! 响应从新处理程序发送。

访问参数值

在前面的步骤中,您创建了 set-language 意图来标识人类和编程语言。该意图使用 languagelanguage-programming 参数。在此部分中,您可以在 fulfillment 处理程序中访问这些参数的值。

如需添加此处理程序,请执行以下操作:

  1. set-language 意图启用 fulfillment。
  2. 点击左侧边栏菜单中的 Fulfillment
  3. 类似于上述步骤,添加以下处理程序和 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);
    
  4. 点击部署

该处理程序会检索参数 languagelanguage-programming,并将其存储在变量中。它从 agent.parameters 特性中检索这些值,该特性是一个对象,包含最终用户在其请求中指定的所有参数名称和值。

如要试用此功能,请在模拟器中输入 I know how to speak German