trak_ivan
@trak_ivan

Как оправлять команды у бота Telegram при выборе в меню?

Есть код, который создает и отправляет текст при нажатии на клавишу.
$keyboard = array(array("test1","test2","test3"));
	$resp = array("keyboard" => $keyboard,"resize_keyboard" => true,"one_time_keyboard" => true);
	$reply = json_encode($resp);
	$url = $GLOBALS[website]."/sendmessage?chat_id=".$chatId."&text=/hi&reply_markup=".$reply;
    file_get_contents($url);


Не пойму, как отлавливать, какую из 3х клавишей нажал? и как сделать так, чтобы в меню был один текст, а при нажатии на нее отправлялась к примеру команда?

Вот пример с яндексом ботом.
Нажимаем Перевод-> Вводим текст-> Отправляем текст->Получаем перевод;
Как на этапе отправки текста, мы знаем, что нам надо перевести текст?
d49whIQCpkc.jpg
  • Вопрос задан
  • 8490 просмотров
Решения вопроса 1
landergate
@landergate
IT-шный jack-of-all-trades
Не пойму, как отлавливать, какую из 3х клавишей нажал?
и как сделать так, чтобы в меню был один текст, а при нажатии на нее отправлялась к примеру команда?

С помощью Inline Keyboards, появившемся в Bot API 2.0.
https://core.telegram.org/bots/2-0-intro#new-inlin...
https://core.telegram.org/bots/api#inlinekeyboardmarkup

> Unlike with custom reply keyboards, pressing buttons on inline keyboards doesn't result in messages sent to the chat. Instead, inline keyboards support buttons that work behind the scenes: callback buttons, URL buttons and switch to inline buttons.

Как на этапе отправки текста, мы знаем, что нам надо перевести текст?

При приёме сообщения от user_id, бот проверяет, на каком шаге в последний раз остановился этот user_id, и обрабатывает сообщение в рамках текущего шага. Если шаг "перевести" - то в ответ на любое сообщение он переведёт строку. На этапе "перевести" бот просто не показывает никакого меню, он просто ждёт строку.

Для этого боту делают хранилище сессий. Это может быть просто БД с колонками `user_id` и `state`, где в стэйте будет указан текущий шаг. При обработке сообщения, бот смотрит шаг и действует в соответствии с тем, чего хотел пользователь на этом шаге.
Если пользователь запросил другую функцию, или сделал /cancel, поменять шаг в таблице.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Apcel
Собственно, как было выяснено [в другом месте], при нажатии пользователя на разные кнопки придёт (в данном случае) "test1", "test2" и "test3" — то есть, текст, заданный ботом для кнопки, на которую нажал пользователь
Соответственно, вторую часть вопроса выполнить можно сравнением принятого текста с текстом кнопок и последующим вызовом нужного обработчика полученной команды.
Ответ написан
@iBkm
тоже интересует этот вопрос. получается, что если кнопка названа по русски "Как у тебя дела?", то нужно проверять строку if($stroka == "Как у тебя дела?") и тогда уже можно вернуть какой-то результат в чат?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы