Как создать Telegram-бота на облачных функциях
Инструкция о том, как настроить Telegram-бота на Облачных функциях, используя официальный API
Введение
С помощью ботов можно упростить себе задачу коммуникации с пользователями, создав для них умного помощника. Боты понимают текстовые команды и могут обращаться к API вашего вебсайта, сервиса или быть самостоятельным продуктом с уникальными услугами. Обычно, для создания бота требуется сервер, но в этой статье мы разберем подход, позволяющий обойтись без него. Он идеален при резких колебаниях количества запросов и прекрасно выдерживает пиковые нагрузки.
Настроить Telegram-бота на Облачных функциях, используя официальный API и заготовленный нами пример, можно в 3 этапа:
- Запрограммировать логику работы Telegram-бота.
- Зарегистрировать нового бота в Telegram.
- Связать бота и его логику воедино.
Запрограммировать логику работы Telegram-бота
Чтобы упростить задачу, мы написали пример такого бота. Его исходный код доступен по ссылке github.com/selectel/cloud-telegram-bot. Он понимает команды:
/start
с приветственным сообщением;
/sticker
с ответом в виде стикера;
/getwebhook
чтобы вы могли получить информацию о настройках вашего бота;
/setwebhook
для настройки вашего бота, но об этом позже.
Пройдите следующие шаги с нашим примером бота, чтобы освоиться:
- Скачайте исходный код как архив («Clone or download» → «Download ZIP») и распакуйте его.
- Внутри должно быть:
- «setup.py» с минимальным кодом, чтобы Python-окружение приняло содержимое папки за модуль для установки;
- «requirements.txt» с описанием зависимостей;
- «bot» — папка с исходным кодом нашего бота.
- Выделите все эти файлы и папки, а затем создайте из них новый ZIP-архив, тогда исходный код внутри архива не будет иметь лишних папок (как в случае с архивом, скачанным с github).
- Перейдите в панели управления в раздел Облачная Платформа → Функции и нажмите кнопку Создать функцию.
- Выберите среду выполнения и задайте имя, например
Bot
. - В поле Загрузить выберите Архив.
- Загрузите ZIP-файл в качестве Кода функции.
- Укажите Путь к файлу как
/bot/tele_bot.py
. - Укажите Вызываемую функцию как
main
. - Получите токен по инструкции и в поле Переменные окружения добавьте его ключ и значение.
- Нажмите кнопку Сохранить и развернуть.
- Чтобы получить ссылку для вызова функции, перейдите на вкладку Триггеры и нажмите на тумблер HTTP-запрос.
Теперь у нас есть API, реализующее логику ответов бота. Следующим этапом мы зарегистрируем его в Telegram.
Зарегистрировать нового бота в Telegram
Чтобы Telegram знал о существовании нашего бота, его нужно зарегистрировать. Для этого существует только один способ:
- Найдите бота @BotFather в Телеграм. Это официальный бот, созданный специально для управления ботами.
- Отправьте ему команду:
/newbot
- @BotFather спросит вас, как вы назовёте вашего бота. Следующим сообщением отправьте его название, заканчивающееся на «_bot».
- Запишите полученный токен от @BotFather — это ключ для работы с Telegram API.
Теперь у нас API, регистрация бота в Telegram и его токен. Осталось связать это вместе.
На этом этапе надо сделать так, чтобы бот знал токен пользователя, а Telegram знал, где его API:
- Найдите переменную окружения «TOKEN» в настройках функции. Мы оставили её пустой на первом этапе.
- Укажите в этой переменной токен вашего бота, который получили от @BotFather.
- Нажмите Сохранить и развернуть.
Далее нужно направить сообщения, которые пользователи отправляют в Telegram, нашему боту — в то API, которое для него создали.
Через бота @SelectelServerless_bot
- Найдите бота @SelectelServerless_bot в Телеграме.
- Введите команду:
/setwebhook <Токен от вашего бота> <URL от облачной функции>
- Бот ответит тем, что получит из Telegram API. Если все хорошо, это будет «true».
- Чтобы удостовериться в том, что все корректно, отправьте команду:
/getwebhook <Токен от вашего бота>
- В ответ должна прийти информация о webhook, в том числе указанный вами URL.
Заключение
Готов для работы бот, доступный в Telegram, отвечающий на команды и способный автоматически масштабироваться под нагрузкой и без сервера.
Облачные серверы
И уже через пару минут сможете арендовать сервер, развернуть базы данных или обеспечить быструю доставку контента.
Как написать Telegram бота: практическое руководство
6 Апрель 2016, Python, 451013 просмотров, How To Create a Telegram Bot Using PythonВ последнее время Telegram у всех на слуху. Нужно отдать должное отделу маркетинга этого приложения, шумиху подняли на славу. Одной из основных «фишек» Telegram является его якобы защищённость — по словам Павла Дурова вся переписка между пользователями шифруется. Более того, ни одна спец.служба мира не будет иметь доступ к вашим сообщениям. Но в данной статье речь не об этом. Сегодня хотелось бы поговорить о не менее крутой фишке в Telegram, а именно о ботах. Помимо того, что в сети уже полно информации о различного рода Telegram ботах (github бот, например), мессенджер открыл своё API для разработчиков, и теперь каждый может создать своего собственного бота с блэкджеком и плюшками.
В статье я приведу пример написания онлайн бота с использованием Python и Django фреймворка. То есть мы «запилим» полноценное веб-приложение, которое будет крутиться на удалённом хосте и принимать команды от пользователей. Весь исходный текст доступен в моём github репозитории.
Документация, описывающая процесс взаимодействия с ботами Telegram находится тут. Чтобы не изобретать велосипед, я нашел неплохую Python библиотеку, реализующую все основные функции ботов — telepot. Как я уже упоминал ранее, для того, чтобы обслуживать пользователей нашего бота мы будет разрабатывать веб-приложение, используя Django фреймворк.
Как создать Telegram бота?
Для начала нам необходимо зарегистрировать в Telegram нашего будущего бота. Это делается следующим образом:
- Необходимо установить приложение Telegram на телефон или компьютер. Скачать приложение можно тут
- Добавляем к себе в контакт-лист бота с именем BotFather
- Запускаем процедуру «общения» с ботом нажатием кнопки Start. Далее перед нами предстанет список команд точно как на скриншоте.
- Для того, чтобы создать нового бота необходимо выполнить команду /newbot и следовать инструкциям. Обратите внимание, что username для бота должен всегда содержать в конце слово bot. Например, DjangoBot или Django_bot.
- Для нашего бота я выбрал имя PythonPlanetBot, так как его основная функция заключается в парсинге RSS feed сайта Python Planet и выдача информации о последних постах пользователю 🙂
После создания бота, обратите внимание на строку с текстом:
Use this token to access the HTTP API:
За которой следует т. н. token по которому мы будем манипулировать нашим ботом. Помимо функции создания telegram бота, BotFather также имеет ряд других возможностей:
- Присвоить боту описание
- Установить аватар
- Поменять token
и так далее. Полное описание доступных команд можно увидеть на первом скриншоте.
Приступаем к кодированию
Как я ранее уже упоминал, мы будем писать веб-приложение на Django. Но стоит отметить, что это делать необязательно. Можно обойтись и обычным Python скриптом, правда в этом случае необходимо будет периодически опрашивать Telegram на предмет новых запросов от пользователей бота (используя метод getUpdates) и увеличивая offset для получения самых последних данных без повторений. В Telegram существует два взаимоисключающих метода получения команд/сообщений для вашего бота.
- Использование вызова API метода
- Установка Webhook
Установка Webhook заключается в передаче боту специального URL адреса на который будет поступать POST запрос каждый раз, когда кто-то начнёт посылать сообщения боту. Именно этот вариант мы и будем использовать для взаимодействия между ботом и его пользователем. Для того, чтобы задать URL, необходимо использовать API метод setWebhook. Отмечу, что URL должен начинаться с https, то есть иметь защищённое SSL соединение с валидным сертификатом. Telegram разрешает использовать самоподписанный сертификат, правда для этого необходимо в методе
Подробнее о getUpdates и setWebhook можно почитать соответственно здесь и тут.
Итак, вернёмся к python библиотеке для работы с Telegram — telepot. На текущий момент самой последней её версий является 6.7. Устанавливаем её в виртуальное окружение python virtualenv:
pip install telepot
Самый простой вариант взаимодействия с Telegram ботом на Python выглядит следующим образом:
import telepot token = '123456' TelegramBot = telepot.Bot(token) print TelegramBot.getMe()
Переменной token присваиваем значение токена, полученного при создании бота через BotFather. В итоге после выполнения этих команд мы получим:
{u'username': u'PythonPlanetBot', u'first_name': u'Python Planet Bot', u'id': 199266571}
Поздравляю! Мы вызывали самый простой API запрос getMe, который возвращает информацию о боте: username, id, first_name.
Добавим нашего бота к себе в контакт-лист и пошлём ему первую стандартную команду /start
Выполняем код:
TelegramBot.getUpdates() [{u'message': {u'date': 1459927254, u'text': u'/start', u'from': {u'username': u'adilkhash', u'first_name': u'Adil', u'id': 31337}, u'message_id': 1, u'chat': {u'username': u'adilkhash', u'first_name': u'Adil', u'type': u'private', u'id': 7350}}, u'update_id': 649179764}]
Процесс общения с telegram ботом происходит по HTTPS; для передачи данных используется JSON. Метод getUpdates возвращает список/массив из объектов типа Update. Внутри Update находится объект Message. Для стандартного взаимодействия с ботом нас фактически интересует именно объект Message, у которого мы считываем атрибут text, хранящий в себе текст, переданный боту и объект chat, в котором лежит информация о пользователе, инициировавшем общение с нашим Telegram ботом. Также имеется параметр update_id, который служит в качестве offset параметра при вызове метода getUpdates. То есть update_id+1 вернёт все сообщения, поступившие после последнего update_id, при этом все предыдущие сообщения будут удалены.
TelegramBot.getUpdates(649179764+1) [{u'message': {u'date': 1459928527, u'text': u'hello bro', u'from': {u'username': u'adilkhash', u'first_name': u'Adil', u'id': 31337}, u'message_id': 13, u'chat': {u'username': u'adilkhash', u'first_name': u'Adil', u'type': u'private', u'id': 7350}}, u'update_id': 649179765}]
На этапе написания простейшего Telegram бота нам этих вызовов достаточно. Приступим к написанию Django приложения для обслуживания наших пользователей.
Простая функция парсинга RSS фида Planet Python выглядит вот так:
# -*- coding: utf8 -*- from xml.etree import cElementTree import requests def parse_planetpy_rss(): """Parses first 10 items from http://planetpython.org/rss20.xml """ response = requests.get('http://planetpython.org/rss20.xml') parsed_xml = cElementTree.fromstring(response.content) items = [] for node in parsed_xml.iter(): if node.tag == 'item': item = {} for item_node in list(node): if item_node.tag == 'title': item['title'] = item_node.text if item_node.tag == 'link': item['link'] = item_node.text items.append(item) return items[:10]
Здесь я использую python библиотеку requests для работы с HTTP в самом простейшем варианте без обработки ошибок. Django «вьюшка» выглядит следующим образом:
TOKEN = '<Our_Bot_Token>' TelegramBot = telepot.Bot(TOKEN) def _display_help(): return render_to_string('help. md') def _display_planetpy_feed(): return render_to_string('feed.md', {'items': parse_planetpy_rss()}) class CommandReceiveView(View): def post(self, request, bot_token): if bot_token != TOKEN: return HttpResponseForbidden('Invalid token') commands = { '/start': _display_help, 'help': _display_help, 'feed': _display_planetpy_feed, } try: payload = json.loads(request.body.decode('utf-8')) except ValueError: return HttpResponseBadRequest('Invalid request body') else: chat_id = payload['message']['chat']['id'] cmd = payload['message'].get('text') # command func = commands.get(cmd.split()[0].lower()) if func: TelegramBot.sendMessage(chat_id, func(), parse_mode='Markdown') else: TelegramBot.sendMessage(chat_id, 'I do not understand you, Sir!') return JsonResponse({}, status=200) @method_decorator(csrf_exempt) def dispatch(self, request, *args, **kwargs): return super(CommandReceiveView, self).dispatch(request, *args, **kwargs)
CommandReceiveView ждёт POST запрос на себя, парсит его и отвечает исходя из заданной команды. Полноценное Django приложение можно найти по этой ссылке. Стоит отметить в коде использование ещё одного API вызова — sendMessage. Этот метод отправляет сообщение заданному пользователю, используя при этом chat_id и сам текст сообщения. Chat_id — это уникальный идентификатор чата между пользователем и ботом (его идентификатор есть в ответе на запрос
Я предполагаю, что вы уже клонировали мой репозиторий, настроили окружение и установили все необходимые зависимости: Django, requests, telepot. Если же вы не знаете как это сделать, то совсем скоро я напишу цикл статей о разработке веб-приложений на Python, включая разбор экосистемы: разработка, настройка, деплой.
Итак, веб-приложение на Django запущено. Как же начать тестировать бота? А всё очень просто — необходимо симулировать действия Telegram сервиса. Для этого нам понадобится HTTP клиент и тело запроса. В качестве HTTP клиента я часто использую Chrome плагин под названием Postman, а тело запроса мы возьмём напрямую из данных, полученных с помощью API вызова getUpdates.
После запуска runserver, URL на который необходимо посылать запрос выглядит следующим образом:
http://127.0.0.1:8000/planet/b…BOT_TOKEN/
где BOT_TOKEN — это токен нашего бота. Смотрим скриншот:
А давайте-ка отправим команду feed для получения списка новостей из Planet Python:
На скриншотах видно, что бот адекватно отреагировал на нашу команду вывести список последних 10 постов.
Следующим шагом является деплой нашего Django приложения на удалённый хост и последующий вызов метода setWebhook для передачи URL на который будет посылаться POST запрос от сервиса Telegram каждый раз при поступлении команд боту от пользователей. Об этом мы поговорим в следующей заметке.
💌 Присоединяйтесь к рассылке
Понравился контент? Пожалуйста, подпишись на рассылку.
Please enable JavaScript to view the comments powered by Disqus.Как создать своего первого бота Telegram: руководство для начинающих | Process Street
Я был одержим научной фантастикой с подросткового возраста, поэтому меня всегда привлекало программирование. Я был очарован идеей, что можно написать программу, которая ведет себя случайным образом — для меня это уже было глубоко из области научной фантастики!
Эта одержимость подпитывала мои первые набеги на код и привела к созданию тонны забавных ботов. Например, тот, который описывает страшные места, комбинируя слова случайным образом, и этот, который раскрашивает PNG в блочные цвета.
Ничего особенного. Я вряд ли мастер-программист, и вам не обязательно им быть. Обладая базовыми навыками программирования и API, вы сможете создавать действительно полезное программное обеспечение для развлечения и получения прибыли. В этом уроке мы рассмотрим создание бота Telegram с нуля.
Бот Telegram можно использовать с Intercom API, чтобы предоставить агентам службы поддержки доступ к своим клиентам, использующим Telegram. Это также может включать автоматизацию, которая объединяет полезные ресурсы с живым чатом, как в примере ниже с orat.io:
Telegram — отличный дом для ботов, ориентированных на клиентов, с более чем 200 000 000 активных пользователей в месяц и ежегодным приростом 50%. Это платформа, которую ваша аудитория уже может использовать, что уменьшает трения и способствует принятию. Кроме того, создавать ботов для Telegram очень просто — это самый простой опыт создания ботов, который у меня когда-либо был.
Вот почему я решил написать это руководство — оно могло бы стать хорошей отправной точкой для начинающих программистов, которые хотят найти что-то мгновенно полезное (и потенциально ценное), используя популярную и функциональную платформу.
Первый бот, который я сделал для Telegram, использовал RSS для поиска материалов Hacker News, соответствующих поисковому запросу:
Поэкспериментируйте с ботом — он здесь!
Знания из этого руководства и немного дополнительного чтения помогут вам создать чат-бота поддержки для вашей компании, программу чтения RSS-каналов, панель управления для вашего умного дома или бота, который отвечает, используя только цитаты из Шекспира. Маленькие программные проекты, подобные этому, доставляют огромное удовольствие и бесконечно расширяемы. Чем больше вы читаете и придумываете функции, тем дальше вы можете продвигать своего бота.
В этом руководстве вы узнаете:
- Как написать Telegram бота с нуля
- Как добавить новые команды в словарь бота
- Основные команды терминала для создания файлов и навигации по папкам
- Немного языка программирования Ruby
- Как расширить Ruby с помощью гемов
- Как заставить вашего бота возвращать случайные ответы из списка
- Несколько простых команд git, которые помогут вам управлять файлами кода и передавать их
- Как развернуть бота на сервере и запустить его 24/7
Перед началом работы вам понадобятся:
- Терминал bash. Поставляется с macOS и Linux, но не с большинством установок Windows. Если вы следуете этому руководству на компьютере с Windows, на котором не установлено юбилейное обновление Windows 10, вы можете использовать эмулятор или эмулировать Linux на виртуальной машине.
- Рубин. См. официальную документацию Ruby для получения руководств по конкретным ОС. Я лично использую Homebrew на macOS, но пользователи Windows могут установить его с помощью этого инструмента.
- Упаковщик. Bundler помогает управлять драгоценными камнями Ruby, которые добавляют дополнительную функциональность вашим приложениям. Он понадобится вам, чтобы добавить интерфейс Telegram API к вашему боту. Просто запустите
gem install bundler
в своем терминале, чтобы установить его. - Текстовый редактор. Теоретически вы могли бы использовать Notepad или TextEdit, но большинство рекомендовало бы специально созданный редактор, такой как Atom, который выделяет синтаксис и помогает сделать ошибки кода более очевидными.
Итак, приступим.
Шаг 1: Загрузите приложение Telegram для рабочего стола
Telegram — преимущественно мобильное приложение, но в целях разработки вам потребуется установить его на тот же компьютер, который вы используете для написания кода. Таким образом, вы можете быстро протестировать его, не разблокируя каждый раз телефон. И вы сможете скопировать и вставить ключ API своего бота Telegram прямо в текстовый редактор.
Время захватить этот ключ API!
Шаг 2. Свяжитесь с BotFather, чтобы получить ключ API
Создание бота Telegram — новый процесс, поскольку большая его часть сосредоточена вокруг ваших собственных взаимодействий с ботом Telegram. Этот бот — BotFather. В настольном приложении Telegram вам нужно найти его имя пользователя и начать с ним разговор.
Дайте BotFather команду запуска, набрав /start
.
Вы увидите список команд, которые помогут вам создавать, редактировать и управлять своими ботами. Поскольку это ваш первый раз, вам понадобится /newbot 9.0063 .
По сравнению с процессом создания бота Twitter, бота Mastodon или любого другого типа бота, с которым я экспериментировал, Telegram упрощает первоначальную настройку super . Я думаю, это доказывает, каким отличным инструментом могут быть боты Telegram!
После ввода команды /newbot
вы можете выбрать имя и имя пользователя для своего бота. Имя — это то, как ваши пользователи увидят бота в своем списке контактов, а имя пользователя — то, как они его найдут. Думайте об имени пользователя как о дескрипторе Twitter; оно должно быть уникальным, и лучше всего, если оно будет коротким и запоминающимся.
После этого вы получите ключ API вашего бота. Ключ API — это то, как Telegram узнает, что код, который вы пишете, связан с этим конкретным ботом. У каждого бота есть свой ключ API, и вы не должны никому его передавать, иначе они могут захватить вашего бота и заставить его выполнять свои злые дела.
На этом наша беседа с BotFather завершается — переходим к коду!
Шаг 3: Настройка драгоценных камней и каталога бота
Откройте терминал и выполните mkdir telegram-bot
. Это создаст новый каталог для файлов вашего бота. Лучше всего хранить их в одной папке, чтобы ими было легко управлять. Перейдите в каталог с помощью cd telegram-bot
, а затем выполните следующие действия:
touch Gemfile
touch bot.rb
atom .
Это создает два пустых файла: один для указания необходимых вам драгоценных камней, а другой — место, где будет жить код бота. Последняя команда открывает оба этих файла в Atom.
Щелкните Gemfile на боковой панели Atom и вставьте следующее:
источник https://rubygems.org gem 'telegram_bot'
Это говорит Bundler получить интерфейс Ruby для Telegram API с rubygems.org.
Чтобы завершить настройку драгоценного камня, вернитесь к своему терминалу и введите bundle
. Вот что вы должны увидеть:
Это все, что касается настройки драгоценного камня, теперь мы, наконец, добрались до кода.
Программирование вашего первого бота Telegram
Фактический код, который будет постоянно работать на сервере, находится внутри bot. rb. Сейчас он пуст, но здесь мы собираемся связать гем Telegram, который мы только что связали, и создадим бота.
Кода написать не так много. К тому времени, когда вы закончите, у вас будет следующее:
В Telegram это то, что делает приведенный выше код:
Давайте посмотрим, что делает каждая часть кода, и напишем, как мы идти.
требуется 'telegram_bot' токен = 'ТОКЕН' bot = TelegramBot.new(токен: токен)
(Замените ТОКЕН токеном API, который вы скопировали из BotFather)
Ruby позволяет довольно легко угадать, какой код будет делать. Три строки выше добавляют функциональность бота Telegram в ваш файл, а затем создают новый объект бота из класса TelegramBot, аутентифицируемый с помощью вашего токена, чтобы программа знала, куда отправлять данные.
Следующая часть представляет собой один большой цикл. Сначала это кажется запутанным, но его легко разобрать.
bot.get_updates(fail_silently: true) сделать |сообщение| помещает "@#{message. from.username}: #{message.text}" команда = сообщение.get_command_for(бот) сообщение.ответ сделать |ответить| case команда когда /старт/я answer.text = "Все, что я могу сделать, это поздороваться. Попробуйте команду /greet." когда /приветствую/я answer.text = "Здравствуйте, #{message.from.first_name}. 🤖" еще answer.text = "Я понятия не имею, что означает #{command.inspect}." конец помещает "отправка #{reply.text.inspect} на @#{message.from.username}" answer.send_with(бот) конец конец
Первая строка указывает боту продолжать слушать команды. И, когда он получает команду передать сообщение
переменной. Строка помещает
и записывает команду на ваш терминал, чтобы вы могли видеть, что происходит во время работы бота.
Ответные действия бота сохраняются в операторе case. Входные данные оператора case передаются из переменной message
после того, как она была очищена методом гема get_command_for
. Текст ответа бота устанавливается в зависимости от сохраненной команды, а затем, наконец, отправляется с send_with
перед перезапуском цикла.
С помощью этой настройки вы теперь можете найти своего бота в Telegram и отправить команды /start
и /greet
и посмотреть, как он работает.
Для этого сохраните изменения в Atom и запустите в терминале ruby bot.rb
. Пока этот терминал открыт и работает, ваш бот будет отправлять ответы!
Настройка вашего нового блестящего бота
Созданный вами бот хорош, но не очень интересен. Основные биты есть, а это значит, что вы можете легко их поменять и расширить.
Части, на которые следует обратить внимание при настройке, — это строки when /command/i
и текст между кавычками в строках response.txt
. Это входные данные, которые принимает ваш бот, и сообщения, которые он отправляет в ответ.
Итак, если вы хотите сказать что-то другое в ответ на команду /greet
, вы должны изменить значение response. text
под командной строкой приветствия ( когда /greet/i
). Вот вариант, который вы можете попробовать:
когда /приветствовать/я приветствия = ['bonjour', 'hola', 'привет', 'sveiki', 'namaste', 'salaam', 'szia', 'halo', 'ciao'] answer.text = "#{greetings.sample.capitalize}, #{message.from.first_name}!"
Здесь я создал массив с несколькими различными способами поздороваться, а затем случайным образом добавил один из них в сообщение, используя метод примера.
Превратите своего бота в нечто потрясающее
Вы можете добавить к своему боту столько команд, ответов и функций, сколько захотите. По большей части это воображение и много гугления на ходу. Если вы хотите узнать много вещей, которые применимы к этому боту, начните с Учим Ruby на сложном пути, чтобы разобраться с основами языка. Немного попрактиковавшись и полагаясь на StackOverflow, вы сможете:
- Подключите другие API для получения данных из таких источников, как Airtable, Slack, RSS или Twitter. Вот здесь-то и появляется действительно захватывающая функциональность — вы можете создать бота, который действует как диалоговый интерфейс для набора данных или функций, например, бот, который возвращает результаты поиска из Twitter или сообщения в Slack.
- Сохранение пользовательского ввода в базе данных. Вы можете создать бота Telegram, который предлагает автоматическую поддержку пользователей или отвечает на запросы и сохраняет их адреса электронной почты в базе данных. Gem Sequel упрощает создание, запись, редактирование и чтение баз данных.
- Создайте текстовое приключение. Colossal Cave Adventure, одна из первых терминальных игр, была перенесена в Telegram в виде бота. Проверьте это здесь и посмотрите источник здесь.
Если вам нужно вдохновение, вы можете прочитать исходный код бота других людей и проверить список ботов Telegram — попробуйте понять, как они работают, и воссоздайте их на практике.
Запуск вашего бота 24/7
Прямо сейчас ваш бот работает в вашем терминале на вашем компьютере. Это нормально, пока вам не нужно перезагрузить компьютер, ваш Wi-Fi не отключится или ваш компьютер не перейдет в спящий режим. Когда это происходит, он завершает процесс бота, и пользователи не получают от него ответа.
Процесс перемещения вашего бота из среды разработки (ваш компьютер, на котором вы использовали Atom для написания бота) в производственную среду (сервер) называется развертыванием. Есть несколько вариантов развертывания вашего бота, но в обоих случаях мы начнем с загрузки файлов в Bitbucket. Bitbucket позволяет вам использовать git, систему контроля версий, которая помогает вам безопасно вносить и отслеживать изменения в коде вашего бота. Загрузив файлы своего бота в Bitbucket, вы можете использовать Bitbucket как способ получить файлы бота, когда вы вошли в систему хоста.
Зарегистрируйтесь в Bitbucket и создайте новый репозиторий.
С открытым терминалом и в том же каталоге, где находится исходный код вашего бота, введите следующее:
git init
git add .
git commit -m 'initial commit'
Теперь следуйте инструкциям Bitbucket после создания нового репозитория. Мои:
После ввода этих двух выделенных команд в моем терминале и предоставления моего пароля Bitbucket по запросу файлы загружаются. Поскольку ваш код живет в облаке, пришло время выбрать способ развертывания.
Развертывание с помощью Raspberry Pi
На этом маленьком компьютере Raspberry Pi у меня на столе установлено несколько ботовRaspberry Pi — отличная инвестиция, если вы планируете создавать и развертывать ботов. цена SD-карты. Он потребляет очень мало энергии, поэтому вы можете держать его включенным все время и не беспокоиться о стоимости. Может показаться заманчивым купить комплект, в который входят клавиатура, мышь и чехол, но все, что вам нужно, — это зарядное устройство USB, SD-карта, кабель Ethernet и сам компьютер. Вероятно, большинство из этих вещей уже есть у вас в офисе.
Развертывание с облачным сервером
Вам не нужно владеть компьютером, на котором работает ваш бот, вы можете использовать память и мощность чужого компьютера для удаленного запуска бота. Популярные решения для развертывания в облаке включают Amazon Web Services (AWS), DigitalOcean и Heroku.
Из трех наиболее начального уровня являются DigitalOcean и Heroku. Нажмите здесь, чтобы получить учетную запись DigitalOcean с кредитом в размере 10 долларов — этого достаточно, чтобы запустить сервер в течение двух месяцев, пока вы его тестируете.
Когда вы зарегистрируетесь в DigitalOcean и создадите новый дроплет, вы узнаете, как подключиться к серверу через SSH и запустить консоль.
Отсюда это тот же процесс, что и на вашем локальном компьютере, независимо от используемого вами сервера. В конце концов, это просто bash-терминал. После настройки сервера давайте перейдем к фактическому развертыванию.
Процесс развертывания
На новом сервере — будь то Raspberry Pi или облачный сервер, такой как Digital Ocean — вам необходимо установить Ruby, Bundler и Git:
обновление sudo apt-get
обновление sudo apt-get
curl -L https://get. rvm.io | bash -s stable --ruby
sudo apt-get install bundler
sudo apt-get install git
Затем создайте новый каталог для своего бота, перейдите туда и загрузите файлы из Bitbucket с помощью следующих команд:
mkdir bots
cd bots
git clone https://[email protected]/benjbrandall/telegram-bot.git
Не забудьте заменить URL-адрес выше (https://benjbran…) на URL-адрес репозитория вашего бота на Битбакет. Вы найдете всю команду клонирования через Bitbucket, поэтому вам не придется делать это вручную.
Затем введите bundle
, чтобы установить зависимости gem, а затем ruby bot.rb
, чтобы запустить бота на постоянной основе.
Примечание. Если вы подключаетесь к своему серверу через SSH, вам нужно запустить бота с nohup ruby bot.rb и
, чтобы убедиться, что бот не перестанет работать после завершения сеанса SSH. Теперь вы можете закрыть окно терминала, зная, что ваш бот тихонько пищит в фоновом режиме. 🤖
На этом ваша первая атака на бота Telegram завершена. Попутно вы узнали о терминале, Ruby, драгоценных камнях, Telegram API и о том, как развернуть бота на сервере. Есть вопросы или предложения? Вы можете написать мне в Твиттере.
Создание бота Telegram с помощью учебника по Python с примерами
Введение
Автоматический чат-бот действительно полезен для вовлечения в беседу. На таких платформах, как Facebook, Google и других, мы можем разрабатывать чат-ботов. В этом уроке мы узнаем, как создать чат-бота Telegram и использовать его для подготовки текстовых сообщений с подробными ответами.
Здесь мы узнаем, как мы можем получить различные типы ответов от бота, такие как:
- Текст
- Изображение
- Видео
- Документ
- Аудио
- Опрос
- Кнопки быстрого ответа
- Кнопки со ссылками
Действия по созданию бота Telegram
Следуйте приведенным ниже инструкциям, чтобы создать чат-бота Telegram.
Шаг 1 : Откройте свою учетную запись Telegram и в строке поиска введите «BotFather».
Шаг 2 : Нажмите «BotFather» и нажмите кнопку «Пуск».
Шаг 3 : Введите «/newbot».
Шаг 4 : Введите уникальное имя бота.
Шаг 5 : Теперь введите уникальное имя пользователя для своего бота.
Помните: имя пользователя должно заканчиваться на «bot». Например. «Tetris_bot» или «Tetrisbot».
Шаг 6: После указания уникального имени пользователя вы получите сообщение, подобное приведенному ниже. он содержит токен для доступа к HTTP API. Обеспечьте безопасность своего токена и храните его в безопасном месте.
Шаг 7 : Создание фляжного приложения для ответа веб-перехватчика.
Прежде всего, вам необходимо установить на свой компьютер python и flask.
$ pip install Flask
from flask import Flask приложение = фляга (__имя__) @app. route('/') индекс определения(): вернуть "Добро пожаловать!
" если __name__ == '__main__': app.run(threaded=True)
Запустите этот код, чтобы проверить, правильно ли работает приложение фляги. Когда вы запустите код, вы получите ссылку на сервер, например «http://127.0.0.1:5000/». Нажмите на эту ссылку, и вы будете перенаправлены на веб-страницу, где увидите ответ «Добро пожаловать!»
Шаг 8 : Настройка NGROK.
Перейдите в Ngrok и введите команду «ngrok http 5000», после выполнения этой команды вы получите ссылки.
Из этих ссылок Ngrok скопируйте ссылку HTTPS и вставьте ее в свой браузер. Вы увидите ответ «Добро пожаловать!» так же, как предыдущий шаг.
Шаг 9 : Настройка веб-перехватчика.
Теперь вам нужно установить вебхук для телеграмм бота.
Вы можете сделать это, запустив ссылку в браузере.
https://api.telegram.org/bot<токен вашего бота>/setWebhook?url=
После запуска ссылки в веб-браузере вы получите ответ, показанный ниже. изображение.
Шаг 10 : Получите ответ JSON.
Теперь нам нужно будет получить JSON-ответ от телеграм-бота на любой текст, который мы пишем боту.
Теперь откройте VS Code, добавьте следующий код и запустите его по той же ссылке Ngrok, по которой вы запускали предыдущий код.
из фляги импорта Фляга из запроса на импорт фляги из фляги импортировать ответ запросы на импорт приложение = фляга (__имя__) @app.route('/', методы=['GET', 'POST']) индекс определения(): если request.method == 'POST': сообщение = запрос.get_json() печать (сообщение) вернуть ответ('хорошо', статус=200) еще: вернуть "Добро пожаловать!
" если __name__ == '__main__': app.run(debug=True)
В BotFather, где вы получаете токен для своего чат-бота Telegram, вы также можете указать URL-адрес для перенаправления на вашего бота Telegram.
После этого нажмите на кнопку Start Bot , чтобы начать чат с ботом. Затем введите любое сообщение, которое вы хотите, например, «тестовый бот» или что угодно.
После того, как вы напишете «тестовый бот» своему боту, теперь перейдите к Vscode, и вы загрузите следующий JSON в свой терминал.
Здесь мы видим, что сообщение, которое мы написали телеграмм-боту, мы можем получить на бэкенде в текстовом виде.
Шаг 11 : отправить текстовое сообщение от бота.
Мы напишем код, чтобы получить ответ на сообщение «привет» от пользователя, и если вменится что-то кроме «привет», то ответ с «от веб-перехватчика».
Вы также можете добавить дополнительный параметр в сообщение отправки, чтобы вы могли следовать документации.
из фляги импортной фляги из запроса на импорт фляги из фляги импортировать ответ запросы на импорт TOKEN = "<Токен вашего бота>" приложение = фляга (__имя__) def parse_message (сообщение): напечатать("сообщение-->",сообщение) chat_id = сообщение['сообщение']['чат']['id'] txt = сообщение['сообщение']['текст'] print("идентификатор_чата-->", идентификатор_чата) печать("текст-->", текст) вернуть chat_id, txt def tel_send_message(chat_id, текст): URL-адрес = f'https://api. telegram.org/bot{TOKEN}/sendMessage' полезная нагрузка = { 'chat_id': чат_id, 'текст': текст } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р @app.route('/', методы=['GET', 'POST']) индекс определения(): если request.method == 'POST': сообщение = запрос.get_json() chat_id, txt = parse_message (msg) если txt == "привет": tel_send_message(chat_id,"Привет!!") еще: tel_send_message(chat_id,'из вебхука') вернуть ответ('хорошо', статус=200) еще: вернуть "Добро пожаловать!
" если __name__ == '__main__': app.run(отладка=Истина)
Мы получим следующий ответ в Telegram Bot.
Шаг 12 : Получите изображение.
Теперь мы также можем получить изображение от телеграмм-бота.
Добавив в код функцию отправки изображений.
Дополнительные параметры см. в документации.
из фляги импортной фляги из запроса на импорт фляги из фляги импортировать ответ запросы на импорт TOKEN = "<Токен вашего бота>" приложение = фляга (__имя__) def tel_parse_message (сообщение): напечатать("сообщение-->",сообщение) пытаться: chat_id = сообщение['сообщение']['чат']['id'] txt = сообщение['сообщение']['текст'] print("идентификатор_чата-->", идентификатор_чата) печать("текст-->", текст) вернуть chat_id, txt кроме: print("Текст не найден-->>") def tel_send_message(chat_id, текст): URL-адрес = f'https://api.telegram.org/bot{TOKEN}/sendMessage' полезная нагрузка = { 'chat_id': чат_id, 'текст': текст } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р деф tel_send_image (идентификатор чата): URL = f'https://api.telegram.org/bot{TOKEN}/sendPhoto' полезная нагрузка = { 'chat_id': чат_id, 'фото': "https://raw. githubusercontent.com/fbsamples/original-coast-clothing/main/public/styles/male-work.jpg", 'caption': "Это образец изображения" } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р @ app.route('/', методы=['GET', 'POST']) индекс определения(): если request.method == 'POST': сообщение = запрос.get_json() пытаться: chat_id, txt = tel_parse_message(msg) если txt == "привет": tel_send_message(chat_id,"Привет, мир!") Элиф тхт == "изображение": tel_send_image(chat_id) еще: tel_send_message(chat_id, 'из вебхука') кроме: print("из индекса-->") вернуть ответ('хорошо', статус=200) еще: вернуть "Добро пожаловать!
" если __name__ == '__main__': app.run(threaded=Истина)
Вот ответ, который вы получите от телеграммы.
Шаг 13 : Получить аудио.
Аналогично можно отправить аудио в телеграм. Для получения дополнительных параметров вы можете следовать документации.
деф tel_send_audio(chat_id): URL = f'https://api.telegram.org/bot{TOKEN}/sendAudio' полезная нагрузка = { 'chat_id': чат_id, "аудио": "http://www.largesound.com/ashborytour/sound/brobob.mp3", } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р
Добавьте этот код в свою индексную функцию.
elif txt == "аудио": tel_send_audio(chat_id)
Шаг 14: Получить видео.
Добавьте код для получения видео в телеграм. Чтобы добавить больше параметров, вы можете следовать документации.
деф tel_send_video(chat_id): URL = f'https://api.telegram.org/bot{TOKEN}/sendVideo' полезная нагрузка = { 'chat_id': чат_id, "видео": "https://www.appsloveworld.com/wp-content/uploads/2018/10/640.mp4", } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р
Добавьте этот код в свою индексную функцию.
elif txt == "видео": tel_send_video(chat_id)
Вы получите следующий ответ в телеграмме.
Шаг 15 : Получить файл.
Добавьте код для получения Файла в телеграмму. Чтобы добавить больше параметров, вы можете следовать документации.
по умолчанию tel_send_document(chat_id): URL-адрес = f'https://api.telegram.org/bot{TOKEN}/sendDocument' полезная нагрузка = { 'chat_id': чат_id, "документ": "http://www.africau.edu/images/default/sample.pdf", } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р
Добавьте этот код в свою индексную функцию.
elif txt == "файл": tel_send_document(chat_id)
Вы получите следующий ответ в телеграмме.
Шаг 16: Получите опрос.
Добавьте код для получения Опроса в телеграм. Чтобы добавить больше параметров, вы можете следовать документации.
по определению tel_send_poll(chat_id): URL = f'https://api. telegram.org/bot{TOKEN}/sendPoll' полезная нагрузка = { 'chat_id': чат_id, "вопрос": "В каком направлении восходит солнце?", "options": json.dumps(["Север", "Юг", "Восток", "Запад"]), "is_anonymous": Ложь, "тип": "викторина", "правильный_option_id": 2 } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р
Добавьте этот код в свою индексную функцию.
elif txt == "опрос": tel_send_poll(chat_id)
Вы получите следующий ответ в телеграмме.
Шаг 17 : Получить кнопку.
Добавьте код для получения Кнопки в телеграм-бот.
по умолчанию tel_send_button(chat_id): URL-адрес = f'https://api.telegram.org/bot{TOKEN}/sendMessage' полезная нагрузка = { 'chat_id': чат_id, 'текст': "Что это?", 'reply_markup': {'клавиатура': [[{'текст': 'супа'}, {'текст': 'марио'}]]} } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р
Добавьте этот код в свою индексную функцию.
elif txt == "кнопка": tel_send_button(chat_id)
Вы получите следующий ответ в своей телеграмме.
Шаг 18 : Получите встроенную кнопку.
Добавьте код для получения встроенной кнопки в телеграмму.
по умолчанию tel_send_inlinebutton(chat_id): URL-адрес = f'https://api.telegram.org/bot{TOKEN}/sendMessage' полезная нагрузка = { 'chat_id': чат_id, 'текст': "Что это?", 'ответ_разметка': { "inline_keyboard": [[ { "текст": "А", "callback_data": "ic_A" }, { "текст": "Б", "callback_data": "ic_B" }] ] } } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р
Добавьте этот код в свою индексную функцию.
elif txt == "встроенный": tel_send_inlinebutton(chat_id)
Вы получите следующий ответ в своей телеграмме.
Шаг 19 : Получите URL встроенной кнопки.
Добавьте код для получения встроенной кнопки в телеграмму.
по умолчанию tel_send_inlineurl(chat_id): URL-адрес = f'https://api.telegram.org/bot{TOKEN}/sendMessage' полезная нагрузка = { 'chat_id': чат_id, 'text': "Какую ссылку вы хотели бы посетить?", 'ответ_разметка': { "встроенная_клавиатура": [ [ {"текст": "google", "url": "http://www.google.com/"}, {"текст": "youtube", "url": "http://www.youtube.com/"} ] ] } } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р
Добавьте этот код в свою индексную функцию.
elif txt == "inlineurl": tel_send_inlineurl(chat_id)
Вы получите следующий ответ в телеграмме.
Для получения дополнительной информации вы можете следить за документацией Telegram Bot Api.
Шаг 20: Поделитесь изображением с ботом и получите его на стороне сервера.
Прежде всего, мы отправим изображение боту и посмотрим, какой тип JSON мы получаем на стороне нашего сервера.
Как мы видим, мы получаем идентификатор файла для файла, который мы отправляем боту телеграммы. Теперь мы получим этот идентификатор файла для изображения.
по определению tel_parse_get_message (сообщение): напечатать("сообщение-->",сообщение) пытаться: g_chat_id = сообщение['сообщение']['чат']['id'] g_file_id = сообщение['сообщение']['фото'][0]['file_id'] print("g_chat_id-->", g_chat_id) print("g_image_id-->", g_file_id) вернуть g_file_id кроме: print("Файл не найден -->>")
Теперь, вызвав данную функцию в индексной функции, мы можем получить идентификатор чата и идентификатор файла.
file_id = tel_parse_get_message(msg)
Мы получим ответ ниже.
Теперь мы будем использовать идентификатор файла, который мы получили для изображения, чтобы получить путь к файлу для изображения, которое хранится на сервере телеграмм.
Для этого нам нужно будет перенаправить на другой URL-адрес и передать ему наш идентификатор файла, для которого мы создали функцию.
по умолчанию tel_upload_file(file_id): url = f'https://api.telegram.org/bot{TOKEN}/getFile?file_id={file_id}' а = запросы.пост(url) json_resp = json.loads(a.content) напечатать("а-->",а) печать ("json_resp-->", json_resp) file_pathh = json_resp['результат']['file_path'] print("путь_к_файлу -->", путь_к_файлу) url_1 = f'https://api.telegram.org/file/bot{TOKEN}/{file_path}' б = запросы.get(url_1) file_content = б.контент с open(file_path, "wb") как f: f.write(file_content)
Нам также нужно вызвать функцию, которую мы создали.
file_id = tel_parse_get_message(msg) tel_upload_file(file_id)
Здесь в функции сначала мы пытаемся получить путь к файлу для изображения, которым мы поделились из JSON.
После получения пути к файлу мы пытаемся получить файл с сервера телеграмм, перенаправляя путь к файлу на «url_1».
С «url_1» мы пытаемся сохранить файл на наш компьютер.
На стороне сервера вы увидите печать и JSON, подобные этому.
Вот каталог, в котором мы пишем наш код. Нам нужно создать папку с именем « photos », чтобы мы могли получить изображение, которое мы отправляем боту, прямо в нашей системе.
Шаг 21 : Теперь попробуем добавить видео в телеграм-бота.
Когда мы отправляем видео боту, мы получаем различные типы JSON. Поэтому нам нужно извлечь из него идентификатор файла.
Это можно сделать с помощью следующего кода.
по определению tel_parse_get_message (сообщение): напечатать("сообщение-->",сообщение) распечатать("1") пытаться: g_chat_id = сообщение['сообщение']['чат']['id'] g_file_id = сообщение['сообщение']['фото'][0]['file_id'] print("g_chat_id-->", g_chat_id) print("g_image_id-->", g_file_id) вернуть g_file_id кроме: пытаться: g_chat_id = сообщение['сообщение']['чат']['id'] g_file_id = сообщение['сообщение']['видео']['идентификатор_файла'] print("g_chat_id-->", g_chat_id) print("g_video_id-->", g_file_id) вернуть g_file_id кроме: print("Файл не найден -->>")
Теперь аналогичным образом мы извлечем идентификатор файла и передадим его функции, получим путь к файлу и сохраним видео на стороне нашего сервера.
Чтобы сохранить видео, нам нужно создать папку с именем « видео », в которой мы можем хранить видео.
Шаг 22 : Теперь аналогичным образом мы можем сделать это для аудио и файлов.
Для хранения аудио нам нужно создать папку с именем « музыка ».
Для хранения документов нам нужно создать папку с именем « документы ».
Здесь аналогичным образом нам нужно извлечь идентификатор файла и передать его функции file_upload.
по определению tel_parse_get_message (сообщение): напечатать("сообщение-->",сообщение) пытаться: g_chat_id = сообщение['сообщение']['чат']['id'] g_file_id = сообщение['сообщение']['фото'][0]['file_id'] print("g_chat_id-->", g_chat_id) print("g_image_id-->", g_file_id) вернуть g_file_id кроме: пытаться: g_chat_id = сообщение['сообщение']['чат']['id'] g_file_id = сообщение['сообщение']['видео']['идентификатор_файла'] print("g_chat_id-->", g_chat_id) print("g_video_id-->", g_file_id) вернуть g_file_id кроме: пытаться: g_chat_id = сообщение['сообщение']['чат']['id'] g_file_id = сообщение['сообщение']['аудио']['идентификатор_файла'] print("g_chat_id-->", g_chat_id) print("g_audio_id-->", g_file_id) вернуть g_file_id кроме: пытаться: g_chat_id = сообщение['сообщение']['чат']['id'] g_file_id = сообщение['сообщение']['документ']['идентификатор_файла'] print("g_chat_id-->", g_chat_id) print("g_file_id-->", g_file_id) вернуть g_file_id кроме: print("Файл не найден -->>")
Шаг 23: Поскольку мы пытались сохранить изображение, видео, аудио и файл на стороне нашего сервера, а также сделали код для получения различных типов ответов через бота телеграммы.
Вы также можете обратиться к полному коду в нашем репозитории Github и протестировать его, чтобы получить различные ответы через бота телеграммы и отправить файлы на сервер.
Мы узнали, как получить текстовый ответ от бота, а также различные типы файлов. После этого мы также увидели, как мы можем получить файлы, которые мы отправляем боту на стороне нашего сервера.
Теперь вы можете заставить своего бота работать так, как вы хотите, — вперед и создайте следующую большую вещь!
Надеюсь, вам понравилось создавать своего первого бота Telegram. Если вы столкнулись с какими-либо трудностями, сообщите нам об этом в комментарии.
Мы уже создали серию сообщений в блоге, в которых мы предоставили руководство по созданию чат-бота для разных платформ. Вы можете изучить эти блоги и узнать, как можно настроить различные типы расширенных ответов, которые могут повысить вовлеченность пользователей в ваш чат-бот.
Facebook Messanger: создайте бота Facebook Messenger с помощью учебника Python с примерами
Slack: создайте бота Slack с помощью учебника Python с примерами
Discord: создайте бота Discord с помощью учебника Python с примерами
Кроме того, ознакомьтесь с другими нашими руководствами, чтобы узнать, как для создания чат-бота ChatGPT на разных платформах.