我需要一些帮助来为我在对话框流中创建的意图创建实现。我已经创建了 15 个意图,我已经将它们集成并进行了测试,并且效果很好。我被困在履行中并且无法继续,因为我很困惑是否履行设置。因为必须为我创建的每一个意图做我相信。我不确定如何使用左侧窗格上的履行链接一键完成此操作。如果我直接点击履行和部署,它会起作用吗?我真的很困惑。请帮帮我。
问问题
603 次
2 回答
1
设置 Fulfillment 是一个多步骤的过程。
启用履行
- 在左侧导航中选择 Fulfillment
- 如果您的实现代码将在远程 Webhook 上运行,请启用“Webhook”并输入您的 Webhook 的 URL。
- 如果您没有地方运行您的履行代码,您也可以使用内联编辑器开始。启用此功能,您将直接在此处输入代码。
- 保存配置。
为每个 Intent 启用
虽然这会设置将用于您的项目的 Fulfillment,但您仍然必须为每个应该调用它的 Intent 启用它。
- 返回到 Intent 列表并选择一个 Intent。
- 在 Fulfillment 部分向页面底部滚动。
- 打开“为此意图启用 webhook 调用”。
- 保存配置。
- 对您要使用 Fulfillment 处理的每个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 回答