You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Dialogflow中自定义Payload实现Facebook端回退至先前意图

解决Dialogflow + Facebook渠道回退至起始意图的问题

嘿,我明白你现在的困扰——直接自定义backTo类型的Payload确实不会生效,因为Dialogflow和Facebook Messenger都不识别这个自定义格式。下面给你几个靠谱的解决方案,亲测有效:

方案1:用Dialogflow事件触发起始意图(最推荐)

触发特定意图最可靠的方式是利用Dialogflow的事件系统,而不是自定义Payload。步骤如下:

  • 给结束意图添加触发事件
    打开你的结束对话意图(比如叫end_conversation),在「响应」面板里添加一个「事件」响应,事件名称可以随便取,比如goto_hello_intent
  • 给起始意图绑定触发事件
    打开你的hello意图,在「触发事件」部分添加刚才的goto_hello_intent事件。这样当结束意图触发这个事件时,Dialogflow会自动跳转到hello意图。
  • 配合文本回复(可选但必要)
    别忘了在结束意图里添加文本回复,比如“正在回到对话起始处...”,不然用户看不到任何反馈。
  • 清除上下文(关键)
    如果之前的对话设置了输出上下文,一定要在结束意图的「输出上下文」里把这些上下文的生命周期设为0——不然残留的上下文可能会阻止hello意图被触发。

方案2:用Facebook Postback按钮触发(适合需要用户主动点击的场景)

如果你的需求是让用户主动点击按钮回到起始处,那可以用Facebook Messenger的Postback按钮模板,把触发逻辑藏在Postback的Payload里:

  • 设置Facebook专属Payload
    在结束意图的「自定义Payload」里,用Facebook官方的按钮模板格式:
    {
      "facebook": {
        "attachment": {
          "type": "template",
          "payload": {
            "template_type": "button",
            "text": "你想回到对话开头还是结束?",
            "buttons": [
              {
                "type": "postback",
                "title": "回到开头",
                "payload": "TRIGGER_HELLO"
              },
              {
                "type": "postback",
                "title": "结束对话",
                "payload": "END_CHAT"
              }
            ]
          }
        }
      }
    }
    
  • 创建Postback处理意图
    新建一个意图(比如handle_postback_actions),在「训练短语」里添加TRIGGER_HELLO,然后在这个意图里添加「事件」响应(指向goto_hello_intent),或者直接用「转发到意图」功能跳转到hello意图。

为什么你的原Payload没用?

你之前写的{"type": "backTo", "intent": "hello"}是完全自定义的格式,Dialogflow不会自动解析这个字段来触发意图,而Facebook Messenger也不认识backTo这个类型,所以只会把这个Payload原样发给用户端,自然没有任何反应。

测试的时候记得一定要在Facebook Messenger里实际测试,不要只依赖Dialogflow的测试控制台——渠道特定的Payload在控制台里可能无法正常解析。

内容的提问来源于stack exchange,提问作者charlie gaskell

火山引擎 最新活动