@edlirius
Инженер телекоммуникационной компании

Как в Telegram Bot правильно сделать editMessageText?

Здравствуйте уважаемые знатоки.
Имеется телеграм бот в котором реализована InlineKeyboard:
$message_id = $data['message']['message_id']; // ID сообщения
$bot_message_id = (int)$message_id+1;     

$main_keyboard = json_encode([
            "inline_keyboard" => [
                [
                    [
                        "text" => "Button 1",
                        "callback_data" => "btn1"
                    ],
                    [
                        "text" => "Button 2",
                        "callback_data" => "btn2"
                    ],
                    [
                        "text" => "Button 3",
                        "callback_data" => "btn3"
                    ]
                ]
            ]
        ]);

        if ($message_in == "test") {
                $message_out = "Test InlineKeyboard";
                $params = ['chat_id' => $chat_id, 'text' => $message_out, 'reply_markup' => $main_keyboard];
                file_get_contents($SOURCE_URL.$TOKEN_BOT.$METHOD_SENDMESSAGE.http_build_query($params)); 
            }

        if ($callback_data == "btn1") {
                $edit_message_out = 'Edited message!';
                $params = ['chat_id' => $callback_id, 'message_id' => $bot_message_id, 'text' => $edit_message_out, 'reply_markup' => $main_keyboard];
                file_get_contents($SOURCE_URL.$TOKEN_BOT.$METHOD_EDITMESSAGE.http_build_query($params));
            }


Вопрос в следующем - при нажатии на кнопку сообщение не изменяется совсем, но если 'message_id' выставить вручную то сообщение изменяется. Подскажите куда копать?
(int) убирать пробовал, добавил для теста. Если задать просто /sendMessage и отправить ему переменную $bot_message_id то он нормально её переваривает и выводит. Но при составлении параметра массива для отправки /editMessageText не хочет вообще ничего делать.
  • Вопрос задан
  • 548 просмотров
Решения вопроса 1
@alekssamos
Программист любитель
$message_id = $data['query']['message']['message_id']; // ID сообщения
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@lofchi
if ($callback_query){
// Извлекаем данные о нажатой кнопке
$callback_data = $callback_query['data'];
$callback_chat_id = $callback_query['message']['chat']['id'];

// Отправить запрос на изменение состояния кнопки (отключить анимацию)
$response = file_get_contents("https://api.telegram.org/bot$botToken/answerCallbackQuery?callback_query_id={$callback_query['id']}");
// Логика обработки
      switch ($callback_data){
      case 'button1':
      $response = ' Вы нажали на кнопку 1!';
       break;
       case 'button2':
       $response = ' Вы нажали на кнопку 2!';
       break;
// Отправляем ответное сообщение с результатом нажатия кнопки
$url="https://api.telegram.org/bot$botToken/sendMessage";
$data = http_build_query([
'chat_id' => $callback_chat_id,
'text' => $response,
'reply_markup' => $response_markup // Добавляем маркап для кнопок
]);
$options = [
'http' =>   [
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $data
]
];
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === false) {
echo "Ошибка отправки сообщения";
}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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