Всем привет. Делаю чат-бота для телеграм. На данный момент есть многомерное меню, которое работает на callback-ах инлайнкнопок. Все бы было хорошо, но есть проблема: к примеру, человек нажимает "заказать", затем выбирает товар. Затем ему нужно ввести адрес и время доставки, а также телефон. Скажите, пожалуйста, каким образом это можно сделать? Т.е. если человек просто введет адрес доставки, то ему будет выдаваться "не выбран товар" или "ошибка", а если он выберет товар, то он пойдет по этому сценарию. Вопрос прост - как сделать сценарий? ps библиотека telegram-bot-sdk.
<?php
DEFINE('ROOT', 'root const here');
require_once(ROOT.'components/Db.php');
require_once(ROOT.'models/Product.php');
include('vendor/autoload.php'); //include telegram-bot-sdk
use Telegram\Bot\Api;
use Telegram\Bot\Keyboard\Keyboard;
use Telegram\Bot\Actions;
use Telegram\Bot\Commands\Command;
use Telegram\Bot\Objects\CallbackQuery;
$telegram = new Api('api token here'); //Устанавливаем токен, полученный у BotFather
$result = $telegram -> getWebhookUpdates(); //Передаем в переменную $result полную информацию о сообщении пользователя
$keyboard = Keyboard::make()
->inline()
->row(
Keyboard::inlineButton(['text' => 'Показать меню', 'callback_data' => '/show_menu']),
Keyboard::inlineButton(['text' => 'Купить цветы', 'callback_data' => '/buyflowers'])
);
$keyboard_flowers = Keyboard::make()
->inline()
->row(
Keyboard::inlineButton(['text' => 'Розы', 'callback_data' => '/buyflowers_roses'])
)
->row(
Keyboard::inlineButton(['text' => 'Пионы', 'callback_data' => '/buyflowers_piony'])
)
->row(
Keyboard::inlineButton(['text' => 'Шляпные коробки', 'callback_data' => '/buyflowers_hatbox'])
)
->row(
Keyboard::inlineButton(['text' => 'Коробочки со сладостями', 'callback_data' => '/buyflowers_sweetbox'])
)
->row(
Keyboard::inlineButton(['text' => 'Акции и спецпредложения', 'callback_data' => '/buyflowers_sales'])
);
$keyboard_menu = Keyboard::make()
->inline()
->row(
Keyboard::inlineButton(['text' => 'Связаться с нами', 'callback_data' => '/contact_us'])
)
->row(
Keyboard::inlineButton(['text' => 'Купить цветы', 'callback_data' => '/buyflowers'])
)
->row(
Keyboard::inlineButton(['text' => 'Стать партнером', 'callback_data' => '/partner'])
)
->row(
Keyboard::inlineButton(['text' => 'Перейти на сайт', 'url' => 'https://kands.spb.ru/'])
)
->row(
Keyboard::inlineButton(['text' => 'Акции и спецпредложения', 'callback_data' => '/buyflowers_sales'])
);
$contact = $result['message']['contact'];
$text = $result["message"]["text"]; //Текст сообщения
$chat_id = $result["message"]["chat"]["id"];
$name = $result["message"]["from"]["username"]; //Юзернейм пользователя
if ($result->isType('callback_query')) {
$data = $result['callback_query']['data'];
$chat = $result['callback_query']['message']['chat']['id'];
switch ($data) {
case '/buyflowers':
$telegram->sendMessage([
'chat_id' => $chat,
'text' => 'Выберите категорию:',
'reply_markup' => $keyboard_flowers
]);
break;
case '/show_menu':
$telegram->sendMessage([
'chat_id' => $chat,
'text' => 'Меню: ',
'reply_markup' => $keyboard_menu
]);
break;
default:
# code...
break;
}
}
$telegram->sendMessage([
'chat_id' => $chat_id,
'text' => 'Стартовая страница. Выберите дальнейшие действия.',
'reply_markup' => $keyboard
]);
?>
`
Используйте ForseReply при отправке сообщений с запросами адреса и пр., а затем проверяйте входящие сообщения на наличие непустого поля reply_to_message и смотрите в текст этого поля. В зависимости от его содержимого можно будет понять, какой именно шаг сценария выполняется.
Похожий вопрос на en SO
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Вопрос такой: создал табличку в ней поле 'text' в него хочу поместить текст запросов к этой же базе через точку с запятойчто-бы потом можно было...
Есть таблица под названием personal043В этой таблице есть id, card_id, zubno, naimenovanie, date
Что скажете по этому поводу, до этого я не чистил памятьВ офф