Как создать бот в телеграмм: Как сделать бота в «Телеграме» без навыков программирования

Содержание

Как добавить бота в Телеграме и правильно его настроить

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

Если планируете вести свой популярный ТГ-канал, рекомендуем сходить на 4-дневный видеокурс «Как привлекать клиентов из Telegram и зарабатывать». Узнайте о возможностях Телеграма для бизнеса и монетизации контента, получите пошаговый план развития канала и инструменты для эффективного продвижения. Переходите на страницу курса из статьи – примите участие бесплатно и получите сертификат о прохождении.

Инструкция по установке готовых ботов для автоматизации SMM и возможные настройки – в этой статье.

Где найти боты в Телеграме для SMM-щика

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

Вы сможете подобрать бота для самых разных задач на канале

@BotFather – главный бот в Телеграме. Он создает токен – ключ авторизации, необходимый для подключения других ботов в качестве администраторов каналов. Для подключения сторонних сервисов надо создать собственного бота в @BotFather, добавить его в администраторы канала, а ключ авторизации предоставить боту, который хотите подключить.

Ниже – подробнее.

Как правильно добавить бота на канал в Телеграме

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

Затем выберите бот, нужный вам для работы. Мы рассмотрим подключение на примере бесплатного сервиса для обратной связи @LivegramBot. Не реклама, робот выбран для наглядности методом тыка.

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

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

Далее по шагам.

Переходите в LivegramBot, жмите «Запустить».

Вы сможете добавить новый бот или настроить уже существующие во вкладке «Мои боты»

Жмите «Добавить бот». Вы получите сообщение с инструкцией по подключению бота.

В сообщении содержатся 2 ссылки. Одна – на BotFather, другая – на короткую текстовую инструкцию

Переходите в BotFather. Здесь отправьте команду /newbot. Затем:

  • Придумайте имя боту. Его всегда можно изменить с помощью команды /setname. Выбирайте имя, которое коротко опишет суть бота, например, Фидбек. В будущем будет легче найти нужный сервис среди других ботов, подключенных к каналу.
  • Придумайте юзернейм боту. Он должен заканчиваться на bot.
  • Скопируйте токен. Кликните левой кнопкой мыши на выделенный цветом ключ авторизации – он будет скопирован.

Самые простые имена для ботов давно заняты – придумайте что-то новое

Вернитесь в LivegramBot. Вставьте в поле ввода токен и отправьте сообщение.

Готово! Бот подключен

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

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

Зайдите в настройки своего канала. Добавьте в описание адрес бота для обратной связи.

Например, так

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

На фото слева – так выглядит переписка у пользователя, на фото справа – переписка в боте

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

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

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

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

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

Для созданного выше бота Фидбек не нужны права администратора, но показать весь процесс можно и с его помощью. Как добавить бота-администратора и настроить разрешения – читайте ниже.

Создайте новый бот в @BotFather. Действуйте так же, как и в инструкции выше: создали бот, получили токен, скопировали, вставили.

Перейдите в свой канал. Зайдите в управление каналом и выберите пункт «Администраторы». В окне поиска введите юзернейм бота. Если раньше не добавили бот в подписчики канала, вам предложат пригласить его и назначить администратором.

Всего 3 шага – и бот добавлен

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

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

Для автопостинга в Телеграме рекомендую SMMplanner – он всегда публикует только ваши запланированные посты. Как легко и быстро подключить его с помощью BotFather, читайте в небольшой инструкции «Простой способ подключить Телеграм-канал к SMMplanner».

Регистрируйтесь в SMMplanner по этой ссылке – у вас будет 14 дней доступа к профессиональному тарифу вместо стандартных 7 дней. Этого времени хватит, чтобы изучить обширные возможности сервиса для SMM-щиков и сделать выбор: перейти на один из тарифов или использовать бесплатную версию инструмента.

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


Как быстро создать бота в Телеграм для СМИ. Chatfuel • sdelano.media

