Smooch:如何进行依赖于回发的状态转换?

2023-11-29

我正在尝试根据 Smooch 回发有效负载将脚本从一种状态转换为另一种状态;但收到错误代码 H12。

考虑这个例子https://github.com/smooch/smooch-bot-example

假设我修改了脚本https://github.com/smooch/smooch-bot-example/blob/master/script.js如下

start: {
    receive: (bot) => {
        return bot.say('Hi! I\'m Smooch Bot! Continue? %[Yes](postback:askName) %[No](postback:bye) );
    }
},
bye: {
    prompt: (bot) => bot.say('Pleasure meeting you'),
    receive: () => 'processing'
},

目的是机器人的状态将根据回发有效负载进行转换。

问题是,我该如何实现这一点?

我的方法是添加

stateMachine.setState(postback.action.payload)

到 github.com/smooch/smooch-bot-example/blob/master/heroku/index.js 的handlePostback方法

然而,这引发了错误代码 H12。我也尝试过

stateMachine.transition(postback.action,postback.action.payload)

无济于事。


我对 [object Object] 而不是字符串也遇到了同样的问题。这是因为state您使用函数获取或设置包含在对象中,而不是字符串中...我用里面的代码修复了它index.js,替换现有的handlePostback函数在接吻机器人示例GitHub 仓库:

function handlePostback(req, res) {

const stateMachine = new StateMachine({
    script,
    bot: createBot(req.body.appUser)
});

const postback = req.body.postbacks[0];
if (!postback || !postback.action) {
    res.end();
};

const smoochPayload = postback.action.payload;

// Change conversation state according to postback clicked
switch (smoochPayload) {
    case "POSTBACK-PAYLOAD":
        Promise.all([
            stateMachine.bot.releaseLock(),
            stateMachine.setState(smoochPayload), // set new state
            stateMachine.prompt(smoochPayload) // call state prompt() if any
        ]);
        res.end();
    break;

    default:
        stateMachine.bot.say("POSTBACK ISN'T RECOGNIZED") // for testing purposes
            .then(() => res.end());
};
}

然后里面script.js您需要做的就是定义与确切的回发负载相对应的状态。如果您有多个回发应该将用户带到其他状态,只需将它们添加到case像这样列出:

case "POSTBACK-PAYLOAD-1":
case "POSTBACK-PAYLOAD-2":
case "POSTBACK-PAYLOAD-3":
case "POSTBACK-PAYLOAD-4":
Promise.all([
        stateMachine.bot.releaseLock(),
        stateMachine.setState(smoochPayload), // set new state
        stateMachine.prompt(smoochPayload) // call state prompt() if any
    ]);
    res.end();
break;

请注意,您不应该写break;在每个的末尾case如果你想要的结果是一样的(这里:设置状态并提示相应的消息)。

如果您想以不同的方式处理其他回发,您可以在break;声明并做其他事情。

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Smooch:如何进行依赖于回发的状态转换? 的相关文章

  • 单击按钮重复动画

    我想每次单击按钮时都重复动画 我尝试做某事像这样 https jsfiddle net 91raod7e const dist document querySelector dist document querySelector butto
  • javascript中怪异模式的元素宽度?

    我一直在浏览所有流行的 js 库 但我找不到一个具有 DOM 元素宽度函数的库 该函数实际上可以解释 Internet Explorer 中的怪异模式 问题是 当启用怪异模式时 填充和边框不会计入宽度 据我所知 当省略 doctype 或将
  • 未捕获的类型错误:无法读取未定义的属性“toLowerCase”

    我收到此错误 它源自 jquery 框架 当我尝试加载准备好的文档上的选择列表时 出现此错误 我似乎无法找到为什么会出现此错误 它适用于更改事件 但在尝试手动执行该函数时出现错误 未捕获的类型错误 无法读取未定义的属性 toLowerCas
  • 具有两组子组件的 React 组件

    我正在创建一个组件 需要接收两组子组件并放置在组件的两个不同部分中 let CreditCardForm icons fields gt div div div div icons div div div fields div let Cr
  • Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Headers

    我试图通过发布请求将文件发送到我的服务器 但是当它发送时会导致错误 Access Control Allow Headers 不允许请求标头字段 Content Type 所以我用谷歌搜索了错误并添加了标题 http post rootSc
  • 使用JQuery检查元素是否有边框?

    所以我正在玩 el css 尝试确定元素是否有边框 我用 css border style solid 设置边框 这是可行的 但实际上它设置了 4 种单独的样式 border right style border left style bo
  • 使用 javascript 将 html 文本渲染为位图,无需服务器端代码

    我需要使用 javascript 代码来转换 html 中的文章 帖子 以便最终用户以位图的形式查看 有没有办法在没有服务器端代码的情况下做到这一点 example p testing text here p 您可以使用例如html2can
  • mouseover 和 mouseout 事件在子进程上触发

    代码 div div div div 如果我将鼠标悬停在Navigation the Drop Downdiv 向下滑动 如果我将鼠标移开 它会向上滑动 问题是如果我将鼠标悬停在孩子上Drop Downdiv它也向上滑 动 有谁知道我该如何
  • 覆盖函数(例如“警报”)并调用原始函数?

    我想用调用原始版本的新版本覆盖 Javascript 内置函数 类似于用调用的版本覆盖类上的方法 super有多种语言版本 我怎样才能做到这一点 例如 window alert function str do something addit
  • Backbone 中的加载栏

    我想显示加载消息 图标 直到列表中的所有项目都已呈现 这是我的示例中的 jsfiddle http jsfiddle net 9R9zU 58 http jsfiddle net 9R9zU 58 我尝试在 Feed 部分添加一个带有加载栏
  • 有没有好的 JQuery twitter 小部件可以循环推文?

    我想知道是否有任何 JQuery 小部件提供了循环加载推文的功能 例如在官方小部件中http twitter com about resources widgets widget profile http twitter com about
  • 使用本机 JavaScript 获取过渡中的 CSS 值

    这个问题之前被问过 但答案使用了 jQuery here https stackoverflow com q 8920934 3186555 因此 我将调整问题以专门询问native解决方案 to 最小化依赖关系 假设您有一个 div 然后
  • 水平平滑滚动 100px

    Heyjo problem 一周以来我一直在寻找 javascript 或 jQuery 代码 以便在我的网站上实现滚动按钮 我失败的那一刻是按钮应该多次工作的时候 他的任务不是滚动到专用元素 而是应该向左滚动 例如 100px 此外 滚动
  • 如何设置在浏览器的新选项卡(_blank)中打开的pdf文件的标题

    这是我的尝试 是否在新选项卡上打开 但它总是显示test pdf如题 function titlepath path name alert path alert name document title name window open pa
  • 为什么 JSON 结果可以是布尔值而不是对象或数组?

    From JSON 网站 http json org JSON 建立在两种结构之上 名称 值对的集合 在各种语言中 这被实现为对象 记录 结构 字典 哈希表 键控列表或关联数组 值的有序列表 在大多数语言中 这被实现为数组 向量 列表或序列
  • 一个接一个地淡入div

    大家好 我很擅长 HTML 和 CSS 但才刚刚开始接触 jQuery 的皮毛 我希望让 3 个 div 在页面加载时逐渐淡入 到目前为止我有这个 我听说使用 css 将显示设置为 none 对于任何使用非 JavaScript 浏览器的人
  • 允许使用 grunt browserify 进行全局转换

    我已将 jQuery 添加为 html 文件中的脚本标记 并将其添加到package json与一起工作browserify shim如下 browserify transform browserify shim browserify sh
  • Jquery 两个字段的时间差(以小时为单位)

    我的表单中有两个字段 用户可以在其中选择输入时间 start time end time 我想在更改这些字段时重新计算另一个字段的值 我想做的是获取两次之间的小时数 例如 如果我的开始时间为 5 30 结束时间为 7 50 我想将结果 2
  • 将 div 文本分配给变量然后显示它

    我有一个简单的任务 我试图完成学习 JavaScript 但一直无法找到明确的答案 这是代码 div Testing div 基本上我希望将方框 div 中的文本存储到变量中 然后 我想在页面的不同部分显示该变量的文本 使用上面的代码我得到
  • Nodejs 一个接一个地运行异步函数

    我是 JS nodejs 的新手 所以如果我不能提出切中要害的问题 请原谅我 所以基本上 如果我有两个异步函数 async function init async function main 如何确保在 init 完成其异步请求后调用 ma

随机推荐

  • 如何将数组中的每个元素转换为自己的数组?

    使用 Ruby 2 4 我有一个字符串数组 a b c 如何获取上述内容并将每个元素转换为它自己的一个元素数组 所以我希望这样的操作的结果是 a b c 您可以使用zip a b c zip gt a b c
  • ASP.NET 中的批量 301 重定向,包括需要根据查询字符串参数重定向到不同位置的页面

    我们网站的多个页面使用旧的非 SEO 友好 URL 进行索引 例如http www domain com DocumentDetails aspx id 555 最近 我们实现了使用存储在数据库中的 slug 的路由 并查找 slug 以使
  • C#读取USB设备序列号

    有没有办法使用 Visual Studio 2005 读取 USB 设备序列号和 USB 文本文件中的数据 尝试这个 USBSerialNumber usb new USBSerialNumber string serial usb get
  • 部署gae java时如何设置版本?

    由于 Intellij Idea IDE gae 部署插件不起作用 我必须使用mvn appengine update 它始终部署到版本 1 忽略 appengine web xml 中的版本 如何设置版本mvn appengine upd
  • 如何使用 NHibernate 进行分页?

    例如 我想仅使用显示的行数所需的数据填充 ASP NET 网页中的 gridview 控件 NHibernate 如何支持这一点 ICriteria has a SetFirstResult int i 方法 它指示您希望获取的第一个项目的
  • 实现弯曲动画的问题[重复]

    这个问题在这里已经有答案了 可能的重复 Android 沿路径移动位图 我想通过弯曲的路径移动图像 在android中可以吗 我搜索了很多 但我只能找到有关缩放 旋转和翻译动画的信息 所以有人有任何想法请帮忙 在 Android 中可能吗
  • 如何为 VS Code 创建默认/全局启动配置?

    我一直设置相同启动 json每个项目的文件 但我想更改默认值 以便它已经配置了启动目标 我可以更改默认值吗 或者可以创建一个用户值吗 我在 Mac OS X 上使用它 None
  • 是否可以使用回调类型定义来定义函数?

    我对使用预定义回调类型定义函数感兴趣 假设我已经定义了回调类型 typedef BOOL is trigger required cb void 现在我想使用上述类型声明并定义一个函数 我想做这样的事情 is trigger require
  • Ubuntu 上的 Docker hello-world - 权限被拒绝

    我正在尝试让 docker v 1 8 2 在 Ubuntu 14 04 上工作 使用 docker 配置文件中的 g 选项 Ubuntu 位于 USB 密钥上 在不使用机器磁盘的情况下提取映像时出现错误 结果是docker拉取了hello
  • 使用 javascript 正则表达式替换和增加整数值

    给定以下字符串 XXXX Units 4 Test XXXX 我想替换每次出现的Unit x with Unit x 1 我正在尝试使用正则表达式来实现此目的 如名称所示Units需要首先进行字面匹配 我正在尝试这样的事情 test rep
  • Shiny:根据输入选择输入子集

    编辑 感谢您的帮助 我的代码存在多个问题 但主要问题是我缺少 Observe 语句 以下解决了问题 get ddf lt reactive filter poskick Name input player observe updateSel
  • iPhone AVCaptureDeviceInput 如何设置音频捕获的质量?

    以下代码在 44100 深度 2 处工作正常 一些检查和代码被删除 这似乎是默认值 由于这个界面可用 但没有很好的记录 有人知道如何更改默认质量吗 audioCaptureDevice AVCaptureDevice defaultDevi
  • 从交互式图表中抓取数据

    是否可以获取交互式图表背后的数据这个网页 抱歉 网站需要登录 当我用鼠标悬停在图表上时 数据就会显示出来 但是如何获取这些数据呢 以下是该网站 HTML 源代码的摘录
  • 如何防止 youtube iframe 从独立应用程序重定向到 Youtube 应用程序?

    我开发了一份网络杂志揭示js 当然 用户可以决定为他 她自己的智能手机或平板电脑创建快捷方式 创建一个独立的应用程序 该应用程序不会在普通浏览器中打开 带有网址栏 导航命令等 为此 我使用这段代码 一切正常 除了当我滑动到内容中有 YouT
  • 寻找可以在 WinForms 应用程序中播放 AVI 文件的组件(.NET 或 COM/ActiveX)[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找类似 Windows Media Player 控件之类的可以托管在表单上的东西 WMP 不适合我 因为我需要一个可以按顺序播放连续附加的
  • 使用箭头键移动 PictureBox - 处理 PictureBox 中的键盘事件

    我有一个PictureBox我使用下面的代码来移动我的对象 我需要在表单中添加一些按钮 但是当我启动程序时 箭头键在按钮中导航 而不是我的输入按键 我尝试过很多 像这样的方式PictureBox Focus and PictureBox S
  • 使用自定义字体而不包含在 info.plist ios 中

    在 iOS 中 如果我们想使用自定义字体 我们必须包含font ttf在应用程序包中并添加font ttf作为字体键的值信息列表 file 我想使用自定义字体 在设备中安装应用程序后 将从我的服务器下载其 ttf 文件 1 是否可以在我的应
  • Office Outlook Web Addin 不适用于 Office Client 2016

    我使用 Angular 5 版本开发了一个插件 我已经构建了它并使用 sercure http 部署在 Apache 服务器上 我通过使用不同的用户登录在 Office Web App 上测试了这个插件 我发现它按我的预期工作 但现在的问题
  • 将派生类型映射到 EF 中的同一个表

    以下简单的代码示例说明了相关场景 我有一个 Person 实体 它只是映射到数据库中的 Person 表 我正在使用默认的实体对象代码生成器 public partial class Person 我有一个从 Person 派生的 Pers
  • Smooch:如何进行依赖于回发的状态转换?

    我正在尝试根据 Smooch 回发有效负载将脚本从一种状态转换为另一种状态 但收到错误代码 H12 考虑这个例子https github com smooch smooch bot example 假设我修改了脚本https github