В API мессенджера Facebook, как запретить запись текста обратной передачи кнопки в окно чата при нажатии?
TLDR; @ низ
Я задал следующий вопрос в разделе ошибок Facebook
ПРИМЕЧАНИЕ. Это скорее предложение по дизайну платформы, чем ошибка, так как мне не удалось найти портал отзывов API чата. В настоящее время я создаю бота чата, который позволяет пользователю отслеживать цель. Там будет что-то вроде "Вы пошли гулять 12 июля 2016 года?" и иметь кнопки Да / Нет ниже.
В настоящее время для того, чтобы передать логическое намерение, день и достижение, мне нужно создать такую строку: "==GOAL== достигнут? <<< {goal_achtained} >>>, дата отслежена [[[{date_tracked}]]]"и использовать регулярные выражения для захвата переменных с разделителями. Это может привести к ошибке синтаксического анализа в других случаях, когда шаблонные строки в полезной нагрузке являются переменными пользовательского ввода, т. Е. Если '{goal_achtained}' были заменены на переменную цели '>>meditated', тогда регулярное выражение, которое захватывает шаблонную переменную, может завершиться ошибкой,
Можно использовать полезную нагрузку обратной передачи для хранения строки в кодировке JSON, но проблема в том, что строка полезной нагрузки регистрируется в выходных данных пользователя, а строки JSON немного уродливы и сбивают с толку. Проблемы, с которыми я сталкиваюсь, могут быть легко устранены, если пользователь не зарегистрировал полезную нагрузку. Вместо этого зарегистрируйте текст кнопки, чтобы помочь пользователю подтвердить, что кнопка была нажата.
Если это невозможно, есть ли другой совет для кодирования данных в полезную нагрузку кнопки?
Был предложен следующий ответ (Марк Уилтсе)
Привет, Джастин, К сожалению, в настоящее время наша структура полезной нагрузки не поддерживает функциональность, которую вы пытаетесь реализовать. Насколько я понимаю, вы хотите использовать полезную нагрузку, чтобы сообщить бэкэнду, выполнил ли пользователь свою "цель" в эту конкретную дату. Я бы посоветовал вам создать свой ответ полезной нагрузки для кнопки на своем конце, прежде чем передавать его нам, что в принципе и было идеей JSON, которая у вас была изначально. Я знаю, что это немного громоздко для обработки, но ответ полезной нагрузки, передаваемый обратно, не зависит от текста, который был предоставлен потоком сообщений. Я бы посоветовал вам также попытаться санировать свои строки, если вы беспокоитесь о том, что пользователь ранее предоставил, что это вызовет проблему с вашим регулярным выражением. Вы должны иметь возможность реализовать эту функцию, если предыдущие пользовательские данные очищены, чтобы избежать каких-либо проблем с синтаксическим анализом regex/json. Поскольку это вопрос реализации, мне придется закрыть этот отчет как недействительный. Если вы все еще ищете дополнительные идеи и конкретные советы для реализации этого потока, пожалуйста, напишите в наш переполнение стека, где у нас есть инженеры Facebook и широкий круг членов сообщества, которые также вносят свой вклад. http://facebook.stackru.com/ Берегите себя и наилучшие пожелания с вашим ботом Messenger. отметка
Это предложение было особенно неясным:
Я знаю, что это немного громоздко для обработки, но ответ полезной нагрузки, передаваемый обратно, не зависит от текста, который был предоставлен потоком сообщений.
TLDR; Может кто-нибудь сообщить мне о том, как запретить кнопке регистрировать строку полезной нагрузки, чтобы я мог использовать ее для передачи JSON в мое приложение, пока пользователь не увидит ее?
2 ответа
Насколько я понимаю, вы говорите, что когда вы нажимаете кнопку, появляется надпись PAYLOAD вместо текста кнопки.
Вы определяете свои кнопки, как это?
{
type: "postback",
title: "View Details",
payload: "details:12345"
}
Я бы порекомендовал удалить любые специальные символы, которые мешали бы анализу вашей полезной нагрузки. Пока специальные символы не имеют решающего значения для взаимодействия с пользователем, это, вероятно, прекрасное решение.
Если это не решит вашу проблему:
Можете ли вы добавить скриншот, показывающий кнопку, которую вы нажимаете, и сообщение журнала, о котором вы говорите? Насколько я понимаю, вы говорите, что когда вы нажимаете кнопку, появляется надпись PAYLOAD вместо текста кнопки. Это не так для меня, текст моих кнопок появляется, когда я нажимаю кнопку.
Обязательно закомментируйте sendTextMessage()
в вашем receivedPostback()
вызов:
function receivedPostback(event){
sendTextMessage(senderID, event.postback.payload);
}