Как сделать клавиатуру в телеграмм-боте

Обновлено: 20.11.2024

1. Что я могу делать с ботами?

Чтобы назвать несколько вещей, вы можете использовать ботов для:

Получайте настраиваемые уведомления и новости. Бот может действовать как умная газета, отправляя вам актуальный контент, как только он будет опубликован.

Создавайте собственные инструменты. Бот может предоставлять вам оповещения, прогнозы погоды, переводы, форматирование или другие услуги. Бот уценки, бот-стикер, бот-голос, бот-лайк

Создавайте однопользовательские и многопользовательские игры. Бот может предложить богатый опыт HTML5, от простых аркад и головоломок до 3D-шутеров и стратегических игр в реальном времени. GameBot, Gamee

Создавайте социальные службы. Бот может связывать людей, которые ищут собеседников на основе общих интересов или близости.

Делайте практически все остальное. За исключением посуды — боты ужасно моют посуду.

2. Как работают боты?

По сути, боты Telegram — это специальные учетные записи, для настройки которых не требуется дополнительный номер телефона. Пользователи могут взаимодействовать с ботами двумя способами:

  • Отправлять сообщения и команды ботам, открывая с ними чат или добавляя их в группы.
  • Отправляйте запросы прямо из поля ввода, введя @username бота и запрос. Это позволяет отправлять контент из встроенных ботов напрямую в любой чат, группу или канал.

3. Как создать бота?

Есть. бот для этого. Просто поговорите с BotFather (описано ниже) и выполните несколько простых шагов. Создав бота и получив токен аутентификации, перейдите к руководству Bot API, чтобы узнать, чему вы можете научить своего бота.

4. Чем боты отличаются от людей?

  • Боты не имеют онлайн-статуса и меток времени последнего посещения, вместо этого в интерфейсе отображается ярлык "бот".
  • Облачное хранилище ботов ограничено — старые сообщения могут быть удалены сервером вскоре после их обработки.
  • Боты не могут инициировать общение с пользователями. Пользователь должен либо добавить их в группу, либо сначала отправить им сообщение. Люди могут использовать ссылки t.me/ или поиск по имени пользователя, чтобы найти вашего бота.
  • Имена пользователей ботов всегда заканчиваются на "бот" (например, @TriviaBot, @GitHub_bot).
  • При добавлении в группу боты по умолчанию не получают все сообщения (см. Режим конфиденциальности).
  • Боты никогда не едят, не спят и не жалуются (если только специально не запрограммировано иное).

5. Бонусы для ботов

Боты Telegram уникальны во многих отношениях — мы предлагаем два вида клавиатур, дополнительные интерфейсы для команд по умолчанию и прямые ссылки, а также форматирование текста, встроенные платежи и многое другое.

Встроенный режим

Пользователи могут взаимодействовать с вашим ботом с помощью встроенных запросов прямо из поля ввода текста в любом чате. Все, что им нужно сделать, это отправить сообщение с именем пользователя вашего бота, а затем ввести запрос.

Получив запрос, ваш бот может вернуть некоторые результаты. Как только пользователь коснется одного из них, он будет отправлен в текущий открытый чат пользователя. Таким образом, люди смогут запрашивать контент у вашего бота в любом из своих чатов, групп или каналов.

Посетите этот блог, чтобы увидеть пример встроенного бота в действии. Вы также можете попробовать ботов @sticker и @music, чтобы убедиться в этом самостоятельно.

Мы также реализовали для вашего бота простой способ переключения между встроенным режимом и режимом PM.

Платежная платформа

Вы можете использовать ботов для приема платежей от пользователей Telegram по всему миру.

  • Отправлять счета в любой чат, в том числе в группы и каналы.
  • Создавайте счета, которые могут быть отправлены и использованы несколькими покупателями для заказа вещей.
  • Используйте встроенный режим, чтобы помочь пользователям показывать ваши товары и услуги своим друзьям и сообществам.
  • Разрешить чаевые от пользователей с предустановленными и пользовательскими суммами.
  • Принимать платежи от пользователей в мобильных и настольных приложениях.
  • Попробуйте @ShopBot создать тестовый счет или начните сообщение с помощью @ShopBot . в любом чате для встроенного счета.
  • В демонстрационном магазине вы найдете пример канала Telegram, используемого в качестве виртуальной витрины.

Игровая платформа

Боты могут предлагать своим пользователям игры HTML5 для игры в одиночку или соревноваться друг с другом в группах и чатах один на один. Платформа позволяет вашему боту отслеживать высокие баллы для каждой игры, сыгранной в каждом чате. Всякий раз, когда в игре появляется новый лидер, другие игроки в чате уведомляются о том, что им нужно усилить его.

Поскольку в основе лежит технология HTML5, игры могут быть любыми: от простых аркад и головоломок до многопользовательских 3D-шутеров и стратегических игр в реальном времени. Наша команда создала для вас несколько простых демонстраций:

Вы также можете проверить бота @gamee, у которого есть более 20 игр.

Клавиатуры

