Содержание

Как самостоятельно создать чат-бота в Telegram

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

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

Я пишу ботов уже 6 лет, а для Telegram — последние 3 года. Среди моих клиентов — интернет-магазины, фитнес-центры, салоны красоты, агентства недвижимости, турагентства, отели и автосервисы.

В среднем 30 % клиентов у компаний, с которыми я работаю, начинают пользоваться ботами. Например, записываются на консультации удалённо. А выручка бизнеса растёт на 20–30 % в течение года после запуска виртуального помощника.

Сергей Титов

Делает ботов в мессенджерах

Что такое чат-боты и почему их лучше писать для Telegram

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

Читайте также: всегда на связи — как чат-бот помогает решать вопросы клиентов

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

  1. Для внешнего общения — с клиентами, партнёрами и другими людьми, которые не работают в компании. Сюда входят продающие и обучающие боты. Первые помогают клиенту выбрать и купить нужный товар, а вторые отвечают на вопросы или предлагают полезную информацию о компании.
  2. Для внутреннего общения — между сотрудниками или разными отделами. С их помощью чаще всего заполняют отчёты или проверяют, как работники выполняют задачи.

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

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

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

Шаг 1. Выберите платформу для создания ботов

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

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

Так выглядит главный экран MenuBuilderBot и меню с добавлением бота

Botmaker — конструктор, с которым можно работать на компьютере. Для начала хватит бесплатного тарифа — воспользоваться ботом сможет до 500 человек. Стоимость PRO-версии начинается от 1 250 ₽ в месяц и зависит от тарифа. С ней сможете работать через бот больше чем с 500 клиентами, а ещё смотреть статистику их поведения: куда они нажимают в боте, в какой момент решают из него уйти.

Это конструктор в Botmaker

Первое время я работал в Botmaker, но потом понял, что у сервиса есть недостатки, которые мне мешают. В этом сервисе нельзя тонко настроить крупные блоки под задачи клиентов. Например, добавить реферальную систему или накопление баллов. Поэтому я перешёл на PuzzleBot.

Сергей Титов

Делает ботов в мессенджерах

PuzzleBot — веб-конструктор с простым интерфейсом и широкими возможностями. У сервиса есть бесплатный тариф, на котором доступно 15 команд и условий для бота. А ещё есть ограничение по количеству пользователей — не больше 150 человек. Стоимость платных тарифов начинается от 690 ₽ в месяц и зависит от функций. Например, в бесплатной версии будет реклама сервиса — её увидят все пользователи в самом первом сообщении. А в платных это можно отключить.

Так выглядит конструктор PuzzleBot с готовым списком команд, чтобы вы сразу могли оценить полезные функции

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

Сергей Титов

Делает ботов в мессенджерах

Представим, что у вас небольшой салон красоты и вы хотите, чтобы клиентам было проще записываться на процедуры. Давайте разберёмся, как создать бота самому в PuzzleBot.

Шаг 2. Зарегистрируйтесь в PuzzleBot

Это можно сделать через электронную почту или Telegram. Весь процесс занимает пару минут.

Откройте сайт и нажмите кнопку «Начать пользоваться бесплатно». После этого вы попадёте на страницу регистрации.

Нажмите «Войти через Telegram» на странице регистрации. Можно ввести свою электронную почту и придумать пароль, но регистрация через Telegram быстрее. Браузер автоматически перекинет вас в мессенджер. А если переадресация не сработает, можете перейти в Telegram по QR-коду, который появится в сервисе PuzzleBot.

Запустите бота PuzzleBot в Telegram. Он автоматически создаст ваш аккаунт на сервисе. Нажмите кнопку «Перейти в личный кабинет».

Так выглядит PuzzleBot в Telegram и сообщение о том, что аккаунт готов к работе

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

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

Шаг 3. Создайте заготовку бота в BotFather

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

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

Запустите BotFather и выберите команду /newbot из списка. Сервис создаст нового бота, и вам нужно будет придумать:

  • Название — будет отображаться в диалогах пользователей и может быть любым.
  • Имя — поможет найти среди других похожих сервисов, должно быть уникальным, написанным латиницей и содержать слово bot. Минимальная длина — 5 символов, а максимальная — 32.

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

Остальные были заняты

Скопируйте API-токен, который сгенерировал BotFather. Это нужно, чтобы привязать бота к сервису PuzzleBot и начать работать в конструкторе. Лучше никому не пересылать токен, чтобы посторонние не смогли им воспользоваться.

Так выглядит API-токен

Добавьте API-токен в PuzzleBot. Нужно подождать, пока сервис примет бота. Затем он появится в личном кабинете.

В поле нужно вставить скопированный API-токен, и бот появится в личном кабинете PuzzleBot

Шаг 4. Создайте бота с помощью конструктора

