Взаимодействие компонентов🔗
Этот раздел содержит описание типовых сценариев обмена между микросервисами и логики обработки событий в системе.
Входящее сообщение с платформы (VK, WhatsApp)🔗
Сценарий начинается с получения вебхука от внешней платформы. Далее:
- Сервис интеграции (
*_microservice) получает входящее сообщение по вебхуку. - Он запрашивает
data_serviceдля получения профиля поplatform + profile_id(в каждом микросервисе он свой, например в VK это айди группы). - Полученное сообщение ставится в очередь Redis.
- Через установленное время юзером (асинхронно) запускается обработка очереди:
- Извлекается до 9 последних сообщений
- Формируется системное пояснение (итого 10)
- Отправляется запрос в
gpt_service
- Если GPT запрашивает
tool_call,gpt_serviceвызываетtools_service - Полученный ответ от GPT возвращается:
- в канал (через API VK / WhatsApp)
- в
data_serviceдля создания транзакции расходов
Работа виджета (streaming)🔗
- Пользователь отправляет сообщение в виджет, он шлёт запрос в
widget_service widget_serviceпроверяет домен черезdata_service- Сообщение сохраняется во временное хранилище (
TTLCache) - После этого вызывается стриминговый запрос в
gpt_service - Ответ возвращается чанками по SSE в браузер
- После завершения — данные о расходе передаются в
data_service
Учет токенов и транзакций🔗
- После каждого успешного ответа GPT:
gpt_serviceвозвращает токены, модель, данные запроса- микросервис отправляет POST-запрос на
/tokens/addвdata_service data_serviceсоздает транзакцию