Skip to content

SW-6181: Реализовать функцию VoIP в демо-чатботе - #14

Merged
kennyromanov merged 9 commits into
green-api:mainfrom
kennyromanov:feature/voip
Oct 8, 2026
Merged

kennyromanov merged 9 commits into
green-api:mainfrom
kennyromanov:feature/voip

Conversation

@kennyromanov

@kennyromanov kennyromanov commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Код работает следующим образом.

  1. В коде реализована FIFO-очередь звонков
    - Поскольку 1 бот = 1 инстанс = 1 звонок, он может звонить только одному собеседнику за раз.
    - Остальные встают в очередь. Им отправляются соответствующие сообщения.
    - У юзера есть возможность выйти из очереди и вернуться в меню (отправив "0" - об этом его уведомляю)
    - Если когда-то потребуется создать мульти-инстансные звонки (пул номеров), я НЕ рекомендую реализовывать это на уровне Python-демо. Поскольку тогда звонок будет поступать не от того собеседника, от лица которого пишет бот, и другие сложности. Это ломает модель.
    - Лучше создать несколько независимых экземпляров Python-демо на разных инстансах и банально раскидывать пользователей между ними (на сканировании QR, например).

  2. В коде реализована FSM (стейт машина), которая переключается при изменении состояния звонка
    - Условно говоря: есть состояния: IDLE, TRIGGERED, QUEUED, CANCELLED, CONVERSTAION_STARTED, FAILED
    - Переход между состояниями чётко контролируется. Состояния касаются самого процесса звонка.
    - Есть тайм-ауты: 30 сек. на дозвон, 180 сек. на разговор

  3. Проект подключен к Realtime API OpenAI
    - Используется та же интеграция, что и для ChatGPT. Разве что поднял версии зависимостей.
    - Realtime API получает аудиопоток (стрим) и отвечает аудиопотоком (стримом)
    - Стрим пишется в VoIP (RTC)


Сценарий:

  • клиент сканирует код на сайте
  • клиент начинает чат с ботом
  • клиент выбирает п. 18 Инициировать исходящий Аудиозвонок
  • клиента встречает бот ИИ и отвечает на его вопросы.
  • длительность звонка 3 минуты
  • после звонка чатбот скидывает ссылку на запись разговора в чат

kennyromanov added 2 commits September 29, 2026 13:55
… for the Green-API VoIP has been used; The issue with the menu options selection has been fixed; The calls via RTC have been implemented; The OpenAI Realtime model has been integrated into the voice call demo
…p has been made in the branch; The tests have been added
Comment thread external/greenapi-wa-voip-client-python Outdated
Comment thread config/.env.example
@kennyromanov

Copy link
Copy Markdown
Contributor Author

Код работает следующим образом.

  1. В коде реализована FIFO-очередь звонков
    - Поскольку 1 бот = 1 инстанс = 1 звонок, он может звонить только одному собеседнику за раз.
    - Остальные встают в очередь. Им отправляются соответствующие сообщения.
    - У юзера есть возможность выйти из очереди и вернуться в меню (отправив "0" - об этом его уведомляю)
    - Если когда-то потребуется создать мульти-инстансные звонки (пул номеров), я НЕ рекомендую реализовывать это на уровне Python-демо. Поскольку тогда звонок будет поступать не от того собеседника, от лица которого пишет бот, и другие сложности. Это ломает модель.
    - Лучше создать несколько независимых экземпляров Python-демо на разных инстансах и банально раскидывать пользователей между ними (на сканировании QR, например).

  2. В коде реализована FSM (стейт машина), которая переключается при изменении состояния звонка
    - Условно говоря: есть состояния: IDLE, TRIGGERED, QUEUED, CANCELLED, CONVERSTAION_STARTED, FAILED
    - Переход между состояниями чётко контролируется. Состояния касаются самого процесса звонка.
    - Есть тайм-ауты: 30 сек. на дозвон, 180 сек. на разговор

  3. Проект подключен к Realtime API OpenAI
    - Используется та же интеграция, что и для ChatGPT. Разве что поднял версии зависимостей.
    - Realtime API получает аудиопоток (стрим) и отвечает аудиопотоком (стримом)
    - Стрим пишется в VoIP (RTC)

Comment thread external/whatsapp-api-client-python Outdated
@kennyromanov

Copy link
Copy Markdown
Contributor Author

UPD: Обновил реализацию - переехал на официальный API-клиент для Python (см. green-api/whatsapp-api-client-python#93).

…n upgraded; The issue with the audio buffer overflow has been fixed; The backpressure has been added
@kennyromanov

Copy link
Copy Markdown
Contributor Author

UPD x2:

  • Обновил API-клиент до последней версии с VoIP (v55)
  • исправил проблему с переполнением буффера аудио
  • Внедрил политику Backpressure: если OpenAI генерит аудио слишком быстро - есть политика ограничения
  • Внедрил небольшой стейт для управления Backpressure
  • Добавил тесты

Comment thread internal/envs.py Outdated
Comment thread internal/calls/delivery.py Outdated
Comment thread config/data.yml Outdated
Comment thread internal/calls/delivery.py
Comment thread internal/calls/delivery.py Outdated
Comment thread internal/calls/service.py Outdated
Comment thread internal/calls/coordinator.py Outdated
Comment thread internal/calls/realtime_voice.py Outdated
Comment thread internal/calls/recording.py Outdated
Comment thread bot.py
@kennyromanov

Copy link
Copy Markdown
Contributor Author

UPD x3:

  1. Добавил ENV-параметр: MEDIA_URL (с Fallback'ом). Добавил Fallback на API_URL и сделал его необязательным.
  2. Перевёл HTTP-методы на официальный Green-API-клиент, добавил тайм-ауты
  3. Обновил конфигурацию зависимостей
  4. Поправил текстовки, добавил комментарии, тесты, и прочие мелочи

… external library ('whatsapp-chatbot-python[voip]==1.0.0')
@kennyromanov

Copy link
Copy Markdown
Contributor Author

UPD x4: Вынесли VoIP (RTC) и AI в отдельный репозиторий чат-бота на Python

@kennyromanov
kennyromanov merged commit 3dc2ee6 into green-api:main Oct 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants