Задать вопрос
@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 и отправить новое сообщение
  • Вопрос задан
  • 604 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 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

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

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

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект