快速入门: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 fulfillment 代码会预填充针对所有代理均包含的默认意图的默认处理程序。该代码中还会包含注释性说明,以便于您了解如何为开发者定义的意图添加处理程序。

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

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

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

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

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

  1. 点击左侧边栏菜单中的意图 (Intents)。
  2. 点击默认欢迎意图
  3. 向下滚动到 Fulfillment 部分并将为此意图启用 Webhook 调用 (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