Содержание

как создать чат-бота в Телеграме

Только в июне 2022 года в Telegram было создано 652 тысячи каналов и 64 тысячи чатов с суммарной аудиторией 4,77 млрд. человек (данные TGStat).

Сегодня выигрывает тот бизнес, где клиент получает ответ на запрос быстро, четко и по существу. Рост популярности голосовых и текстовых ботов происходит по всем каналам. Особенно в этом преуспел Telegram: у площадки user-friendly интерфейс и развитое API для запуска ботов.

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

Артем Мельников, менеджер продукта

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

Эксперты Just AI

Артем Мельников

менеджер продукта

Наталья Лаптиева

руководитель технической поддержки

Содержание

Этап 1. Анализируем
Этап № 2. Выбираем решение
Этап № 3. Пишем сценарий
Этап № 4. Публикуем бота
Этап № 5. Оцениваем эффективность

Этап № 1. Анализируем

Отдельный этап разработки – понять, для кого и ради чего нужен чат-бот. Ведь у вас появится полноценный онлайн-сотрудник с высочайшей производительностью. Боты могут развлекать, обучать, консультировать в чате, по телефону или в рассылке и все это в режиме 24/7.

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

Этап № 2. Выбираем решение

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

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

Наталья Лаптиева

Этап № 3. Пишем сценарий

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

Сценарий – это диалог между ботом и клиентом.

Пример сценария в редакторе Aimylogic

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

Готовые интенты — это заранее подготовленный список возможных реакций клиента, например, на приветствие или прощание.

Готовые интенты в Aimylogic

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

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

Артем Мельников

После того, как сценарий создан, можно переходить в Telegram.

Этап № 4. Публикуем бота

Чтобы бот заработал, его нужно зарегистрировать и получить уникальный id, который является одновременно и токеном. Для этого в приложении Telegram через функцию поиска ищется аккаунт @BotFather. Это официальный бот для регистрации других ботов. В диалоговой форме вы получите список команд. Нужно выбрать /newbot. Вводим название и ник со словом bot.

Если название не занято, BotFather сгенерирует боту ссылку и токен. С помощью токена вы сможете сменить имя /setname, добавить описание /setdescription и аватар /setuserpic. На этом же этапе подумайте, каких кнопок с командами не хватает вашему боту. Для их создания нужно зайти в раздел «Настроить гл. меню».

Токен – уникальный ключ, который используется для доступа к Bot API.

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

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

Раздел «Каналы» в Aimylogic

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

Наталия Лаптева

Этап № 5.

Оцениваем эффективность

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

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

Раздел «Статистика» в Aimylogic

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

Артем Мельников

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

Как быстро создать бота в Telegram для СМИ • sdelano.media

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

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

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

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

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

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

Botfather

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

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

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

Chatfuel

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

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

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

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

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

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

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

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

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

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

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

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

Создание бота с помощью Telegram Bot API | Сатиш Манохар Талим

(В этой части мы создадим нашего первого простого бота Telegram и воспользуемся языком программирования Go для доступа к нему)

Преамбула

Telegram — это приложение для обмена сообщениями, которое очень быстрое, простое, безопасно и бесплатно.

Впервые я установил приложение Telegram на свой телефон Android. Я также установил их родное приложение на рабочий стол Windows 7 Professional.

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

Задача

Создать простого бота (называемого SMTFirstBot ) с использованием их открытого API.

Что такое бот?

Боты — сторонние приложения, работающие внутри Telegram. Пользователи могут взаимодействовать с ботами, отправляя им сообщения, команды и встроенные запросы. Вы управляете своими ботами, используя HTTPS-запросы к API их ботов. Боты Telegram — это специальные аккаунты, для настройки которых не требуется дополнительный номер телефона. Пользователи могут взаимодействовать с ботами.

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

Для этого есть… бот.

Просто поговорите с @BotFather и выполните несколько простых шагов.

