Как сделать ссылку на Телеграм — Понятная инструкция:
- Сделать активный URL очень просто. Для этого Вам необходимо:
- Скопировать его на соответствующей странице в верхней строке;
- Перейти в Telegram и открыть Ваш канал или группу;
- На мобильном телефоне: нажать пальцем с удержанием в 1-2 секунд на поле ввода сообщения;
- На компьютере: щёлкнуть правой кнопкой мыши по месту введения текста;
- Выбрать пункт «Вставить» и затем отправить сообщение;
- Ссылка будет активной. При нажатии на неё, пользователь попадёт по указанному адресу.
- Как сделать чтобы ссылка была активной
- Как сделать кнопку ссылку в телеграмм
- Как сделать собственную ссылку на Телеграм
- Как сделать автоматическую ссылку
- Какая ссылка называется активной
- Как сделать Закреп с кнопкой
- Как в Телеграме взять ссылку
- Как сделать инлайн кнопки в Телеграм
- Как сделать Кликабельный номер телефона в Телеграм
- Как раскрутить свой канал в Телеграм
- Как сделать свою ссылку
- Как сделать ссылку в виде кнопки
- Как сделать красивую короткую ссылку
- Как сделать активную ссылку на телефоне
- Как сделать текст ссылкой на телефоне
- Как активировать ссылку в тексте
- Как узнать свой адрес телеграмм
- Как создать символьную ссылку
- Как сделать ссылку на источник
- Как сделать подстрочные ссылки
- Что такое Кликабельные ссылки
- Как работает Короткая ссылка
- Как сделать активную ссылку на адрес в инстаграме
- Как сделать ссылку внутри
- Как добавит ссылку
- Что такое автоматические ссылки
- Как в ворде сделать активную ссылку
- Как сделать активную ссылку в HTML
- Как сделать кликабельную ссылку на Инстаграм
- Что делать если не работает ссылка
Как сделать чтобы ссылка была активной
Как сделать кнопку ссылку в телеграмм
Добавление кнопок в Telegram-каналах осуществляется через двух ботов.Как добавлять кнопки в Телеграм-канал через бота:
Как создать яркую URL кнопку в телеграм канале
Как сделать собственную ссылку на Телеграм
Чтобы поделиться вне телеграма, скопировать ссылку https://t.me/ и добавить после слэша без пробелов свое имя пользователя.
Как сделать автоматическую ссылку
На вкладке Вставка выберите команду Перекрестная ссылка. В поле Тип ссылки щелкните раскрывающийся список, чтобы выбрать тип элемента, на который будет указывать ссылка. Список возможных вариантов зависит от типа элемента (заголовок, номер страницы и т. п.), с которым нужно создать связь.
Какая ссылка называется активной
Активная ссылка — стандартная ссылка, при переходе по которой пользователя перебрасывает на целевую страницу. По умолчанию выделяется синим цветом с нижним подчеркиванием, либо фиолетовым — если по ней уже переходили (хотя стили на сайте могут меняться на усмотрение его владельца).
Как сделать Закреп с кнопкой
Как сделать закреп с кнопкой:
- Зайдите в SMMplanner и подключите телеграм-канал к сервису.
- Нажмите «Запланировать пост».
- Создайте пост.
- Выберите пункт «Кнопка».
- Нажмите «Закрепить», чтобы пост с кнопкой сразу оказался в закрепе.
- Поставьте таймер на публикацию.
Как в Телеграме взять ссылку
Найти нужный пост в Телеграм; Справа под постом нажать на стрелочку; Выбрать из контактов, адресата или же нажать «Копировать ссылку».
Как сделать инлайн кнопки в Телеграм
В канале Telegram есть возможность добавить инлайн-кнопки. Такие кнопки будут отображаться не под полем ввода, а над.Для этого:
- нажмите + КНОПКА
- введите название кнопки и нажмите Enter.
- нажмите на значок ссылки
- вставьте URL на нужный ресурс
- нажмите Сохранить
Как сделать Кликабельный номер телефона в Телеграм
Атрибут href=«» указывает адрес ссылки или действие. Для набора номера используется параметр: tel:+7XXXXXXXXXX, где +7XXXXXXXXXX — нужный номер телефона. Теперь при нажатии на номер телефона будет совершаться набор указанного в ссылке номера.
Как раскрутить свой канал в Телеграм
14 способов раскрутки Телеграм-канала с нуля:
- Реклама в других каналах
- Накрутка подписчиков
- Взаимопиар
- Реклама за бартер
- Участие в подборках
- Трафик из соцсетей, с YouTube или сайта
- Статья на чужом сайте
- Размещение в Телеграм каталогах
Как сделать свою ссылку
Простая текстовая ссылка создается в три этапа:
- Сначала пишем слово, на котором будет стоять ссылка, и заключаем его в теги a (открывающий тег) и /a (закрывающий тег),
- В открывающий тег добавляем URL, заключенный в кавычки, с атрибутом href=
- Полученную строку вставляем в HTML-код страницы.
Как сделать ссылку в виде кнопки
Кнопку вкладываем внутрь элемента и для формы указываем атрибут action с адресом веб-страницы (пример 1). Дополнительно можно добавить атрибут target со значением _blank, тогда веб-страница откроется в новой вкладке браузера.
Как сделать красивую короткую ссылку
Чтобы сократить ссылку, нужно:
- Зарегистрироваться.
- Вставить URL на главной и нажать кнопку «Rebrand».
- Выбрать способ сокращения: генерировать самый короткий адрес, SEO-дружественный (учитывающий слова в URL) или, например, абсолютно случайный.
- Указать домен — оставить rebrand.ly или прикрепить собственный.
Как сделать активную ссылку на телефоне
Активная ссылка телефона на сайте
Для того чтобы на сайте номер телефона при нажатии срабатывал как активный вызов, нужно в атрибуте href прописать значение tel. Ну не совсем сразу будет идти вызов, а появится окно с запросом, каким приложением открыть tel.
Как сделать текст ссылкой на телефоне
На планшете или телефоне с Android:
- На планшете с Android откройте вкладку Вставка. На телефоне с Android нажмите значок «Правка» в верхней части экрана, выберите Главная и нажмите Вставка.
- Нажмите Ссылка.
- Введите отображаемый текст и адрес ссылки.
- Выберите Вставка.
Как активировать ссылку в тексте
Ссылка на веб-страницу:
- Поместите курсор в то место документа, где должна находиться ссылка.
- Нажмите CTRL+K, чтобы открыть диалоговое окно Вставка гиперссылки.
- Введите веб-адрес сайта и нажмите клавиши ALT+К, чтобы перейти к полю Текст.
- Введите текст ссылки, который должен отображаться в документе.
- Нажмите клавишу ВВОД.
Как узнать свой адрес телеграмм
Как создать символьную ссылку
По умолчанию команда ln создает жесткие ссылки. Чтобы с ее помощью создать симлинк, команде ln нужно передать параметр -s (или –symbolic).
Как сделать ссылку на источник
Создание списка литературы, цитат и ссылок:
- Поместите курсор в конец текста, который хотите процитировать.
- Перейдите в раздел Ссылки > Стиль и выберите стиль ссылки.
- Нажмите кнопку Вставить ссылку.
- Выберите Добавить новый источник и введите сведения об источнике.
Как сделать подстрочные ссылки
Подстрочные библиографические ссылки оформляют как примечание, вынесенное из текста документа вконец страницы. Их располагают под текстом каждой страницы, отделяя от него пробелом в 1,5 интервала и строкой. Связь подстрочной ссылки с текстом осуществляют с помощью знака сноски, который набирают на верхнюю линию шрифта.
Что такое Кликабельные ссылки
Активная или кликабельная ссылка — это ссылка, при нажатии на которую происходит переход на другую страницу или сайт. Прямая ссылка — это ссылка, при нажатии на которую переход на другую страницу или сайт происходит сразу же, без промежуточных страниц и редиректов.
Как работает Короткая ссылка
Когда пользователь кликает по сокращённой ссылке, запрос отправляется сервису сокращения URL-адресов, а он перенаправит его на необходимый «реальный» адрес:
- Сервис принимает короткий URL в виде GET -запроса.
- Сервис проверяет, имеется ли данный токен в базе данных.
Как сделать активную ссылку на адрес в инстаграме
Чтобы добавить ссылку на другой сайт:
- Нажмите на Ленту Instagram в редакторе.
- Нажмите Настроить.
- Нажмите Ссылки.
- Нажмите Добавить ссылки.
- Выберите нужный пост.
- Нажмите +Добавить ссылку.
- Нажмите Веб-адрес в разделе Ссылка ведет на
- Введите веб-адрес, на который должна вести ссылка, в разделе Какой веб-адрес (URL)?
Как сделать ссылку внутри
Для создания ссылки следует вначале сделать закладку (якорь) в соответствующем месте и дать ей имя при помощи атрибута name тега , как показано в примере 1. Между тегами и отсутствует текст, так как требуется лишь указать местоположение перехода по ссылке, находящейся внизу страницы.
Как добавит ссылку
Как вставить ссылку в тексте страницы или записи:
- На панели инструментов нажимаем кнопку Вставить/изменить ссылку
- В появившемся диалоге в поле URL набираем или вставляем адрес ссылки
- Нажимаем кнопку Добавить ссылку
Что такое автоматические ссылки
Автоматические ссылки — это указатели (числа) в тексте, которые можно легко обновить в случае, если поменялась последовательность источников, на которые ссылаются эти указатели.
Как в ворде сделать активную ссылку
Ссылка на веб-страницу:
- Поместите курсор в то место документа, где должна находиться ссылка.
- Нажмите клавиши CTRL+K, чтобы открыть диалоговое окно Вставка гиперссылки.
- Введите веб-адрес сайта и нажмите клавиши ALT+К, чтобы перейти к полю Текст.
- Введите текст ссылки, который вы хотите отобразить в документе.
Как сделать активную ссылку в HTML
Как сделать кликабельную ссылку на Инстаграм
Нажимаете на значок ссылки наверху Сторис, выбираете «Видео IGTV» и после нужное видео. В полном видео нужно нажать на название наверху и тогда откроется описание. Ссылка в этом описании будет кликабельной.
Что делать если не работает ссылка
Если ссылка не открывается в браузере на компьютере, для начала удали временные файлы и куки (cookies), а затем попробуй снова. Внимание: после удаления файлов куки придется заново входить на сайты с логином и паролем. Если очистка временных файлов не помогла, установи другой браузер.
25.05.2023 Как сделать в Телеграм активную ссылку
Ссылки на Телеграм-каналы также можно создавать с помощью инструкции: скопируйте ссылку на страницу, затем добавьте после слэша без пробелов своё имя пользователя. Для создания автоматической ссылки на страницу нужно выбрать вкладку Вставка и выбрать команду Перекрестная ссылка. Здесь есть возможность выбрать тип элемента, на который будет указывать ссылка.
Активная ссылка — это стандартная ссылка, при переходе по которой пользователя перебрасывает на целевую страницу. При этом, активная ссылка выделяется синим или фиолетовым цветом с нижним подчеркиванием.
Для того, чтобы сделать закреп с кнопкой в Telegram, пользователю необходимо подключить телеграм-канал к сервису SMMplanner, затем создать пост, выбрать пункт «Кнопка», нажать «Закрепить», чтобы пост с кнопкой сразу оказался в закрепе.
Наконец, в Telegram есть возможность добавить инлайн-кнопки. Эти кнопки будут отображаться не под полем ввода, а над ним. Для этого нужно нажать на + КНОПКА, ввести название кнопки и установить URL на нужный ресурс.
Таким образом, в Telegram есть несколько возможностей для создания активных ссылок, добавления кнопок и создания инлайн-кнопок. Они позволяют сделать использование этого мессенджера более удобным и доступным для всех.
Источник: registratury.ru
Как сделать кнопку подписаться в телеграмме
Как сделать Закреп с кнопкой в телеграмме
Как сделать закреп с кнопкой:
- Зайдите в SMMplanner и подключите телеграм-канал к сервису.
- Нажмите «Запланировать пост».
- Создайте пост.
- Выберите пункт «Кнопка».
- Нажмите «Закрепить», чтобы пост с кнопкой сразу оказался в закрепе.
- Поставьте таймер на публикацию.
Как сделать кнопку ссылку в телеграмме
Чтобы сделать публикацию с кнопкой, нужно открыть диалог с созданным ботом-администратором: Для начала отправить «/start». Нажать «Создать пост» и выбрать соответствующий канал. Отправить текст публикации и на следующем шаге выбрать «Добавить URL-кнопки».
Как сделать инлайн кнопки в Телеграм канале
В канале Telegram есть возможность добавить инлайн-кнопки. Такие кнопки будут отображаться не под полем ввода, а над.Для этого:
- нажмите + КНОПКА
- введите название кнопки и нажмите Enter.
- нажмите на значок ссылки
- вставьте URL на нужный ресурс
- нажмите Сохранить
Как поставить значок в Телеграме
Чтобы сделать иконку, откройте нужный чат или канал и нажмите на его заголовок. Далее — три точки справа вверху → «Создать ярлык» → «Добавить на главный экран». Таких ярлыков можно делать сколько угодно. Удаляются они как обычные иконки, не затрагивая самое приложение Telegram.
Как открыть подписчиков в Телеграме
Как посмотреть подписчиков Telegram канала:
- Запустить приложение Telegram на своем устройстве
- В списке каналов, чатов и ботов найти свой канал и перейти на него
- Нажать на фото или название канала
- На странице с информацией о канале нажать «Подписчики»
Как в телеграмме сделать кнопку прокомментировать
Нажать на три вертикальные точки. Выбрать «Управление каналом». Нажать на «Обсуждение — Добавить группу».
Как в телеграмме сделать кнопку обсудить
Как подключить бот
Как делать круг в телеграмме
Как записать видео в кружочке в Telegram
Перейдите в нужный чат и один раз нажмите на значок микрофона. После этого он сменится на изображение камеры. Нажмите на новый значок и удерживайте его для записи видео в кружочке. Если что‑то пошло не так, сделайте свайп влево и удалите сообщение.
Как настроить открытие ссылок в Телеграм
- В верхнем меню выбираем «Три линии»
- Далее «Настройки»
- Далее «Настройки чатов»
- Находим настройку «Встроенный браузер» и выключаем ее!
Как сделать ссылку приглашение в телеграмме
Открыть группу и нажать на ее название в верхней части панели; найти ссылку в блоке «Информация» и удерживать ее несколько секунд, после этого кликнуть на появившуюся кнопку «Копировать»; дальше вы можете отправить ссылку в любой чат или личные сообщения.
Как сделать меню в телеграмм канале
Как создать постоянное меню для Telegram чат-бота:
- Введите название команды.
- Введите описание — то, для чего можно использовать данную команду.
- Выберите цепочку, которая запустится после выбора команды из списка.
- Нажмите «Добавить», чтобы добавить команду в меню.
- Меню с командами готово к работе.
Что такое Инлайн кнопки
Inline-кнопки — это кнопки, которые отображаются прямо в сообщении.
Как сделать кнопки меню в Телеграм боте
Чтобы создать меню бота, на странице чат-бота откройте вкладку «Меню» и нажмите «Добавить элемент»:
- Введите название команды.
- Введите описание — то, для чего можно использовать данную команду.
- Выберите цепочку, которая запустится после выбора команды из списка.
- Нажмите «Добавить», чтобы добавить команду в меню.
Как настроить кнопки в боте Телеграм
Как получить значок в Телеграме
Итак, что нужно сделать для получения галочки в Telegram:
Как добавить возможность комментировать в Телеграм канале
Чтобы включить комментарии на канале, перейдите в настройки, выберите раздел «Обсуждение» и привяжите группу к каналу. Можно привязать уже существующую группу или создать новую. Чат нужно модерировать и чистить от спама. В небольших сообществах это делают вручную, в крупных группах — с помощью ботов-модераторов.
Как сделать ссылку на аккаунт в телеграмме
Чтобы поделиться ссылкой на свой аккаунт в Телеграм, нужно:
- Запустить Телеграм на своем смартфоне
- Открыть вкладку «Настройки»
- Нажать «Изм.» (расположено в правом верхнем углу)
- Нажать «Имя пользователя»
- На открывшейся странице нажать на ссылку вашего канала
- Нажать на значок «Поделиться»
Как сделать слово ссылку с телефона
На планшете или телефоне с Android:
- На планшете с Android откройте вкладку Вставка. На телефоне с Android нажмите значок «Правка» в верхней части экрана, выберите Главная и нажмите Вставка.
- Нажмите Ссылка.
- Введите отображаемый текст и адрес ссылки.
- Выберите Вставка.
Как сделать в Телеграм голосовалку
Как создать опрос:
- Зайдите в группу и нажмите на иконку скрепки в нижнем правом углу рядом с текстовым полем.
- Появятся варианты контента, который можно добавить. Выберите пункт «Опрос».
- Заполните появившиеся поля: впишите вопрос и варианты ответов.
- Кликните на «Создать» в правом верхнем углу экрана.
Как создать канал в телеграмме с комментариями
Комментарии в Телеграме
Откройте настройки канала в Телеграме и найдите раздел «Обсуждения»; Привяжите группу — частную или супергруппу. Готово! Теперь при публикации подписчики смогут оставлять комментарии в Телеграме.
Для чего нужны боты в телеграмме
Чат-бот компании в Telegram — удобный и недорогой способ оставаться с клиентом на связи круглосуточно. В мессенджере с клиентами общаются многие бренды. Для чего нужны чат-боты: Они оперативно решают проблемы клиентов: обрабатывают сообщения покупателей и передают оператору информацию о запросах.
Как сделать ссылку на канал в телеграмме
В общем и целом все просто: заходите на сайт сервиса → вписываете адрес своего канала/профиля/чата → жмете кнопку и получаете рабочий URL. Или же можно сразу приписать адрес к домену сервиса, и новая ссылка на Telegram готова.
Как добавить кнопку комментировать в телеграмме
Открыть диалог с созданным ботом-администратором и отправить «/start». Нажать «Создать пост» и выбрать соответствующий канал. Отправить текст будущей публикации. Нажать на кнопку «Добавить комментарии».
18.04.2023 Как сделать кнопку подписаться в телеграмме
Чтобы сделать кнопку ссылку в телеграмме, нужно открыть диалог с созданным ботом-администратором, отправить «/start», выбрать соответствующий канал, отправить текст публикации и на следующем шаге выбрать «Добавить URL-кнопки».
Также в Telegram-каналах есть возможность добавить инлайн-кнопки, которые будут отображаться над полем ввода. Для этого нужно нажать + КНОПКА, ввести название кнопки, нажать на значок ссылки, вставить URL на нужный ресурс и нажать Сохранить.
Чтобы поставить значок в Телеграме, необходимо открыть нужный чат или канал, нажать на его заголовок, три точки справа вверху, «Создать ярлык» и «Добавить на главный экран».
Для просмотра подписчиков Telegram-канала нужно запустить приложение Telegram на своем устройстве, найти свой канал и перейти на него, нажать на фото или название канала и на странице с информацией о канале нажать «Подписчики».
Таким образом, наличие кнопок в Telegram-каналах может значительно упростить взаимодействие с подписчиками и повысить их удовлетворенность контентом.
Источник: npz-info.ru
Кнопки Aiogram
Этот вид кнопок появился вместе с Bot API в далёком 2015 году и представляет собой не что иное, как шаблоны сообщений (за исключением нескольких особых случаев, но о них позже). Принцип простой: что написано на кнопке, то и будет отправлено в текущий чат. Соответственно, чтобы обработать нажатие такой кнопки, бот должен распознавать входящие текстовые сообщения.
Напишем хэндлер, который будет при нажатии на команду /start отправлять сообщение с двумя кнопками:
Несмотря на то, что Telegram Bot API допускает указывать просто строки вместо объектов KeyboardButton , при попытке использовать строку aiogram 3.x выкинет ошибку валидации и это не баг, а фича.
Живите теперь с этим
Что ж, запустим бота и обалдеем от громадных кнопок:
Как-то некрасиво. Во-первых, хочется сделать кнопки поменьше, а во-вторых, расположить их горизонтально.
Почему вообще они такие большие? Дело в том, что по умолчанию «кнопочная» клавиатура должна занимать на смартфонах столько же места, сколько и обычная буквенная. Для уменьшения кнопок к объекту клавиатуры надо указать дополнительный параметр resize_keyboard=True .
Но как заменить вертикальные кнопки на горизонтальные? С точки зрения Bot API, клавиатура — это массив массивов кнопок, а если говорить проще, массив рядов. Перепишем наш код, чтобы было красиво, а для пущей важности добавим параметр input_field_placeholder , который заменит текст в пустой строке ввода, когда активна обычная клавиатура:
Смотрим — действительно красиво:
Осталось научить бота реагировать на нажатие таких кнопок. Как уже было сказано выше, необходимо делать проверку на полное совпадение текста. Сделаем это двумя способами: через специальный фильтр Text и обычной лямбдой (лямбду постараемся далее не использовать, в последующих главах её можно будет заменить на немного магии):
Чтобы удалить кнопки, необходимо отправить новое сообщение со специальной «удаляющей» клавиатурой типа ReplyKeyboardRemove . Например: await message.reply(«Отличный выбор!», reply_markup=types.ReplyKeyboardRemove())
Keyboard Builder
Для более динамической генерации кнопок можно воспользоваться сборщиком клавиатур. Нам пригодятся следующие методы:
- add() — добавляет кнопку в память сборщика;
- adjust(int1, int2, int3. ) — делает строки по int1, int2, int3. кнопок;
- as_markup() — возвращает готовый объект клавиатуры;
- button() — добавляет кнопку с заданными параметрами, тип кнопки (Reply или Inline) определяется автоматически.
Создадим пронумерованную клавиатуру размером 4×4:
У объекта обычной клавиатуры есть ещё две полезных опции: one_time_keyboard для автоматического скрытия кнопок после нажатия и selective для показа клавиатуры лишь некоторым участникам группы. Их использование остаётся для самостоятельного изучения.
Специальные обычные кнопки
На момент написания этой главы в Telegram существует три специальных вида обычных кнопок, не являющихся обычными шаблонами сообщений. Это кнопки для:
- отправки текущей геолокации (флаг request_location );
- отправки своего контакта с номером телефона (флаг request_contact );
- создания опроса/викторины (объект KeyboardButtonPollType).
Для первых двух типов достаточно установить булевый флаг, а для опросов и викторин нужно передать специальный тип KeyboardButtonPollType и, по желанию, указать тип создаваемого объекта.
Впрочем, проще один раз увидеть код:
Инлайн-кнопки
URL-кнопки¶
В отличие от обычных кнопок, инлайновые цепляются не к низу экрана, а к сообщению, с которым были отправлены. В этой главе мы рассмотрим два типа таких кнопок: URL и Callback. Ещё один — Switch — будет рассмотрен в главе про инлайн-режим.
Login- и Pay-кнопки в книге рассматриваться не будут вообще. Если у кого-то есть желание помочь хотя бы с рабочим кодом для авторизации или оплаты, пожалуйста, создайте Pull Request на GitHub. Спасибо!
Самые простые инлайн-кнопки относятся к типу URL, т.е. «ссылка». Поддерживаются только протоколы HTTP(S) и tg://
Отдельно остановимся на среднем блоке кода. Дело в том, что в марте 2019 года разработчики Telegram добавили возможность отключать переход к профилю пользователя у пересланного сообщения. При попытке создать URL-кнопку с ID юзера, у которого отключен переход по форварду, бот получит ошибку Bad Request: BUTTON_USER_PRIVACY_RESTRICTED . Соответственно, прежде чем показывать такую кнопку, необходимо выяснить состояние упомянутой настройки. Для этого можно вызвать метод getChat и в ответе проверить состояние поля has_private_forwards . Если оно равно True , значит, попытка добавить URL-ID кнопку приведёт к ошибке.
Колбэки
Напишем хэндлер, который по команде /random будет отправлять сообщение с колбэк-кнопкой:
Но как же обработать нажатие? Если раньше мы использовали хэндлер на message для обработки входящих сообщений, то теперь будем использовать хэндлер на callback_query для обработки колбэков. Ориентироваться будем на «значение» кнопки, т.е. на её data:
Несмотря на то, что параметр кнопки callback_data , а значение data лежит в одноимённом поле data объекта CallbackQuery, собственный фильтр aiogram называется text .
Ой, а что это за часики? Оказывается, сервер Telegram ждёт от нас подтверждения о доставке колбэка, иначе в течение 30 секунд будет показывать специальную иконку. Чтобы скрыть часики, нужно вызвать метод answer() у колбэка (или использовать метод API answer_callback_query() ). В общем случае, в метод answer() можно ничего не передавать, но можно вызвать специальное окошко (всплывающее сверху или поверх экрана):
В функции send_random_value мы вызывали метод answer() не у message , а у callback.message . Это связано с тем, что колбэк-хэндлеры работают не с сообщениями (тип Message), а с колбэками (тип CallbackQuery), у которого другие поля, и само сообщение — всего лишь его часть. Учтите также, что message — это сообщение, к которому была прицеплена кнопка (т.е. отправитель такого сообщения — сам бот). Если хотите узнать, кто нажал на кнопку, смотрите поле from (в вашем коде это будет callback.from_user , т.к. слово from зарезервировано в Python)
Когда вызывать answer() ?
В общем случае, главное — просто не забыть сообщить Telegram о получении колбэк-запроса, но я рекомендую ставить вызов answer() в самом конце, и вот почему: если вдруг в процессе обработки колбэка случится какая-то ошибка и бот нарвётся на необработанное исключение, пользователь увидит неубирающиеся полминуты часики и поймёт, что что-то не так. В противном случае, часики исчезнут, а пользователь останется в неведении, выполнился его запрос успешно или нет.
Перейдём к примеру посложнее. Пусть пользователю предлагается сообщение с числом 0, а внизу три кнопки: +1, -1 и Подтвердить. Первыми двумя он может редактировать число, а последняя удаляет всю клавиатуру, фиксируя изменения. Хранить значения будем в памяти в словаре (про конечные автоматы поговорим как-нибудь в другой раз).
И, казалось бы, всё работает:
Но теперь представим, что ушлый пользователь сделал следующее: вызвал команду /numbers (значение 0), увеличил значение до 1, снова вызвал /numbers (значение сбросилось до 0) и отредактировал и нажал кнопку “+1” на первом сообщении. Что произойдёт? Бот по-честному отправит запрос на редактирование текста со значением 1, но т.к. на том сообщении уже стоит цифра 1, то Bot API вернёт ошибку, что старый и новый тексты совпадают, а бот словит исключение: Bad Request: message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message
С этой ошибкой вы, скорее всего, будете поначалу часто сталкиваться, пытаясь редактировать сообщения. Вообще говоря, подобная ошибка часто говорит о проблемах с логикой генерации/обновления данных в сообщении, но иногда, как в примере выше, может быть ожидаемым поведением.
В данном случае проигнорируем ошибку целиком, т.к. нам важен лишь итоговый результат, который точно будет правильным. Ошибка MessageNotModified относится к категории Bad Request, поэтому у нас есть выбор: проигнорировать весь подобный класс ошибок, либо отловить весь класс BadRequest и попытаться по тексту ошибки опознать конкретную причину. Чтобы не слишком усложнять пример, обойдёмся первым способом и немного обновим функцию update_num_text() :
# Новые импорты! from contextlib import suppress from aiogram.exceptions import TelegramBadRequest async def update_num_text(message: types.Message, new_value: int): with suppress(TelegramBadRequest): await message.edit_text( f»Укажите число: «, reply_markup=get_keyboard() )
Если теперь вы попробуете повторить пример выше, то указанное исключение в этом блоке кода бот просто-напросто проигнорирует.
Фабрика колбэков
Когда вы оперируете какими-то простыми колбэками с общим префиксом, типа order_1 , order_2 … вам может показаться, что довольно легко вызывать split() и делить строку по какому-то разделителю. А теперь представьте, что вам нужно хранить не одно значение, а три: order_1_1994_2731519 . Что здесь артикул, цена, количество? А может быть, тут вообще год выпуска? Да и разбиение строки начинает выглядеть страшно: .split(«_»)[2] . А почему не 1 или 3?
В какой-то момент возникает необходимость структурировать содержимое таких callback data, и в aiogram есть решение! Вы создаёте объекты типа CallbackData , указываете префикс, описываете структуру, а дальше фреймворк самостоятельно собирает строку с данными колбэка и, что важнее, корректно разбирает входящее значение. Снова разберёмся на конкретном примере; создадим класс NumbersCallbackFactory с префиксом fabnum и двумя полями action и value . Поле action определяет, что делать, менять значение (change) или зафиксировать (finish), а поле value показывает, на сколько изменять значение. Оно помечено как Optional[int] , т.к. если action равен “finish”, то значение указывать бессмысленно. Код:
# новые импорты! from typing import Optional from aiogram.dispatcher.filters.callback_data import CallbackData class NumbersCallbackFactory(CallbackData, prefix=»fabnum»): action: str value: Optional[int]
Наш класс обязательно должен наследоваться от CallbackData и принимать значение префикса. Префикс — это общая подстрока в начале, по которой фреймворк будет определять, какая структура лежит в колбэке.
Теперь напишем функцию генерации клавиатуры. Здесь нам пригодится метод button() , который автоматически будет создавать кнопку с нужным типом, а от нас требуется только передать аргументы. В качестве аргумента callback_data вместо строки будем указывать экземпляр нашего класса NumbersCallbackFactory :
def get_keyboard_fab(): builder = InlineKeyboardBuilder() builder.button( text=»-2″, callback_data=NumbersCallbackFactory(action=»change», value=-2) ) builder.button( text=»-1″, callback_data=NumbersCallbackFactory(action=»change», value=-1) ) builder.button( text=»+1″, callback_data=NumbersCallbackFactory(action=»change», value=1) ) builder.button( text=»+2″, callback_data=NumbersCallbackFactory(action=»change», value=2) ) builder.button( text=»Подтвердить», callback_data=NumbersCallbackFactory(action=»finish») ) # Выравниваем кнопки по 4 в ряд, чтобы получилось 4 + 1 builder.adjust(4) return builder.as_markup()
Методы отправки сообщения и его редактирования оставляем теми же (в названиях и командах добавим суффикс _fab ):
Наконец, переходим к главному — обработке колбэков. Для этого в декоратор надо передать класс, колбэки с которым мы ловим, с вызванным методом filter() . Также появляется дополнительный аргумент с названием callback_data (имя должно быть именно таким!), и имеющим тот же тип, что и фильтруемый класс:
Ещё немного конкретизируем наши хэндлеры и сделаем отдельный обработчик для числовых кнопок и для кнопки «Подтвердить». Фильтровать будем по значению action и в этом нам помогут «магические фильтры» aiogram 3.x. Серьёзно, они так и называются: Magic Filter. Подробнее сие чародейство рассмотрим в другой главе, а сейчас просто воспользуемся «магией» и примем это на веру:
На первый взгляд то, что мы сделали, может показаться сложным, но в действительности фабрика колбэков позволяет создавать продвинутые колбэк-кнопки и удобно дробить код на логические сущности.
Источник: aiogram.ru