В этой статье мы рассмотрим процесс разработки Slack-бота на Python с использованием популярных библиотек и фреймворков, таких как Flask и Slack SDK. Мы начнем с выбора инструментов, необходимых для создания бота, и шаг за шагом пройдем через все этапы разработки: от настройки окружения и написания кода до тестирования и деплоя на сервер.
Что будет делать наш Slack-бот?
Наш Slack-бот будет предоставлять собой многофункциональный инструмент, интегрированный в рабочие процессы Slack. Он будет обладать следующим функционалом:
-
Приветствие и взаимодействие с пользователями:
При получении команды
/hello
, бот отправляет персонализированное приветствие и предоставляет интерактивные опции. Пользователю предлагается выбор между получением метеорологической сводки или обзором текущих задач посредством интерактивных элементов интерфейса.
-
Получение прогноза погоды:
По команде
/weather
или через выбор кнопки "Получить погоду", бот получает данные о текущей погоде в заданном городе (по умолчанию Москва) и отправляет их пользователю.
-
Управление задачами:
Бот позволяет пользователям добавлять задачи в базу данных и просматривать их через команду
/task
или через соответствующую кнопку. Это полезно для организации личных дел и мелких задач прямо внутри Slack.
-
Реакция на сообщения:
Бот может реагировать на определенные текстовые сообщения (например, "привет"), отправляя соответствующий ответ в канал.
Развертывание мы осуществим в Amvera, так как это облако + app engine, где развертывание и обновление проектов кардинально проще настройки VPS. Развертывание осуществляется через git push amvera master (или через перетягивание файлов в интерфейсе), и все само настраивается и развертывается.
Выбор инструментов и настройка окружения
Перед тем как приступить к разработке нашего Slack-бота, необходимо выбрать подходящие инструменты и настроить окружение для разработки. Мы будем использовать Python 3, который обладает мощным набором библиотек и фреймворков для работы с API и создания веб-приложений. Рассмотрим основные компоненты, которые понадобятся для разработки нашего бота:
1. Python и библиотеки
Для создания бота мы будем использовать следующие библиотеки:
Flask - Это популярный веб-фреймворк для Python, который позволяет легко создавать веб-приложения и API. В нашем случае Flask будет использоваться для обработки HTTP-запросов от Slack.
Slack SDK - Набор инструментов, предоставляемый Slack, для взаимодействия с их API. С его помощью мы сможем отправлять и получать сообщения, обрабатывать команды и события.
Requests - Легковесная библиотека для выполнения HTTP-запросов. Мы будем использовать её для взаимодействия с внешними API, такими как сервис погоды.
python-dotenv -Эта библиотека позволяет загружать конфиденциальные данные (например, токены и ключи API) из файла
.env
. Это важно для безопасности вашего проекта.SQLite -Встроенная база данных Python, которая будет использоваться для хранения задач, добавленных пользователями. SQLite проста в использовании и идеально подходит для небольших проектов.
2. Установка Python и pip
Если у вас еще не установлен Python 3, скачайте и установите его с официального сайта python.org. Вместе с Python будет установлен и пакетный менеджер pip
, который понадобится для установки нужных библиотек.
Проверьте установку Python и pip, выполнив в терминале следующие команды:
python3 --version
pip3 --version
3. Создание виртуального окружения
Чтобы избежать конфликтов с другими проектами и изолировать зависимости, создадим виртуальное окружение для нашего бота. Это можно сделать с помощью команды:
python3 -m venv venv
Затем активируйте виртуальное окружение:
На Windows:
venv\Scripts\activate
На macOS и Linux:
source venv/bin/activate
После активации виртуального окружения вы увидите префикс (venv)
перед строкой командного интерфейса.
4. Установка зависимостей
Создайте файл requirements.txt
, в котором будут перечислены все необходимые библиотеки:
Flask==3.0.3
slack-sdk==3.11.0
requests==2.26.0
python-dotenv==0.19.2
Установите все зависимости командой:
pip install -r requirements.txt
5. Создание файла .env
Для хранения конфиденциальных данных создайте файл .env
в корне вашего проекта. Этот файл не должен попадать в систему контроля версий, поэтому добавьте его в .gitignore
.
Пример содержимого файла .env
:
SLACK_BOT_TOKEN=YOUR_SLACK_BOT_TOKEN
SLACK_SIGNING_SECRET=YOUR_SECRET_SLACK_BOT_TOKEN
WEATHER_API_KEY=YOUR_WEATHER_BOT_TOKEN
6. Настройка Git и .gitignore
Для того чтобы ваш проект был защищен от случайного добавления конфиденциальных данных в систему контроля версий, таких как токены API и настройки окружения, важно правильно настроить .gitignore
. Этот файл определяет, какие файлы и директории Git должен игнорировать, чтобы они не попали в ваш репозиторий.
7. Инициализация Git-репозитория
Если вы еще не инициализировали Git-репозиторий в вашем проекте, сделайте это, выполнив следующую команду в корневой папке проекта:
git init
Эта команда создаст скрытую директорию .git
, которая будет хранить всю информацию о вашем репозитории.
8. Создание и настройка .gitignore
Создайте файл .gitignore
в корневой директории вашего проекта. В этот файл нужно вписать все файлы и директории, которые не должны отслеживаться Git.
Вот пример содержимого файла .gitignore
:
# Игнорируем виртуальное окружение
venv/
# Игнорируем конфиденциальные файлы
.env
# Игнорируем файлы кеша и временные файлы
__pycache__/
*.pyc
# Игнорируем файлы редакторов кода
.idea/`
venv/
: Эта строка указывает Git игнорировать директорию виртуального окружения, чтобы файлы виртуального окружения не попали в репозиторий..env
: Этот файл содержит ваши конфиденциальные данные, такие как токены API и ключи доступа. Добавление его в.gitignore
предотвращает случайную утечку этих данных.__pycache__/
и*.pyc
: Эти файлы и директории создаются Python для кеширования байт-кода, и их не нужно хранить в репозитории.Редакторские файлы: Если вы используете IDE, такие как VS Code или PyCharm, они могут создавать служебные директории (
*.vscode/
,.idea/
), которые также не нужны в репозитории.
9. Проверка .gitignore
После создания .gitignore
выполните команду git status
, чтобы убедиться, что файлы, указанные в .gitignore
, больше не отображаются в списке файлов для коммита.
git status
Если всё настроено правильно, вы не увидите в списке игнорируемые файлы, такие как venv/
и .env
.
10. Настройка конфигурационного файла
Создайте файл config.py
, который будет загружать данные из .env
и хранить их в переменных:
import os from dotenv
import load_dotenv
load_dotenv()
SLACK_BOT_TOKEN = os.getenv("SLACK_BOT_TOKEN")
SLACK_SIGNING_SECRET = os.getenv("SLACK_SIGNING_SECRET")
WEATHER_API_KEY = os.getenv("WEATHER_API_KEY")`
Теперь ваше окружение настроено, и вы готовы приступить к разработке Slack-бота! В следующем разделе мы начнем реализовывать основные функции нашего бота.
Реализация базовой структуры Slack-бота
Теперь, когда мы настроили окружение и конфигурационные файлы, можно приступить к реализации базовой структуры нашего Slack-бота. В этом разделе мы создадим основу нашего бота с использованием Flask и Slack SDK. Мы настроим обработку команд, отправку сообщений и взаимодействие с пользователями.
1. Создание структуры проекта
Для удобства разработки и поддержки кода важно организовать проект в соответствии с общепринятыми стандартами. Создадим следующую структуру директорий и файлов:
`slack_bot/
│
├── app.py # Главный файл приложения
├── config.py # Конфигурационный файл
├── requirements.txt # Зависимости проекта
├── .env # Файл с переменными окружения
├── .gitignore # Файл для исключения из контроля версий
├── venv/ # Виртуальное окружение
└── __pycache__/ # Кэш Python (будет создан автоматически)`
2. Настройка Flask-приложения
Файл app.py
будет основным файлом нашего бота. В нем мы настроим Flask-приложение и подключим Slack SDK для обработки событий и команд. Начнем с написания кода, который настроит сервер и обеспечит базовую обработку команд Slack.
Flask-приложение — это веб-сервер, который будет принимать HTTP-запросы от Slack, обрабатывать команды и отправлять ответы через API Slack. Также мы используем библиотеку Slack SDK для управления событиями и сообщениями.
Начнем нашу разработку с имортов и создание приложения:
from flask import Flask, request, jsonify
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
import logging
from weather import fetch_weather
from db import init_db, add_task, get_tasks
from config import SLACK_BOT_TOKEN, SLACK_SIGNING_SECRET
# Создание Flask-приложения
app = Flask(__name__)
# Инициализация Slack клиента с токеном бота
client = WebClient(token=SLACK_BOT_TOKEN)
# Настройка логирования для удобства отладки
logging.basicConfig(level=logging.INFO)
# Инициализация базы данных для задач
init_db()
Flask-приложение: Инициализируется экземпляр Flask, который будет обрабатывать запросы от Slack.
Slack SDK: Используется клиент
WebClient
для отправки сообщений в Slack.Логирование: Позволяет отслеживать работу бота и возможные ошибки.
Инициализация базы данных: Вызывается функция
init_db
для создания таблиц.
Теперь перейдем к обработчику команд Slack:
@app.route('/slack/command', methods=['POST'])
def command_handler():
# Получение данных о команде
data = request.form
command = data.get('command')
user_id = data.get('user_id')
# Определение команды
if command == '/hello':
return hello_command(user_id)
elif command == '/weather':
return weather_command(user_id)
elif command == '/task':
return task_command(user_id)
else:
return jsonify(response_type='ephemeral', text="Команда не поддерживается."), 200
Маршруты: Flask принимает запросы по маршруту
/slack/command
.Команды: Бот обрабатывает команды
/hello
,/weather
, и/task
, вызывая соответствующие функции. Пришло время заняться обработчиками команд для нашего бота
Обработка команды /hello
:
def hello_command(user_id):
try:
client.chat_postMessage(
channel=user_id,
text="Привет! Как я могу помочь вам сегодня?",
attachments=[
{
"text": "Выберите опцию:",
"fallback": "Выберите опцию",
"callback_id": "hello_options",
"actions": [
{
"name": "option",
"text": "Получить погоду",
"type": "button",
"value": "weather"
},
{
"name": "option",
"text": "Просмотреть задачи",
"type": "button",
"value": "tasks"
}
]
}
]
)
return jsonify(response_type='in_channel', text="Опции отправлены."), 200
except SlackApiError as e:
logging.error(f"Ошибка отправки сообщения: {e.response['error']}")
return jsonify(response_type='ephemeral', text="Произошла ошибка при отправке сообщения."), 500
Отправка сообщений: Slack-бот отправляет сообщение с предложением выбрать действие через кнопки.
Кнопки действий: Пользователь может выбрать действия для получения прогноза погоды или просмотра задач.
Обработка интерактивных действий:
@app.route('/slack/interactive', methods=['POST'])
def interactive_handler():
payload = request.json
actions = payload.get('actions', [])
action = actions[0] if actions else None
if action and action['value'] == 'weather':
return weather_command(payload['user']['id'])
elif action and action['value'] == 'tasks':
return task_command(payload['user']['id'])
else:
return jsonify(text="Неизвестное действие."), 200
Интерактивные действия: Обрабатываются нажатия кнопок пользователем и вызываются функции для выполнения соответствующих команд.
Обработчик команды /weather
:
def weather_command(user_id):
weather_info = fetch_weather()
try:
client.chat_postMessage(
channel=user_id,
text=weather_info
)
return jsonify(response_type='in_channel', text="Прогноз погоды отправлен."), 200
except SlackApiError as e:
logging.error(f"Ошибка отправки сообщения: {e.response['error']}")
return jsonify(response_type='ephemeral', text="Произошла ошибка при отправке сообщения."), 500
Погода: Бот вызывает функцию
fetch_weather
, которая возвращает прогноз погоды, и отправляет его пользователю в Slack.
Обработка команды /task
:
def task_command(user_id):
tasks = get_tasks(user_id)
if tasks:
tasks_list = "\n".join([task[0] for task in tasks])
message = f"Ваши задачи:\n{tasks_list}"
else:
message = "У вас нет задач."
try:
client.chat_postMessage(
channel=user_id,
text=message
)
return jsonify(response_type='in_channel', text="Список задач отправлен."), 200
except SlackApiError as e:
logging.error(f"Ошибка отправки сообщения: {e.response['error']}")
return jsonify(response_type='ephemeral', text="Произошла ошибка при отправке сообщения."), 500
Задачи**: Функция
task_command
запрашивает список задач для конкретного пользователя через базу данных и отправляет его в Slack.
Обработка событий Slack:
@app.route('/slack/events', methods=['POST'])
def slack_events():
if 'challenge' in request.json:
return jsonify({'challenge': request.json['challenge']})
event = request.json.get('event', {})
if event.get('type') == 'message' and not event.get('bot_id'):
user = event.get('user')
text = event.get('text')
channel = event.get('channel')
if 'привет' in text.lower():
try:
client.chat_postMessage(
channel=channel,
text=f"Привет, <@{user}>! Как дела?"
)
except SlackApiError as e:
logging.error(f"Ошибка отправки сообщения: {e.response['error']}")
return '', 200
События: Бот реагирует на текстовые сообщения, отправленные пользователями, и отвечает, если пользователь пишет "привет".
Осталось самое основное - это запуск нашего приложения приложения
if __name__ == "__main__":
app.run(port=3000)
Файл weather.py
Файл weather.py
содержит логику для получения актуальной информации о погоде с помощью внешнего API. Мы используем сервис OpenWeatherMap, который предоставляет погодные данные по городам, такие как температура, состояние погоды и другие метрики.
import requests
from config import WEATHER_API_KEY
# Функция для получения данных о погоде
def fetch_weather(city="Москва"):
# Формирование URL для запроса к API OpenWeatherMap
url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={WEATHER_API_KEY}&units=metric&lang=ru"
# Выполнение GET-запроса к API
response = requests.get(url)
# Преобразование ответа в JSON
data = response.json()
# Проверка успешности запроса
if response.status_code == 200:
weather = data['weather'][0]['description'] # Описание погоды
temperature = data['main']['temp'] # Температура
return f"Погода в {city}: {weather}, {temperature}°C"
else:
return "Не удалось получить данные о погоде."
Основные моменты кода:
API OpenWeatherMap: Мы используем публичный API сервиса OpenWeatherMap для получения данных о погоде. Для этого необходим ключ API, который хранится в файле конфигурации
config.py
.Запрос данных о погоде: Функция
fetch_weather
принимает город (по умолчанию — "Москва") и выполняет HTTP-запрос для получения данных о текущей погоде. API возвращает данные в формате JSON, которые мы обрабатываем.Обработка ответа: Если запрос выполнен успешно (код ответа 200), функция возвращает строку с описанием текущей погоды и температурой. В случае ошибки возвращается сообщение о невозможности получить данные.
Пояснение работы с OpenWeatherMap:
-
Параметры запроса:
q={city}
— задает название города.appid={WEATHER_API_KEY}
— API-ключ, который вы должны получить, зарегистрировавшись на сайте OpenWeatherMap.units=metric
— возвращает температуру в градусах Цельсия.lang=ru
— возвращает описание погоды на русском языке.
Этот файл служит для интеграции с внешним сервисом и используется в основном приложении (app.py
) для отправки пользователю прогноза погоды в Slack.
После настройки базового Flask-приложения следующим шагом будет подключение других компонентов, таких как работа с базой данных для задач и настройка API для получения данных о погоде, что мы рассмотрим в следующих разделах.
3. Настройка базы данных для задач
Для управления задачами в нашем Slack-боте мы будем использовать SQLite — встроенную базу данных, которая отлично подходит для небольших проектов. База данных будет хранить задачи пользователей, а бот сможет добавлять и извлекать их по запросу.
Создадим файл db.py
, который будет содержать логику для работы с базой данных:
import sqlite3
def init_db():
conn = sqlite3.connect('bot.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS tasks ( id INTEGER PRIMARY KEY, user_id TEXT NOT NULL, task TEXT NOT NULL ) ''')
conn.commit()
conn.close()
def add_task(user_id, task):
conn = sqlite3.connect('bot.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO tasks (user_id, task) VALUES (?, ?)', (user_id, task))
conn.commit()
conn.close()
def get_tasks(user_id):
conn = sqlite3.connect('bot.db')
cursor = conn.cursor()
cursor.execute('SELECT task FROM tasks WHERE user_id = ?', (user_id,))
tasks = cursor.fetchall()
conn.close()
return tasks
Основные моменты кода:
Инициализация базы данных: Функция
init_db
создает таблицуtasks
, если она еще не существует. Таблица будет хранить задачи, которые привязываются к пользователю через егоuser_id
.Добавление задач: Функция
add_task
добавляет новую задачу в базу данных, связывая ее с пользователем черезuser_id
.Получение списка задач: Функция
get_tasks
возвращает все задачи, которые пользователь добавил в базу данных.
Теперь, когда у нас есть код для работы с базой данных, мы можем интегрировать его в наше основное приложение (app.py
). Бот будет реагировать на команды /task
, добавляя новые задачи или возвращая список задач пользователя.
Для полноценной работы нашего Slack-приложения и взаимодействия с API нам потребуется сделать последний шаг, а именно получить несколько токенов для работы всех API.
Как получить необходимые токены ?
Для работы вашего Slack-бота вам понадобятся три токена:
SLACK_BOT_TOKEN — токен вашего бота для взаимодействия с API Slack.
SLACK_SIGNING_SECRET — секрет для проверки подлинности запросов от Slack.
WEATHER_API_KEY — ключ API для получения данных о погоде от OpenWeather.
1. Как получить SLACK_BOT_TOKEN
Перейдите на API.Slack (api.slack.com) и войдите в свой аккаунт Slack.
Выберите или создайте приложение для вашего бота.
В меню слева перейдите в раздел OAuth & Permissions.
Прокрутите вниз до раздела OAuth Tokens for Your Workspace.
Нажмите Install App to Workspace и подтвердите разрешения.
После успешной установки вам будет предоставлен Bot User OAuth Token — это и есть ваш
SLACK_BOT_TOKEN
. Сохраните его.
2. Как получить SLACK_SIGNING_SECRET
На той же странице приложения в панели управления Slack перейдите в раздел Basic Information.
Прокрутите вниз до раздела App Credentials.
Там вы найдете поле Signing Secret. Это ваш
SLACK_SIGNING_SECRET
. Скопируйте и сохраните его
3. Как получить WEATHER_API_KEY
Перейдите на сайт OpenWeather и зарегистрируйтесь, если у вас нет аккаунта.
После регистрации войдите в свою учетную запись и перейдите в раздел API keys.
Создайте новый ключ или используйте уже существующий. Этот ключ и будет вашим
WEATHER_API_KEY
.
4. Тестирование на локальном сервере
Чтобы протестировать наш бот на локальной машине, выполните команду:
python app.py
Ваше Flask-приложение будет запущено на порту 3000. Однако, чтобы Slack мог отправлять события вашему боту, он должен быть доступен из интернета. Для этого вы можете использовать инструмент ngrok, который создаст туннель к вашему локальному серверу
Установка и настройка Ngrok на Mac и Windows
Ngrok — это инструмент, который позволяет создавать безопасный туннель от вашего локального сервера к публичному интернету. Это удобно для разработки веб-приложений и ботов, когда вам нужно протестировать вебхуки или интеграцию с внешними сервисами, например, с Slack.
Шаг 1: Установка Ngrok
Установка на Mac
Откройте терминал и установите Homebrew (если он еще не установлен) с помощью команды:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Установите ngrok с помощью Homebrew:
brew install ngrok/ngrok/ngrok
Проверьте, что ngrok установлен:
ngrok version
Установка на Windows
Скачайте последнюю версию ngrok с официального сайта: ngrock
Разархивируйте файл
ngrok.zip
.Переместите файл
ngrok.exe
в любую директорию по вашему выбору, например,C:\ngrok
.Откройте Командную строку (cmd) и перейдите в директорию с ngrok:
cd C:\ngrok
Проверьте версию ngrok:
ngrok version
Шаг 2: Аутентификация в Ngrok
Ngrok требует аутентификации, чтобы управлять туннелями через ваш аккаунт.
Зарегистрируйтесь на сайте ngrok.com.
На главной странице аккаунта скопируйте ваш auth token.
Введите следующую команду в терминале (на Mac) или в командной строке (на Windows) для подключения вашего аккаунта к ngrok:
ngrok config add-authtoken YOURTOKEN
Замените YOUR_TOKEN
на ваш токен, скопированный из аккаунта ngrok.
Шаг 3: Запуск Ngrok
Теперь, когда ngrok установлен и аутентифицирован, вы можете запустить туннель.
Убедитесь, что ваше Flask-приложение работает на порту 3000:
python app.py
Откройте терминал (или командную строку) и запустите ngrok для проксирования вашего локального сервера:
ngrok http 3000
После запуска мы получим такое окно со всеми данными по нашему боту
Теперь вы можете использовать этот URL для настройки вебхуков и взаимодействия со Slack.
Шаг 4: Настройка Slack
Перейдите в панель управления вашего приложения на api.slack.com/apps.
В меню слева выберите Event Subscriptions.
Включите события, переключив тумблер Enable Events.
В поле Request URL вставьте публичный URL, который вам выдал ngrok, добавив к нему
/slack/events
. Например:
http://your-ngrok-url.ngrok.io/slack/events
После этого Slack начнет проверку URL. Если все прошло успешно, вы можете продолжить настройку событий.
Прокрутите ниже до раздела Subscribe to Bot Events и добавьте нужные события, такие как
message.im
(для получения личных сообщений).Сохраните изменения, и теперь ваше приложение будет получать события от Slack через ngrok.
Теперь бот настроен для взаимодействия со Slack через локальный сервер!
Деплой на сервера Amvera
После успешного тестирования Slack-бота на локальном сервере с использованием ngrok, следующим шагом станет развертывание его на удаленном сервере, чтобы обеспечить его доступность 24/7 и избавиться от зависимости от вашего локального компьютера.
В данном разделе мы рассмотрим процесс деплоя на серверы Amvera, включая настройку виртуальной машины, установку зависимостей и настройку автоматического запуска приложения.
Почему Amvera?
это наш блог)
развертывание кода и накатывание обновлений намного проще чем настройка VPS. Базовый CI/СD уже всторен и осуществляется через git push amvera master
есть множество уже встроенных возможностей, упрощающих использование (бесплатные SSL сертификаты, кластеры баз данных с бэкапами и т.д.).
Регистрация в сервисе
-
Создание аккаунт:
Перейдите на сайт Amvera и нажмите на кнопку "Регистрация". Заполните поля и подтвердите почту.
После входа на платформу, на главной странице нажмите на кнопку "Создать" или "Создать первый!".
-
Настройка проекта:
Присвойте вашему проекту название (лучше на английском языке).
Выберите тарифный план. Для развертывания бота будет достаточно самого простого тарифа.
Начального баланса хватит для того, чтобы наш бот работал бесплатно и непрерывно первое время .
Подготовка кода для развертывания:
Amvera использует git для доставки кода в облако. Вам потребуется создать файл конфигурации
amvera.yml
, который подскажет облаку, как запускать ваш проект.-
Для упрощения создания этого файла воспользуйтесь графическим инструментом генерации.
Задание конфигурации
-
Выбор окружения и зависимостей:
Укажите версию Python и путь до файла
requirements.txt
, который содержит все необходимые пакеты.Укажите путь до основного файла вашего проекта, например
main.py
.
-
Генерация и загрузка файла:
Нажмите "Generate YAML" для создания файла
amvera.yml
и загрузите его в корень вашего проекта.
Файл конфигурации amvera.yml
служит для того, чтобы платформа Amvera знала, как правильно собрать и запустить ваш проект. Этот файл содержит ключевую информацию об окружении, зависимостях, а также инструкциях для запуска приложения.
Структура файла amvera.yml
:
meta:
environment: python # Указывает, что проект использует Python в качестве окружения.
toolchain:
name: pip # Определяет менеджер пакетов для установки зависимостей.
version: "3.8" # Задает версию Python для окружения проекта.
build:
requirementsPath: requirements.txt # Путь к файлу, где указаны все необходимые зависимости.
run:
scriptName: app.py # Основной файл вашего проекта, который будет запущен после сборки.
persistenceMount: /data # Директория для хранения постоянных данных.
containerPort: 3000 # Порт, на котором будет доступен ваш проект в контейнере.
Для того чтобы наш проект корректно работал в среде Amvera, важно указать все необходимые пакеты в файле requirements.txt
. Этот файл определяет все зависимости Python, которые нужны для выполнения кода.
Вот так выглядит наш файл requirements.txt
:
Flask==3.0.3
slack-sdk==3.11.0
requests==2.26.0
python-dotenv==0.19.2
Инициализация и отправка проекта в репозиторий:
-
Инициализируйте git репозиторий в корне вашего проекта, если это еще не сделано:
git init
-
Привяжите локальный репозиторий к удаленному на Amvera:
git remote add amvera <https://git.amvera.ru/ваш_юзернейм/ваш_проект>
-
Добавьте и зафиксируйте изменения:
git add . git commit -m "Initial commit"
-
Отправьте проект в облако:
git push amvera master
Сборка и развертывание проекта:
После отправки проекта в систему, на странице проекта статус изменится на "Выполняется сборка". После завершения сборки проект перейдет в стадию "Выполняется развертывание", а затем в статус "Успешно развернуто".
Если проект не развернулся, проверьте логи сборки и логи приложения для отладки.
Если проект завис на этапе "Сборка", убедитесь в корректности файла
amvera.yml
Ну что, подведем итоги?
Итак, мы с вами прошли весь путь от создания Slack-бота на домашнем устройстве до его запуска на настоящем сервере. Круто, да? Вы теперь знаете, как собрать Flask-приложение, которое будет отвечать на команды в Slack, показывать погоду и даже управлять списком дел.
А еще мы разобрались, как использовать ngrok для тестирования и как запустить бота на Amvera для работы 24/7.
Автор: Алексей Пономарев
Релевантные статьи: