0

我需要一些帮助来为我在对话框流中创建的意图创建实现。我已经创建了 15 个意图,我已经将它们集成并进行了测试,并且效果很好。我被困在履行中并且无法继续,因为我很困惑是否履行设置。因为必须为我创建的每一个意图做我相信。我不确定如何使用左侧窗格上的履行链接一键完成此操作。如果我直接点击履行和部署,它会起作用吗?我真的很困惑。请帮帮我。

4

2 回答 2

1

设置 Fulfillment 是一个多步骤的过程。

启用履行

  1. 在左侧导航中选择 Fulfillment
  2. 如果您的实现代码将在远程 Webhook 上运行,请启用“Webhook”并输入您的 Webhook 的 URL。
  3. 如果您没有地方运行您的履行代码,您也可以使用内联编辑器开始。启用此功能,您将直接在此处输入代码。
  4. 保存配置。

启用履行的步骤说明

为每个 Intent 启用

虽然这会设置将用于您的项目的 Fulfillment,但您仍然必须为每个应该调用它的 Intent 启用它。

  1. 返回到 Intent 列表并选择一个 Intent。
  2. 在 Fulfillment 部分向页面底部滚动。
  3. 打开“为此意图启用 webhook 调用”。
  4. 保存配置。
  5. 对您要使用 Fulfillment 处理的每个Intent重复此操作。

为每个 Intent 启用的步骤说明

部署你的 webhook

您还需要编写 webhook 来处理触发的各种 Intent。内联编辑器的代码是一个很好的起点。

在 中intentMap,您需要将 Intent 名称中的映射添加到一个函数,该函数将在该 Intent 触发 webhook 时进行处理。您可以为每个 Intent 使用不同的处理函数,对某些 Intent 使用相同的函数,让这些函数调用其他函数,无论您需要什么。

但是有几点需要注意:

  • 如果您的处理程序需要执行异步功能(访问数据库、进行网络调用等),那么您需要确保返回一个 Promise。
  • 如果您使用的是内联编辑器并且您在 Google 网络之外进行网络调用,那么您需要将您的 Firebase 订阅升级到 Blaze 计划。(您仍然可以使用该计划的免费层。)
'use strict';

const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');

process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
  const agent = new WebhookClient({ request, response });
  console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
  console.log('Dialogflow Request body: ' + JSON.stringify(request.body));

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

  function fallback(agent) {
    agent.add(`I didn't understand`);
    agent.add(`I'm sorry, can you try again?`);
  }

  function handlerOne(agent) {
    agent.add(`This is handler one`);
  }

  function handlerThree(agent) {
    agent.add(`This is handler three`);
  }


  // Run the proper function handler based on the matched Dialogflow intent name
  let intentMap = new Map();
  intentMap.set('Default Welcome Intent', welcome);
  intentMap.set('Default Fallback Intent', fallback);
  intentMap.set('intent.one', handlerOne);
  intentMap.set('intent.two', handlerOne);
  intentMap.set('intent.three', handlerThree);
  agent.handleRequest(intentMap);
});
于 2020-03-03T11:15:04.663 回答
0

您可以在 API 中创建一个映射,其中所有意图都将映射到一个通信处理程序以实现。

这是示例代码,

const express = require("express");
const { WebhookClient } = require("dialogflow-fulfillment");
const { welcome, defaultFallback } = require("./intents/welcomeExit");
const app = express();
app.post("/dialogflow", express.json(), (req, res) => {
    const agent = new WebhookClient({ request: req, response: res });
    let intentMap = new Map();
    intentMap.set("Default Welcome Intent", welcome);
    intentMap.set("Default Fallback Intent", defaultFallback);
    agent.handleRequest(intentMap);
});
app.listen(process.env.PORT || 8080);

这已在 NodeJS 中完成。您可以使用 Dialogflow 支持的其他语言。如何在 Dialogflow 中配置检查此链接

于 2020-03-03T09:11:17.750 回答