Как должен выглядеть контракт интеграции между виртуальной АТС и CRM?
Что проверяют
Умеете ли вы описать интеграцию как договор с явными событиями, форматами и гарантиями доставки, а не как «АТС шлёт данные в CRM». Для data и ML-специалиста важен ещё взгляд потребителя: звонки уходят в хранилище, записи в распознавание речи и речевую аналитику, и ошибки контракта становятся ошибками в датасете. Следом спрашивают, что будет, если вебхук пришёл дважды.
Как отвечать
Контракт описывает несколько потоков:
- события из АТС в CRM:
call.started,call.answered,call.ended,recording.ready, обычно вебхуками. Схему фиксируют в AsyncAPI или JSON Schema; - запросы из CRM в АТС: звонок по клику, выгрузка истории, получение записи. Это REST с описанием в OpenAPI;
- синхронный запрос от АТС: поиск клиента по номеру, чтобы направить звонок ответственному менеджеру. Тут жёсткий таймаут и запасной сценарий, иначе звонок ждёт CRM.
Обязательные поля события: event_id, call_id, направление, номера в E.164, время в UTC по ISO 8601, длительность, статус и причина завершения, идентификатор оператора, сопоставленный с пользователем CRM. Доставка at-least-once: повторы с экспоненциальной задержкой, идемпотентность по event_id, подпись HMAC и проверка времени запроса. Порядок событий не гарантирован, поэтому состояние звонка собирают как конечный автомат по call_id. Версию схемы указывают в самом событии, новые поля только добавляются.
Отдельно оговорите данные: номера и записи разговоров это персональные данные, их хранение и доступ регулирует 152-ФЗ. Для обучения моделей на записях нужны основание обработки и понятный срок хранения, а ссылку на запись выдают временную.
Где спотыкаются
Описывают только успешный звонок. Пропущенные, переводы между операторами и сброс в очереди потом ломают отчёты и разметку.
Не закладывают идемпотентность. Повторный вебхук создаёт дубль звонка в CRM и лишнюю строку в обучающей выборке.
Хранят номера в разных форматах, а время без часового пояса. Звонок не сопоставляется с клиентом, а признаки по времени суток в модели смещаются на несколько часов.