Задать вопрос
mrKorg
@mrKorg
web developer

Как изменить сообщение в Telegram боте?

При создании бота на Laravel и Telegram Bot API - PHP SDK столкнулся с некоторыми вопросами, на которые ищу ответ, а именно:
Как в callback кнопки можно указать id сообщения, для последующего его оформления, если inline кнопка отправляется вместе с сообщением, т.е. его id ещё не существует?
Пример моей простой команды:
<?php

namespace App\Telegram\Commands;

use Telegram\Bot\Actions;
use Telegram\Bot\Commands\Command;
use Log;
use App;

class LanguageCommand extends Command
{
    /**
     * @var string Command Name
     */
    protected $name = "language";

    /**
     * @var string Command Description
     */
    protected $description = "Show menu language selection";

    /**
     * @inheritdoc
     */
    public function handle($arguments)
    {
        Log::info('language command');
        $this->replyWithChatAction(['action' => Actions::TYPING]);

        $languages = config('app.locales_assoc');

        $keyboard = [];
        $keyboardArray = [];
        foreach ($languages as $code => $language) {
            array_push($keyboardArray, ['text' => $language, 'callback_data' => '/setLanguage_' . $code]);
        }
        $keyboard['inline_keyboard'] = [$keyboardArray];

        $reply_markup = json_encode($keyboard, TRUE);

        $this->replyWithMessage(
          [
            'telegram_chat_id' => $this->update->getMessage()->getChat()->getId(),
            'text' => trans('bot.greeting_lang'),
            'reply_markup' => $reply_markup
          ]
        );

    }
}


И сопутствующий вопрос заключается в том, каким методом можно обновить сообщение?
Почему-то SDK не содержит такого метода, как editMessageText.
  • Вопрос задан
  • 6714 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
glebovgin
@glebovgin
Full Stack Web Developer
1. Да и пёс с ним, с SDK. В доке есть editMessageText, сделайте свою обертку и работайте на здоровье.
2. Касаемо первого вопроса: а что именно вы хотите сделать-то?
В любом случае - для каждого sendMessage возвращается объект Message, в котором содержится и message_id и данные по Chat.
Поэтому, например, если вам очень хочется к кнопкам добавить message_id, то вы отправляете сообщение, получаете Message в ответ и через editMessageText обновляете изначальное сообщение, добавляя к нему inline клавиатуру с нужными данными. Но, скажу честно, выглядит как извращение.

Второй вариант: при нажатии на inline кнопку выполняется CallbackQuery, который содержит в себе и inline_message_id и сам объект Message.

Дальше выбирайте уже сами, что вам ближе.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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