Repository navigation
SW-6181: Реализовать функцию VoIP в демо-чатботе - #14
Conversation
… 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
|
Код работает следующим образом.
|
… has been updated to the latest version
|
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
|
UPD x2:
|
|
UPD x3:
|
… external library ('whatsapp-chatbot-python[voip]==1.0.0')
|
UPD x4: Вынесли VoIP (RTC) и AI в отдельный репозиторий чат-бота на Python |
Код работает следующим образом.
В коде реализована FIFO-очередь звонков
- Поскольку 1 бот = 1 инстанс = 1 звонок, он может звонить только одному собеседнику за раз.
- Остальные встают в очередь. Им отправляются соответствующие сообщения.
- У юзера есть возможность выйти из очереди и вернуться в меню (отправив "0" - об этом его уведомляю)
- Если когда-то потребуется создать мульти-инстансные звонки (пул номеров), я НЕ рекомендую реализовывать это на уровне Python-демо. Поскольку тогда звонок будет поступать не от того собеседника, от лица которого пишет бот, и другие сложности. Это ломает модель.
- Лучше создать несколько независимых экземпляров Python-демо на разных инстансах и банально раскидывать пользователей между ними (на сканировании QR, например).
В коде реализована FSM (стейт машина), которая переключается при изменении состояния звонка
- Условно говоря: есть состояния: IDLE, TRIGGERED, QUEUED, CANCELLED, CONVERSTAION_STARTED, FAILED
- Переход между состояниями чётко контролируется. Состояния касаются самого процесса звонка.
- Есть тайм-ауты: 30 сек. на дозвон, 180 сек. на разговор
Проект подключен к Realtime API OpenAI
- Используется та же интеграция, что и для ChatGPT. Разве что поднял версии зависимостей.
- Realtime API получает аудиопоток (стрим) и отвечает аудиопотоком (стримом)
- Стрим пишется в VoIP (RTC)