От просто мессенджера Телеграм все больше движется в сторону многофункциональной социальной сети, которая активно набирает аудиторию в России. А средства массовой информации традиционно должны идти навстречу интересам и увлечениям аудитории, осваивая новые площадки. Боты — достаточно простой и эффективный способ начать ретрансляцию контента в Телеграм.

Зачем нужны боты

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

Боты и каналы — не одно и то же

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

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

Botfather

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

Первым делом нужно создать бота. Для этого в окне поиска Телеграм набираем @botfather, открываем его окно и нажимаем на “/” в правом нижнем углу окна, рядом со смайликом.

В окне сообщения мы увидим список доступных команд: создать бота, изменить его описание, удалить и переименовать его и другие. Мы пока в самом начале пути, поэтому просто создаем — пишем /newbot. «Отец» (Botfather) попросит нас дать имя нашему детищу и после этого выдаст авторизационный код (token).

Chatfuel

После создания бота, нужно наполнить его существование смыслом, который кроется в технической начинке. Здесь можно либо пойти более сложным путем, углубившись в программирование на языке python, либо воспользоваться простыми решениями от сервисов-посредников, например, Chatfuel. Ищем @chatfuelbot в мессенджере и нажимаем кнопку start. Прежде всего, переведем его на родной язык в меню снизу. Если вы первый раз имеете дело с ботами в Телеграм, запомните местонахождение меню — все важное находится всегда здесь. Теперь копируем в это окно полученный в п.1. авторизационный код, и Chatfuel присылает вам ссылку на управление вашим детищем в его собственном окне. Переходим туда и начинаем обучать бота нужным нам навыкам. Меню здесь полностью переведено на русский язык, поэтому с обучением серьезных проблем возникнуть не должно.

Так как наша главная цель состоит в настройке кросспоста с вашего сайта или другой социальной площадки в Телеграм, выбираем в меню вариант «Автоматизировать». Далее — Autoposting. И затем нужный нам источник — как видите, в списке есть ряд популярных социальных сетей и даже RSS. А это означает, что вы можете легко подключить к Телеграм любой регулярно обновляющийся раздел на сайте. Обратите также внимание и на то, что бота можно подключить одновременно к нескольким источникам данных. Это могут быть и видео с вашего канала на Youtube, и даже файлы на Dropbox.

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

Zapier: десятки сервисов — в трансляцию бота Телеграм

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

В бесплатной версии сервис позволяет создать до пяти «запов» — цепочек сервисов. Кроме того, есть ограничение на количество их «срабатываний» — до 1000 в месяц. Если нужно больше, потребуется заплатить 20 долларов в месяц.

После того, как вы создали аккаунт на Zapier, ищем в панели красную кнопку «Make a zap» и создаем связку сервисов. Для трансляции через своего бота пользовательского контента, а не только своего авторского, удобно подключить кросс-пост по нужному вам тэгу из twitter или instagram. Для этого, соответственно, выбираем исходное приложение, авторизуем его и устанавливаем «триггер», условие для срабатывания кросс-поста. Сообщение по тэгу — «Search mention». Обратите внимание, что здесь можно указать как хэштэг с символом #, так и просто ключевую фразу в тексте.

Затем нам нужно подключить вашего бота — снова понадобится его авторизационный код. Чтобы его посмотреть, просто отправляем /botkey в чате и полученную строчку возвращаем в Zapier.

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

Вот мы и справились. Теперь у вас есть свой Телеграм ретранслятор обновлений сайта или популярных аккаунтов в социальных сетях.

Как начать общение через бота Telegram

Создать бота Telegram

  1. Используйте @BotFather* для создания бота Telegtam. Нажмите «Пуск» и выберите команду /newbot.

    *@BotFather — это бот в Telegram, который управляет всеми ботами, которых вы создаете через свой аккаунт в Telegram.

  2. Выберите имя для своего бота.
  3. Затем создайте имя пользователя (оно будет отображаться в ссылках). Оно должно быть написано латиницей, может содержать цифры и знаки подчеркивания и должно заканчиваться на Bot. Имя пользователя должно быть уникальным. Если имя пользователя уже занято, @BotFather сообщит об этом.
  4. Поздравляем, вы создали Telegram-бота! Вам понадобится токен бота Telegram, чтобы настроить интеграцию бота с Messaggio.

