Интернет-маркетинг

от Арсения Груздева

Бессерверный бот Telegram

Содержание:
  1. Так можно стать спасателем
  2. Что необходимо
  3. Построение Telegram-бота
  4. Настройка сервера разработки с помощью Flask

Get in umbrella

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

AWS Lambda — это сервис вычислений, запускающий ваш код при определенных событиях и автоматически управляющий вашими вычислительными ресурсами.
Flask — фреймворк для создания веб-приложений на языке программирования Python, использующий набор инструментов Werkzeug, а также шаблонизатор Jinja2.

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

Umbrella Network

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

Umbrella Network

Так можно стать спасателем

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

Umbrella Network

При построении бота есть небольшие хитрости, которые помогут сделать его быстрее.

Что необходимо

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

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

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

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

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

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

Построение Telegram-бота

Зайдите в @Botfather. Введите /newbot и следуйте его инструкциям по настройке нового бота.

Botfather

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

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

Наберите команду/help и @Botfather даст вам полный список настроек, среди которых выберите нужные для вашего бота.

Настройка сервера разработки с помощью Flask

Я работал с pipenv для управления зависимостями Python моего проекта. Попробуйте, если вы все ещё используете pip и virtualenv. По ссылке найдёте инструкции по установке.проекта.

Далее установим Flask. Также будем использовать потрясающую библиотеку requests. В командной строке введите:

  • pipenv install flask
  • pipenv install requests

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

Flask

Скопировать фрейм можно по ссылке.

Подсказка: Убедитесь, что вы заменили <your-bot-token> токеном от API, который получили от @Botfather.

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

Flask

Скопировать фрейм можно по ссылке.

Функция process_update()и декоратор: когда кто-кто-нибудь будет отправлять в POST — домен http://127.0.0.1:5000/<your-bot-token>, мы будем извлекаем из него JSON — данные. Если это обычное текстовое сообщение, оно будет иметь ключ message в JSON. Проверяем, и если это нормальное сообщение, мы отвечаем с помощью process_message(update).

Flask

Функция process_message()создает полезную нагрузку, которую API Telegram ожидает как ответ на сообщение. Нужно указать текст ответа в data[«text»]и чат, на который мы отвечаем data[«chat_id»] .

Наконец, мы отправляем запрос на публикацию с этой полезной нагрузкой в Telegram API sendMessage методом.

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

pipenv shell

Это дает нам доступ к Flask. Теперь нужно запустить сервер. Введите в командной строке:

export FLASK_APP=server.py
flask run

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

Подробнее читайте в документации Flask и quick-start.

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

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

./ngrok http 5000

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

Flask

Подсказка: скопируйте https-url, он вам скоро понадобится. Далее снова будем использовать API Telegram, чтобы установить наш web-hook.

Создайте файл с именем webhook.py со следующим содержимым:

Flask

Ссылка на фрейм.

Pro tip: Не забудьте заменить<your-bot-token> и your-https-url!

pprint позволит напечатать хорошо отформатированные данные JSON. Отправляем URL-адрес web-hook в виде запроса POST на setWebhook API Telegram. Теперь запускайте следующие строки в командной строке:

run the following lines in your command prompt:pipenv install pprint
python webhook.py

Вы увидите 200 и JSON с ‘ok».

Проверьте свой чатбот
Теперь, когда настройка сервера закончилась, перейдите к своему боту и поздоровайтесь. Если сделали корректно. Подойдите к своему боту в Telegram и поздоровайтесь! Если все настроено правильно, вы увидите ответ — I can hear you!

Если заметка была полезна, то обязательно дадим продолжение.

Источник

Добавить комментарий