Перейти к содержимому

Подключение IP-телефонии

Aelo принимает завершённые звонки от провайдеров IP-телефонии через webhook, а исторические звонки — через CDR backfill. Поддерживаются четыре провайдера: Stream Telecom и Binotel проверены на боевом трафике; Unitalk и Ringostat — в бете.

Общий принцип

  1. В разделе Источники → Телефония выберите провайдера и введите учётные данные.
  2. Скопируйте в настройки провайдера адрес вебхука, который показывает мастер, — а не голый webhookUrl из API. Всем провайдерам, кроме Binotel, нужен и сгенерированный Aelo webhook-секрет, без него все вебхуки отклоняются: у Stream Telecom адрес из мастера уже содержит его как ?token=…, у Unitalk и Ringostat секрет идёт в заголовок Authorization.
  3. Нажмите Проверить соединение — Aelo обратится к CDR API провайдера.

Stream Telecom

  • Учётные данные: username + password + api_key (Администрирование → Профиль компании → API KEY). Не Bearer-токен.
  • Webhook: поток событий; терминальное — Hangup с синхронным recordUrl. Настраивается письмом в support@streamtele.com.
  • Адрес вебхука секретный: в нём есть токен (?token=…), и звонок на адрес без него отклоняется. Мастер вставляет полный адрес в письмо поддержке; чтобы получить его позже, откройте Настройки → Источники данных → Подключение → Вебхук звонков в реальном времени и нажмите Показать адрес — доступно владельцу и администраторам. Отправляйте адрес только в поддержку Stream Telecom.
  • CDR backfill: окно ≤30 дней.

Binotel

  • Учётные данные: key + secret (выдаёт support@binotel.ua с привязкой к IP).
  • Событие: apiCallCompleted (form-urlencoded). В вебхуке нет URL записи — Aelo получает его по запросу перед загрузкой (ссылка живёт ~15 мин).
  • IP-allowlist: публичные IP Binotel разрешены по умолчанию.
  • Aelo всегда отвечает 200, чтобы избежать повторных попыток провайдера.

Unitalk

  • Учётные данные: API key проекта (заголовок Authorization).
  • Настройка: после сохранения Aelo сгенерирует webhook-секрет. Вставьте его в заголовок Authorization обработчика событий Unitalk — иначе все вебхуки будут отклонены.
  • Как посмотреть секрет позже: по умолчанию он не показан, потому что состояние подключения видно любому участнику организации. Откройте Настройки → Источники данных → Подключение → Вебхук звонков в реальном времени и нажмите Показать секрет — доступно владельцу и администраторам. Секрет не меняется ни при замене API-ключа, ни при переподключении источника: копия, уже вставленная в Unitalk, продолжает работать.
  • Часовой пояс: даты Unitalk без смещения; по умолчанию Europe/Kyiv (меняется в форме).
  • Событие: CALL_END. Запись становится доступной через ~10–15 мин (Aelo дождётся).

Ringostat

  • Учётные данные: API key — единственное поле формы.
  • Настройка: в Ringostat откройте Интеграции → Webhooks 2.0, укажите выданный URL адресом назначения и добавьте заголовок Authorization со значением Bearer <секрет> — это webhook-секрет, который Aelo генерирует после сохранения. Без заголовка все вебхуки отклоняются. Секрет показывается в мастере, а позже — по кнопке Показать секрет, как у Unitalk.
  • Запись: приходит прямо в вебхуке, дополнительный запрос не нужен.
  • CDR backfill отсутствует: исторические звонки загрузить нельзя — только те, что поступят после подключения.
  • Статус: бета. Схема payload унаследована от прежней интеграции и ни разу не подтверждена на живых данных; поэтому Проверить соединение отвечает успехом, не обращаясь к Ringostat.

Гибридный режим: телефония как источник только аудио

Некоторые CRM регистрируют звонок, но не прикладывают его запись. Bitrix24, например, может зафиксировать звонок активностью, которая лишь ссылается на веб-архив оператора телефонии — вместо файла. Для этого случая установка телефонии может служить источником только аудио вместо роли по умолчанию источник записей: собственных записей она не создаёт и поставляет запись для звонка, у которого её не хватает в CRM. Телефонию, которая прямо сейчас приносит записи, на месте не переключают — сначала отключите её, затем добавьте источником аудио.

  • Вендор: сегодня только Binotel. Aelo получает запись Binotel по запросу, по идентификатору звонка; Stream Telecom, Unitalk и Ringostat отдают запись только внутри собственного вебхука и не могут выдать её по запросу для звонка, который не приходил к ним напрямую.
  • Настройка: при подключённой CRM её карточка в Настройки → Источники данных → Подключение предлагает Добавить телефонию как источник аудио. Кнопка открывает мастер подключения с уже выбранной ролью и показывает только вендоров, умеющих отдать запись; CRM не затрагивается, подтверждение Заменить не показывается. Роль можно выбрать и в самом мастере, на шаге учётных данных. И кнопка, и выбор появляются, только когда они осмыслены: вендор должен уметь отдать запись по идентификатору звонка, а источником записей должна быть CRM, у которой Aelo эту запись забирает, — сегодня это Bitrix24. Подключение источника аудио не выключает телефонию, через которую приходят записи: активная телефония одна НА РОЛЬ, а не на организацию. Источник аудио пропускает шаг массового импорта (записей он не импортирует) и появляется в Настройки → Источники данных → Подключение отдельной карточкой с пометкой «дополнительный», своим URL вебхука и своими кнопками изменения и отключения. Замена ключей роль сохраняет: мастер открывается на той роли, которая у установки уже есть. Телефония, которая прямо сейчас приносит записи, в роль аудио на месте не переводится — её записи остановились бы, — поэтому сначала отключите её, затем подключите снова как источник аудио.
  • Сопоставление: сначала Aelo ищет идентификатор звонка прямо в активности CRM; если не находит — сопоставляет по номеру, времени и длительности звонка с индексом звонков Binotel. Живой вебхук добавляет звонок в этот индекс, как только он завершился, отвечен он или нет. Исход «не взяли трубку» или «занято» позволяет Aelo перестать ждать запись, которой не будет. Остальные неотвеченные исходы (бросили трубку, пока шёл дозвон; сбой связи) тоже попадают в индекс, но запись Aelo спрашивает у оператора до суточного потолка: отличить такой исход от того, которого мы пока не знаем, нечем. Долговечный исторический импорт, запускаемый вместе с обработкой накопленного, добирает то, чего живой вебхук не увидел вовсе: сброшенное событие или звонок, который состоялся до подключения установки.
  • Срок хранения: индекс сопоставления содержит только хвосты телефонных номеров и метаданные звонка. Строка живёт не больше 30 дней и удаляется раньше, если у организации задан меньший срок хранения транскриптов; индекс также входит в полное удаление организации.
  • Когда Aelo сдаётся: два ответа позволяют закрыть запись со своей причиной, а не ждать аудио. «Записи у источника нет» — звонок есть в индексе с исходом, который говорит, что оператор её не делал. «Подходит несколько звонков» — после сужения кандидатов осталось больше одного, а угадывать нельзя: чужая запись в карточке хуже отсутствующей. Всё остальное ждёт обычные сутки и затем закрывается с причиной «Звонок не найден у источника» — если в этот момент оператор отвечает. Если нет, запись завершается ошибкой: замолчавший оператор ничего не говорит о самом звонке.