Конечно, традиционных чат-ботов можно научить понимать человеческий язык. Но иногда вам нужен более формальный ввод данных от пользователя, и именно здесь настраиваемые клавиатуры могут оказаться чрезвычайно полезными.

Всякий раз, когда ваш бот отправляет сообщение, он может использовать специальную клавиатуру с предопределенными вариантами ответа (см. ReplyKeyboardMarkup). Приложения Telegram, которые получают сообщение, будут отображать вашу клавиатуру для пользователя. Нажатие любой из кнопок немедленно отправит соответствующую команду. Таким образом, вы можете значительно упростить взаимодействие пользователя с вашим ботом.

В настоящее время мы поддерживаем текст и эмодзи для ваших кнопок. Вот несколько примеров пользовательской клавиатуры:

Дополнительную техническую информацию о настраиваемых клавиатурах см. в руководстве Bot API (см. sendMessage).

Встроенные клавиатуры и обновление на лету

Бывают случаи, когда вы предпочитаете что-то делать, не отправляя никаких сообщений в чат. Например, когда ваш пользователь меняет настройки или пролистывает результаты поиска. В таких случаях вы можете использовать встроенные клавиатуры, интегрированные непосредственно в сообщения, которым они принадлежат.

В отличие от настраиваемой клавиатуры для ответов, нажатие кнопок на встроенной клавиатуре не приводит к отправке сообщений в чат. Вместо этого встроенные клавиатуры поддерживают кнопки, которые работают за кулисами: кнопки обратного вызова, кнопки URL и кнопки переключения на встроенные кнопки.

При использовании кнопок обратного вызова ваш бот может обновлять свои существующие сообщения (или только свои клавиатуры), чтобы чат оставался аккуратным. Посмотрите эти примеры ботов, чтобы увидеть встроенные клавиатуры в действии: @music, @vote, @like.

Команды

Команды представляют собой более гибкий способ общения с вашим ботом. Можно использовать следующий синтаксис:

Команда всегда должна начинаться с символа '/' и не может быть длиннее 32 символов. Команды могут использовать латинские буквы, цифры и символы подчеркивания. Вот несколько примеров:

Сообщения, начинающиеся с косой черты, всегда передаются боту (вместе с ответами на его сообщения и сообщениями, в которых @упоминается бот по имени пользователя). Приложения Telegram будут:

  • Предлагайте список поддерживаемых команд с описаниями, когда пользователь вводит '/' (чтобы это работало, вы должны предоставить список команд BotFather). Нажатие на команду в списке немедленно отправляет команду.
  • Показывать дополнительную кнопку (/) в поле ввода во всех чатах с ботами. Нажав на нее, вы наберете символ «/» и отобразите список команд.
  • Выделяйте /commands в сообщениях. Когда пользователь касается выделенной команды, команда отправляется сразу.

Если в группе несколько ботов, можно добавить имена пользователей ботов к командам, чтобы избежать путаницы:

Это делается автоматически, когда команды выбираются из списка предложений. Помните, что ваш бот должен иметь возможность обрабатывать команды, за которыми следует его имя пользователя.

Глобальные команды

Чтобы упростить пользователям навигацию по мультивселенной ботов, мы просим всех разработчиков поддерживать несколько основных команд. В приложениях Telegram будут интерфейсные ярлыки для этих команд.

  • /start — начинает взаимодействие с пользователем, например, отправляя приветственное сообщение. Эту команду также можно использовать для передачи боту дополнительных параметров (см. Deep linking)
  • /help — возвращает справочное сообщение. Это может быть краткий текст о том, что может делать ваш бот, и список команд.
  • /settings — (если применимо) возвращает настройки бота для этого пользователя и предлагает команды для редактирования этих настроек.

Пользователи увидят кнопку "Пуск", когда они впервые откроют беседу с вашим ботом. Ссылки на Справку и Настройки будут доступны в меню на странице профиля бота.

Форматирование: полужирный, курсив, текст фиксированной ширины и встроенные ссылки

Вы можете использовать полужирный шрифт, курсив или текст фиксированной ширины, а также встроенные ссылки в сообщениях ваших ботов. Клиенты Telegram будут отображать их соответствующим образом.

Режим конфиденциальности

Боты часто добавляются в группы, чтобы улучшить общение между пользователями. путем предоставления новостей, уведомлений от внешних служб или дополнительных функций поиска. Особенно это касается рабочих групп. Теперь, когда вы делите группу с ботом, вы, как правило, спрашиваете себя: «Как я могу быть уверен, что этот маленький негодяй не продает мою историю чата моим конкурентам?» Ответ — режим конфиденциальности.

Бот, работающий в режиме конфиденциальности, не будет получать все сообщения, которые люди отправляют в группу. Вместо этого он получит только:

  • Сообщения, начинающиеся с косой черты "/" (см. раздел "Команды" выше)
  • Ответы на собственные сообщения бота
  • Служебные сообщения (люди добавлены или удалены из группы и т. д.)
  • Сообщения из каналов, в которых он состоит

