Рішення · Транспорт та логістика
Коли клієнт запитує, де посилка, агент не вгадує: дзвонить кур’єру, запитує його і повертається з відповіддю.
Диспетчеризація голосом, побудована як механізм, а не як обіцянка: таблиця з явними станами, три спроби з інтервалом у дві хвилини, структурований запис результату дзвінка та фільтр, що прибирає номер водія з усього, що потрапляє до моделі, щоб його не можна було продиктувати клієнту.
Вже збудованоMecanismul de dispecerizare e scris și migrat în platforma noastră vocală: tabela `courier_calls` cu șapte stări posibile, trei încercări implicite, pauză de 120.000 ms între ele și rezultatul apelului păstrat structurat, plus cinci funcții de server care o folosesc — inițierea apelului către curier, verificarea rezultatului, mătura pentru apelurile rămase agățate, identificarea celui care sună înapoi și webhookul de după apel. A doua implementare e filtrul de ieșire scris pentru un client din transport, care elimină recursiv câmpurile de contact ale șoferului din rezultatul uneltei, păstrând numerele dispeceratului. Rezerva, spusă înainte să întrebi: partea de telefon trece printr-o gazdă SIP, iar gazda prin care merg liniile noastre de test nu răspunde la data scrierii — nu-ți dăm un număr de demonstrație pe care nu l-am putea ridica în fața ta.
У транспортній або доставковій компанії більшість вхідних дзвінків — це те саме запитання, поставлене різними людьми: де вантаж, о котрій годині прибуде, чому не прибув. Відповідь не в документі і не в системі — вона в голові водія, який за кермом. Диспетчер з’єднує ланцюг: приймає дзвінок клієнта, телефонує водієві, повертається до клієнта. Ця робота займає одну людину повністю і виконується сто разів на день, тими самими трьома реченнями.
Ми побудували саме цей ланцюг, як механізм зі станами, а не як маркетингову функцію. Агент розмовляє з клієнтом. Коли йому потрібна відповідь, якої він не має, він викликає функцію, що запускає другий дзвінок — до кур’єра — пов’язаний із розмовою, з якої він вийшов. Той дзвінок має власний рядок у таблиці, зі статусом, що переходить через `calling`, `in_progress`, `retrying`, `completed`, `failed`, `no_answer`, `timeout`, із номером спроби, максимум трьома спробами та паузою у дві хвилини між ними. Результат записується структуровано: підсумок того, що сказав кур’єр, орієнтовний час, місцезнаходження.
Частина, яку легко не помітити і яку ми трактуємо як вимогу, а не як пересторогу: номер телефону водія не має права потрапити до клієнта. Це не інструкція, написана в prompt агента, бо інструкцію в prompt можна обійти. Це фільтр, який рекурсивно проходить результат інструмента й видаляє поля контактів водія до того, як цей результат потрапить до моделі — зберігаючи номери диспетчерської. Те, що було видалено, не можна продиктувати, незалежно від того, як питають агента.
А найважливіше обмеження — інфраструктурне, а не інтелектуальне: голосовий агент по телефону залежить від SIP-хоста між вашим оператором і платформою. Коли цей хост падає, дзвінки не йдуть, а ознака збою впізнавана — запит прострочений, ідентифікатор дзвінка порожній, тривалість нульова. Хост, через який проходять наші тестові лінії, не відповідає на дату написання цієї сторінки. У вебі голосовий маршрут перевіряється сьогодні; по телефону перший етап будь-якої роботи — встановити, на якому хості входять ваші номери.