- Главная
- Документация
- Телефония: звонки и записи разговоров
Телефония: звонки и записи разговоров
Как звонки и записи из АТС попадают в CRM.
Linkodium CRM принимает звонки от любой АТС через API. АТС сообщает о звонке, CRM находит заявку по номеру клиента или создаёт новую и показывает звонок с записью разговора в ленте заявки. Готовых кнопок «подключить АТС» в кабинете нет: между АТС и CRM нужен небольшой скрипт на вашем сервере, прослойка. Эта страница объясняет схему, а полное описание методов есть в документации API.
Как звонок попадает в CRM
- АТС отправляет уведомление о событии звонка (вебхук) на адрес вашей прослойки.
- Прослойка переводит его в запрос
POST /api/v1/callsк CRM с API-ключом компании. - CRM ищет активную заявку с этим номером телефона. Нашла: звонок попадает в её ленту. Не нашла: создаёт новую заявку.
- Когда запись разговора готова, прослойка передаёт ссылку на неё или сам файл. CRM прикрепляет запись к звонку.
Каждое событие одного звонка (начало, конец, готовая запись) отправляется отдельным запросом с одним и тем же call_id: это идентификатор звонка в вашей АТС. Первый запрос заводит звонок, следующие дописывают итог, длительность и запись. Повтор одного и того же запроса ничего не портит.
Когда создаётся заявка
- Активной считается заявка со статусом «Новая заявка» или «В работе», не в архиве. Номера сравниваются по последним 10 цифрам.
- Входящий звонок с нового номера всегда создаёт заявку: с телефоном клиента, источником (по умолчанию «Звонок») и менеджером по умолчанию в роли ответственного. Сотрудники получают уведомление о новой заявке по своим настройкам.
- Исходящий звонок на номер без заявки по умолчанию не сохраняется. Чтобы он создавал заявку, включите галочку «Исходящий звонок на номер без заявки создаёт новую заявку»: «Настройки компании», вкладка «Компания», блок «Основное».
Отдельных уведомлений о звонках нет: звонок виден в ленте заявки.
Шаг 1. Выпустите API-ключ
- Откройте «Настройки компании» -> «API-ключи».
- В блоке «Выпустить ключ» введите «Название ключа», например «Телефония», и нажмите «Выпустить ключ».
- Скопируйте ключ кнопкой «Скопировать» и сохраните в настройках прослойки. Затем нажмите «Готово, ключ сохранён».
Шаг 2. Передавайте события звонка
Ключ передаётся в заголовке X-API-Key. Начало входящего звонка:
curl -X POST https://crm.linkodium.com/api/v1/calls \
-H "X-API-Key: $CRM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"call_id": "1727517900.1234",
"direction": "in",
"client_phone": "+79991234567",
"line": "+73422000000",
"started_at": "2026-09-28T14:05:00+05:00"
}'
Конец звонка, тот же call_id:
curl -X POST https://crm.linkodium.com/api/v1/calls \
-H "X-API-Key: $CRM_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "call_id": "1727517900.1234", "status": "answered", "duration": 185 }'
| Поле | Что передавать |
|---|---|
call_id | Идентификатор звонка в АТС. Обязателен. |
client_phone | Номер клиента. Обязателен в первом событии звонка. |
direction | in (входящий, по умолчанию) или out (исходящий). |
line | Ваш номер или линия. |
status | Итог звонка: answered, no answer, missed, busy и другие. |
duration | Длительность разговора в секундах. |
started_at | Время начала со смещением часового пояса, например 2026-09-28T14:05:00+03:00. Время без смещения отклоняется. |
source, service | Источник и услуга для новой заявки. |
record_url | Ссылка на запись разговора. |
Шаг 3. Передайте запись разговора
Ссылкой
Если АТС отдаёт запись по ссылке, передайте её в поле record_url тем же call_id:
curl -X POST https://crm.linkodium.com/api/v1/calls \
-H "X-API-Key: $CRM_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "call_id": "1727517900.1234", "record_url": "https://records.example-pbx.com/abc123.mp3" }'
CRM скачает запись в течение нескольких минут и прикрепит её к звонку. Ссылка должна открываться из интернета без авторизации (подписанная ссылка АТС подходит) и жить не меньше нескольких часов. Форматы: mp3, wav, ogg, webm, m4a, aac, размер до 200 МБ.
Файлом
Если публичной ссылки нет, прослойка скачивает файл сама и отправляет его методом /api/v1/calls/recording. Звонок с этим call_id уже должен быть передан.
curl -X POST https://crm.linkodium.com/api/v1/calls/recording \
-H "X-API-Key: $CRM_API_KEY" \
-F "call_id=1727517900.1234" \
-F "file=@/tmp/call-1727517900.1234.mp3"
Размер файла до 100 МБ. У одного звонка может быть несколько записей.
Что видно в карточке заявки
Звонок появляется в блоке «Лента событий» отдельной строкой:
- заголовок «Входящий звонок» или «Исходящий звонок»;
- «Телефон»: номер клиента;
- «Номер»: ваша линия, если АТС её передала;
- «Статус»: итог звонка по-русски, например «Принят», «Нет ответа», «Пропущен», «Занято»;
- «Длительность» и «Время звонка»;
- запись разговора: плеер для прослушивания и кнопка «Скачать запись».
Если заявку создал звонок, в ленте будет строка «Заявка создана по звонку». Записи могут слушать и скачивать только сотрудники вашей компании.
Пример для Novofon и Zadarma
Novofon и Zadarma сообщают о звонках вебхуками на адрес, который вы указываете в кабинете АТС. Прослойка принимает вебхук и переводит его в вызов CRM.
| Событие АТС | Что отправить в CRM |
|---|---|
NOTIFY_STARTвходящий, начало | call_id = pbx_call_id, direction = in, client_phone = caller_id, line = called_did, started_at = call_start с поясом |
NOTIFY_ENDвходящий, конец | call_id = pbx_call_id, direction = in, client_phone = caller_id, status = disposition, duration = duration |
NOTIFY_OUT_STARTисходящий, начало | call_id = pbx_call_id, direction = out, client_phone = destination, started_at = call_start с поясом |
NOTIFY_OUT_ENDисходящий, конец | call_id = pbx_call_id, direction = out, client_phone = destination, line = caller_id, status = disposition, duration = duration |
NOTIFY_RECORDзапись готова | Получить ссылку методом API АТС pbx/record/request, затем call_id = pbx_call_id, record_url = ссылка |
- В
call_idпередавайтеpbx_call_id: он одинаков у всех событий одного звонка. client_phoneпередавайте в каждом событии, где номер есть: если первое событие потеряется, звонок заведёт следующее.call_startу этих АТС приходит без часового пояса. Прослойка должна дописать пояс, заданный в кабинете АТС.- Ссылку на запись АТС готовит не сразу: Novofon советует запрашивать её примерно через 40 секунд после уведомления.
- Ответ
404 CALL_NOT_FOUNDна событие записи исходящего звонка штатен, если настройка «Исходящий звонок на номер без заявки создаёт новую заявку» выключена: такой звонок не сохранялся.
Это учебное соответствие: проверьте названия полей и событий по документации своей АТС. Готовый пример прослойки на PHP, все поля, ответы и коды ошибок приведены в документации API.
Лимиты
| Что | Лимит |
|---|---|
| Запросов на один ключ | 3000 за 5 минут |
| Файл записи звонка | 100 МБ |
| Запись по ссылке | до 200 МБ |
| Действующих ключей у компании | 20 |