在 Facebook Messenger API 中,如何防止按钮回传负载文本在点击时被记录到聊天 window?
In Facebook messenger API, how to prevent button postback payload text from being logged to chat window on click?
TLDR; @底部
我在 Facebook 错误部分提出了以下问题
注意:与其说这是一个错误,不如说这是一个平台设计建议,因为我找不到聊天 API 反馈门户
目前我正在构建一个允许用户跟踪目标的聊天机器人。它会显示类似 "Did you go for a walk on July 12, 2016 ?" 的字样,并在下方显示 Yes/NO 个按钮。
目前,为了传递意图、日期和成就布尔值,我需要模板化这样的字符串“==GOAL== achieved?<<<{goal_achieved}>>>, date tracked [[[{ date_tracked}]]]" 并使用正则表达式捕获分隔变量。在负载中的模板化字符串是用户输入变量的其他情况下,这很容易出现解析错误,即如果“{goal_achieved}”被目标变量“>>meditated”替换,那么捕获模板变量可能会失败。
可以使用 postback payload 来存储 JSON 编码的字符串,但问题是 payload 字符串被记录到用户输出中并且 JSON 字符串有点难看并且令人困惑。如果负载没有记录给用户,我面临的挑战可以很容易地解决。而是记录按钮的文本以帮助用户确认按钮被单击。
如果那不可能,对于将数据编码到按钮负载中还有其他建议吗?
提供了以下答案(Mark Wiltse)
嗨贾斯汀,
不幸的是,此时我们的有效负载结构不支持您尝试实现的功能。据我了解,如果用户在该特定日期完成了他们的 'goal',您希望使用有效负载通知您的后端。我建议您在将它传递给我们之前为您那一端的按钮创建有效负载响应,这基本上是您最初的 JSON 想法。
我知道这处理起来有点麻烦,但传回的有效载荷响应独立于信使线程提供的文本。
如果您担心用户之前提供的您会导致您的正则表达式出现问题,我建议您也尝试清理您的字符串。如果对先前的用户数据进行清理以避免 regex/json 解析出现任何问题,您应该能够实现此功能。
由于这是一个实施问题,我将不得不以无效为由关闭此报告。如果您仍在寻找实施此流程的更多见解和具体技巧,请 post 到我们的 stack overflow,我们有 Facebook 工程师和广泛的社区成员,他们也做出了贡献。
http://facebook.whosebug.com/
保重您的 Messenger 机器人并致以最良好的祝愿。
马克
这句话特别不清楚:
I know this is a bit cumbersome to handle but the payload response
passed back is independent of the text that was provided with the
messenger thread.
TLDR;
任何人都可以告诉我如何防止按钮记录有效负载字符串,以便我可以使用它将 JSON 传递给我的应用程序而不让用户看到它吗?
据我了解,您是说当您按下按钮时,显示的是 PAYLOAD 而不是按钮的文本。
你是这样定义按钮的吗?
{
type: "postback",
title: "View Details",
payload: "details:12345"
}
我建议删除任何会干扰有效负载解析的特殊字符。只要特殊字符对用户体验不重要,这可能是一个很好的解决方案。
如果这不能解决您的问题:
您能否添加显示您按下的按钮和您正在讨论的日志消息的屏幕截图?据我了解,您是说当您按下按钮时,会显示 PAYLOAD 而不是按钮的文本。对我来说不是这样,当我按下按钮时,我的按钮文本会显示出来。
确保在 receivedPostback()
调用中注释掉 sendTextMessage()
:
function receivedPostback(event){
sendTextMessage(senderID, event.postback.payload);
}
TLDR; @底部
我在 Facebook 错误部分提出了以下问题
注意:与其说这是一个错误,不如说这是一个平台设计建议,因为我找不到聊天 API 反馈门户
目前我正在构建一个允许用户跟踪目标的聊天机器人。它会显示类似 "Did you go for a walk on July 12, 2016 ?" 的字样,并在下方显示 Yes/NO 个按钮。
目前,为了传递意图、日期和成就布尔值,我需要模板化这样的字符串“==GOAL== achieved?<<<{goal_achieved}>>>, date tracked [[[{ date_tracked}]]]" 并使用正则表达式捕获分隔变量。在负载中的模板化字符串是用户输入变量的其他情况下,这很容易出现解析错误,即如果“{goal_achieved}”被目标变量“>>meditated”替换,那么捕获模板变量可能会失败。
可以使用 postback payload 来存储 JSON 编码的字符串,但问题是 payload 字符串被记录到用户输出中并且 JSON 字符串有点难看并且令人困惑。如果负载没有记录给用户,我面临的挑战可以很容易地解决。而是记录按钮的文本以帮助用户确认按钮被单击。
如果那不可能,对于将数据编码到按钮负载中还有其他建议吗?
提供了以下答案(Mark Wiltse)
嗨贾斯汀, 不幸的是,此时我们的有效负载结构不支持您尝试实现的功能。据我了解,如果用户在该特定日期完成了他们的 'goal',您希望使用有效负载通知您的后端。我建议您在将它传递给我们之前为您那一端的按钮创建有效负载响应,这基本上是您最初的 JSON 想法。 我知道这处理起来有点麻烦,但传回的有效载荷响应独立于信使线程提供的文本。 如果您担心用户之前提供的您会导致您的正则表达式出现问题,我建议您也尝试清理您的字符串。如果对先前的用户数据进行清理以避免 regex/json 解析出现任何问题,您应该能够实现此功能。 由于这是一个实施问题,我将不得不以无效为由关闭此报告。如果您仍在寻找实施此流程的更多见解和具体技巧,请 post 到我们的 stack overflow,我们有 Facebook 工程师和广泛的社区成员,他们也做出了贡献。 http://facebook.whosebug.com/ 保重您的 Messenger 机器人并致以最良好的祝愿。 马克
这句话特别不清楚:
I know this is a bit cumbersome to handle but the payload response passed back is independent of the text that was provided with the messenger thread.
TLDR; 任何人都可以告诉我如何防止按钮记录有效负载字符串,以便我可以使用它将 JSON 传递给我的应用程序而不让用户看到它吗?
据我了解,您是说当您按下按钮时,显示的是 PAYLOAD 而不是按钮的文本。
你是这样定义按钮的吗?
{
type: "postback",
title: "View Details",
payload: "details:12345"
}
我建议删除任何会干扰有效负载解析的特殊字符。只要特殊字符对用户体验不重要,这可能是一个很好的解决方案。
如果这不能解决您的问题:
您能否添加显示您按下的按钮和您正在讨论的日志消息的屏幕截图?据我了解,您是说当您按下按钮时,会显示 PAYLOAD 而不是按钮的文本。对我来说不是这样,当我按下按钮时,我的按钮文本会显示出来。
确保在 receivedPostback()
调用中注释掉 sendTextMessage()
:
function receivedPostback(event){
sendTextMessage(senderID, event.postback.payload);
}