Не могу понять логику работы ботов в ВК. В общей документации по 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' => 'СЕКРЕТ',
)