С одной стороны, это помогает некоторым из нас лучше спать по ночам (в колпачках из фольги), с другой — позволяет разработчику бота сэкономить много ресурсов, так как ему не нужно будет обрабатывать десятки тысяч нерелевантные сообщения каждый день.

Режим конфиденциальности включен по умолчанию для всех ботов, кроме ботов, которые были добавлены в группу в качестве администраторов (администраторы ботов всегда получают все сообщения). Его можно отключить, чтобы бот получал все сообщения как обычный пользователь (бота нужно будет повторно добавить в группу, чтобы это изменение вступило в силу). Мы рекомендуем делать это только в тех случаях, когда это абсолютно необходимо для работы вашего бота — пользователи всегда могут увидеть текущую настройку конфиденциальности бота в списке участников группы. В большинстве случаев использования параметра принудительного ответа для сообщений бота должно быть более чем достаточно.

Глубокие ссылки

Боты Telegram имеют механизм прямых ссылок, который позволяет передавать боту дополнительные параметры при запуске. Это может быть команда, запускающая бота, или токен аутентификации для подключения учетной записи Telegram пользователя к его учетной записи на каком-либо внешнем сервисе.

A-Z , a-z , 0-9 , _ и - допускаются. Мы рекомендуем использовать base64url для кодирования параметров с двоичным и другими типами содержимого.

Переход по ссылке с параметром start откроет диалог один на один с ботом, показывая кнопку START вместо поля ввода. Если используется параметр startgroup, пользователю предлагается выбрать группу для добавления бота. Как только пользователь подтвердит действие (нажмет кнопку СТАРТ в своем приложении или выберет группу для добавления бота), ваш бот получит сообщение от этого пользователя в следующем формате:

PAYLOAD означает значение параметра start или startgroup, которое было передано в ссылке.

Пример глубокой ссылки

Местоположение и номер

Некоторым ботам для правильной работы требуются дополнительные данные от пользователя. Например, знание местонахождения пользователя помогает предоставлять более релевантные географические результаты. Номер телефона пользователя может быть очень полезен для интеграции с другими сервисами, такими как банки и т. д.

Боты могут запрашивать у пользователя его местоположение и номер телефона с помощью специальных кнопок. Обратите внимание, что кнопки запроса номера телефона и местоположения будут работать только в приватных чатах.

При нажатии этих кнопок клиенты Telegram будут отображать предупреждение о подтверждении, сообщающее пользователю, что должно произойти.

6. БотОтец

BotFather — единственный бот, который управляет ими всеми. Это поможет вам создавать новых ботов и изменять настройки существующих.

Создание нового бота

Используйте команду /newbot, чтобы создать нового бота. BotFather запросит у вас имя и имя пользователя, а затем сгенерирует токен аутентификации для вашего нового бота.

Имя вашего бота отображается в контактной информации и других местах.

Имя пользователя – это короткое имя, которое следует использовать в упоминаниях и ссылках t.me. Имена пользователей имеют длину от 5 до 32 символов и нечувствительны к регистру, но могут включать только латинские буквы, цифры и символы подчеркивания. Имя пользователя вашего бота должно заканчиваться на «бот», например. 'tetris_bot' или 'TetrisBot'.

Токен — это строка вида 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw, необходимая для авторизации бота и отправки запросов в API бота. Обеспечьте безопасность своего токена и храните его в безопасном месте, так как любой может использовать его для управления вашим ботом.

Создание токена аутентификации

Если ваш существующий токен скомпрометирован или вы потеряли его по какой-либо причине, используйте команду /token для создания нового.

Команды Botfather

Остальные команды говорят сами за себя:

  • /mybots — возвращает список ваших ботов с удобными элементами управления для редактирования их настроек.
  • /mygames — то же самое для ваших игр.

Редактировать ботов

  • /setname — изменить имя вашего бота.
  • /setdescription — изменить описание бота, короткий текст до 512 символов, описывающий вашего бота. Пользователи увидят этот текст в начале разговора с ботом под названием "Что может сделать этот бот?".
  • /setabouttext — изменить информацию о боте, еще более короткий текст до 120 символов. Пользователи увидят этот текст на странице профиля бота. Когда они делятся вашим ботом с кем-то, этот текст отправляется вместе со ссылкой.
  • /setuserpic — сменить аватарку бота. Всегда приятно сопоставить имя с лицом.
  • /setcommands — изменить список команд, поддерживаемых вашим ботом. Пользователи увидят эти команды как предложения, когда они наберут / в чате с вашим ботом. У каждой команды есть имя (должно начинаться с косой черты «/», буквенно-цифровое плюс символы подчеркивания, не более 32 символов, без учета регистра), параметры и текстовое описание. Пользователи увидят список команд всякий раз, когда они введут «/» в разговоре с вашим ботом.
  • /deletebot — удалить бота и освободить его имя пользователя.

