我正在尝试将我的VUI配置为在对话框中重复一个句子,当它被提示时。小小的背景故事,我正在帮助开发一个老人社交机器人,所以重复一个句子是一个非常需要的功能。我刚刚开始这个项目,之前负责这个项目的开发人员已经走了,无法联系到,我也没有Node.js方面的经验。
我希望使用多音来实现这个目标。以下是我迄今所采取的步骤:
// Run the proper function handler based on the matched Dialogflow intent name
let intentMap = new Map();
intentMap.set('Game_Rock_Paper_Scissors - Result', game_stone_paper_scissors);
intentMap.set('Game_Rock_Paper_Scissors - Result - yes', game_stone_paper_scissors_again);
intentMap.set('Conversation tree', conversation_tree);
intentMap.set('Question date', question_date);
intentMap.set('Question time', question_time);
intentMap.set('Music', music);
intentMap.set('Repeat', repeat);接下来,在“履行”选项卡下,我希望在内联编辑器'index.js‘选项卡中输入函数,并确保在'package.json’中安装和使用多音库。到目前为止,我的package.json中有一些东西
"name": "dialogflowFirebaseFulfillment",
"description": "This is the default fulfillment for a Dialogflow agents using Cloud Functions for Firebase",
"version": "0.0.1",
"private": true,
"license": "Apache Version 2.0",
"author": "Google Inc.",
"engines": {
"node": "8"
},
"scripts": {
"start": "firebase serve --only functions:dialogflowFirebaseFulfillment",
"deploy": "firebase deploy --only functions:dialogflowFirebaseFulfillment"
},
"dependencies": {
"actions-on-google": "^2.2.0",
"firebase-admin": "^5.13.1",
"firebase-functions": "^2.0.2",
"dialogflow": "^0.6.0",
"dialogflow-fulfillment": "^0.5.0"
}
}那么,如何安装库呢?在Read.me中,“您可以使用npm安装--保存多声道来安装它。”但是我该把这个安装在哪里呢?我是把这个放在index.js还是packages.js里?
另外,在这个示例中,它显示了index.js代码如下:
const Color = require('./color.js');
Color.init();
const Multivocal = require('multivocal');
exports.webhook = Multivocal.processFirebaseWebhook;我应该把这个添加到我的index.js的末尾吗?还是应该包装在一个函数中?很抱歉在这方面没有经验,但我希望我能解释清楚。
发布于 2020-02-05 12:23:49
使用对话框流内联编辑器使用多声线的一些答案:
如何将它包括在package.json 文件中?
使用npm的指导是,如果您是在本地编写实现,而不是使用编辑器。
您需要在dependencies部分中添加这一行:
"multivocal": "^0.14.0"对话框流/ Firebase函数将负责导入库。您不需要“在google上的操作”、“对话框流”或“对话框实现”库,因此该部分可以如下所示:
"dependencies": {
"firebase-admin": "^5.13.1",
"firebase-functions": "^2.0.2",
"multivocal": "^0.14.0"
}我怎么写我的index.js?
简单的示例假设您可以将配置和代码放在单独的文件中(示例中的“color.js”)。由于不能使用内联编辑器执行此操作,所以代码的一般样板如下所示:
// Import the library on the first line, so you can call methods on it to setup your configuration
const Multivocal = require('multivocal');
// Your configuration and code go here
// Setup the webhook as the final line
exports.dialogflowFirebaseFulfillment = Multivocal.processFirebaseWebhook;意图处理程序注册和函数在哪里?
与对话框流实现库不同的是,多声道不使用显式intentMap。它自己维护一个函数,因此要注册一个意图处理程序函数,您可以使用以下内容
Multivocal.addIntentHandler( intentName, handlerFunction );但是请记住,处理程序函数也有一点不同。
什么?他们有什么不同?
多声带语言有很多事情是通过配置来处理的,而不是代码。因此,没有直接对应的agent.add()函数调用,您将与对话框流实现或在谷歌上的动作库。
相反,意图处理函数应该执行任何逻辑、数据库调用或其他任何操作,以获取响应中将使用的值,并将其保存在环境中。每个Handler都应该返回包含环境的承诺。
您还应该为您的意图设置配置--其中最常见的是设置可能的“响应”模板。最简单的响应模板只包括文本,以及从环境中插入值的位置。提示用户下一步可以做什么也是最佳实践,因此我们可以设置一个默认使用的“后缀”模板,或者设置一个用于特定意图、操作或Outents的模板。
因此,如果您有一个名为"color.favorite“的意图,并且在环境中有一个名为"color”的值(您的处理程序可能已经从数据库加载了该值),那么用英语进行此响应的配置可能如下所示。它还包括一个默认后缀,以提示用户下一步可以做什么。
const config = {
Local: {
en: {
Response: {
"Intent.color.favorite": [
"{{color}} is one of my favorite colors as well.",
"Oh yes, {{color}} can be quite striking.",
"I can certainly understand why you like {{color}}."
]
},
Suffix: {
Default: [
"What other color do you like?"
"Tell me another color."
]
}
}
}
}您可以将此配置注册到
new Multivocal.Config.Simple( config );您可以(并且希望)注册多个配置,尽管您可以将它们组合在一个对象中。因此,上面的Response部分可以按名称包含每个意图的响应部分。
好的,但是如何处理“重复”意图呢?
您所需要做的就是提供一个意图,在对话框流UI中将其"Action“设置为"multivocal.repeat”,并启用web钩子。所以像这样的东西会起作用:

多音已经注册了一个基于此的处理程序和配置。
如果要更改可能的响应,可以添加"multivocal.repeat“操作的配置。看起来可能是这样的:
const enRepeat = [
"Sorry about that, let me try again.",
"I said:"
];
const config = {
Local: {
en: {
Response: {
"Action.multivocal.repeat": enRepeat
}
}
}
}然后将此配置与您编写的其他配置组合起来,或者按上面的方式加载它。
需要强调的是,您没有必要为此编写任何代码,只是一些可选的配置。
https://stackoverflow.com/questions/60073896
复制相似问题