Нажмите на бота в личном кабинете и перейдите на страницу со статистикой. В левом меню выберите вкладку «Конструктор». В PuzzleBot уже будет несколько команд для примера — их нужно удалить. После этого останется только стартовая, с которой вы начнёте настройку.

Чтобы удалить команды, перейдите в «Конструктор», зажмите Shift, выделите всё с помощью мыши и кликните на значок корзины. А потом выберите «Применить изменения» в левой части экрана — готовые команды пропадут

Создайте стартовую команду — обычно это приветствие и короткое описание функций. Для этого нажмите на /start и добавьте блоки в правой части экрана.

Для начала достаточно освоить два блока: «Текст» и «Изображение». В первом случае бот отправит пользователю только сообщение, а во втором — ещё и картинку. Можно поставить красивое фото салона, чтобы клиент сразу увидел, как у вас уютно.

Для примера заполним блок «Изображение». Нажмите на него, загрузите картинку с компьютера и напишите приветствие.

Блок «Изображение» вы найдёте в меню справа. Сначала загрузите картинку, а потом напишите текст

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

  1. Обычная — кнопки появляются там, где у пользователя обычно находится клавиатура на смартфоне.
  2. Инлайн — кнопки появляются прямо под сообщением.

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

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

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

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

Когда добавите все нужные кнопки, кликните в любом свободном месте, и меню справа свернётся. Новые команды для кнопок появятся автоматически. Чтобы сохранить, нажмите «Применить изменения» в левой части экрана. Эту кнопку можно нажимать после каждого действия или в самом конце, когда закончите создавать бота.

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

Форма для инлайн-клавиатуры не отличается от обычной, но подсвечена розовым, чтобы вы не запутались

После этого конструктор автоматически создаст новые команды «Стрижка» и «Маникюр».

Добавьте календарь к команде «Выбрать день». Тогда клиент сможет сразу отметить, когда ему удобно прийти в салон красоты.

Создайте текстовый блок и предложите записаться на определённую дату. Добавьте форму ввода, чтобы пользователь мог ответить на вопрос. В поле «Тип ввода» нажмите «Календарь».

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

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

Чтобы задать ограничение, нажмите «Запрет на выбор дат» и выберите «Даты из прошлого». А чтобы обозначить, когда вы принимаете клиентов, кликните «Запрет на выбор дня» и отметьте галочками, когда вы закрыты

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

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

Добавьте следующее действие к блоку «Выбрать дату». Например, переход к услугам. Для этого добавьте ещё один текстовый блок с инлайн-клавиатурой, напишите названия кнопок и команды, на которые они будут вести.

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

Добавьте новую команду «Заявка» — на неё клиенты попадут из команд «Стрижка» или «Маникюр» и смогут оставить свои контакты для менеджера.

Кнопка «Добавить» находится в левой верхней части экрана. Выберите «Обычная команда» в выпадающем меню

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

Это готовые команды для перехода в форму заявки из услуг «Стрижка» и «Маникюр»

Оформите команду «Заявка». Допустим, вы планируете собирать через неё контакты клиентов, чтобы потом перезвонить и назначить удобную дату.

Для этого добавьте новый блок с формой ввода и напишите вопросы. В первом — «Как вас зовут?», а во втором — «По какому номеру с вами связаться?».

В первом вопросе выберите маску ввода «Текст», чтобы клиент не смог написать в ответ цифры, и добавьте реакцию, например «Приятно познакомиться». Во втором нужна маска ввода «Телефон», чтобы пользователь не мог написать текст в поле. Добавьте реакцию, например сообщение, что менеджер скоро перезвонит и уточнит детали.

Это формы ввода с масками «Текст» и «Телефон». Если использовать маски, клиент не сможет оставить неверные данные

Все заявки будут приходить в вашего бота — вы получите уведомление, когда новый пользователь выберет дату или поделится контактами. Клиенты этих сообщений не увидят. А ещё действия будут отображаться в блоке «Уведомления» в личном кабинете на сайте PuzzleBot.

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

Готовый бот в конструкторе будет выглядеть так:

Чтобы увидеть все команды и связки между ними, покрутите колёсико мыши и отдалите проект

Шаг 5.

Оформите бота в BotFather

Чтобы ваш бот выглядел в Telegram аккуратно и завершённо, нужно добавить ему аватарку, описание в профиле и на главном экране.

Зайдите в BotFather, нажмите «Меню» и выберите команду /mybots. Сервис предложит выбрать одного из ваших ботов. Кликните на него — и увидите меню. Выберите Edit bot.

Добавьте описание профиля и бота, аватарку. Когда нажмёте на Edit bot, появится меню, где можно выбрать, что именно вы хотите исправить.

About — описание бота в профиле. Description — сообщение на первом экране. Botpic — аватарка

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