Он открыл отдельное окно в моем родном приложении Telegram.

Далее я набрал:

 Вы: /newbot 
BotFather: Хорошо, новый бот. Как мы собираемся называть это? Пожалуйста, выберите имя для вашего бота. Он должен заканчиваться на «bot». Вот так, например: TetrisBot или tetris_bot.
Вы: SMTFirstBot
BotFather: Готово! Поздравляю с новым ботом. Вы найдете его на telegram.me/SMTFirstBot. Теперь вы можете добавить описание, раздел about и изображение профиля для своего бота, смотрите /help для списка команд. Кстати, когда вы закончите создавать своего крутого бота, отправьте запрос в нашу службу поддержки ботов, если вам нужно лучшее имя пользователя для него. Просто убедитесь, что бот полностью работоспособен, прежде чем делать это. Используйте этот токен для доступа к HTTP API:
2764xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

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

Изменение описания SMTFirstBot

 Вы: /setdescription 
BotFather: Выберите бота, чтобы изменить описание.
Вы: @SMTFirstBot
BotFather:ОК. Пришлите мне новое описание бота. Люди увидят это описание, когда откроют чат с вашим ботом в блоке под названием «Что может делать этот бот?».
Вы: Это простой и мой первый БОТ.
BotFather: Успех! Описание обновлено.

Изменение раздела «О программе» SMTFirstBot

 Вы: /setabouttext 
BotFather: выберите бота, чтобы изменить раздел «О программе».
Вы: @SMTFirstBot
BotFather: Хорошо. Пришлите мне новый текст «О программе». Люди увидят этот текст на странице профиля бота, и он будет отправлен вместе со ссылкой на вашего бота, когда они поделятся им с кем-то.
Вы: Мой первый Telegram-бот.
BotFather: Успех! Обновлен раздел «О нас».

Изменение фотографии профиля SMTFirstBot

 Вы: /setuserpic 
BotFather: Выберите бота, чтобы изменить фотографию профиля.
Вы: @SMTFirstBot
BotFather: Хорошо. Пришлите мне новую фотографию профиля для бота.
Вы: [ Фото ]
BotFather: Успехов! Фото профиля обновлено.

Изменение конфиденциальности SMTFirstBot

 Вы: /setprivacy 
BotFather: Выберите бота для изменения настроек групповых сообщений.
Вы: @SMTFirstBot
BotFather: «Включить» — ваш бот будет получать только сообщения, которые либо начинаются с символа «/», либо упоминают бота по имени пользователя.
«Отключить» — ваш бот будет получать все сообщения, которые люди отправляют в группы.
Текущий статус: ВКЛЮЧЕН
Вы: Отключить
BotFather: Успех! Новый статус: ОТКЛЮЧЕН.

Авторизация вашего бота

Каждому боту при создании присваивается уникальный токен аутентификации. Токен выглядит примерно так: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11, но они просто используют <токен> в своем руководстве.

Разговор с вашим ботом

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

Выполнение запросов

Все запросы к Telegram Bot API должны обслуживаться через HTTPS и должны быть представлены в следующей форме: https://api. telegram.org/bot/METHOD_NAME. Например, так:

 https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe 

Они поддерживают методы GET и POST HTTP. Они также поддерживают четыре способа передачи параметров в запросах Bot API:

  • Строка запроса URL
  • application/x-www-form-urlencoded
  • application/json (кроме загрузки файлов)
  • multipart/form-data (используйте для загрузки файлов)

Ответ содержит объект JSON, который всегда имеет логическое поле «ok» и может иметь необязательное строковое поле «description» с удобочитаемым описанием результата. Если «ok» равно true, запрос был выполнен успешно, и результат запроса можно найти в поле «result». В случае неудачного запроса «ok» равно false, а ошибка объясняется в «описании». Поле Integer error_code также возвращается, но его содержимое может быть изменено в будущем.

  • Все методы Bot API нечувствительны к регистру.
  • Все запросы должны выполняться с использованием кодировки UTF-8.

