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

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

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

Войти через центр авторизации
Похожие вопросы
01 мая 2024, в 02:11
5000 руб./за проект
01 мая 2024, в 00:29
2000 руб./за проект
01 мая 2024, в 00:20
15000 руб./за проект