После оформления бот будет выглядеть аккуратнее

Шаг 6. Проверьте, правильно ли работает бот

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

Вот что нужно проверить во время теста:

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

Проверим бота для салона красоты по всем этим критериям.

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

Что запомнить

  1. Чат-боты полезны для бизнеса — им можно поручить простые консультации, запись клиентов на удобный день или подбор товаров по запросу. Это разгрузит менеджеров, они будут меньше заниматься рутиной.
  2. Бота можно создать в любом мессенджере, но Telegram — самый удобный. Тут бот может работать как мини-сайт или канал — подойдёт, если нужен дополнительный профиль, как в соцсетях.
  3. У многих специальных сервисов по созданию ботов есть бесплатные версии. Если вы пишете программу первый раз, платить необязательно — основных функций будет достаточно для теста.
  4. Для создания чат-бота не нужны навыки программирования. Достаточно немного усидчивости, внимания и нескольких часов свободного времени.

Инструкция по созданию бота в Telegram

Изначально Telegram был обычным мессенджером для базовой отправки сообщений. Чуть позже он начал обрастать новыми функциями. Многим Телега начала заменять другие социальные сети и даже самые разные сервисы интернета.

Чем полезен Telegram

На сегодняшний день, Телеграм — это огромный интернет-комбайн, где можно:

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

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

Без помощи ботов это было бы сделать очень затруднительно. Если проще, то боты в Telegram автоматизируют какое-либо действие.

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

Создание бота в Telegram: пошаговая инструкция

Итак, пойдем по порядку. Для создания своего бота нам понадобится юзернейм @BotFather, вот этот:

Нажимаем «Запустить», и в ответном сообщении сразу присылается меню. Оно на английском, но ничего сложного нет.

Выбираем /newbot, далее в сообщении пишем название своего нового бота.

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

Наше рабочее название будет «GTOnidzuka_bot», далее мы его переименуем. Если юзернейм занят, то выбираем другой. Также BotFather присылает уникальный ключ, подобие пароля от бота, его никому нельзя показывать.

После того выбора имени нашего бота можно найти в поиске Телеграм или зайти на него по ссылке.

Теперь нам доступно редактирование бота. С помощью команд можно изменить аватарку, общее название, описания и т.д. Также в боковую кнопку «Меню» можно зашить ссылку на сайт или социальную сеть.

Основные команды в BotFather:

  • /setname — изменить имя бота
  • /setdescription — изменить описание бота
  • /setuserpic — изменить аватарку бота
  • /setcommands — задать команды для бота
  • /deletebot — удалить бота

Наш бот создан и отображается в поиске, но пока еще ничего не умеет.

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

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

Для начала переходим на официальный сайт и пролистываем вниз страницы, где есть кнопка со ссылкой в Телеграм.

Итак, попадаем в Телегу к Manybot и там имеется русский интерфейс, что очень радует.

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

Для теста мы создали новый канал. Но если есть уже хороший раскрученный канал, то можно внедрить и его.

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

Для подключения канала к боту, нужно отправить тестовое сообщение. И да, нам пришло уведомление в канале. Простейшие функции уже работают.

Теперь мы можем настроить автопостинг, отложенный постинг и создавать другие команды.

Окей, давайте создадим парочку команд:

Первая команда будет отправлять ссылку на наши услуги. Для этого заходим в «Отца ботов», печатаем /setcommands и выбираем нашего бота. Также можно воспользоваться кнопками меню, кому как удобнее.

В строке пишем название команды, оно может быть любым, главное на латинице и через тире пишем описание команды, у нас это «Услуги и цены», далее нажимаем «Сохранить».

Команда создана, но она пуста. Теперь ей нужно задать действие. Для этого переходим в наш бот, далее в «Пользовательские команды», среди них выбираем наш «bang» и жмем «Редактировать ответы команды».

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

Теперь при вызове команды /bang, в ответе будет ссылка на наш сайт.

Заметили, что также есть кнопка «Добавить вопрос»? Это некая форма обратной связи, если его добавить, то при вызове команды пользователю будет задан этот вопрос.

Добавим нетривиальное сообщение. После отправки нашего вопроса, предложим два варианта ответа для выбора пользователя.

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

А вот и новые ответы на форму:

Если пользователь тапнет на «Хочу заказать услугу», то пользователя можно найти и написать ему.

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

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

На этот раз добавили команды для всех подразделов нашего блога. Перед этим добавив команду /blog, она будет корневой.

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

Итак, у нас есть много команд, которые мы будем обрамлять в удобные кнопки меню. Но сперва «зашиваем» в команды ссылки на наши подразделы блога как это описано выше.

Для добавления кнопок жмем на «Пользовательские команды», а далее кликаем на «Настроить главное меню».

