Skip to content

Studio-Yandex-Practicum/ask_nenaprasno_bot

Repository files navigation

Бот "Спросить не напрасно".

Содержание

  1. О чём проект?

  2. Структура проекта

  3. Подготовка к запуску

    3.1. Настройка poetry

    3.2. Настройка pre-commit

    3.3. Настройка переменных окружения

  4. Запуск бота

    4.1. Запуск проекта локально

    4.2. Запуск в Docker



1. О чём проект?

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

Бот общается с сайтом через API.

Информация о событиях (таких, как назначение новой заявки, получение сообщения от клиента) отправляется от API сайта боту через Webhook.

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

Бот позволяет настроить часовой пояс для того, чтобы уведомления приходили в удобное для пользователя время.

2. Структура проекта

Имя Описание
docs Содержит диаграмму архитктуры проекта в разных форматах
infrastructure Docker-compose файл для запуска проекта с помощью Docker
src к описанию этой папки стоит вернутся когда рефакторинг закончим

3. Подготовка к запуску

Примечение: использование Poetry и pre-commit при работе над проектом обязательно.

3.1. Poetry (инструмент для работы с виртуальным окружением и сборки пакетов):

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

Как скачать и установить?

Установка:

Установите poetry следуя инструкции с официального сайта.

Команды для установки: Для UNIX-систем и Bash on Windows вводим в консоль следующую команду:

curl -sSL https://install.python-poetry.org | python -

Для WINDOWS PowerShell:

(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -


После установки перезапустите оболочку и введите команду

poetry --version

Если установка прошла успешно, вы получите ответ в формате

Poetry (version 1.2.0)

Для дальнейшей работы введите команду:

poetry config virtualenvs.in-project true

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

После предыдущей команды создадим виртуальное окружение нашего проекта с помощью команды:

poetry install

Результатом выполнения команды станет создание в корне проекта папки .venv. Зависимости для создания окружения берутся из файлов poetry.lock (приоритетнее) и pyproject.toml

Для добавления новой зависимости в окружение необходимо выполнить команду

poetry add <package_name>

Пример использования:

poetry add starlette

Также poetry позволяет разделять зависимости необходимые для разработки, от основных. Для добавления зависимости необходимой для разработки и тестирования необходимо добавить флаг --dev

poetry add <package_name> --dev

Пример использования:

poetry add pytest --dev

Порядок работы после настройки

Чтобы активировать виртуальное окружение, введите команду:

poetry shell

Существует возможность запуска скриптов и команд с помощью команды без активации окружения:

poetry run <script_name>.py

Примеры:

poetry run python script_name>.py

poetry run pytest

poetry run black

Порядок работы в оболочке не меняется. Пример команды для Win:

python src\run_bot.py

Доступен стандартный метод работы с активацией окружения в терминале с помощью команд:

Для WINDOWS:

source .venv/Scripts/activate

Для UNIX:

source .venv/bin/activate

3.2. Pre-commit (инструмент автоматического запуска различных проверок перед выполнением коммита):

Настройка pre-commit

pre-commit install

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

3.3. Настройка переменных окружения

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

4. Запуск бота

Возможен запуск бота в режимах polling или webhook.

4.1. Запуск проекта локально

Запуск проекта локально

4.1.1. Запуск в режиме Polling


python src/run_bot.py

4.1.2. Запуск в режиме Webhook

Отладка приложения с ботом в режиме webhook на локальном компьютере требует выполнения дополнительных действий:


Необходимые действия

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

  • Скачать и установить ngrok
  • Зарегистрироваться в сервисе ngrok и получить токен
  • Зарегистрировать полученный токен на локальном комьютере
ngrok config add-authtoken <ваш токен>
  • Запустить тоннель ngrok
ngrok http 8000 --host-header=site.local
  • Скопировать из консоли адрес (https), предоставленный сервисом ngrok, в переменную окружения APPLICATION_URL:
APPLICATION_URL=https://1234-56-78-9.eu.ngrok.io # пример
  • Запустить приложение с ботом в режиме webhook (см. выше)
python src/run_webhook_api.py

Более подробная информация об использовании сервиса ngrok доступна на официальном сайте


python src/run_webhook_api.py

4.2. Запуск проекта в Docker

Запуск проекта через Docker
Можно запустить бота через docker-compose в тестовом режиме. Для этого в корневой папке проекта выполнить команду
docker-compose up -d --build