Вы можете просмотреть список имен методов в официальной документации API.

метод getMe

Допустим, мы хотим получить основную информацию о вновь созданном боте, нам нужно использовать метод getMe .

 https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe 

Ответ, который я получил:

 {"ok":true,"result":{"id":276401636,"first_name":"SMTFirst","username":"SMTFirstBot"}} 

метод getUpdates

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

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

 https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getUpdates 

Ответ, который я получил:

 {"ok":true,"result":[{"update_id":839499903, 
"сообщение": {"message_id":12,"от":{"id":246367260,"first_name":"Сатиш","last_name":"Талим","имя пользователя":"IndianGuru"},"чат ":{"id":246367260,"first_name":"Satish","last_name":"Talim","username":"IndianGuru","type":"private"},"date":1473914771,"text":"Hello SMTFirstBot"}}]}

Как видите, мой chat_id равен 246367260

метод sendMessage

Используйте метод sendMessage для отправки текстовых сообщений от бота пользователю, использующему его/ее chat_id .

 https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/sendMessage?chat_id=246367260&text="Привет от SMTFirstBot" 

Ответ, который я получил:

90true36, «ok»: «:{«message_id»:13,»от»:{«id»:276401636,»first_name»:»SMTFirst»,»username»:»SMTFirstBot»},»chat»:{«id»:246367260,»first_name «:»Сатиш»,»фамилия»:»Талим»,»имя пользователя»:»IndianGuru»,»тип»:»личное»},»дата»:1473915564,»text»:»\»Привет от SMTFirstBot\»»}}

Вот код Go , чтобы получить chat_id, а затем отправить сообщение на этот chat_id от MyFirstBot.

Программа myfirstbot.go

myfirstbot.go

Вот и все. Развлекайся.

Создать Telegram Bot — Code Capsules

В этом руководстве используется Python. Вы можете найти версию NodeJS здесь.

В предыдущем руководстве мы создали и разместили API в Code Capsules. В этом руководстве мы создадим клиент для этого API в виде бота Telegram. Это позволит нам получать данные о температуре, погоде и обменном курсе на ходу, отправляя сообщения нашему боту в приложении Telegram.

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

Начнем!

Требования

Для создания Telegram-бота нам понадобится:

  • Python 3.6+ установлен.
  • Учетная запись GitHub и Git установлены.
  • Virtualenv установлен.
  • Аккаунт Telegram.
  • Аккаунт Code Capsules.
  • API в Code Capsules, созданный с помощью руководства по Personal API.

О ботах Telegram

Боты Telegram отображаются как контакты в интерфейсе Telegram. Пользователи взаимодействуют с ботами Telegram, отправляя им сообщения с командами — это слова, которым предшествует косая черта, например. /погода или /валюта . Команды, отправленные на учетную запись бота в Telegram, будут переданы в бэкэнд-код бота (в нашем случае это будет код, который мы размещаем на Code Capsules).

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

Давайте создадим Telegram-бота.

Регистрация учетной записи бота и общение с BotFather

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

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

  1. Нажать «старт».
  2. Тип /newbot .
  3. Выберите имя для своего бота.
  4. Выберите имя пользователя для своего бота (должно заканчиваться на «бот»).

После выбора имени пользователя BotFather отправит в ответ токен авторизации . Это строка, которая позволяет вашему боту отправлять запросы к Telegram Bot API, аналогично токенам авторизации, которые мы использовали для получения данных о погоде и обменном курсе в личном руководстве по API. Обязательно сохраните этот токен в безопасном и уединенном месте.

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

Планирование и настройка

Мы собираемся реализовать две команды для нашего бота.

  • Когда мы отправим команду /weather , наш бот ответит данными о погоде из созданного нами API.
  • Когда мы отправим команду /currency , наш бот ответит обменными курсами из долларов США в канадские доллары, евро и ZAR.

