В case задаю вопрос, как остановить код и ждать пока пользователь что то напишет.
Пробовал таким образом, но ничего не вышло.
switch ($command) {
case '/category':
$force_reply = ['force_reply' => true];
$replyMarkup = json_encode($force_reply);
sendMessage($callback_chat_id, "Введите название", $replyMarkup);
$message = null;
// то ничего не делаем
if ($message == null) {
} // в противном случае выполняем этот код
else {
sendMessage($callback_chat_id, "Получилось", $replyMarkup);
}
break;
}
Откройте по ссылке или QR бот @iMakeBot, нажмите кнопку Старт/Start.
Следуйте инструкциям бота.
с PHP это не прокатит, он не может зависать в ожидании продолжения кроме, как спать - sleep(), но после этого он просто пойдет дальше по коду - без новых данных извне.
PHP выполняется в одном потоке, что означает, что в любой момент времени может выполняться только один фрагмент PHP-кода.
На сколько я понял вы имеете в виду промисы, их по умолчанию в PHP нет (библиотека ReactPHP). И если честно для таких задач как ваша они и не нужны. В своей практике не разу не требовалось их наличие в PHP.
Ваша задача состоит в том, чтобы на тот момент когда вы задаете пользователю задачу: "Укажите название категории:". Нужно поставить ему метку, что следующее сообщение от пользователя это будет "название категории".
У вас этой меткой служит ответ на сообщение (reply_to_message). Поэтому вам надо отловить тот момент, что это ответ на сообщение и отработать, спарсив текстовое значение этого ответ-сообщения.
В данном случае вам надо найти в тексте значение "Введите название" и направить на нужный вам фрагмент кода, который обработает сообщение от пользователя.
Алгоритм будет такой:
1. вы понимаете, что это ответ на какое-то сообщение: reply_to_message
2. вы понимаете, что сообщение на которое идет ответ это сообщение вашего бота: reply_to_message - from - is_bot
3. Вы парсите текст из сообщения на предмет поиска в нем нужного значение: reply_to_message - message - text
4. вы определяете, что это нужный вам тип сообщения (text, photo, document ...)
5. вы направляете данные в точку обработки
Решил вопрос таким образом ! Подсмотрел здесь https://www.novelsite.ru/dobavlyaem-punkty-menyu-telegram-bota-na-php.html
Да, можно и так.
Но можно и не захламлять ненужными файлами свой проект, а использовать force_reply, пример есть в статье