Задать вопрос
@fakin_kiska
Telegram Bots and iOS

Как вывести сообщения после нажатия на кнопку, callback_data?

Написал небольшого бота, который присылает сообщение с кнопками, при нажатии на кнопку должно выводиться другое сообщение

<?php

include 'config.php'; // Токен бота
include 'functions.php'; // Основные функции

$update = json_decode(file_get_contents('php://input'), JSON_OBJECT_AS_ARRAY);

$chat_id = $update['message']['chat']['id']; // Определяет ID чата
$message = $update['message']['text']; // Определяет текст сообщения
$message_id = ['callback_query']['message']['message_id']; // Определяет ID сообщения

$callback_query = $update['callback_query'];
$data = $callback_query['data'];

// Делается запрос
$method = 'setWebhook';
$url = 'https://api.telegram.org/bot' . BOT_TOKEN . '/' . $method;
$options = [
    'url' => 'https://bot12345.ru/bot.php'
];

// То, что возвращается из запроса
$response = file_get_contents($url . '?' . http_build_query($options));
var_dump($response);

// Команда /start
if (strpos($message, "/start") === 0) {
    $post = [
        'chat_id' => $chat_id,
        'text' => 'Привет! Я еще нахожусь на этапе разработки!'
    ];
    sendRequest('sendMessage', $post);
} else {
// Начальное сообщение
    $post = [
        'chat_id' => $chat_id,
        'text' => 'Давай определимся с категорией:',
        $main_menu = [
            [['text' => 'Тема 1', 'callback_data' => 'theme_1']],
            [['text' => 'Тема 2', 'callback_data' => 'theme_2']],
            [['text' => 'Тема 3', 'callback_data' => 'theme_3']]
        ],
        'reply_markup' => inline_keyboard($main_menu)
    ];
    sendRequest('sendMessage', $post);
}

switch ($data) {
    case 'theme_1':
        $post = [
            'chat_id' => $chat_id,
            'text' => 'aaa',
            $Inline = [
                [['text' => 'вопрос 1', 'callback_data' => 'question_1']],
                [['text' => 'вопрос 2', 'callback_data' => 'question_2']]
            ],
            'reply_markup' => inline_keyboard($Inline),
            sendRequest('sendMessage', $post)
        ];
        break;
}


При нажатии на первую кнопку, к которой привязан ответ, ничего не происходит. Я понимаю, что мне нужно как-то получить callback_data и отправить новое сообщение
  • Вопрос задан
  • 689 просмотров
Подписаться 1 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
@Aruy137
Чтобы обработать нажатие необходимо использовать:
mesg = bot.send_message("ID", "TEXT", reply_markup=keyboard)) - само сообщение с кнопками необходимо внести в переменную
msg = bot.register_next_step_handler(mesg, "FUNC") - затем после сообщения необходимо использовать mesq в новом сообщении bot.register_next_step_handler ( оно запускает новую функцию)

@bot.callback_query_handler(func=lambda message: True) - она читает нажатия на кнопку
def choice_for_four(message):
message.data - текст нажатия содержится в новой переменной, и чтобы получить доступ к callback_data используйте data

Программируя на пайтон, потому старался описать всё словами
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