Создание виртуальной среды и установка требований

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

.
 виртуальная среда окружения
 

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

  • Linux/MacOSX : источник env/bin/активировать
  • Windows : env\Scripts\activate.bat

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

Для взаимодействия с Telegram Bot API нам необходимо установить библиотеку python-telegram-bot, оболочку Python для Telegram Bot API. Мы также будем использовать библиотеку Python запросов для получения данных из API погоды и курса валют. Чтобы установить эти требования, введите в терминале следующее:

 pip устанавливает запросы python-telegram-bot
 

Получение данных из API

Теперь мы можем начать программировать. Создайте файл с именем bot.py в том же каталоге, где мы активировали виртуальную среду. В этом файле введите следующий код, заменив YOUR-URL-HERE на URL-адрес, указывающий на API погоды и обменного курса, размещенный в Code Capsules.

 запросов на импорт
url = 'ВАШ-URL-ЗДЕСЬ/ПОЛУЧИТЬ'
data = request.get(url) # запрашивает данные из API
data = data.json() # преобразует возвращаемые данные в json
# Получить значения из API
curr_temp = данные['curr_temp']
cad_rate = данные['USD_rates']['CAD']
eur_rate = данные['usd_rates']['EUR']
zar_rate = данные['usd_rates']['ZAR']
защита return_weather():
    print('Здравствуйте. Текущая температура в Кейптауне: '+str(curr_temp)+" по Цельсию. ")
деф return_rates():
    print("Здравствуйте. На сегодняшний день курсы конвертации долларов США следующие: USD->CAD = "+str(cad_rate)+
    ", USD->EUR = "+str(eur_rate)+", USD->ZAR = "+str(zar_rate))
return_weather()
return_rates()
 

Здесь мы запрашиваем данные о валюте и погоде из API и анализируем температуру и курсы конвертации. Затем мы распечатываем данные, используя return_weather() и return_rates() .

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

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

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

 из telegram.ext import Updater, CommandHandler
 

Из библиотеки python-telegram-bot импортируем два класса: Updater и CommandHandler . Мы скоро поговорим об этих классах.

Нам больше не нужно печатать наши данные — вместо этого мы вернем строку нашему боту, чтобы бот мог отобразить ее в Telegram. Замените def return_weather() и def return_rates() следующим:

 по определению return_weather():
    вернуться 'Здравствуйте. Текущая температура в Кейптауне: '+str(curr_temp)+" по Цельсию."
деф return_rates():
    return "Здравствуйте. На сегодняшний день курсы конвертации долларов США следующие: USD->CAD = "+str(cad_rate)+", USD->EUR = "+str(eur_rate)+", USD->ZAR = "+str( зар_рейт)
 

Теперь замените вызовы функций return_weather() и return_rates() кодом ниже:

 по умолчанию main():
    ТОКЕН = "ВАШ-БОТ-ТОКЕН-ЗДЕСЬ"
    updater = Updater (токен = ТОКЕН, use_context = True)
    диспетчер = updater.dispatcher
    weather_handler = CommandHandler("погода", погода)
    currency_handler = CommandHandler("валюта", валюта)
    start_handler = CommandHandler("старт", старт)
    диспетчер .add_handler (обработчик погоды)
    диспетчер.добавить_обработчик(currency_handler)
    диспетчер .add_handler (start_handler)
    updater. start_polling()
если __name__ == '__main__':
    главный()
 

В верхней части нашего нового основного метода , который будет вызываться при запуске этого файла, мы создаем экземпляр updater , экземпляр класса Updater библиотеки Telegram. Этот объект будет извлекать команды, отправленные нашему боту, и передавать их экземпляру класса Dispatcher . Мы назначили этот экземпляр Dispatcher переменной диспетчера для дальнейшего использования.

