在Facebook messenger API中,如何防止按钮回发有效负载文本在单击时记录到聊天窗口?

在Facebook messenger API中,如何防止按钮回发有效负载文本在单击时记录到聊天窗口?,facebook,facebook-messenger,facebook-chatbot,Facebook,Facebook Messenger,Facebook Chatbot,TLDR;@底部 我在Facebook的bug部分问了以下问题 注意:这更多的是一个平台设计建议,而不是一个bug,因为我没有找到聊天API反馈门户 目前,我正在构建一个聊天机器人,允许用户跟踪目标。它会显示类似“2016年7月12日你去散步了吗?”的内容,下面有“是/否”按钮。 目前,为了传递意图、日期和成就布尔值,我需要模板化一个字符串,如“==GOAL==aighted?,date tracked[[[{date_tracked}]]]”,并使用正则表达式捕获分隔变量。在负载中的模板字符串

TLDR;@底部

我在Facebook的bug部分问了以下问题

注意:这更多的是一个平台设计建议,而不是一个bug,因为我没有找到聊天API反馈门户 目前,我正在构建一个聊天机器人,允许用户跟踪目标。它会显示类似“2016年7月12日你去散步了吗?”的内容,下面有“是/否”按钮。
目前,为了传递意图、日期和成就布尔值,我需要模板化一个字符串,如“==GOAL==aighted?,date tracked[[[{date_tracked}]]]”,并使用正则表达式捕获分隔变量。在负载中的模板字符串是用户输入变量的其他情况下,这很容易出现解析错误,即如果将“{goal_acquired}”替换为目标变量“>>musived”,则捕获模板变量的正则表达式可能会失败。
可以使用回发负载来存储JSON编码的字符串,但问题是,负载字符串被记录到用户输出中,JSON字符串有点难看和混乱。如果负载没有记录到用户,而不是记录按钮的文本以帮助用户确认,我面临的挑战可以很容易解决已单击该按钮。
如果这是不可能的,是否有其他建议将数据编码到按钮有效负载中

提供了以下答案(马克·威尔斯)

嗨,贾斯汀, 不幸的是,目前我们的有效负载结构不支持您尝试实现的功能。据我所知,您希望使用有效负载来通知后端,用户是否在该特定日期完成了他们的“目标”。我建议您在通过I之前为您端的按钮创建有效负载响应对我们来说,这基本上就是您最初的JSON想法。 我知道这有点麻烦,但传递回的负载响应与messenger线程提供的文本无关。 我建议,如果您担心用户之前提供的可能会导致您的正则表达式出现问题,您也可以尝试清理字符串。如果以前的用户数据经过清理,以避免正则表达式/json解析出现任何问题,您应该能够实现此功能。 由于这是一个实现问题,我将不得不以无效结束此报告。如果您仍在寻找实现此流程的其他见解和具体提示,请发布到我们的stack overflow,我们有Facebook工程师和广泛的社区成员,他们也做出了贡献。 带着你的messenger机器人,请保重并致以最美好的祝愿。 标记

这句话特别不清楚:

我知道这有点麻烦,但是负载响应 传回的内容与提供的文本无关 信使线

TLDR;
有人能告诉我如何防止按钮记录有效负载字符串,这样我就可以使用它将JSON传递到我的应用程序,而不让用户看到它吗?

据我所知,你是说当你按下按钮时,会显示有效负载而不是按钮的文本

你是这样定义你的按钮的吗

    {
      type: "postback",
      title: "View Details",
      payload: "details:12345"
    }
我建议删除任何会干扰有效负载解析的特殊字符。只要这些特殊字符对用户体验不是至关重要的,这可能是一个很好的解决方案

如果这不能解决您的问题:


你能添加一个屏幕截图来显示你正在按下的按钮,以及你正在谈论的日志消息吗?据我所知,你是说当你按下按钮时,显示的是有效负载而不是按钮的文本。我不是这样,我按下按钮时,按钮的文本会显示出来。

请务必注释掉
sendTextMessage()
在您的
receivedPostback()调用中:

function receivedPostback(event){
    sendTextMessage(senderID, event.postback.payload);
}

奇怪的是,似乎是记录了按钮文本,而不是有效载荷…可能是我之前发现了一个已修复的bug…或者可能是我犯了一个错误,谢谢您的确认