首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多音libary配置VUI对话框中的重复意图

使用多音libary配置VUI对话框中的重复意图
EN

Stack Overflow用户
提问于 2020-02-05 10:36:39
回答 1查看 238关注 0票数 1

我正在尝试将我的VUI配置为在对话框中重复一个句子,当它被提示时。小小的背景故事,我正在帮助开发一个老人社交机器人,所以重复一个句子是一个非常需要的功能。我刚刚开始这个项目,之前负责这个项目的开发人员已经走了,无法联系到,我也没有Node.js方面的经验。

我希望使用多音来实现这个目标。以下是我迄今所采取的步骤:

  1. 创造了一个叫做“重复”的意图。
  2. 为意图添加了培训短语
  3. 添加“multivocal.repeat”作为动作
  4. 为此启用了web钩子调用
  5. 在Node.js中,在我现有的intentMap中添加了intentMap.set(重复,重复);
代码语言:javascript
复制
// 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中有一些东西

代码语言:javascript
复制
  "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代码如下:

代码语言:javascript
复制
const Color = require('./color.js');
Color.init();

const Multivocal = require('multivocal');
exports.webhook = Multivocal.processFirebaseWebhook;

我应该把这个添加到我的index.js的末尾吗?还是应该包装在一个函数中?很抱歉在这方面没有经验,但我希望我能解释清楚。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-05 12:23:49

使用对话框流内联编辑器使用多声线的一些答案:

如何将它包括在package.json 文件中?

使用npm的指导是,如果您是在本地编写实现,而不是使用编辑器。

您需要在dependencies部分中添加这一行:

代码语言:javascript
复制
    "multivocal": "^0.14.0"

对话框流/ Firebase函数将负责导入库。您不需要“在google上的操作”、“对话框流”或“对话框实现”库,因此该部分可以如下所示:

代码语言:javascript
复制
  "dependencies": {
    "firebase-admin": "^5.13.1",
    "firebase-functions": "^2.0.2",
    "multivocal": "^0.14.0"
  }

我怎么写我的index.js?

简单的示例假设您可以将配置和代码放在单独的文件中(示例中的“color.js”)。由于不能使用内联编辑器执行此操作,所以代码的一般样板如下所示:

代码语言:javascript
复制
// 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。它自己维护一个函数,因此要注册一个意图处理程序函数,您可以使用以下内容

代码语言:javascript
复制
Multivocal.addIntentHandler( intentName, handlerFunction );

但是请记住,处理程序函数也有一点不同。

什么?他们有什么不同?

多声带语言有很多事情是通过配置来处理的,而不是代码。因此,没有直接对应的agent.add()函数调用,您将与对话框流实现或在谷歌上的动作库。

相反,意图处理函数应该执行任何逻辑、数据库调用或其他任何操作,以获取响应中将使用的值,并将其保存在环境中。每个Handler都应该返回包含环境的承诺。

您还应该为您的意图设置配置--其中最常见的是设置可能的“响应”模板。最简单的响应模板只包括文本,以及从环境中插入值的位置。提示用户下一步可以做什么也是最佳实践,因此我们可以设置一个默认使用的“后缀”模板,或者设置一个用于特定意图、操作或Outents的模板。

因此,如果您有一个名为"color.favorite“的意图,并且在环境中有一个名为"color”的值(您的处理程序可能已经从数据库加载了该值),那么用英语进行此响应的配置可能如下所示。它还包括一个默认后缀,以提示用户下一步可以做什么。

代码语言:javascript
复制
  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."
          ]
        }
      }
    }
  }

您可以将此配置注册到

代码语言:javascript
复制
  new Multivocal.Config.Simple( config );

您可以(并且希望)注册多个配置,尽管您可以将它们组合在一个对象中。因此,上面的Response部分可以按名称包含每个意图的响应部分。

好的,但是如何处理“重复”意图呢?

您所需要做的就是提供一个意图,在对话框流UI中将其"Action“设置为"multivocal.repeat”,并启用web钩子。所以像这样的东西会起作用:

多音已经注册了一个基于此的处理程序和配置。

如果要更改可能的响应,可以添加"multivocal.repeat“操作的配置。看起来可能是这样的:

代码语言:javascript
复制
const enRepeat = [
  "Sorry about that, let me try again.",
  "I said:"
];

const config = {
  Local: {
    en: {
      Response: {
        "Action.multivocal.repeat": enRepeat
      }
    }
  }
}

然后将此配置与您编写的其他配置组合起来,或者按上面的方式加载它。

需要强调的是,您没有必要为此编写任何代码,只是一些可选的配置。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60073896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档