Далее мы создаем три разных CommandHandler классов, по одному на каждую команду, которую можно отправить нашему боту: /start , /weather и /currency . В каждый экземпляр мы передаем два аргумента: текст команды (без предшествующих /) и вызываемую функцию. Например, когда пользователь вводит команду /weather , будет вызвана функция weather() .

Давайте определим эту функцию и две другие. Чуть выше def main() введите следующие три определения функций.

 определяемая погода (обновление, контекст):
    context.bot.send_message(chat_id=update.efficient_chat.id, text=return_weather())
деф валюта (обновление, контекст):
    context.bot.send_message(chat_id=update.efficient_chat.id, text=return_rates())
def start (обновление, контекст):
    context.bot.send_message(chat_id=update.efficient_chat.id, text="Привет! Я отвечаю на /weather и /currency. Попробуйте!")
 

Каждая из этих функций вызывает функцию python-telegram-bot send_message() с идентификатором текущего чата и соответствующим текстом, либо возвращенным из одной из наших других функций, либо заданным в виде строки. Аргументы update и context предоставляются диспетчером автоматически.

Вернувшись в нашу функцию main() , мы используем dispatch.add_handler , чтобы добавить все три обработчика в наш диспетчер.

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

Файл кода bot.py теперь должен выглядеть так, как показано ниже. Еще раз обязательно замените YOUR-URL-HERE URL-адресом API, который вы создали в руководстве по API.

 из telegram.ext import Updater, CommandHandler
запросы на импорт
url = 'ВАШ-URL-ЗДЕСЬ/ПОЛУЧИТЬ'
data = request.get(url) # запрашивает данные из API
data = data.json() # преобразует возвращаемые данные в json
# Получить значения из API
curr_temp = данные['curr_temp']
cad_rate = данные['USD_rates']['CAD']
eur_rate = данные['usd_rates']['EUR']
zar_rate = данные['usd_rates']['ZAR']
защита return_weather():
    возвращение'Здравствуйте.  Текущая температура в Кейптауне: '+str(curr_temp)+" по Цельсию."
деф return_rates():
    return "Здравствуйте. На сегодняшний день курсы конвертации долларов США следующие: USD->CAD = "+str(cad_rate)+ ", USD->EUR = "+str(eur_rate)+", USD->ZAR = "+str( зар_рейт)
Def погода (обновление, контекст):
    context.bot.send_message(chat_id=update.efficient_chat.id, text=return_weather())
деф валюта (обновление, контекст):
    context.bot.send_message(chat_id=update.efficient_chat.id, text=return_rates())
def start (обновление, контекст):
    context.bot.send_message(chat_id=update.efficient_chat.id, text='Привет! Я отвечаю на /weather и /currency. Попробуйте это!')
деф основной():
    ТОКЕН = "ВАШ-БОТ-ТОКЕН-ЗДЕСЬ"
    updater = Updater (токен = ТОКЕН, use_context = True)
    диспетчер = updater.dispatcher
    Weather_handler = CommandHandler('погода', погода)
    currency_handler = CommandHandler('валюта',валюта)
    start_handler = CommandHandler('старт',старт)
    диспетчер .add_handler (обработчик погоды)
    диспетчер. добавить_обработчик(currency_handler)
    диспетчер .add_handler (start_handler)
    updater.start_polling()
если __name__ == '__main__':
    главный()
 

Ниже приведен разговор с ботом, созданным с помощью этой программы. Запустите bot.py и попробуйте сами.

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

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

Опрос против веб-перехватчиков

Наш файл bot.py может получать команды, отправленные ему в Telegram, двумя способами. В настоящее время код постоянно опрашивает Telegram, независимо от того, используется ли бот. Если бы мы разместили эту текущую версию на Code Capsules, мы бы потратили впустую пропускную способность, поскольку подавляющее большинство опросов ничего не дали бы.

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

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

Создание веб-перехватчика