Затем нажимаем на «Добавить пункт меню». Из ранее добавленных команд выбираем доступную, задаем ей имя, которое будет отображаться и кликаем «Сохранить».

Таким образом мы добавили кнопки для всех основных команд. Также добавили кнопки социальных сетей и контактов.

Вот так теперь выглядит наш бот.

При переходе в социальные сети появляются их кнопки:

А при переходе в блог сперва появляется опрос:

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

И далее появляются его подразделы.

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

Если зайти с другого аккаунта, бот отображается вот так:

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

Для этого в главном меню бота нажимаем на «Отправить новое сообщение пользователям», печатаем наше сообщение и жмем «Отправить пост подписчикам».

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

Спустя пару секунд придет уведомление о новой статье в блоге.

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

Помимо RSS, можно подключить и Youtube.

Так просто?

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

А если вы еще не подписаны на наш канал, то советую исправить это недоразумение. 🙂 Делимся только полезными новостями из мира SEO и интернет-маркетинга.

Telegram-бот | Replit Docs

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

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

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

Чтобы следовать этому руководству:

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

Было бы полезно, если бы вы были знакомы с базой данных Replit, но это не обязательно.

Нам нужно зарегистрировать нашего бота в Telegram, чтобы сгенерировать учетные данные, которые мы будем использовать для подключения к Telegram API. Каждый бот требует, чтобы за него отвечала учетная запись пользователя. Это можно сделать с помощью официального управляющего бота Telegram под названием «BotFather».

Для этого войдите в свой клиент Telegram и найдите «@bot» в поиске чата. Обязательно выберите проверенную учетную запись (тот, рядом с которой стоит галочка), иначе мы можем в конечном итоге поговорить с кем-то, выдающим себя за официального BotFather.

Чтобы активировать BotFather, нажмите «Старт».

Мы можем отправить BotFather команду «/newbot», чтобы начать рабочий процесс создания бота.

Он запросит у нас:

  • Имя бота, которое будет отображаться в верхней части чата нового бота, например, «Повторить краткое руководство».

  • Имя пользователя, которое будет использоваться для уникальной ссылки на бота, например, «@replit_tutorialbot».

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

Как только мы ответим на все вопросы, BotFather отправит нам наш токен аутентификации, который будет выглядеть примерно так: 110201543:AAHdqTcvCh2vGWJxfSeofSAs0K5PALDsaw .

Обратите внимание, что вся строка (двоеточие и обе строки по обе стороны от него) является токеном.

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

Нашему боту нужно взаимодействовать с Telegram. Нам потребуется доступ к Telegram REST API. Есть много способов сделать это, но для этого руководства мы будем использовать удобную библиотеку, которая охватывает API.

Прежде чем мы сможем двигаться дальше, нам нужно сделать наш токен доступным для нашего бота, чтобы использовать его позже. Создайте переменную среды TOKEN , щелкнув значок блокировки на боковой панели, как показано ниже, и вставьте свой токен бота, который вы отметили ранее, что-то вроде 110201543:AAHdqTcvCh2vGWJxfSeofSAs0K5PALDsaw :

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

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

Теперь, когда мы все настроили, мы можем приступить к программированию! Мы начнем со следующего в нашем файле main.py :

 import os 

from telegram import Update #upm package(python-telegram-bot)
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext # пакет upm (python-telegram-bot)

