{"id":27332092,"url":"https://github.com/prog-time/tg-support-bot","last_synced_at":"2026-02-18T22:02:40.149Z","repository":{"id":286889311,"uuid":"961435926","full_name":"prog-time/tg-support-bot","owner":"prog-time","description":"Open-source бот для организации технической поддержки в Telegram и VK.","archived":false,"fork":false,"pushed_at":"2026-02-16T17:53:42.000Z","size":1258,"stargazers_count":182,"open_issues_count":13,"forks_count":38,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-02-17T00:41:37.307Z","etag":null,"topics":["laravel","open-source","php","telegram","telegram-bot","vk-api"],"latest_commit_sha":null,"homepage":"https://tg-support-bot.ru","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/prog-time.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-04-06T14:17:06.000Z","updated_at":"2026-02-16T17:47:27.000Z","dependencies_parsed_at":"2025-04-19T17:24:31.198Z","dependency_job_id":"071ee2a6-cf73-48f4-92f6-fcd3ab29bd48","html_url":"https://github.com/prog-time/tg-support-bot","commit_stats":null,"previous_names":["prog-time/tg-support-bot"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/prog-time/tg-support-bot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prog-time%2Ftg-support-bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prog-time%2Ftg-support-bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prog-time%2Ftg-support-bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prog-time%2Ftg-support-bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/prog-time","download_url":"https://codeload.github.com/prog-time/tg-support-bot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prog-time%2Ftg-support-bot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29596331,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T20:59:56.587Z","status":"ssl_error","status_checked_at":"2026-02-18T20:58:41.434Z","response_time":162,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["laravel","open-source","php","telegram","telegram-bot","vk-api"],"created_at":"2025-04-12T13:47:05.207Z","updated_at":"2026-02-18T22:02:40.133Z","avatar_url":"https://github.com/prog-time.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TG Support Bot — Мультиканальная платформа технической поддержки\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)\n[![PHP](https://img.shields.io/badge/PHP-8.2+-777BB4?logo=php\u0026logoColor=white)](https://www.php.net/)\n[![Laravel](https://img.shields.io/badge/Laravel-12.0+-FF2D20?logo=laravel\u0026logoColor=white)](https://laravel.com/)\n[![Docker](https://img.shields.io/badge/Docker-ready-2496ED?logo=docker\u0026logoColor=white)](https://www.docker.com/)\n\nТелеграм бот для объединения сообщений из **Telegram**, **ВКонтакте** и **сторонних API источников** в единую систему технической поддержки.\n\nСообщения отправляются в Telegram-группу, где под каждого пользователя создаётся отдельная **чат-тема (топик)**.\n\nБот поддерживает **все типы сообщений**: текст, изображения, файлы, голосовые сообщения, видео, стикеры, контакты и другие медиафайлы.\n\n---\n\n## Демонстрация\n\n**Презентация работы бота:** [https://youtu.be/hIpYreHOxIk](https://youtu.be/hIpYreHOxIk)\n\n**Инструкция по установке через Docker Compose:** [https://youtu.be/ZAtP9qJ5q9M](https://youtu.be/ZAtP9qJ5q9M)\n\n**Telegram-группа поддержки:** [https://t.me/pt_tg_support](https://t.me/pt_tg_support)\n\n---\n\n## Содержание\n\n- [Как это работает](#-как-это-работает)\n- [Основные возможности](#-основные-возможности)\n- [Технологический стек](#-технологический-стек)\n- [Быстрый старт](#-быстрый-старт)\n- [Установка и настройка](#-установка-и-настройка)\n- [AI помощник](#-ai-помощник)\n- [Живой чат для сайта](#-живой-чат-для-сайта)\n- [API интеграция](#-api-интеграция)\n- [Мониторинг и логирование](#-мониторинг-и-логирование)\n- [Поддерживаемые типы сообщений](#-поддерживаемые-типы-сообщений)\n- [Интерактивные клавиатуры](#-интерактивные-клавиатуры)\n- [Архитектура](#-архитектура)\n- [Развертывание](#-развертывание)\n- [Документация](#-документация)\n- [Вклад в проект](#-вклад-в-проект)\n- [Лицензия](#-лицензия)\n\n---\n\n## Как это работает\n\n```\n┌─────────────┐         ┌─────────────┐         ┌─────────────────┐\n│  Telegram   │────────▶│             │◀────────│   ВКонтакте     │\n│   Users     │         │             │         │     Users       │\n└─────────────┘         │             │         └─────────────────┘\n                        │             │\n┌─────────────┐         │   TG Bot    │         ┌─────────────────┐\n│  Website    │────────▶│   Server    │◀────────│  External API   │\n│   Widget    │         │             │         │    Sources      │\n└─────────────┘         │             │         └─────────────────┘\n                        └──────┬──────┘\n                               │\n                               ▼\n                    ┌──────────────────────┐\n                    │  Telegram Group      │\n                    │  ┌────────────────┐  │\n                    │  │ Topic: User 1  │  │\n                    │  ├────────────────┤  │\n                    │  │ Topic: User 2  │  │\n                    │  ├────────────────┤  │\n                    │  │ Topic: User 3  │  │\n                    │  └────────────────┘  │\n                    └──────────────────────┘\n```\n\n### Процесс обработки сообщений\n\n1. **Получение сообщения**: Пользователь отправляет сообщение боту через Telegram, ВКонтакте, виджет сайта или внешний API\n2. **Создание топика**: Бот автоматически находит или создаёт тему (топик) в Telegram-группе для этого клиента\n3. **Пересылка в группу**: Сообщение пересылается в соответствующую тему с информацией об отправителе\n4. **Ответ менеджера**: Менеджеры отвечают **прямо в теме** — бот отслеживает их сообщения\n5. **Отправка клиенту**: Ответ автоматически пересылается клиенту **от имени бота** (без раскрытия личности менеджера)\n\n---\n\n## Основные возможности\n\n### Мультиканальность\n- **Telegram**: Полная поддержка Telegram Bot API\n- **ВКонтакте**: Интеграция с VK API для сообщений сообщества\n- **Website Widget**: Готовый виджет живого чата для встраивания на сайт\n- **External API**: REST API для подключения сторонних источников\n\n### Коммуникация\n- Все типы медиафайлов (текст, изображения, документы, голосовые, видео, стикеры, контакты)\n- Автоматическая организация диалогов в топики Telegram-группы\n- Приватность: клиенты не видят, кто из менеджеров им отвечает\n- Настраиваемые шаблоны имен топиков\n\n### Автоматизация\n- **AI помощник**: Интеграция с OpenAI, DeepSeek, GigaChat для автоматических ответов\n- Очереди сообщений с Laravel Queue\n- Webhook обработка в реальном времени\n- WebSocket поддержка через Socket.io\n\n### Управление и мониторинг\n- **Grafana**: Визуализация метрик и статистики\n- **Loki**: Централизованное логирование\n- **PgAdmin**: Управление базой данных\n- **RedisInsight**: Мониторинг Redis\n- Интеграция с Sentry для отслеживания ошибок\n\n### Модерация\n- Блокировка пользователей\n- Закрытие обращений\n- История всех сообщений\n- Управление внешними источниками\n\n---\n\n## Технологический стек\n\n**Backend:**\n- Laravel 12.0+ (PHP 8.2+)\n- PostgreSQL (база данных)\n- Redis (кэш и очереди)\n- Laravel Queue (обработка фоновых задач)\n\n**Frontend \u0026 Real-time:**\n- Node.js + Socket.io (WebSocket сервер)\n- JavaScript (виджет чата)\n\n**External APIs:**\n- Telegram Bot API\n- VK API\n- OpenAI API / DeepSeek / GigaChat (AI)\n\n**DevOps:**\n- Docker + Docker Compose\n- Nginx (веб-сервер)\n- Certbot (SSL сертификаты)\n\n**Monitoring \u0026 Logging:**\n- Grafana (дашборды)\n- Loki (логи)\n- Promtail (сбор логов)\n- Sentry (error tracking)\n\n**Development:**\n- PHPUnit (тестирование)\n- PHPStan (статический анализ)\n- Laravel Pint (code style)\n\n---\n\n## Быстрый старт\n\n### Требования\n\n- Docker 20.10+\n- Docker Compose 2.0+\n- Git\n\n---\n\n## Установка и настройка\n\n### Подготовка\n\n**Создайте Telegram бота:**\n1. Напишите [@BotFather](https://t.me/BotFather)\n2. Отправьте `/newbot`\n3. Следуйте инструкциям и получите `TELEGRAM_TOKEN`\n4. Отключите Privacy Mode: `/setprivacy` → Disable\n\n**Создайте Telegram группу:**\n1. Создайте новую группу\n2. Добавьте в неё созданного бота как администратора\n3. Включите Topics (темы) в настройках группы\n4. Получите `TELEGRAM_GROUP_ID` (можно через бота [@getidsbot](https://t.me/getidsbot))\n\n**Для ВКонтакте (опционально):**\n1. Создайте сообщество ВКонтакте\n2. Настройте API: Настройки → API → Создать ключ\n3. Получите `VK_TOKEN`, `VK_CONFIRM_CODE`, `VK_SECRET_CODE`\n\n### Конфигурация .env\n\n```env\n# Основные настройки\nAPP_NAME=\"TG Support Bot\"\nAPP_URL=https://yourdomain.com\nMAIN_DOMAIN=yourdomain.com\n\n# Telegram Bot\nTELEGRAM_TOKEN=\"123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11\"\nTELEGRAM_GROUP_ID=\"-1001234567890\"\nTELEGRAM_SECRET_KEY=\"your_random_secret_key\"\n\n# VK (опционально)\nVK_TOKEN=\"your_vk_token\"\nVK_CONFIRM_CODE=\"12345678\"\nVK_SECRET_CODE=\"your_vk_secret\"\n\n# База данных\nDB_CONNECTION=pgsql\nDB_HOST=pgdb\nDB_PORT=5432\nDB_DATABASE=support_bot\nDB_USERNAME=postgres\nDB_PASSWORD=secure_password\n\n# Redis\nREDIS_HOST=redis\nREDIS_PASSWORD=secure_redis_password\n\n# Шаблон имени топика\nTEMPLATE_TOPIC_NAME=\"{first_name} {last_name} {platform}\"\n```\n\n### Выберите одну из 2 инструкций \n\nУстановка на хостинг - https://github.com/prog-time/tg-support-bot/wiki/Инструкция-по-установке-бота-на-хостинг\n\nУстановка через Docker Compose - https://github.com/prog-time/tg-support-bot/wiki/Установка-через-Docker-Compose\n\n---\n\n## AI помощник\n\nБот поддерживает интеграцию с AI для автоматической генерации ответов.\n\n### Поддерживаемые провайдеры\n\n- **OpenAI** (GPT-4, GPT-3.5)\n- **DeepSeek**\n- **GigaChat** (Сбер)\n\n### Настройка\n\n```env\n# Включить AI\nAI_ENABLED=true\nAI_AUTO_REPLY=false  # true для автоматических ответов\n\n# Выбор провайдера\nAI_DEFAULT_PROVIDER=openai  # или deepseek, gigachat\n\n# OpenAI\nOPENAI_API_KEY=sk-proj-...\nOPENAI_MODEL=gpt-4\nOPENAI_MAX_TOKENS=1000\nOPENAI_TEMPERATURE=0.7\n\n# DeepSeek\nDEEPSEEK_CLIENT_SECRET=sk-...\nDEEPSEEK_MODEL=deepseek-chat\n\n# GigaChat\nGIGACHAT_CLIENT_SECRET=your_secret\nGIGACHAT_MODEL=GigaChat-2-Max\n```\n\n### Управление AI\n\nAI помощник активируется через команды бота или автоматически при включении `AI_AUTO_REPLY=true`.\n\nБот может генерировать ответы на основе истории диалога и контекста.\n\n---\n\n## Живой чат для сайта\n\nПроект включает готовый виджет живого чата для встраивания на сайт.\n\n### Демо\n\n[Пример работы виджета](https://tg-support-bot.ru/preview/chat)\n\n### Установка виджета\n\nПодробная инструкция доступна в [разделе Wiki](https://github.com/prog-time/tg-support-bot/wiki/).\n\n**Краткая инструкция:**\n\n1. Скопируйте код виджета из `public/chat-widget.js`\n2. Вставьте перед закрывающим тегом `\u003c/body\u003e` на вашем сайте:\n\n```html\n\u003cscript src=\"https://yourdomain.com/chat-widget.js\"\u003e\u003c/script\u003e\n\u003cscript\u003e\n  ChatWidget.init({\n    apiUrl: 'https://yourdomain.com',\n    source: 'website'\n  });\n\u003c/script\u003e\n```\n\n3. Все сообщения из виджета будут поступать в Telegram группу\n\n---\n\n## API интеграция\n\n### REST API для сторонних источников\n\nБот предоставляет REST API для подключения внешних систем.\n\n**Endpoint:** `POST /api/external/message`\n\n**Пример запроса:**\n\n```bash\ncurl -X POST https://yourdomain.com/api/external/message \\\n  -H \"Authorization: Bearer YOUR_API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"source\": \"crm-system\",\n    \"external_user_id\": \"user_12345\",\n    \"first_name\": \"Иван\",\n    \"last_name\": \"Петров\",\n    \"message\": \"Здравствуйте, у меня вопрос по заказу\",\n    \"message_type\": \"text\"\n  }'\n```\n\n**Параметры:**\n- `source` — идентификатор внешнего источника\n- `external_user_id` — ID пользователя в вашей системе\n- `first_name`, `last_name` — имя и фамилия\n- `message` — текст сообщения\n- `message_type` — тип сообщения (`text`, `photo`, `document`, и т.д.)\n\n**Ответ:**\n\n```json\n{\n  \"success\": true,\n  \"message_id\": 12345,\n  \"topic_id\": 67890\n}\n```\n\nПодробная документация API доступна через Swagger: `https://yourdomain.com/api/documentation`\n\n---\n\n## Мониторинг и логирование\n\n### Grafana\n\n**URL:** `https://grafana.yourdomain.com`\n\nЛогин: значение из `GRAFANA_USER`\nПароль: значение из `GRAFANA_PASSWORD`\n\nGrafana подключена к Loki для визуализации логов и создания дашбордов.\n\n### Loki\n\nЦентрализованное хранилище логов. Доступен на `http://loki:3100`.\n\n### PgAdmin\n\nВеб-интерфейс для управления PostgreSQL.\n\n**URL:** `https://pgadmin.yourdomain.com`\n\nЛогин: `PGADMIN_EMAIL`\nПароль: `PGADMIN_PASSWORD`\n\n### RedisInsight\n\nМониторинг Redis.\n\n**URL:** `http://redis:8001`\n\n### Sentry (опционально)\n\nДля отслеживания ошибок в production настройте:\n\n```env\nSENTRY_LARAVEL_DSN=https://...@sentry.io/...\nSENTRY_TRACES_SAMPLE_RATE=0.1\n```\n\n---\n\n## Поддерживаемые типы сообщений\n\n### Telegram\n- ✅ Текстовые сообщения\n- ✅ Фото\n- ✅ Документы\n- ✅ Голосовые сообщения\n- ✅ Видео\n- ✅ Видео-кружки (video notes)\n- ✅ Стикеры\n- ✅ Аудио\n- ✅ Контакты\n- ✅ Локации\n- ✅ Опросы (polls)\n\n### ВКонтакте\n- ✅ Текстовые сообщения\n- ✅ Фото\n- ✅ Документы\n- ✅ Голосовые сообщения\n- ✅ Видео\n- ✅ Стикеры\n- ✅ Аудио\n\n### Website Widget\n- ✅ Текстовые сообщения\n- ✅ Файлы (изображения, документы)\n\n### External API\n- ✅ Все типы через API (определяется параметром `message_type`)\n\n---\n\n## Интерактивные клавиатуры\n\nБот поддерживает отправку интерактивных клавиатур пользователям через специальный синтаксис в тексте сообщения.\n\n### Синтаксис\n\nКнопки добавляются в текст сообщения с помощью двойных квадратных скобок:\n\n```\n[[Текст кнопки|тип:значение]]\n```\n\n### Типы кнопок\n\n| Тип | Синтаксис | Описание |\n|-----|-----------|----------|\n| URL | `[[Открыть сайт\\|url:https://example.com]]` | Кнопка со ссылкой |\n| Callback | `[[Назад\\|callback:back]]` | Inline callback кнопка |\n| Phone | `[[Отправить номер\\|phone]]` | Запрос контакта пользователя |\n| Text | `[[Вариант 1]]` | Текстовая кнопка (reply keyboard) |\n\n### Примеры использования\n\n**Inline клавиатура с URL и callback кнопками:**\n\n```\nДобрый день! Чем могу помочь?\n[[Открыть сайт|url:https://example.com]]\n[[Вернуться назад|callback:back]]\n[[Позвать оператора|callback:operator]]\n```\n\n**Кнопки в одном ряду** (без переноса строки между ними):\n\n```\nВыберите вариант:\n[[Да|callback:yes]] [[Нет|callback:no]]\n```\n\n**Reply клавиатура с запросом контакта:**\n\n```\nДля продолжения поделитесь своим номером телефона\n[[Отправить номер|phone]]\n```\n\n**Текстовые кнопки:**\n\n```\nВыберите категорию:\n[[Техническая поддержка]]\n[[Вопрос по оплате]]\n[[Другое]]\n```\n\n### Поддержка по платформам\n\n| Платформа | Inline Keyboard | Reply Keyboard |\n|-----------|-----------------|----------------|\n| Telegram | ✅ | ✅ |\n| ВКонтакте | ✅ | ✅ |\n| External API | ✅ (через webhook) | ✅ (через webhook) |\n\n### Примечания\n\n- Кнопки автоматически удаляются из текста сообщения\n- Inline кнопки (url, callback) имеют приоритет над reply keyboard\n- Максимум 8 кнопок в одном ряду для Telegram\n- Для VK кнопки конвертируются в соответствующий формат VK API\n\n---\n\n## Архитектура\n\n```\n┌─────────────────────────────────────────────────────────────────┐\n│                         Nginx (Reverse Proxy)                   │\n│                      SSL, Load Balancing                        │\n└────────────┬───────────────────────────────────┬────────────────┘\n             │                                   │\n    ┌────────▼────────┐                 ┌───────▼────────┐\n    │  Laravel App    │                 │  Node.js       │\n    │  (PHP-FPM)      │◀───────────────▶│  Socket.io     │\n    │                 │     Redis       │                │\n    └────────┬────────┘                 └────────────────┘\n             │\n    ┌────────▼──────────────────────────────────────────┐\n    │              Laravel Queue Worker                 │\n    │         (Background job processing)               │\n    └────────┬──────────────────────────────────────────┘\n             │\n    ┌────────▼────────┬──────────────┬──────────────────┐\n    │   PostgreSQL    │    Redis     │   File Storage   │\n    │   (Database)    │  (Cache/Queue│   (Public Files) │\n    └─────────────────┴──────────────┴──────────────────┘\n```\n\n### Основные компоненты\n\n**App Service**: Laravel приложение, обрабатывает HTTP запросы, webhook'и от Telegram/VK\n\n**Queue Worker**: Обработка фоновых задач (отправка сообщений, AI обработка)\n\n**Node.js Server**: WebSocket сервер для виджета живого чата\n\n**PostgreSQL**: Основная база данных (пользователи, сообщения, топики)\n\n**Redis**: Кэш, очереди, pub/sub для real-time обновлений\n\n**Nginx**: Веб-сервер, reverse proxy, SSL termination\n\n**Monitoring Stack**: Grafana + Loki + Promtail для мониторинга\n\n---\n\n## Развертывание\n\n### SSL/HTTPS\n\n```bash\n# Установить certbot в контейнер nginx\ndocker exec -it nginx certbot --nginx -d yourdomain.com\n\n# Автоматическое продление\ndocker exec -it nginx certbot renew --dry-run\n```\n\n---\n\n## Документация\n\n**Wiki**: [https://github.com/prog-time/tg-support-bot/wiki/](https://github.com/prog-time/tg-support-bot/wiki/)\n\n**API Documentation**: `https://yourdomain.com/api/documentation` (Swagger)\n\n**Telegram группа поддержки**: [https://t.me/pt_tg_support](https://t.me/pt_tg_support)\n\n**GitHub Issues**: [https://github.com/prog-time/tg-support-bot/issues](https://github.com/prog-time/tg-support-bot/issues)\n\n---\n\n## Вклад в проект\n\nМы приветствуем вклад сообщества!\n\nПожалуйста, ознакомьтесь с [CONTRIBUTING.md](./CONTRIBUTING.md) перед началом работы.\n\n**Как помочь проекту:**\n\n- Сообщайте об ошибках через [GitHub Issues](https://github.com/prog-time/tg-support-bot/issues)\n- Предлагайте новые функции\n- Улучшайте документацию\n- Создавайте Pull Request'ы\n\n---\n\n## Поддержка проекта\n\nЕсли проект был вам полезен, поддержите его:\n\n- ⭐ Поставьте звезду на GitHub\n- 📢 Расскажите о проекте друзьям и коллегам\n- 🤝 Внесите вклад в разработку\n\n---\n\n## Лицензия\n\nПроект распространяется под лицензией **MIT**.\n\nПодробнее: [LICENSE](./LICENSE)\n\n---\n\n## Контакты\n\n**GitHub**: [https://github.com/prog-time](https://github.com/prog-time)\n\n**Проект**: [https://github.com/prog-time/tg-support-bot](https://github.com/prog-time/tg-support-bot)\n\n**Telegram**: [https://t.me/pt_tg_support](https://t.me/pt_tg_support)\n\n---\n\nСделано с ❤️ для сообщества\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprog-time%2Ftg-support-bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprog-time%2Ftg-support-bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprog-time%2Ftg-support-bot/lists"}