Чтобы настроить веб-перехватчик, замените строку updater.start_polling() в основной функции кодом ниже:

 ПОРТ = int(os.environ.get('ПОРТ', '443'))
    HOOK_URL = 'ВАШ-КОДЕКАПСУЛЫ-URL-ЗДЕСЬ' + '/' + ТОКЕН
    updater.start_webhook(listen='0.0.0.0', port=PORT, url_path=TOKEN, webhook_url=HOOK_URL)
    updater.idle()
 

Здесь мы запускаем веб-перехватчик, который будет прослушивать наш URL-адрес Code Capsules через TCP-порт 443 и путь к нашему токену. Таким образом, Telegram будет ретранслировать команды, отправленные нашему боту, на следующий URL:

 https://ВАШ-CODECAPSULES-SUBDOMAIN.codecapsules.io:443/TOKEN
 

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

Подготовка к развертыванию

Прежде чем отправить наш код на GitHub и развернуть его на Code Capsules, нам нужно внести одно небольшое изменение в код и создать несколько файлов.

Создание переменной среды ключа API

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

Заменить эту строку

 ТОКЕН = "ВАШ-БОТ-ТОКЕН-ЗДЕСЬ"
 

с ниже

 импорт ОС
ТОКЕН = os. getenv('BOTAPIKEY')
 

os.getenv('BOTAPIKEY') будет искать переменную среды с именем «BOTAPIKEY». Когда мы размещаем нашего бота в Code Capsules, мы устанавливаем для этой переменной среды ключ, который мы получили от BotFather.

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

Создание файла Procfile и требования.txt

Code Capsules требует пару файлов для развертывания нашего приложения: Procfile и requirements.txt . Первый сообщает Code Capsules, как запускать наше приложение, а второй сообщает ему, какие библиотеки ему нужно установить.

Для создания Procfile :

  1. Перейдите в каталог, содержащий файл bot.py , и войдите в виртуальную среду.
  2. Создайте файл с именем Procfile (без расширения).
  3. Откройте Procfile , введите web: python3 bot. py и сохраните файл.

В том же каталоге откройте терминал и активируйте виртуальную среду. Затем введите pip3 freeze > requirements.txt , чтобы создать список требований для нашего сервера Code Capsules.

Теперь мы можем отправить наш код на GitHub. Создайте репозиторий GitHub и отправьте в репозиторий файлы requirements.txt , Procfile и bot.py .

Развертывание бота для кодирования капсул

Со всеми файлами, отправленными на GitHub, давайте развернем бота в Code Capsules:

  1. Войдите в Code Capsules и при необходимости создайте команду и пространство.
  2. Связать кодовые капсулы с ранее созданным репозиторием GitHub.
  3. Введите место для кодовых капсул.
  4. Создайте новую капсулу, выбрав тип капсулы «Backend».
  5. Выберите репозиторий GitHub, содержащий бота, — оставьте «Подпуть репо» пустым и нажмите «Далее».
  6. Оставьте поле «Выполнить команду» пустым и нажмите «Создать капсулу».

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

  1. Перейдите к своей капсуле.
  2. Перейдите на вкладку «Конфигурация».
  3. Добавьте переменную среды с именем «BOTAPIKEY» и присвойте ей ключ API вашего бота в качестве значения. Обязательно нажмите кнопку «Обновить капсулу» после добавления переменной.

Теперь давайте добавим нашему веб-перехватчику правильный домен.

  1. Перейдите на вкладку «Обзор».
  2. Скопируйте домен, найденный в разделе «Домены».
  3. Откройте файл bot.py и найдите строку HOOK_URL = 'YOUR-CODECAPSULES-URL-HERE' + '/' + TOKEN .
  4. Замените «YOUR-CODECAPSULES_URL» только что скопированным доменом.
  5. Зафиксируйте и отправьте эти изменения на GitHub.

После внесения этих изменений Capsule перестроится.