def help_command (обновление: обновление, контекст: CallbackContext) -> Нет:
htext = '''
Добро пожаловать
Отправьте сообщение, чтобы сохранить его.
Отправить /fetch для получения самого последнего сообщения
update.message.reply_text(htext)

def main():
updater = Updater(os.getenv("TOKEN"))

диспетчер = updater.dispatcher
dispatcher.add_handler(CommandHandler("start", help_command))
dispatcher.add_handler(CommandHandler("help", help_command))

updater.start_polling()

updater.idle()

if __name__ == '__main ':
главная()

Вверху мы импортируем os , чтобы мы могли получить наш токен из переменной окружения.

Затем мы импортируем классы из библиотеки Telegram.

Комментарии, начинающиеся с #upm , необязательны. Они используются Replit для загрузки правильного пакета. Он вообще не нужен, а здесь нужен, потому что подобных библиотек Telegram очень много.

Функция help_command запускается всякий раз, когда пользователь отправляет нам команду «/start» или «/help». «/start» также автоматически запускается, когда новый пользователь присоединяется к вашему боту (как мы делали ранее с BotFather). Бот знает, как использовать эту функцию, потому что мы сообщим об этом позже в основное тело функции .

Основная функция инициализирует для нас средство обновления, используя наш токен.

 updater = Updater(os.getenv("TOKEN")) 

Updater — это класс, который будет постоянно проверять Telegram на наличие новых сообщений для нашего бота.

Когда программа обновления получает новое сообщение, она передает его диспетчеру. Диспетчер проверяет, есть ли у нас подходящий обработчик для сообщения. Как упоминалось выше, мы определяем наш для обработки команд «/start» и «/help». Мы делаем это с add_handler функция, например:

 dispatcher.add_handler(CommandHandler("start", help_command)) 

и

 dispatcher.add_handler(CommandHandler("help", help_command)) 

6 команда «/start» и команда «/help» имеют здесь один и тот же обработчик, но вы можете выбрать разные функции для обработки каждой из них, если хотите.

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

 updater.start_polling() 

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

Другими словами, если мы оставим это как последнюю строку основной функции , код будет выполняться, а затем немедленно завершится, потому что ничто другое не блокирует его. Итак, чтобы наш бот слушал, мы используем строку updater.idle() , чтобы заблокировать скрипт, пока мы его слушаем.

Функция ведения журнала​

Согласно тексту справки, бот должен делать две вещи.

  1. Если вы отправляете сообщение боту, он должен его как-то сохранить.

  2. Если вы отправите боту команду «/fetch», он должен отправить вам последнее сообщение.

Для этого мы будем использовать базу данных ключей и значений Replit. Начните с импорта API.

 из повторного импорта db 

db — это объект, который ведет себя как словарь, но сохраняет свое содержимое между запусками. Он также сериализует свои ключи в виде строк.

Так как мы хотим хранить зарегистрированные сообщения в определенном порядке, но объект db по своей сути не упорядочен, давайте создадим вспомогательную функцию, которая может получить самый большой ключ (при условии, что мы собираемся использовать только числовые индексы). Добавьте эту функцию перед определением функции help_command :

 def last_key(): 
ks = db.keys()
if len(ks):
return max(map(int, ks))
else:
return -1

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

Теперь мы можем создать обработчик, который записывает сообщения пользователя в базу данных. Добавьте эту функцию после определения функции help_command :

 def log(update: Update, context: CallbackContext) -> None: 
db[str(latest_key() + 1)] = update.message.text

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

Однако это не будет выполнено, пока мы не зарегистрируем обработчик, поэтому добавьте следующую строку после других строк dispatcher.add_handler(...) :

 dispatcher.add_handler(MessageHandler(Filters.text & ~Filters. команда, журнал)) 

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

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

 def fetch(update: Update, context: CallbackContext) -> None: 
update.message.reply_text(db.get(str(latest_key()), 'No Сообщений пока нет.'))

Мы можем зарегистрировать его вместе с другими обработчиками команд. Добавьте это после существующих строк dispatcher.add_handler(...) :

 dispatcher.add_handler(CommandHandler("fetch", fetch)) 

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

 из ячейки импорта математики 
from flask import render_template
from flask import Flask
app = Flask(__name__)

@app. route('/')
@app.route('/')
def home(page=None) :
ks = sorted(map(int, db.keys()))
pages = ceil(len(ks) / 10)
если страница None: #По умолчанию последняя страница
page = pages

if page < pages :
next_page = page + 1
else:
next_page = None
if page > 1:
prev_page = page - 1
else:
prev_page = None

messages = tuple(db[str(key)] for key in ks[(page-1)*10:page*10])

return render_template('home.html', messages=messages, next_page=next_page, page=page, prev_page=prev_page)

Это определяет небольшое приложение Flask. Replit позаботится об импорте нашего Flask. Для этого урока мы создадим только одну страницу.

Мы сообщаем Flask, как страница должна быть доступна с помощью специальных декораторов. @app.route('/') говорит, что когда пользователь обращается по адресу https://example.com , он будет обслуживать этот обработчик. В этом случае для переменной page по умолчанию будет установлено значение None.

@app.route('/') говорит, что когда пользователь получает доступ к чему-то вроде https://example.com/4 , он откроет страницу 4 зарегистрированных сообщений. В этом случае для переменной page будет установлено значение 4.

Это пока не сработает, потому что наш шаблон home.html не существует. Давайте создадим это сейчас в папке под названием «templates» (т. е. templates/home.html):

  

Сообщения - Страница {{ page }}



    {% для сообщений в сообщениях %}
  • {{ msg | escape }}

  • {% endfor %}

{% if prev_page %}Предыдущая страница{% endif %}
{% if prev_page and next_page %}|{% endif%}
{% if next_page %}Следующая страница{% endif %}

Это Шаблон выводит страницу зарегистрированных сообщений и ссылки на следующую или предыдущую страницу внизу.

Для шаблона требуется переменная "page" для номера страницы и массив "сообщений", которые перебираются и отображаются в виде списка. Он также принимает переменные «prev_page» и «next_page», которые мы используем для создания ссылок на предыдущую и следующую страницы, если они существуют соответственно. Все это предоставляется в нашей функции маршрута выше, когда мы запускаем render_template .

Как рассчитать максимальное количество страниц?

 страниц = ceil(len(ks)/10) 

То есть мы делим количество ключей в нашей базе данных Replit на десять и округляем в большую сторону. Мы также можем использовать этот номер по умолчанию. Таким образом, если кто-то посещает простой маршрут «/», мы просто отобразим последнюю страницу.

, если страница None: 
страница = страницы

Мы знаем, что последние сообщения будут «самыми последними», потому что мы отсортировали их в порядке возрастания в предыдущей строке.

"prev_page" и "next_page" — это текущая страница, которая либо уменьшается, либо увеличивается, если они являются допустимыми номерами страниц (в противном случае установите значение None, чтобы шаблон их не отображал).

Если мы запустим нашу программу сейчас, веб-приложение Flask еще не будет работать. Flask должен прослушивать запросы аналогично библиотеке Telegram. Обычно мы можем завершить программу с помощью app.run() , чтобы запустить сервер Flask.

Проблема в том, что эта строка кода никогда не была бы достигнута в обычных обстоятельствах, потому что у нас есть строка updater.idle() , блокирующая наш код до этого. Чтобы решить эту проблему, мы можем заменить эту строку на строку, которая запускает наш сервер Flask на переднем плане. Это связано с тем, что единственная причина, по которой у нас была строка, заключалась в том, чтобы предотвратить преждевременное завершение программы, и Flask все равно выполняет то же самое. Итак, давайте изменим его на это:

 #updater.idle() 
app.run(host='0.0.0.0', port=8080)

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

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

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

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

 username = update.message.from_user.username 

Вы можете проверить документации для списка дополнительных данных, доступных.

Как создать чат-бота Python для Telegram за 9 простых шагов — Блог MindK

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

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

Подробнее: 8 вопросов, которые вы должны задать себе перед созданием чат-бота .

Содержание :

  • Шаг 0: Теория Telegram Bot API
  • Шаг 1: Реализовать запросы обменных курсов
  • Шаг 2: Создать бота Telegram с помощью @BotFather bot
  • Шаг 4: Напишите обработчик команды /start
  • Шаг 5: Создайте обработчик команды /help
  • Шаг 6: Добавьте обработчик команды /exchange
  • Шаг 7: Напишите встроенный обработчик нажатия кнопки
  • Шаг 8: Реализуйте обработчик кнопки обновления
  • Шаг 9: Реализуйте встроенный режим

Шаг #0: Немного теории Telegram Bot API

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

Ответ очень прост: вы используете HTTP API как для чтения сообщений, отправленных пользователями, так и для обмена сообщениями. Это требует использования URL-адреса, который выглядит так:

 https://api.telegram.org/bot/ИМЯ_МЕТОДА 

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

 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 

METHOD_NAME (и это видно из его названия) — это метод, например, getUpdates , 5 getMessage 4 getMessage , send и т. д.

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

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

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

 GET https://api. telegram.org/bot/getMe 
 {
   хорошо: правда,
   результат: {
       идентификатор: 231757398,
       first_name: "Бот по курсу обмена",
       имя пользователя: «exchangetestbot»
   }
} 

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

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

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

Это можно сделать двумя способами.

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

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

Единственным ограничением является то, что вам нужен HTTPS (однако разрешены и самозаверяющие сертификаты).

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

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

  1. Вы не хотите или не можете настраивать HTTPS во время разработки.
  2. Вы используете языки сценариев, которые трудно интегрировать в веб-сервер.
  3. Ваш бот перегружен.
  4. Время от времени вы меняете сервер бота.

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

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

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

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

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

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

  • Python
    pyTelegramBotAPI (TeleBot)
    Telepot
  • PHP
    Telegram Bot API – PHP SDK + интеграция Laravel
  • Java
    Telegrambots
  • Nodejs
    Telegram Node Bot
  • Ruby
    Telegram BOT
  • COMLARS
    APAPARS 9002. APLE 9002. APLE 9002. APARIPLES 9002. APLE 9002. APARIPLES 9002. APLE 9002. APLEARS APAPARE 9002. APAPARS APAPARE 9002. APAPARS APAPARS 9002. APAPS . Многие из них написаны с использованием ООП и отражают все типы данных Telegram Bot API в классах.

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

    Шаг № 1: Реализуйте запросы курсов обмена

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

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

     [
        {
            cc: "евро",
            base_ccy: "грн",
            купить: "28.70000",
            продажа: "29.10000"
        },
        {
            обл.: "руб.",
            base_ccy: "грн",
            купить: "0.39300",
            продажа: "0.40300"
        },
        {
            вв: "долл. США",
            base_ccy: "грн",
            купить: "25.40000",
            продажа: "25.70000"
        }
    ]
     

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

     # -*- coding: utf-8 -*-
    импортировать повторно
    запросы на импорт
    импортировать json
    URL = 'https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5'
    деф load_exchange(): вернуть json. loads(requests.get(URL).текст) защита get_exchange (ccy_key): для exc в load_exchange(): если ccy_key == exc['ccy']: возврат отл. вернуть ложь защита get_exchanges (ccy_pattern): результат = [] ccy_pattern = re.escape(ccy_pattern) + '.*' для exc в load_exchange(): если re.match(ccy_pattern, exc['ccy'], re.IGNORECASE) не None: результат.добавлять(искл) вернуть результат

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

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

    Шаг 2. Создайте бота Telegram с помощью @BotFather

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

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

     Готово! Поздравляю с новым ботом. Вы найдете его по адресу telegram.me/.
    Теперь вы можете добавить описание, раздел about и изображение профиля для своего бота, смотрите /help для списка команд.
    Кстати, когда вы закончите создавать своего крутого бота, отправьте запрос в нашу службу поддержки ботов, если вам нужно лучшее имя пользователя для него.
    Просто убедитесь, что бот полностью работоспособен, прежде чем делать это.
    Используйте этот токен для доступа к HTTP API:
    <токен> (здесь идет токен бота)
    Описание Bot API см. на этой странице: https://core.telegram.org/bots/api 9.0106 

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

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

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

    Шаг №3: Настройка и инициализация бота

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

     # -*- coding: utf-8 -*-
    TOKEN = '<токен бота>''
    ЧАСОВОЙ ПОЯС = 'Европа/Киев'
    TIMEZONE_COMMON_NAME = 'Киев' 

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

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

    # --*- кодировка: utf-8 --*-
    импортировать телебота
    импорт конфигурации
    импорт пб
    импорт даты и времени
    импортировать питц
    импортировать json
    обратная трассировка импорта
    P_TIMEZONE = pytz.timezone (config.TIMEZONE)
    TIMEZONE_COMMON_NAME = config.TIMEZONE_COMMON_NAME 

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

     bot = telebot.TeleBot(config.TOKEN)
    bot.polling(none_stop=True) 

    Шаг 4: Напишите обработчик команды /start

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

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

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

     @bot.message_handler(commands=['start'])
    def start_command (сообщение):
       bot.send_message(
           сообщение.chat.id,
           'Привет! Могу показать курсы обмена ПриватБанка.\n' +
           'Чтобы узнать курсы валют, нажмите /exchange.\n' +
           «Чтобы получить помощь, нажмите /help».
       ) 

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

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

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

    Шаг № 5: Создайте обработчик команды /help

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

     @bot.message_handler(commands=['help'])
    def help_command (сообщение):
       клавиатура = telebot.types.InlineKeyboardMarkup()
       клавиатура.добавить(
           telebot.types.InlineKeyboardButton(
               «Сообщить разработчику», url='telegram.me/artiomtb'
           )
       )
       bot.send_message(
           сообщение.chat.id,
           '1) Чтобы получить список доступных валют, нажмите /exchange.\n' +
           '2) Нажмите на интересующую вас валюту.\n' +
           '3) Вы получите сообщение, содержащее информацию об исходной и целевой валютах, ' +
           'курсы покупки и продажи.\n' +
           4) Нажмите «Обновить», чтобы получить актуальную информацию по запросу. ' +
           'Также бот покажет разницу между предыдущим и текущим обменным курсом.\n' +
           '5) Бот поддерживает inline. Введите @ в любом чате и первые буквы валюты.',
           answer_markup = клавиатура
       )
     

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

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

    Шаг 6. Добавьте обработчик команды /exchange

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

     @bot.message_handler(команды=['обмен'])
    def exchange_command(сообщение):
    клавиатура = telebot.types.InlineKeyboardMarkup() клавиатура.строка( telebot.types.InlineKeyboardButton('USD', callback_data='get-USD') ) клавиатура.строка( telebot.types.InlineKeyboardButton('EUR', callback_data='get-EUR'), telebot.types.InlineKeyboardButton('RUR', callback_data='get-RUR') ) bot.send_message(message.chat.id, «Нажмите на выбранную валюту:», answer_markup=клавиатура)

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

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

    Шаг № 7: Напишите встроенный обработчик нажатия кнопки

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

     @bot.callback_query_handler (функция = лямбда-вызов: Истина)
    def iq_callback (запрос):
       данные = запрос.данные
       если data.startswith('get-'):
           get_ex_callback(query) 

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

     def get_ex_callback(query):
       bot. answer_callback_query(query.id)
       send_exchange_result(query.message, query.data[4:]) 

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

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

     def send_exchange_result(message, ex_code):
       bot.send_chat_action(message.chat.id, 'ввод')
       ex = pb.get_exchange (ex_code)
       bot.send_message(
           message.chat.id, serialize_ex(ex),
           answer_markup = get_update_keyboard (ex),
           parse_mode = 'HTML'
       ) 

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

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

     по умолчанию get_update_keyboard (пример):
       клавиатура = telebot.types.InlineKeyboardMarkup()
       клавиатура.строка(
           telebot.types.InlineKeyboardButton(
               'Обновлять',
               callback_data=json.dumps({
                   'т': 'у',
                   'е': {
                       'b': например ['купить'],
                       's': ex['продажа'],
                       'с': ex['ccy']
                   }
               }).заменять(' ', '')
           ),
           telebot.types.InlineKeyboardButton('Поделиться', switch_inline_query=ex['ccy'])
       )
       вернуть клавиатуру 

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

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

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

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

     def serialize_ex (ex_json, diff = None):
       результат = '' + ex_json['base_ccy'] + ' -> ' + ex_json['ccy'] + ':\n\n' + \
                'Купить: ' + ex_json['купить']
       если разница:
           результат += ' ' + serialize_exchange_diff(diff['buy_diff']) + '\n' + \
                     'Продать:' + ex_json['продажа'] + \
                     ' ' + serialize_exchange_diff(diff['sale_diff']) + '\n'
       еще:
           результат += '\nПродажа: ' + ex_json['продажа'] + '\n'
       вернуть результат
    защита serialize_exchange_diff (diff):
       результат = ''
       если разница > 0:
           результат = '(' + str(diff) + ' < img draggable=

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

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

    Шаг №8: Реализовать обработчик кнопки обновления

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

     @bot.callback_query_handler (функция = лямбда-вызов: Истина)
    def iq_callback (запрос):
       данные = запрос.данные
       если data. startswith('get-'):
           get_ex_callback (запрос)
       еще:
           пытаться:
               если json.loads(данные)['t'] == 'u':
                   edit_message_callback (запрос)
           кроме ValueError:
               pass 

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

     def edit_message_callback(query):
       данные = json.loads(query.data)['e']
       exchange_now = pb.get_exchange (данные ['c'])
       текст = сериализовать_ex(
           обмен_сейчас,
           get_exchange_diff(
               get_ex_from_iq_data(данные),
               exchange_now
           )
       ) + '\n' + get_edited_signature()
       если запрос.сообщение:
           bot. edit_message_text(
               текст,
               запрос.сообщение.чат.идентификатор,
               запрос.сообщение.message_id,
               answer_markup = get_update_keyboard (exchange_now),
               parse_mode = 'HTML'
           )
       Элиф query.inline_message_id:
           bot.edit_message_text(
               текст,
               inline_message_id = запрос.inline_message_id,
               answer_markup = get_update_keyboard (exchange_now),
               parse_mode = 'HTML'
           )
     

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

    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 :

     def get_ex_from_iq_data(exc_json):
       возвращаться {
           'купить': exc_json['b'],
           'продажа': exc_json['s']
       } 

    Метод get_exchange_diff получает старый и текущий обменные курсы и возвращает разницу в {'buy_diff': , 'sale_diff': } format:

     def get_exchange_diff(last , сейчас):
       возвращаться {
           'sale_diff': float("%.6f" % (float(сейчас['продажа']) - float(последняя['продажа']))),
           'buy_diff': float("%.6f" % (float(сейчас['buy']) - float(last['buy'])))
       }
     

     get_edited_signature генерирует «обновлено…» text:

     def get_edited_signature():
       вернуть 'Обновлено' + \
              str(datetime. datetime.now(P_TIMEZONE).strftime('%H:%M:%S')) + \
              ' (' + TIMEZONE_COMMON_NAME + ')' 

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

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

    Шаг #9: Реализуйте встроенный режим

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

     @bot.inline_handler(func=лямбда-запрос: True)
    определение query_text (inline_query):
       bot.answer_inline_query(
           inline_query.id,
           get_iq_articles (pb.get_exchanges (inline_query.query))
       ) 

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

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

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

     по умолчанию get_iq_articles (биржи):
       результат = []
       для отл в биржах:
           результат.добавить(
               telebot.types.InlineQueryResultArticle(
                   идентификатор = отл ['ccy'],
                   название = ис['ccy'],
                   input_message_content = телебот.типы.InputTextMessageContent(
                       сериализовать_ex (отл),
                       parse_mode = 'HTML'
                   ),
                   answer_markup=get_update_keyboard(exc),
                   description='Конвертировать' + exc['base_ccy'] + ' -> ' + exc['ccy'],
                   thumb_height=1
               )
           )
       вернуть результат
     

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

    Введите usd и результат мгновенно отфильтруется:

    Щелкнем по предложенному результату:

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

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

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

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