Задать вопрос
@TopClans

Почему VK не показывает payload без клавиатуры?

Не могу понять логику работы ботов в ВК. В общей документации по API сказано, что к любому сообщению можно добавить payload - просто полезная нагрузка, просто строка. При этом в документации о кнопках для бота сказано, что payload для клавиатуры - это обязательно json.
Я наметил такой механизм работы: пользователь в первый раз пишет боту - бот видит, что у сообщения нет никакого payload, а значит нужно выдать стандартное сообщение и приложить клавиатуру для взаимодействия. Далее бот будет смотреть на payload и реагировать по-разному.

Но есть проблема: иногда бот в рамках какого-то сценария вынужден запрашивать у пользователя дополнительную информацию (нажав кнопку) - например, пользователь хочет узнать состояние заказа, тогда бот, увидев payload кнопки и определив что пользователю нужно, запрашивает у него номер заказа. Само собой, клавиатура тут не поможет, юзер должен просто отправить сообщение.
Проблема в том, что такое сообщение с номером заказа по какой-то причине не имеет никакого payload. Я пробовал передавать этот payload к сообщению без клавиатуры по-разному: и просто текст, и json-строка, и прочее и прочее. ВК принимает почти все значения этого параметра, и без проблем отправляет сообщение пользователю, не выдавая никаких ошибок. Но последующее сообщение от пользователя приходит на мой сервер без параметра payload.

Я не могу понять, проблема в том что payload всё-таки должен использоваться только с клавиатурой, или я как-то неправильно передаю запрос на отправку сообщения с payload?
И если этот параметр payload нельзя использовать для того чтобы понять что хочет пользователь, то получается что мне придётся где-то самому вести историю обращений к боту чтобы понять, что хочет пользователь?
Если же всё-таки можно прикреплять payload к обычному сообщению без клавиатуры, то ниже - код запроса к ВК на отправку сообщения, и то, что приходит через Callback API от пользователя в ответ на такое сообщение с payload, может быть что-то не так в запросе или нужно где-то отдельно включать передачу payload?
Запрос на отправку сообщения с payload без клавиатуры:
https://api.vk.com/method/messages.send?peer_id=АЙДИ&message=ТЕКСТ СООБЩЕНИЯ&random_id=26650232&payload=%7B%22command%22%3A%22waiting_order_id%22%7D&access_token=ТОКЕН&v=5.92


Ответное сообщение от пользователя (к которому почему-то не прикрепляется payload):
array (
  'type' => 'message_new',
  'object' => 
  array (
    'date' => 1548940652,
    'from_id' => АЙДИ,
    'id' => 1236,
    'out' => 0,
    'peer_id' => ПИР_АЙДИ,
    'text' => '150',
    'conversation_message_id' => 301,
    'fwd_messages' => 
    array (
    ),
    'important' => false,
    'random_id' => 0,
    'attachments' => 
    array (
    ),
    'is_hidden' => false,
  ),
  'group_id' => ГРУП_АЙДИ,
  'secret' => 'СЕКРЕТ',
)
  • Вопрос задан
  • 859 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
grinko03
@grinko03
Backend - developer ::> PHP
только внутри клавиатуры
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы