Звонок в один клик и запись разговоров: как связать CRM с IP-телефонией
Связка CRM и IP-телефонии работает на трёх событиях: CRM командой через API просит АТС совершить звонок, АТС присылает события вызова, а запись остаётся на стороне АТС со ссылкой в карточке. Ниже: как устроен звонок в один клик, как находится клиент при входящем и что проверить до запуска.
Что даёт связка CRM и АТС и что она не заменяет
Связка CRM и телефонии решает три задачи менеджера. Позвонить клиенту из карточки в один клик, не набирая номер руками. Увидеть, кто звонит, ещё до ответа: на экране открывается карточка с историей. Сохранить факт разговора и запись в ленте клиента, чтобы коллега, подхвативший сделку, знал, о чём говорили. Всё остальное, от речевой аналитики до роботов-обзвонщиков, строится поверх этих трёх возможностей. Если вы смотрите на нашу CRM с AI-отделом продаж, то сейчас там работают Telegram-бот, почта и веб-форма, а телефония и АТС стоят в очереди разработки. Поэтому в статье я разбираю механику связки в целом, а не обещаю готовую кнопку.
Чего связка не заменяет. Она не заменяет саму АТС: звонки, номерной план, очереди, переадресацию и транки по-прежнему обслуживает телефония. CRM только управляет вызовом и записывает его результаты. Она не заменяет и дисциплину: если менеджеры звонят с личных телефонов, в системе ничего не появится. Наконец, она не решает проблему плохих данных: если номера в базе хранятся в пяти форматах, карточка при входящем не откроется.
Какие бывают схемы подключения. Облачная АТС с открытым API и вебхуками событий: CRM шлёт запросы по HTTPS, АТС присылает события на публичный адрес. Своя АТС на Asterisk или FreePBX, где CRM или промежуточный сервис общается с интерфейсом управления (AMI). Готовый коннектор, который уже умеет работать с вашей АТС и вашей CRM. Выбор зависит от того, есть ли у вас администратор АТС и насколько вам нужна гибкость. О самой телефонии мы писали в материалах про IP-телефонию для малого офиса и про облачную АТС.
Из примеров открытых CRM: в Frappe CRM есть журнал звонков, из карточек сделки и лида можно звонить по значку телефона, а записи разговоров доступны в истории. Встроенных интеграций с операторами две: в описании репозитория Frappe CRM указаны Twilio и Exotel, обе умеют исходящие, входящие и запись. Обе требуют отдельного аккаунта у этих провайдеров, а для российской облачной АТС или своего Asterisk коннектор придётся писать отдельно. Поведение конкретной связки на вашей версии CRM проверьте на тестовом стенде до запуска.
Как работает звонок в один клик: сначала звонит ваш телефон, потом клиент
Звонок в один клик (click-to-call) идёт в два этапа, и это главное, что нужно понять. Менеджер нажимает кнопку в карточке. CRM отправляет в API АТС команду, где указаны внутренний номер сотрудника и номер клиента. АТС сначала звонит на аппарат менеджера. Когда он снимает трубку, АТС набирает клиента и соединяет их. Если менеджер не ответил, клиенту никто не звонит, и это защита от ситуации, когда клиент берёт трубку и слышит тишину.
В терминах Asterisk эта команда называется Originate. Документация описывает её как действие, генерирующее исходящий вызов на канал с последующим соединением с добавочным номером или запуском приложения. Обязательны канал, а также либо связка «добавочный, контекст, приоритет», либо «приложение и данные». Из необязательных нужны идентификатор вызывающего (CallerID) и Async, ускоряющий создание вызова без ожидания. Пример действия AMI для иллюстрации, значения канала и контекста зависят от вашей АТС.
Action: Originate
Channel: PJSIP/101
Exten: 79000000000
Context: from-internal
Priority: 1
CallerID: CRM <79000000000>
Async: trueВ примере 101 — внутренний номер менеджера, а номер клиента условный. Имя канала, контекст и правила набора определяются вашим номерным планом, поэтому копировать эти строки без проверки нельзя.
Облачные телефонии устроены похоже, только вместо AMI у них REST. Например, в документации Twilio для исходящего вызова обязательны номер, куда звонить, номер-источник и инструкции по обработке, а для событий используется StatusCallback, который присылает уведомления о ходе вызова: инициирован, звонит, отвечен, завершён. У российских провайдеров набор параметров свой, но принцип тот же: запрос на создание вызова, затем события.
Что должна уметь CRM, чтобы это работало. Знать внутренний номер каждого менеджера и сопоставлять его с пользователем. Выбирать, с какого внешнего номера идёт исходящий. Записывать в ленту клиента попытку звонка, а не только состоявшийся разговор: «звонили, не дозвонились» тоже важный факт. Блокировать повторное нажатие кнопки на время вызова, иначе менеджер получит три звонка подряд. Если вы строите связку на готовой CRM, вы всё это проверяете, а не создаёте.
Схема шагов для обсуждения с телефонистом. | Шаг | Кто | Что происходит | |---|---|---| | 1 | Менеджер | нажимает кнопку в карточке | | 2 | CRM | отправляет в API АТС запрос на вызов | | 3 | АТС | звонит на телефон менеджера | | 4 | Менеджер | отвечает | | 5 | АТС | набирает клиента и соединяет | | 6 | АТС | присылает событие завершения и ссылку на запись | | 7 | CRM | сохраняет звонок в истории карточки |
Входящий звонок: как CRM находит клиента и открывает карточку
Для входящего вызова обмен идёт в обратную сторону. АТС получает звонок и сообщает CRM номер звонящего, обычно вебхуком на адрес CRM. CRM ищет этот номер среди контактов, находит карточку и показывает её ответственному менеджеру, а если контакт не найден, предлагает создать лид. В итоге менеджер снимает трубку, уже зная, кто звонит, и видит последние обращения.
Узкое место этого сценария — формат номеров. Один и тот же клиент записан как «8 900 000-00-00», «+7 900 000 00 00» и «9000000000», и поиск по точному совпадению его не найдёт. Решение одно: хранить номер в единой нормализованной форме и приводить входящий номер к ней перед поиском. Приводить к одному виду нужно и базу до подключения телефонии, иначе половина звонков откроет пустую карточку. Я обычно начинаю не с настройки телефонии, а с выгрузки всех телефонов и анализа форматов.
Второе узкое место: один номер, несколько человек. Бывает, что с одного телефона звонят и клиент, и его бухгалтер, и у каждого своя карточка. Поиск возвращает несколько совпадений, и CRM должна договориться с менеджером, что показывать: обычно открывают карточку компании и список контактов. Бывают и обратные случаи: у клиента несколько номеров, и звонок с домашнего не найдёт карточку, привязанную к рабочему.
Кому показывать входящий. Если звонят по внешнему номеру агентства, АТС маршрутизирует звонок по очереди, а CRM показывает карточку тому, на кого звонок реально пришёл, а не всем. Это обеспечивается событием вызова с внутренним номером принявшего. Поэтому при согласовании интеграции важно спросить провайдера, какие события он присылает и в какой момент: при поступлении, при ответе, при завершении. Тема интеграции телефонии с другой CRM разобрана в материале про SuiteCRM, телефонию и 1С.
Запись разговоров: где лежит файл и что показывать в карточке
Запись разговора создаёт АТС, и файл остаётся на её стороне: на сервере телефонии или в облаке провайдера. В CRM попадает не звук, а ссылка и метаданные: номер, направление (входящий или исходящий), длительность, ответственный сотрудник, время. Менеджер нажимает на звонок в ленте карточки, и запись открывается по ссылке или проигрывается встроенным плеером. Такая схема дешёвая и не раздувает хранилище CRM.
О чём нужно договориться заранее. Срок хранения записей на стороне АТС: через полгода файлы могут удаляться, а ссылки в CRM останутся мёртвыми. Права на прослушивание: обычно записи разрешают слушать руководителю и самому менеджеру, а не всем сотрудникам. Доступ по ссылке: она не должна открываться без авторизации и не должна «жить» вечно. Формат звукового файла, который поддерживает плеер в вашей CRM.
Событие завершения вызова в Asterisk называется Hangup: оно приходит, когда канал положили, и содержит идентификатор канала и код причины с текстом. По нему CRM понимает, что разговор закончился и можно записывать итоги. В облачных АТС это отдельное событие «звонок завершён», которое приходит на ваш адрес вебхука. Если событие не дошло, в карточке остаётся «звонок в процессе» вместо итога, и это самая частая причина «пустых» записей. Проверяйте доставку на тестовых звонках.
Про предупреждение клиента. Обычная практика: голосовое оповещение в начале разговора о том, что звонок может записываться. Юридические подробности стоит согласовать с юристом, я в этой статье рассказываю только о технической стороне. Но в проекте я всегда закладываю возможность включить такое оповещение на уровне АТС, а не в CRM, потому что именно АТС владеет вызовом.
Разбор случая: турагентство «Тёплый Берег» на 14 рабочих мест
Условный пример: турагентство «Тёплый Берег», четырнадцать менеджеров. Все цифры придуманы для иллюстрации. Менеджеры звонят клиентам со стационарных аппаратов и мобильных, заметки о разговорах пишут в карточках по памяти, а руководитель хочет слушать записи спорных разговоров, например, когда клиент говорит «мне обещали другую цену».
Что сделали. Выбрали облачную АТС с открытым API и вебхуками: своего администратора АТС в агентстве нет, и гибкость Asterisk не нужна. Свели в таблицу внутренние номера менеджеров и их учётные записи в CRM. Привели телефоны в базе к единому формату: до подключения нашлось несколько вариантов написания одного и того же номера. Настроили кнопку вызова в карточке, событие входящего и приём события завершения с записью. Права на прослушивание дали руководителю и самому менеджеру.
Как это работает. Менеджер открывает карточку клиента и нажимает кнопку вызова: сначала звонит его телефон, потом клиент. При входящем звонке на экране открывается карточка с историей поездок и последним обращением. После разговора в ленте появляется запись о звонке с длительностью и ссылкой на файл. Руководитель по ссылке слушает спорные разговоры и разбирает их с менеджером.
Какие сбои стоит заложить в план заранее, и именно их я бы проверял в этом примере. Часть входящих может открыть пустые карточки: у корпоративных клиентов номера нередко записаны через дефисы и с городскими кодами, и поиск по точному совпадению их не найдёт. Причина сидит в данных, а не в интеграции, хотя первым подозревают коннектор. Второй вероятный сбой: событие завершения не приходит, пока адрес вебхука не открыт снаружи по HTTPS. Оба сбоя выявляются тестовыми звонками на нескольких номерах до запуска всех менеджеров, и поэтому пилот я всегда начинаю с пяти номеров, а не с четырнадцати.
Что нужно от провайдера и что проверить до запуска
Требования к провайдеру телефонии можно уложить в короткий список. Открытый API на создание вызова. События вызова (поступление, ответ, завершение) через вебхук или потоковый интерфейс. Доступ к записям по ссылке с авторизацией. Возможность привязать внутренние номера к сотрудникам. Тестовый стенд или тестовые номера. Если чего-то из этого нет, интеграция либо невозможна, либо превращается в доработку, и лучше узнать об этом до оплаты тарифа. Для АТС на Asterisk и FreePBX примеры развёртывания у нас описаны в материале про корпоративную телефонию.
Что проверить со своей стороны. Публичный адрес CRM по HTTPS, на который АТС сможет присылать события: без него входящие и записи не придут. Ключи доступа к API хранятся не в открытом виде. Номера в базе приведены к единому формату. Количество и роли сотрудников известны. Срок хранения записей согласован. Тестовый звонок проведён на нескольких номерах разных операторов. Для каждого пункта назначьте владельца: ИТ, администратор АТС, руководитель. | Пункт проверки | Владелец | Критерий готовности | |---|---|---| | Соответствие внутренних номеров сотрудникам | ИТ | список без пропусков | | Единый формат телефонов в базе | ИТ | поиск находит клиента в любом написании | | Доступ к API провайдера | администратор АТС | тестовый вызов создан | | Публичный HTTPS для вебхуков | ИТ | событие приходит в CRM | | Срок хранения записей | руководитель | зафиксирован в регламенте | | Права на прослушивание | руководитель | список ролей утверждён | | Тестовый звонок на пяти номерах | ИТ и менеджеры | карточка, запись и итог сохранены |
Если что-то не работает, дерево диагностики такое. Звонит сначала не менеджеру: неверно сопоставлен внутренний номер, сверьте пользователя и добавочный. Карточка не открывается при входящем: формат номера в базе другой, приведите к единому виду. Нет записи в карточке: не доходит вебхук завершения, проверьте публичный адрес, сертификат и ключ API. Обрывается соединение: проверьте транк и список разрешённых адресов на стороне АТС. Эти четыре сценария покрывают подавляющее большинство обращений после запуска.
И ограничения подхода. Связка зависит от провайдера: смена АТС означает новую интеграцию. Нет универсального коннектора для всех российских АТС, поэтому каждое подключение оценивается отдельно по API провайдера. Качество разговора определяет телефония, а не CRM, и если связь плохая, виновата не интеграция. И наконец, в коробке ERPNext готового телефонного модуля для российских АТС нет: нужен коннектор или доработка, а работу Click-to-call с конкретным провайдером и запись в карточке лида нужно проверять на стенде, прежде чем считать подтверждённой.
Частые вопросы
Как работает click-to-call в CRM?
CRM передаёт в API телефонии внутренний номер сотрудника и номер клиента командой вида Originate. АТС сначала звонит на аппарат менеджера, а после его ответа набирает клиента и соединяет их. Событие завершения и запись попадают в историю карточки, если вебхук настроен.
Нужна ли для интеграции своя АТС или хватит облачной?
Хватит облачной, если у провайдера есть API на создание вызова и вебхуки событий. Своя АТС на Asterisk даёт больше контроля над записью и номерным планом, но требует администрирования. Для агентства без телефониста облачный вариант проще и надёжнее.
Где хранятся записи разговоров и как их привязать к клиенту?
Файл остаётся на стороне АТС, а в CRM сохраняются ссылка и данные звонка: номер, направление, длительность, ответственный. Привязка идёт по номеру телефона в карточке, поэтому номера в базе приводят к единому формату. Срок хранения записей согласуйте заранее.
Есть ли телефония в вашей CRM из коробки?
Нет: в продукте CRM с AI-отделом продаж сейчас работают Telegram-бот, почта и веб-форма, а телефония и АТС в очереди разработки. Подключение конкретной АТС мы оцениваем отдельно, по её API и событиям вызова.
Нужно ли предупреждать клиента о записи разговора?
В практике принято голосовое оповещение в начале звонка, его включают на уровне АТС. Юридические подробности согласуйте с юристом: в этой статье рассматривается только техническая сторона. Для проекта мы закладываем возможность оповещения заранее.
Источники
- Asterisk Docs — AMI Action Originate — Генерация исходящего вызова на канал, обязательные параметры Channel и Exten/Context/Priority либо Application/Data, CallerID, Async; проверено 01.10.2026: https://docs.asterisk.org/Asterisk_22_Documentation/API_Documentation/AMI_Actions/Originate/
- Asterisk Docs — AMI Event Hangup — Событие завершения канала, поля Channel, Uniqueid, Cause, Cause-txt; проверено 01.10.2026: https://docs.asterisk.org/Latest_API/API_Documentation/AMI_Events/Hangup/
- Twilio Docs — Call resource — Исходящий вызов через REST: To, From, Url или Twiml, StatusCallback и события вызова; пример облачной схемы; проверено 01.10.2026: https://www.twilio.com/docs/voice/api/call-resource
- Frappe CRM Docs — Call Log — Журнал звонков, звонок из карточки сделки и лида, записи разговоров в истории; проверено 01.10.2026: https://docs.frappe.io/crm/call-log
- Страница продукта CRM + AI-отдел продаж — Работающие каналы Telegram, почта, веб-форма, телефония в разработке; проверено 01.10.2026: https://itfresh.ru/products/crm-ai/
- GitHub frappe/crm — README, раздел Integrations — Встроенные интеграции телефонии Twilio и Exotel (звонки и запись), WhatsApp через Frappe WhatsApp; проверено 01.10.2026: https://github.com/frappe/crm