Изменить настройки

  • /setinline — переключение встроенного режима для вашего бота.
  • /setinlinegeo — запрашивать данные о местоположении для предоставления встроенных результатов на основе местоположения.
  • /setjoingroups — включить или отключить добавление вашего бота в группы.Любой бот должен иметь возможность обрабатывать личные сообщения, но если ваш бот не предназначен для работы в группах, вы можете отключить это.
  • /setprivacy — укажите, какие сообщения будет получать ваш бот при добавлении в группу. При отключенном режиме конфиденциальности бот будет получать все сообщения. Мы рекомендуем оставить режим конфиденциальности включенным. Вам нужно будет повторно добавить бота в существующие группы, чтобы это изменение вступило в силу.

Управление играми

  • /newgame — создать новую игру.
  • /listgames — получить список ваших игр.
  • /editgame — редактировать игру.
  • /deletegame — удалить существующую игру.

Обратите внимание, что изменения вступят в силу через несколько минут.

Оповещения о состоянии

Миллионы людей выбирают Telegram из-за его скорости. Чтобы оставаться конкурентоспособным в этой среде, ваш бот также должен быть отзывчивым. Чтобы помочь разработчикам поддерживать своих ботов в форме, Botfather будет отправлять оповещения о состоянии, если заметит, что что-то не так.

Мы будем проверять количество ответов и коэффициент конверсии запросов/ответов для популярных ботов (~300 запросов в минуту: но не записывайте это значение, так как в будущем это значение может измениться). Если мы получим аномально низкие показания, вы получите уведомление от Botfather.

Ответ на оповещения

По умолчанию вы получаете только одно оповещение для каждого бота в час. Каждое оповещение имеет следующие кнопки:

  • Исправлено. Используйте это, если вы обнаружили проблему с вашим ботом и исправили ее. Если вы нажмете кнопку исправления, мы возобновим отправку предупреждений в обычном режиме, чтобы вы могли увидеть, сработало ли ваше исправление, в течение 5–10 минут вместо того, чтобы ждать час.
  • Поддержка. Используйте это, чтобы открыть чат с @BotSupport, если вы не видите никаких проблем с вашим ботом или если вы считаете, что проблема на нашей стороне.
  • Отключение звука на 8 ч/1 нед. Используйте это, если вы не можете починить своего бота в данный момент. Это отключит все оповещения для рассматриваемого бота на указанный период времени. Мы не рекомендуем использовать этот вариант, так как ваши пользователи могут перейти на более стабильный бот. Вы можете включить оповещения в настройках своего бота через Botfather.
Отслеживаемые проблемы

В настоящее время мы будем уведомлять вас о следующих проблемах:

1.

Ваш бот отправляет гораздо меньше сообщений, чем в предыдущие недели. Это полезно для ботов в стиле информационных бюллетеней, которые отправляют сообщения без подсказок от пользователей. Чем больше значение, тем значительнее разница.

2.

Ваш бот не отвечает на все отправляемые ему сообщения (коэффициент конверсии запросов/ответов для вашего бота был слишком низким по крайней мере в течение двух из трех последних 5-минутных периодов). Чтобы обеспечить хорошее взаимодействие с пользователем, отвечайте на все сообщения, которые отправляются вашему боту. Отвечайте на обновления message, вызывая методы send. (например, sendMessage).

3.

Ваш бот не отвечает на все отправляемые ему встроенные запросы, рассчитанные так же, как описано выше. Отвечайте на обновления inline_query, вызывая answerInlineQuery.

4.

Ваш бот не отвечает на все запросы обратного вызова, которые ему отправляются (с играми или без них), рассчитанные так же, как описано выше. Отвечайте на обновления callback_query, вызывая answerCallbackQuery.

Обратите внимание, что функция уведомлений о статусе все еще тестируется и будет улучшена в будущем.

Это введение. Теперь вы определенно готовы перейти к РУКОВОДСТВУ BOT API.

В третьей части нашей серии статей о чат-ботах содержится пошаговое руководство по созданию бота Telegram на Python. Бот должен уметь показывать обменные курсы, показывать разницу между прошлым и текущим обменными курсами, а также использовать современные встроенные клавиатуры.

Теперь давайте перейдем к делу и узнаем, как создать бота для Telegram на Python.

Оглавление:

Вот простой вопрос, чтобы начать наше руководство: как вы разрабатываете чат-ботов Telegram?

Токен – это уникальная строка символов, необходимая для аутентификации бота в системе. Он генерируется при создании бота и выглядит так:

ИМЯ_МЕТОДА (и это видно из его названия) — это метод, например, getUpdates, sendMessage, getChat и т. д.< /p>

Для выполнения запросов можно использовать как запросы GET, так и запросы POST. Многие методы требуют дополнительных параметров (например, при использовании метода sendMessage необходимо указать chat_id и текст). Параметры могут передаваться в виде строки запроса URL, application/x-www-form-urlencoded и application-json (кроме загрузки файлов).

Еще одним требованием является кодировка UTF-8.

После отправки запроса API вы получите ответ в формате JSON.Например, если мы получаем данные с помощью метода «getMe», мы получим что-то вроде этого:

Если "ok" равно true, запрос выполнен успешно, и результат будет отображаться в поле "result". Если «ok» равно false, вы увидите сообщение об ошибке в поле «description».

