Рубрики
Без рубрики

Я построил бот Telegram Serverless на выходных. Вот что я узнал.

Автор оригинала: FreeCodeCapm Team.

Моисей Сой

Я построил Telegram Chatbot, который отправляет SOS для спасателей, когда кто-то заканчивается под дождем. Он написан в Python, используя AWS Lambda, Zappa и колбу.

Вы можете попробовать это здесь Отказ Я еще не добавил в постоянно? Но я думаю, что некоторые из этого здесь могут быть полезны для кого-либо заинтересованного в аналогичном проекте.

У меня обычно трудно получить мою Fiancée для обсуждения технологии. Это приходит в точку, где она не может помочь, но задушить зевок, как только я говорю «код».

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

Потеряя его немного, вот то, что я узнал.

Проблема

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

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

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

Чатбот

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

Любой может запросить зонт. Бот спрашивает, где человек, сколько зонтов он/ей может понадобиться, и когда они хотели бы быть поднятыми (варианты ограничены, поэтому мы слишком много не облагаем налогом наших спасателей).

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

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

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

Что я использовал

AWS LAMBDA

Вместо того, чтобы запустить сервер 24/7, вы можете хостить функции в лямбде, чтобы сервер длился только для жизненного цикла запроса. Это отлично подходит для прототипов, так как вы получаете 1 миллион бесплатных запросов в месяц.

Zappa

Это Автоматизирует шаги, необходимые для того, чтобы ваш локальный код Python на AWS Lambda. Он также настраивает Gateway API API Amazon, поэтому у вас хорошая конечная точка HTTPS для размещения ваших функций Chatbot.

неисполнительно

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

Эти инструменты помогли мне избежать много головной боли.

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

Прохождение

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

Создать бот телеграммы

Посетите Botfather Отказ Тип /newbot и следуйте инструкциям, чтобы настроить новый бот.

Pro Tip: Сохраните токен где-нибудь, мы будем использовать его в ближайшее время!

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

Настройте сервер разработки с колбой

Я работал с Пипенв Управление защелками Python моего проекта. Если вы все еще используете PIP и Virtualenv, я рекомендую вам попробовать эту попытку. Есть инструкции по установке по ссылке.

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

pipenv install flaskpipenv install requests

После установки колбе мы настроим базовый сервер для проверки нашего бота. Скопируйте следующий текст в файл под названием server.py Отказ

Pro Tip: Убедитесь, что вы замените <Ваш-бот-ток EN> С токеном API мы получили от боттера.

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

Функция Process_Update () и декоратор над ним говорит, что когда кто-то столкнулся с доменом http://127.0.0.1:5000 / EN>, мы извлеките данные JSON из него. Если это нормальное текстовое сообщение, у него будет | E Key M Суть в JSON. Мы проверяем это, и если это нормальное сообщение, мы отвечаем Использование process_message (u pdate).

Функция process_message () Создает полезную нагрузку, которую API Telegram ожидает, если мы хотим ответить на сообщение. Мы в основном нужно указать наш ответ текста в Данные [«Текст»] И чат мы отвечаем на Данные [«Chat_id»] Отказ

Наконец, мы отправляем почтовый запрос с этой полезной нагрузкой на Telegram API конечная точка для SendMessage Метод Отказ Это позволяет нам отправлять сообщение программно.

Время для запуска сервера. Теперь в вашем командном типе ожидания:

pipenv shell

Это активирует виртуальную среду и дает нам доступ к колбе. Теперь нам нужно провести сервер локально. Введите командную строку:

export FLASK_APP=server.pyflask run

У нас есть бегущий сервер! Если вы не связывались по умолчанию, это работает на http://127.0.0.1:5000 /.

Подробнее в колбе документации и Quick-start Отказ

Но это работает локально, а Bot API Telegram не может отправлять свои почтовые запросы на локальный URL. Следовательно, мы будем использовать Ngrok Чтобы открыть этот локальный сервер в Интернет.

Используйте Ngrok, чтобы сделать локальный сервер доступным в Интернете

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

./ngrok http 5000

Вы увидите что-то подобное в вашей командной строке. Теперь какой-либо сервер вы работаете на localhost: 5000, выставлен на следующих URL.

Pro Tip: Скопируйте URL HTTPS, мы собираемся использовать его в ближайшее время.

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

Создайте файл под названием webhook.py Со следующим контентом:

Pro Tip: Не забудьте заменить <Ваш-бот-ток EN> ; и TTPS-URL>!

PPRINT Давайте распечатываем красиво отформатированные данные JSON. Мы отправляем наш URL-адрес веб-крюка в качестве почтового запроса на SetWebhook конечная точка телеграммы API. Теперь запустите следующие строки в вашей командной строке:

pipenv install pprintpython webhook.py

Вы должны увидеть 200 и блок JSON с «ОК»: правда Отказ

Проверьте свой чатбот

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

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