Свяжите бота с вашей учетной записью Messaggio, создав идентификатор отправителя Telegram

  1. Войдите в свою панель инструментов Messaggio, перейдите в раздел «Отправители» и нажмите «Создать».
  2. В поле Канал выберите Telegram из выпадающего списка. Скопируйте токен бота Telegram и добавьте его в соответствующие поля на стороне Messaggio.

Создать шаблон сообщения

  1. В разделе Действия отправителя выберите Создать шаблон с отправителем.
  2. Выберите подходящий макет шаблона. Добавьте кнопки и ссылки. Щелкните Создать.
  3. Отправить шаблон сообщения на модерацию. Служба поддержки Messaggio проверит шаблон на соответствие правилам Telegram в течение 2 рабочих дней. Рядом с одобренным шаблоном появится статус ACTIVE.

Возможности Telegram-бота для обмена сообщениями в Messaggio

Бот Telegram позволяет общаться с клиентами 3-мя способами:

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

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

Отправка сообщений в Telegram-канал / Telegram-группу

Добавьте бота в Telegram-канал/Telegram-группу

  1. Зайдите в Telegram-канал/Telegram-группу, в которую собираетесь отправлять сообщения.
  2. Нажмите на название канала и перейдите в раздел Подписчики.
  3. Нажмите кнопку «Добавить подписчиков». Найдите в поиске ранее созданного бота и нажмите Добавить.

Теперь бот может отправлять сообщения в Telegram канал/группу от своего имени.

Запустить рассылку сообщений подписчикам канала/группы

  1. В личном кабинете Messaggio перейдите в раздел «Рассылки» и нажмите «Создать — Регулярная рассылка».
  2. Придумайте название рассылки и выберите созданный ранее шаблон сообщения Telegram.
  3. Назначение контактной группы для отправки. В списке контактных групп вы увидите автоматически созданную группу в формате Телеграм-канал_ИмяПользователяБот/Telegram group_ИмяПользователяБот. Выберите группу контактов и нажмите Добавить выбранное.
  4. Выберите в списке созданную рассылку Telegram и нажмите Начать отправку. Установите время доставки сообщений и нажмите Запустить рассылку.

Сообщения будут доставлены в канал Telegram/группу Telegram от имени бота в указанное вами время.

Обмен сообщениями в чате Telegram с пользователем (прямые сообщения)

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

  1. В личном кабинете Messaggio перейдите в раздел «Рассылки» и нажмите «Создать — Регулярная рассылка».
  2. Придумайте название рассылки и выберите созданный ранее шаблон сообщения Telegram.
  3. Назначение контактной группы для отправки. В списке контактных групп вы увидите автоматически созданную группу в формате Telegram chats_UsernameBot (хранит контактные данные всех пользователей, которые писали сообщения боту и делились контактами). Выберите группу контактов и нажмите Добавить выбранное.
  4. Выберите в списке созданную рассылку Telegram и нажмите Начать отправку. Установите время доставки сообщений и нажмите Запустить рассылку.

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

  • Было ли это полезно?
  • ДаНет

Next Post: Как создать шаблон сообщения

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

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

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

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

Содержание :

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

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

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

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

 https://api.telegram.org/bot/METHOD_NAME 

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

 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 

METHOD_NAME (и это видно из названия) — это метод, например, getUpdates , 90 171 sendMessage , getChat и т. д.

Для выполнения запросов можно использовать как запросы 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
  • 9 0057 C#
    Telegram Bot API Library

По своей сути все эти библиотеки являются оболочками HTTP-запросов. Многие из них написаны с использованием ООП и отражают все типы данных 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.0165 

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

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

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

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

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

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

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

Создадим файл 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_d если и только (последний , сейчас):
   возвращаться {
       '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 и результат будет мгновенно отфильтрован:

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

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

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

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

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

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