|
| 1 | +# MAX BOT API Demo chatbot (Python) |
| 2 | + |
| 3 | +Пример чат-бота, написанного на **Python** с использованием **SDK** [maxbot-chatbot-python](https://github.com/green-api/maxbot-chatbot-python) и [maxbot-api-client-python](https://github.com/green-api/maxbot-api-client-python) от [GREEN-API](https://green-api.com/max-bot-api). |
| 4 | + |
| 5 | +Этот чат-бот демонстрирует возможности **MAX BOT API** по отправке текстовых сообщений, медиафайлов (картинки, аудио, видео, PDF), геолокаций и контактов с использованием системы сцен и интерактивных кнопок. |
| 6 | + |
| 7 | +## Содержание |
| 8 | + |
| 9 | +* [Установка](#установка) |
| 10 | +* [Запуск чат-бота](#запуск-чат-бота) |
| 11 | +* [Настройка чат-бота](#настройка-чат-бота) |
| 12 | +* [Использование](#использование) |
| 13 | +* [Структура кода](#структура-кода) |
| 14 | +* [Управление сообщениями](#управление-сообщениями) |
| 15 | +* [Лицензия](#лицензия) |
| 16 | + |
| 17 | +## Установка |
| 18 | + |
| 19 | +**Убедитесь, что у вас установлен Python версии 3.12 или выше:** |
| 20 | + |
| 21 | +```bash |
| 22 | +python --version |
| 23 | +``` |
| 24 | + |
| 25 | +**Установите библиотеку:** |
| 26 | + |
| 27 | +```bash |
| 28 | +git clone https://github.com/green-api/maxbot-demo-chatbot-python |
| 29 | +``` |
| 30 | + |
| 31 | +Откройте проект в любой IDE. |
| 32 | +Среда для запуска чат-бота готова, теперь необходимо произвести настройку и запустить чат-бот. |
| 33 | + |
| 34 | +## Запуск чат-бота |
| 35 | + |
| 36 | +**Параметры конфигурации:** |
| 37 | + |
| 38 | +- `BASE_URL` - Базовый URL-адрес серверов платформы MaxBot. Все методы API будут отправляться по этому корневому адресу. Актуальный адрес указан в [официальной документации](https://dev.max.ru/docs-api). |
| 39 | +- `TOKEN` - Уникальный секретный ключ авторизации (API-ключ) вашего бота. Получить его можно в личном кабинете после [регистрации или создании бота](https://green-api.com/max-bot-api/docs/before-start/) на платформе [business.max.ru](https://business.max.ru/). |
| 40 | +- `ratelimiter` - Встроенный ограничитель частоты запросов. Он контролирует количество исходящих запросов в секунду (RPS), защищая бота от блокировки со стороны сервера за превышение лимитов. Рекомендуемое значение — не менее 25. |
| 41 | +- `timeout` - Максимальное время ожидания ответа от сервера (в секундах). Если сервер не ответит в течение этого времени, запрос будет завершен с ошибкой. Оптимальное значение — 30 секунд. |
| 42 | + |
| 43 | +1. Создайте файл `.env` в корневой директории проекта. |
| 44 | +2. Добавьте в него ваши данные: |
| 45 | + |
| 46 | +```bash |
| 47 | +BASE_URL=https://platform-api.max.ru |
| 48 | +TOKEN=1A2B3C4D5E6F7G8H9I0J9K8L7M6N5O4P3Q3R2S1T2U3V4W5X6Y7Z |
| 49 | +``` |
| 50 | +> Значение `ratelimiter` и `timeout` можно изменить в файле [main.py](./main.py) перед его запуском. |
| 51 | +
|
| 52 | +3. Запустите бота командой: |
| 53 | + |
| 54 | +```bash |
| 55 | +python main.py |
| 56 | +``` |
| 57 | + |
| 58 | +Программа инициализирует клиент, настроит **менеджер состояний** и запустит `polling` для получения уведомлений в реальном времени. Для остановки нажмите `Ctrl + C`. |
| 59 | + |
| 60 | +## Настройка чат-бота |
| 61 | + |
| 62 | +Вы можете изменить медиафайлы, которые бот отправляет пользователям. Ссылки на файлы находятся в файле [`scenes/endpoints.py`](./scenes/endpoints.py). |
| 63 | + |
| 64 | +Например, для изменения PDF-файла найдите следующий блок: |
| 65 | + |
| 66 | +```python |
| 67 | +elif text_lower in ["2", "/file"]: |
| 68 | + await n.reply_with_media( |
| 69 | + t(lang, "send_file_message") + t(lang, "links.send_file_documentation"), |
| 70 | + "markdown", |
| 71 | + "https://storage.yandexcloud.net/your-link/file.pdf", |
| 72 | + self.get_control_buttons(lang) |
| 73 | + ) |
| 74 | +``` |
| 75 | + |
| 76 | +Замените URL `"https://storage.yandexcloud.net/your-link/file.pdf"` на прямую ссылку вашего файла. |
| 77 | + |
| 78 | +## Использование |
| 79 | + |
| 80 | +Если предыдущие шаги были выполнены, ваш бот будет готов к приему сообщений. |
| 81 | + |
| 82 | +Напишите боту любое текстовое сообщение (например, `/start`). Чат-бот поддерживает 2 языка, поэтому сначала он предложит выбрать язык с помощью клавиатуры: |
| 83 | + |
| 84 | +```text |
| 85 | +Please select your language: |
| 86 | +Пожалуйста, выберите язык: |
| 87 | +[English] [Русский] |
| 88 | +``` |
| 89 | + |
| 90 | +Выбрав русский язык, вы получите приветствие с картинкой и главным меню в виде кнопок: |
| 91 | + |
| 92 | +```text |
| 93 | +Добро пожаловать в MAX BOT API чат-бот, {Имя_Пользователя}! |
| 94 | +
|
| 95 | +GREEN-API предоставляет отправку данных следующих видов. |
| 96 | +Выберите цифру или нажмите кнопку! |
| 97 | +
|
| 98 | +1. Текст 📩 |
| 99 | +2. Файл 📋 |
| 100 | +3. Картинка 🖼 |
| 101 | +4. Аудио 🎵 |
| 102 | +5. Видео 📽 |
| 103 | +6. Контакт 📱 |
| 104 | +7. Геолокация 🌎 |
| 105 | +8. О боте 🦎 |
| 106 | +
|
| 107 | +Чтобы вернуться в начало, напишите *стоп* или *0* |
| 108 | +``` |
| 109 | + |
| 110 | +Нажимая на кнопки (или отправляя соответствующие цифры), бот будет присылать вам демонстрационные сообщения с использованием различных методов **MAX API** (фотографии, голосовые сообщения, файлы) и прикреплять ссылки на официальную документацию. |
| 111 | + |
| 112 | +## Структура кода |
| 113 | + |
| 114 | +Основной файл чат-бота — это [`main.py`](./main.py). В нем находится функция `main`, с которой начинается выполнение программы. |
| 115 | + |
| 116 | +Данный бот использует **паттерн сцен** для организации кода. Логика разделена на **фрагменты** (сцены), каждая из которых соответствует определенному состоянию диалога: |
| 117 | + |
| 118 | +* [`scenes/start.py`](./scenes/start.py) — приветственная сцена. Отвечает за выбор языка и инициализацию данных пользователя. |
| 119 | +* [`scenes/main_menu.py`](./scenes/main_menu.py) — формирует главное меню, отправляет приветственное изображение и переключает контекст на рабочие эндпоинты. |
| 120 | +* [`scenes/endpoints.py`](./scenes/endpoints.py) — содержит логику обработки всех функциональных кнопок (отправка текста, медиа, контактов). |
| 121 | + |
| 122 | +Тексты сообщений вынесены отдельно и хранятся в файле [`assets/strings.yaml`](./assets/strings.yaml). Для получения нужной строки в зависимости от языка используется утилита перевода [`utils/yml_reader.py`](./utils/yml_reader.py). |
| 123 | + |
| 124 | +## Управление сообщениями |
| 125 | + |
| 126 | +Все взаимодействия реализованы через **MAX API** с использованием **Python-библиотек**: |
| 127 | + |
| 128 | +* [maxbot-api-client-python](https://github.com/green-api/maxbot-api-client-python) — базовый клиент для работы с API. |
| 129 | +* [maxbot-chatbot-python](https://github.com/green-api/maxbot-chatbot-python) — фреймворк для создания ботов со сценами, состояниями и удобными обертками. |
| 130 | + |
| 131 | +Отправка сообщений максимально упрощена благодаря методам объекта `Notification`. Например, отправка локации: |
| 132 | + |
| 133 | +```python |
| 134 | +notification.reply_with_location( |
| 135 | + lat=51.5074, |
| 136 | + lon=-0.1278 |
| 137 | +) |
| 138 | +``` |
| 139 | + |
| 140 | +Или отправка медиафайла: |
| 141 | + |
| 142 | +```python |
| 143 | +notification.reply_with_media( |
| 144 | + text="Look at this!", |
| 145 | + format_type="markdown", |
| 146 | + file_source="https://example.com/image.jpg" |
| 147 | +) |
| 148 | +``` |
| 149 | + |
| 150 | +Все доступные методы **API** описаны в [официальной документации](https://green-api.com/max-bot-api/docs/). |
| 151 | +Полную документацию по **MAX API** можно найти на официальном портале разработчиков: [dev.max.ru/docs-api](https://dev.max.ru/docs-api). |
0 commit comments