Вы можете найти список всех типов данных и методов Telegram Bot API здесь.

Следующий вопрос: как получать сообщения пользователей?

Есть два способа сделать это.

Вы можете вручную отправлять запросы с помощью метода getUpdates. В ответ вы получите массив объектов Update. Этот метод действует как технология длительного опроса (вы делаете запрос, обрабатываете данные и затем начинаете заново). Чтобы избежать повторной обработки одних и тех же данных, рекомендуется использовать параметр offset.

Второй способ — использовать веб-перехватчики. Вы должны использовать метод setWebhook только один раз. После этого Telegram будет отправлять все обновления по указанному URL, как только они поступят.

Но как выбрать оптимальный способ получения сообщений?

Метод getUpdates лучше всего подходит, если:

Метод веб-перехватчика лучше всего подходит, если:

  1. Вы программируете на веб-языке (например, PHP).
  2. Ваш бот мало загружен, и нет смысла регулярно запрашивать обновления вручную.
  3. Ваш бот постоянно интегрирован в веб-сервер.

В этом руководстве я буду использовать метод getUpdates.

Теперь, как сделать программу для бота?

@BotFather используется для создания ботов Telegram. Он также допускает базовую конфигурацию (описание, фото профиля, встроенную поддержку и т. д.).

Существует множество библиотек, упрощающих работу с Telegram Bot API. Вот некоторые из них:

В этом руководстве по ботам Telegram я собираюсь создать чат-бота Python с помощью библиотеки pyTelegramBotApi.

Давайте напишем скрипт Python, который будет реализовывать логику для определенных запросов курсов обмена валют. Мы будем использовать API ПриватБанка.

Пример ответа:

Давайте создадим файл pb.ру и напишем следующий код:

Мы реализовали три метода:

  • load_exchange: загружает обменные курсы по указанному URL и возвращает в формате dict.
  • get_exchange: возвращает курсы обмена запрошенной валюты.
  • get_exchanges возвращает список валют в соответствии с шаблоном (требуется при поиске валют во встроенных запросах).

Свяжитесь с ботом @BotFather, чтобы получить список команд чата Telegram.

Теперь используйте команду /newbot и дождитесь инструкций по выбору имени и имени пользователя. После успешного создания бота вы получите следующее сообщение:

Давайте настроим параметры бота. Укажите описание и информацию о тексте (команды /setdescription и /setabouttext), фото профиля (/setuserpic), включите встроенный режим ( /setinline), добавить подсказки команд (/setcommands).

Вам нужно будет использовать две команды: /help и /exchange. Давайте опишем их в /setcommands.

Теперь, когда настройка завершена, можно переходить к написанию кода. Прежде чем двигаться дальше, я настоятельно рекомендую прочитать об API и изучить документацию по библиотеке, чтобы лучше понять приведенную ниже информацию.

Давайте начнем с создания файла config.py для настройки:

Здесь у нас есть: токен бота и часовой пояс, в котором он будет работать (это понадобится в будущем для указания времени обновления сообщения. Telegram API не позволяет узнать часовой пояс пользователя, поэтому время обновления должно отображаться с подсказкой часового пояса).

Давайте создадим файл bot.py, импортируем все необходимые библиотеки, файлы конфигурации и ранее созданный pb.py. Если какие-то библиотеки отсутствуют, установите их через pip.

Давайте создадим бота, используя библиотеку pyTelegramBotAPI. Для этого нужно передать токен в конструктор:

Теперь ваш чат-бот Python инициализирован и постоянно запрашивает метод getUpdates. Параметр none_stop отвечает за продолжение опроса, даже если API возвращает ошибку при выполнении метода.

Тогда можно вызывать любые методы Telegram Bot API из переменной бота.

Давайте начнем с написания обработчика команды /start и добавим его перед строкой bot.polling(none_stop=True):

Как видите, pyTelegramBotApi использует декораторы Python для инициализации обработчиков различных команд Telegram. Вы также можете перехватывать сообщения, используя регулярное выражение, их тип содержимого и лямбда-функции.

В нашем случае, если условие commands=[‘start’] истинно, будет вызвана функция start_command. В эту функцию будет передан объект сообщения (десериализованный тип сообщения).После этого вы просто выполняете send_message в том же чате с указанным сообщением.

Ого, это было легко, не так ли?

Давайте добавим в наш обработчик команды /help встроенную кнопку, связанную с вашей учетной записью Telegram. Назовем кнопку «Сообщить разработчику».

Как видно из приведенного выше примера, я использовал дополнительный параметр (reply_markup) для метода send_message. Метод получил InlineKeyboardMarkup, состоящий из одной кнопки InlineKeyboardButton с текстом: «Сообщить разработчику» и url=’telegram.me/artiomtb’.

Приведенное выше выглядит следующим образом:

Обработчик команды /exchange отображает меню выбора валюты и встроенную клавиатуру бота, состоящую из 3 кнопок: USD, EUR и RUR (это валюты, поддерживаемые банковским API).

Позвольте мне объяснить, что такое данные обратного вызова в InlineKeyboardButton. Когда пользователь нажмет эту кнопку, вы получите CallbackQuery (его параметр data будет содержать callback-data) в getUpdates. Таким образом, вы будете точно знать, какую кнопку нажал пользователь, и обработаете ее соответствующим образом.

Кстати, вот как выглядит ответ /exchange:

pyTelegramBotAPI предлагает использовать декоратор @bot.callback_query_handler, который передает объект CallbackQuery во вложенную функцию.

Давайте реализуем метод get_ex_callback:

Метод answer_callback_query необходим для удаления состояния загрузки, которое появляется при нажатии кнопки. Давайте отправим сообщение в send_exchange_query. Вам нужно будет передать ему Сообщение и код валюты (его можно получить из query.data. Если это было, например, get-USD, то передайте USD).

Давайте реализуем send_exchange_result:

Это тоже довольно просто.

Давайте сначала отправим состояние набора в чат, чтобы бот отображал индикатор «набор», пока банковский API получает запрос. Теперь давайте вызовем метод get_exchange из файла pb.py, который получит код валюты (например, USD). Вам также потребуется вызвать два новых метода в send_message: serialize_ex, сериализатор валюты, и get_update_keyboard (который возвращает клавиатуру в режим «Обновить " и "Поделиться").

Запишем в get_update_keyboard текущие обменные курсы в callback_data в формате JSON. JSON намеренно сжат, поскольку максимально допустимый размер файла составляет 64 байта.

Ключ

t означает тип, а ключ e означает обмен. Остальное делается по тому же принципу.

Кнопка "Поделиться" будет иметь параметр switch_inline_query. Нажатие кнопки предложит пользователю выбрать один из своих чатов, открыть этот чат и вставить имя пользователя бота и указанный встроенный запрос в поле ввода.

Далее представим метод serialize_ex и вспомогательный serialize_exchange_diff, необходимые для отображения разницы между текущим и старым обменными курсами при нажатии кнопки «Обновить».

Как видите, метод serialize_ex получает необязательный параметр diff. Именно туда вы будете передавать разницу между обменными курсами в формате «sale_diff»: >. Это произойдет во время сериализации, когда вы нажмете кнопку «Обновить». Нам это не понадобится при первом отображении обменных курсов на экране.

Вот как выглядит ответ бота при нажатии кнопки USD:

Теперь вы готовы реализовать обработчик кнопки «Обновить». После дополнения метода iq_callback он будет выглядеть следующим образом:

Если callback-data начинается с get-' (get-USD, get-EUR и т. д.), вызовем get_ex_callback, как и раньше. В противном случае попробуем распарсить JSON и получить его ключ t. Если он равен «u», вызовите метод edit_message_callback. Давайте реализуем это:

Как это работает?

  1. Загрузить текущий обменный курс (exchange_now = pb.get_exchange(data[‘c’]).
  2. Сгенерируйте текст для нового сообщения, сериализовав текущий курс обмена с параметром diff, который вы получите с помощью новых методов (о них я напишу ниже). Давайте также добавим подпись редактирования — get_edited_signature.
  3. Вызовите метод edit_message_text, если исходное сообщение является обычным. Если это ответ на встроенный запрос, передайте другие параметры.

Метод get_ex_from_iq_data анализирует JSON из callback_data:

Метод get_exchange_diff получает старый и текущий обменные курсы и возвращает разницу в формате , ‘sale_diff’: > format:

get_edited_signature генерирует текст "обновлено...":

Вот как выглядит сообщение при обновлении, если обменные курсы не изменились:

А вот как это выглядит, когда обменные курсы изменились:

Внедрение inline означает, что запись @ + имя бота в любом чате активирует поиск введенного текста и предложит результаты. Нажав на один из них, бот отправит результат от вашего имени (с пометкой «через бота»).

Вуаля, вы реализовали встроенный обработчик запросов.

Библиотека передаст объект InlineQuery в функцию query_text. Внутри вы используете функцию answer_inline_query, которая должна получить inline_query_id и массив объектов (результаты поиска).

Давайте воспользуемся get_exchanges из pb.py для поиска нескольких валют, соответствующих поисковому запросу. Давайте передадим этот массив в метод get_iq_articles, который вернет массив из InlineQueryResultArticle:

Теперь, когда вы вводите @exchnagetestbot + пробел в любом чате, вы увидите следующее:

Давайте введем usd, и результат будет мгновенно отфильтрован:

Давайте нажмем на предложенный результат:

Кнопка «Обновить» также работает:

Хорошая работа! Вы успешно реализовали встроенный режим!

Подведение итогов

Поздравляем! Теперь вы знаете, как сделать чат-бот Python для Telegram, внедрить встроенную клавиатуру, обновление сообщений и встроенный режим. Вы можете похлопать себя по спине и поднять тост за нового бота-отца.

Нажмите кнопку подписки ниже, чтобы получать больше технических новостей, или напишите нам напрямую, если вам нужна помощь с вашим бизнес-ботом.

Пользователи могут взаимодействовать с вашим ботом с помощью кнопок или даже встроенных кнопок прямо из встроенных сообщений в любом чате.
В этой статье описывается полный поток кнопок с использованием MTProto API.

Кнопки

Боты могут прикреплять конструктор ReplyMarkup к исходящим сообщениям, чтобы прикреплять встроенную клавиатуру или настраиваемую клавиатуру ответа:

Нажатие кнопок

Как ответная, так и встроенная клавиатура состоят из вектора строк, каждая строка содержит вектор кнопок для каждого столбца.
В каждой строке может быть разное количество столбцов, и пользовательские клиенты должны правильно обрабатывать нажатие кнопок каждого типа.

Кнопки доступны только на ответных клавиатурах:

    - Отправить сообщение в чат, отвечая на сообщение, к которому прикреплена ответная клавиатура - Только в приватных чатах, отправить контакт текущего пользователя в чат, отвечая на сообщение, к которому прикреплена ответная клавиатура - Только в приватных чатах, отправить текущий геолокация пользователя в чате, ответ на сообщение, к которому прикреплена ответная клавиатура — только в приватных чатах предлагать пользователю создать и отправить опрос (или опрос викторины, в зависимости от флага викторины), отвечая на сообщение, к которому прикреплена клавиатура ответа. ответная клавиатура

Кнопки доступны только на встроенных клавиатурах:

Запросы обратного вызова

Кнопки keyboardButtonCallback можно использовать для отправки указанной полезной нагрузки данных обратно боту при нажатии на них.
Кроме того, бот может подтвердить личность пользователя, потребовав подтверждения пароля двухфакторной аутентификации с помощью SRP.

Отправка обратного запроса

Когда пользователь нажимает на keyboardButtonCallback в сообщении, отправленном ботом или сгенерированном встроенным запросом, следует вызвать messages.getBotCallbackAnswer, передав одноранговый узел и идентификатор сообщения.
То же самое должно происходить при нажатии на кнопки keyboardButtonGame, с той разницей, что вместо параметра данных должен быть установлен флаг игры.

Обязательно обработайте время ожидания бота в виде ошибок RPC BOT_RESPONSE_TIMEOUT, так как бот может быть в автономном режиме и не может ответить.

Возвращенный конструктор messages.botCallbackAnswer содержит:

  • сообщение, если указано, сообщение, которое должно отображаться в неблокирующем всплывающем уведомлении
  • оповещение указывает, следует ли отображать сообщение как всплывающее уведомление, а не как всплывающее уведомление.
  • has_url Указывает, присутствует ли URL
  • url, если он указан, клиент должен открыть URL без отображения запроса на подтверждение.
    Это безопасно и разрешено, потому что здесь боты могут возвращать только:
    • Собственные URL с добавленными параметрами запроса ( t.me/bot?start=aaa )
    • URL-адреса действительной игры, если бот настроил игры вручную, а нажатой кнопкой была клавиатураButtonGame.
    Подтверждение SRP

    Если установлен флаг require_password, полезные данные SRP 2FA также должны быть сгенерированы и прикреплены к запросу, чтобы проверить личность пользователя.

    Обратите внимание, что бот НЕ сможет получить доступ к вашему паролю или полезной нагрузке SRP.

    Полезная нагрузка SRP будет обрабатываться исключительно на серверах Telegram, просто возвращая ошибку RPC без передачи запроса боту в случае сбоя проверки.
    Это просто способ проверки личности пользователя, который в основном используется официальным ботом @botfather, чтобы обеспечить безопасную передачу права собственности на бота другому пользователю.

    Привет! В этом тексте предполагается, что вы знакомы с бот-платформой Telegram.
    Если это не так, ознакомьтесь с нашим введением в ботов.

    Сегодня мы представляем самое большое изменение в платформе ботов Telegram с июня 2015 года. Эти новые инструменты помогут вам создавать гибкие и интуитивно понятные интерфейсы для ваших ботов. И боты становятся намного более способными. Теперь они могут отправлять контент любого типа, поддерживаемый в Telegram, предоставлять сервисы на основе местоположения и глубоко интегрироваться с другими сервисами на основе телефонных номеров пользователей.

    Если вам нужен более краткий журнал изменений, вы можете найти его в Руководстве по Bot API.

    Новые встроенные клавиатуры

    Начнем с того, что мы добавляем новый тип клавиатуры, которая интегрируется непосредственно в сообщение, которому она принадлежит. Встроенные клавиатуры доступны для сообщений, отправляемых как в режиме чата, так и во встроенном режиме.

    В отличие от настраиваемой клавиатуры для ответов, нажатие кнопок на встроенной клавиатуре не приводит к отправке сообщений в чат. Вместо этого встроенные клавиатуры поддерживают кнопки, которые работают за кулисами: кнопки обратного вызова, кнопки URL и кнопки переключения на встроенные кнопки.

    Кнопки обратного вызова

    Когда пользователь нажимает кнопку обратного вызова, сообщения в чат не отправляются. Вместо этого ваш бот просто получает соответствующий запрос. Получив запрос, ваш бот может отобразить некоторый результат в уведомлении вверху экрана чата или в оповещении.

    Образец бота
    @music. Этот образец музыки использует встроенные кнопки обратного вызова для перелистывания страниц и перезагрузки случайных результатов.

    Прочитайте об обновлении сообщений, чтобы узнать, как кнопки обратного вызова могут стать еще круче.

    Кнопки URL

    Кнопки этого типа имеют небольшой значок со стрелкой, чтобы пользователь понимал, что при нажатии на кнопку с URL-адресом открывается внешняя ссылка. Естественно, мы покажем им уведомление о подтверждении перед открытием ссылки в браузере.

    Переключиться на встроенные кнопки

    Нажатие переключателя на встроенную кнопку предлагает пользователю выбрать чат, открыть его и вставить имя пользователя бота в поле ввода. Вы также можете передать запрос, который будет вставлен вместе с именем пользователя — таким образом ваши пользователи сразу же получат некоторые встроенные результаты, которыми они смогут поделиться.

    Пример бота
    @sticker. Этот бот для поиска наклеек предлагает кнопку «переключиться на встроенный режим», чтобы научить пользователей, как использовать его в встроенном режиме.

    Обновление сообщений

    Поскольку встроенные клавиатуры не отправляют дополнительные сообщения в чат, имело смысл дать ботам способ манипулировать своими существующими сообщениями, чтобы им не приходилось отправлять новое сообщение каждый раз, когда им нужно что-то обновить. Это помогает уменьшить беспорядок и создать более гибкие интерфейсы.

    Пример бота
    @music. Посмотрите, как музыкальный бот обновляет свои сообщения результатами поиска, когда вы нажимаете кнопки навигации.

    Места и номера

    Некоторым ботам для правильной работы требуются дополнительные данные от пользователя. Например, знание местоположения пользователя помогает предоставлять более релевантные результаты с привязкой к географическому положению. Номер телефона пользователя может быть очень полезен для интеграции с другими сервисами, такими как банки и т. д.

    Мы добавили для ботов простой способ запрашивать у пользователя его местоположение и номер телефона с помощью специальных кнопок. Обратите внимание, что кнопки запроса номера телефона и местоположения будут работать только в приватных чатах.

    При нажатии этих кнопок клиенты Telegram будут отображать предупреждение о подтверждении, сообщающее пользователю, что должно произойти.

    Встроенные боты также могут запрашивать данные о местоположении у своих пользователей. Используйте команду /setinlinegeo с @BotFather, чтобы включить это. Ваш бот будет запрашивать у пользователя разрешение на доступ к его местоположению всякий раз, когда он отправляет встроенный запрос.

    Пример бота
    @foursquare. Этот бот запросит разрешение на доступ к местоположению пользователя, а затем предоставит результаты с геотаргетингом.

    Встроенные боты 2.0

    Кстати, о встроенных ботах сегодня также будет произведено серьезное обновление.

    Новые типы контента

    Встроенные боты теперь поддерживают все типы контента, доступные в Telegram (всего 19), теперь они могут отправлять стикеры, видео, музыку, местоположения, документы и многое другое.

    Образцы ботов
    @sticker – этот бот-стикер будет принимать один или несколько смайликов и искать соответствующие стикеры.
    @music – музыкальный бот позволяет пользователям отправлять mp3-треки из общедоступной базы данных классической музыки. музыка.

    Переключение между встроенным режимом и приватным чатом

    Некоторым встроенным ботам может помочь первоначальная настройка, например их подключение к аккаунту во внешнем сервисе (например, YouTube). Мы добавили простой способ переключения между приватным чатом с ботом и любым чатом, в котором пользователь хочет поделиться встроенными результатами.

    Теперь над встроенными результатами (или вместо них) можно отобразить специальную кнопку «Переключиться в личку». Эта кнопка откроет приватный чат с ботом и передаст выбранный вами параметр, чтобы вы могли запросить у пользователя соответствующие действия по настройке. После этого вы можете использовать встроенную клавиатуру с кнопкой switch_inline_query, чтобы вернуть пользователя в исходный чат.

    Примеры ботов
    @youtube – показывает кнопку "Войти на YouTube", а затем предлагает персонализированные результаты.

    Улучшенный встроенный интерфейс

    Поскольку отправка контента с помощью встроенных ботов работает иначе, чем отправка обычных сообщений, мы немного изменили интерфейс. Трудно найти более эффективный способ объяснить, что не нужно нажимать «Отправить»:

    Нажатие крестика один раз очистит запрос, а двойное нажатие вернет пользователю кнопку "Отправить".

    Администраторы группы

    В качестве десерта мы начинаем внедрять инструменты, которые позволят вам создавать бот-решения для администраторов групп. В качестве первого шага мы добавили методы для удаления участников из групп и супергрупп.

    И на этом пока все. Следите за новостями и подписывайтесь на наш официальный канал @Botnews в Telegram.

    Читайте также: