Корпоративная телефония: голос, видео и групповые звонки в ERP
AIERP содержит встроенную систему звонков между сотрудниками — без отдельной АТС, SIP-телефонов и внешних сервисов. Голос, видео и демонстрация экрана работают в браузере через WebRTC и LiveKit; каждый звонок сохраняется с уникальным идентификатором, одним из семи состояний, длительностью и привязкой к чату, а в групповой конференции отдельно фиксируется состав участников с ролями ведущего и обычного участника. Групповые созвоны можно собирать из постоянных именованных групп или запускать прямо из встречи в календаре, а к разговору — приглашать внешних людей по гостевой или публичной ссылке без учётной записи. Звонки сопровождаются тегами, заметками, записью (только групповые, с разрешения ведущего) и статистикой по дням и собеседникам — вплоть до сводки по всей организации для руководителя.
Что получает бизнес от модуля
Голос и видео в браузере
Никаких клиентских установок и SIP-телефонов — звонок открывается прямо в браузере через WebRTC и LiveKit. Сотрудник нажимает кнопку и сразу попадает в комнату разговора по идентификатору звонка.
1-на-1 и групповые звонки
Один разговор может быть приватным (звонящий и получатель) или групповой конференцией с множеством участников. В группе можно приглашать новых людей, выходить и снова присоединяться.
Роли ведущего и участника
В групповом звонке есть ведущий и обычные участники. Ведущий управляет конференцией: выключает микрофон отдельным людям, включает режим «всех в молчание», запускает и останавливает запись разговора.
Демонстрация экрана
Любой участник может показать свой экран остальным. Все мгновенно видят, кто сейчас демонстрирует — карточка выделяется, видеопотоки переключаются автоматически.
Запись групповых звонков
Аудио конференции пишется в облако. Сохраняются статус записи (запрошена, идёт, завершена, ошибка), ссылка на файл, кто и когда запустил и завершил. Запускает и останавливает только ведущий, личные звонки не пишутся.
Мгновенные обновления
Все события звонка — поступление вызова, принятие, отклонение, завершение, отмена, приглашения в группу, вход и выход участников, начало и остановка демонстрации экрана, выключение микрофона ведущим, старт и стоп записи — мгновенно отображаются у всех собеседников.
Авто-помеха «пропущен»
Каждую минуту фоновый процесс находит вызовы, которые звонят дольше 60 секунд и не получили ответа, и помечает их пропущенными. Если у звонящего пропал интернет, звонок не зависнет в «вечном дозвоне».
Статистика и история
Сводка по сотруднику: всего звонков, пропущенных, входящих, исходящих, общая и средняя длительность по завершённым, разбивка по дням, топ-5 собеседников. История — с пагинацией, фильтрами по направлению, статусам, периоду и поиску по имени или фамилии собеседника.
Теги и заметки
У каждого пользователя свои теги звонков с цветом — личная классификация. Один звонок можно пометить несколькими тегами. Заметка к звонку — текст для быстрого контекста (о чём договорились).
Созвоны из календаря
Встреча в календаре с типом «Созвон» или «Встреча» превращается в живой групповой звонок по кнопке «Присоединиться». Первый вошедший поднимает комнату и автоматически приглашает остальных участников события, становясь ведущим. Повторяющиеся события и отменённые даты учитываются — созвон стартует именно для нужной даты.
Постоянные группы для планёрок
Свои именованные группы участников с цветом — «Опт», «Региональные», «ИТ-дежурные». Группа видна владельцу и всем её участникам; собрать по ней групповой созвон можно одним действием, не набирая людей заново. По каждой группе хранится история собранных звонков.
Гости по ссылке без аккаунта
К активному звонку можно пригласить внешнего человека (клиента, подрядчика, кандидата) именной гостевой ссылкой. Гость входит аудио-only прямо в браузере, без учётной записи в ERP. Ссылка работает, пока звонок активен, и допускает переподключение, если гостя случайно отключило.
Публичная ссылка-комната
Любой участник группового созвона может включить многоразовую публичную ссылку. По ней входят и сотрудники под своей учёткой с полными правами, и анонимные гости (аудио-only, вводят имя при входе). Отключение ссылки мгновенно отзывает доступ — токен аннулируется.
Обзор звонков для руководителя
Отдельный административный доступ показывает историю и статистику звонков по всей организации, а не только по себе: кто с кем и сколько общается, где пропуски, какая нагрузка по дням. Те же фильтры по направлению, статусам, периоду и собеседнику.
Что входит в Корпоративная связь
- 01
Звонок со стабильным идентификатором
Каждый звонок получает уникальный идентификатор, который заодно становится именем комнаты в LiveKit. Это даёт стабильный ключ для маршрутизации, истории и записи.
- 02
7 статусов звонка
Вызов, идёт разговор, завершён, пропущен, отклонён, отменён, ошибка соединения. У каждого свой цвет (жёлтый/синий/зелёный/красный/серый), а финальные статусы помечены отдельным признаком для интерфейса и логики.
- 03
6 статусов участника
Приглашён, звонит, в разговоре, вышел, отклонил, пропустил. Для групповых звонков статус хранится по каждому пользователю отдельно.
- 04
Защита от двойных звонков
При инициации звонка проверяется, не занят ли уже инициатор или получатель. Если кто-то уже в звонке (вызов или разговор) — возвращается ошибка «Собеседник сейчас занят». Звонить самому себе тоже нельзя.
- 05
WebRTC-сигнализация
Технические сигналы соединения (предложение, ответ, кандидаты) передаются от одного участника другому через сервер. Проверяется тип сигнала, после завершения звонка передача запрещена, получатель вычисляется автоматически.
- 06
LiveKit-токены доступа
Сервер генерирует временный токен с правами на вход в комнату (по идентификатору звонка), на отправку и приём аудио, на срок 3600 секунд. В токен включаются имя и аватар сотрудника — другие участники видят, кто говорит.
- 07
Запись разговоров через LiveKit
Аудиозапись комнаты стартует по команде, публичная ссылка формируется по шаблону пути с подстановками имени комнаты и времени. По событию завершения карточка записи финализируется и участники получают уведомление об остановке.
- 08
Принудительное выключение микрофона
Ведущий может выключить микрофон отдельному участнику (с фиксацией факта, времени и автора), включить режим «всех в молчание» и снять отключение. Все действия рассылаются участникам мгновенно.
- 09
Скрытие звонка только у себя
Каждая сторона может скрыть звонок из своей истории — собеседник по-прежнему видит его. Перед скрытием система проверяет, что пользователь действительно участник звонка.
- 10
Звонки не удаляются физически
Звонки не удаляются из системы — это нужно для аудита, разбора инцидентов и сохранения связи с записями разговоров.
- 11
Связь с чатом
Поле «чат» привязывает звонок к контексту переписки. После завершения в чат автоматически попадает системное сообщение с длительностью и статусом — история переговоров не теряется в чате.
- 12
История с фильтрами
История принимает направление (входящие или исходящие), статусы, период создания, поиск по имени или фамилии собеседника, размер страницы. Скрытые звонки автоматически отфильтрованы.
- 13
Личная статистика
Сводка по сотруднику: всего звонков, пропущенных, входящих, исходящих, общая и средняя длительность по завершённым, разбивка по дням, топ-5 собеседников с количеством звонков, именем, фамилией и аватаром.
- 14
Экспорт истории потоком
История звонков отдаётся для экспорта в CSV/XLSX по частям — без раздувания памяти даже на больших объёмах.
- 15
Теги и цвет
Теги звонков личные для каждого менеджера: имя и цвет настраиваются под себя. Один звонок может иметь несколько тегов. Удобно классифицировать: «продажа», «жалоба», «горячий клиент».
- 16
Заметка к звонку
Свободный текст заметки и причина завершения. Менеджер сразу после разговора фиксирует контекст — что обсудили, на чём остановились. Открывается в карточке звонка.
- 17
Созвон из встречи календаря
События календаря типов «Созвон» и «Встреча» поднимают LiveKit-комнату при старте. Кнопка «Присоединиться» ищет уже активный звонок этой даты (в статусе «звонит» или «идёт») и подключает к нему; если его ещё нет — создаёт групповой звонок, привязанный к конкретному вхождению события, назначает вошедшего ведущим и приглашает остальных участников встречи. Отменённая дата созвона в присоединение не пускает.
- 18
Проверка участия и повторов
Присоединиться к созвону из календаря может только участник события. Для повторяющихся встреч создаётся (или находится) нужное вхождение по исходной дате начала — звонок привязывается именно к этой дате, а не к серии целиком.
- 19
Постоянные группы созвонов
Пользователь заводит свои группы: название, цвет, состав участников. Владелец в группу не включается отдельно — он автоматически становится ведущим. В состав попадают только реально существующие пользователи, дубли и сам владелец отсеиваются. Имя группы уникально в пределах владельца.
- 20
Доступ к группе и её история
Группа видна владельцу и её участникам. По каждой группе доступна история собранных звонков (последние сначала) с инициатором и числом участников — видно, как часто и кем группа используется. Группу можно переименовать, изменить состав и цвет или удалить.
- 21
Гостевая ссылка на звонок
Ведущий создаёт именную гостевую ссылку на активный звонок с уникальным 48-символьным токеном. Гость получает LiveKit-токен с правом только на микрофон и живёт он 6 часов — этого хватает на подключение. Ссылка действует, пока звонок не завершён; идентичность гостя стабильна в пределах ссылки, поэтому повторный вход заменяет «зависшее» соединение, а не плодит дубли участников.
- 22
Публичная многоразовая ссылка
Публичная ссылка доступна только для группового звонка и включается идемпотентно — повторный вызов не выдаёт новый токен. Вход по ней разветвляется: авторизованный сотрудник подключается под своей учёткой с полными правами и попадает в список участников, аноним — как гость аудио-only, обязан указать имя (от 2 до 60 символов). Отключение ссылки сбрасывает флаг и обнуляет токен — старая ссылка сразу перестаёт работать.
- 23
Обзор звонков по всей организации
Административные операции отдают историю и статистику не по одному сотруднику, а по всей компании: те же фильтры (направление, статусы, период, поиск по собеседнику) и та же агрегированная статистика за период. Для руководителя и контроля качества — единая картина коммуникаций сети.
- 24
Полный набор операций
Операции звонков: история, статистика, экспорт, инициирование, приём, отклонение, отмена, завершение, сигналы, скрытие, заметка, теги. Групповые звонки: создание, вход, выход, отклонение приглашения, приглашение участников. Управление: индивидуальное и общее выключение микрофона, демонстрация экрана. Расширения: созвон из календаря, группы созвонов, гостевые и публичные ссылки, административный обзор.
- 25
Авто-перевод в «пропущен»
Раз в минуту фоновое задание находит звонки, зависшие в статусе «звонит» дольше 60 секунд, и переводит их в «пропущен» — обе стороны получают уведомление. Звонок не зависнет в «вечном дозвоне».
Как это выглядит в системе
Частые вопросы
Это интеграция с SIP-АТС (Asterisk, Mango, Zadarma)?
Нет. AIERP содержит встроенную систему звонков на WebRTC — голос, видео и демонстрация экрана работают прямо в браузере через LiveKit. SIP-телефоны и внешние АТС не подключаются: это корпоративная связь сотрудников, а не интеграция с городскими номерами.
Какой стек используется для звонков?
WebRTC на клиенте + LiveKit на сервере. Токены доступа к комнате генерируются на сервере с правами на отправку и приём аудио. Имя комнаты совпадает с уникальным идентификатором звонка — стабильно для маршрутизации и записи.
Сколько статусов у звонка?
Семь: вызов, идёт разговор, завершён, пропущен, отклонён, отменён инициатором до ответа, ошибка соединения. У каждого свой цвет (жёлтый, синий, зелёный, красный, серый). Финальные статусы помечены отдельным признаком для интерфейса и логики.
Чем 1-на-1 звонок отличается от группового?
У приватного звонка зафиксированы инициатор и получатель, отдельной таблицы участников нет. У группового — флаг «групповой», получателя нет, ведётся отдельный список участников с ролями (хост или обычный участник) и собственным статусом каждого из шести.
Кто такой хост группового звонка?
Хост — это инициатор группового звонка. Он может пригласить ещё людей, выключить микрофон конкретному участнику, включить общее выключение микрофона, запустить и остановить запись разговора.
Записываются ли звонки?
Только групповые и только по команде хоста. При старте фиксируется идентификатор записи, статус (заявлена, идёт, завершена, ошибка), публичная ссылка, время старта и завершения, кто запустил. По событию завершения карточка финализируется и участники получают уведомление.
Как работает демонстрация экрана?
Когда участник начинает показывать экран, его карточка выделяется и видеопотоки переключаются у всех активных участников; при остановке выделение снимается. Все видят, кто сейчас демонстрирует.
Что происходит, если у звонящего пропал интернет?
Сработает страховка — раз в минуту фоновое задание находит звонки в статусе «звонит» старше 60 секунд и переводит их в «пропущен», обе стороны получают уведомление. Звонок не зависнет в «вечном дозвоне».
Можно ли позвонить второй раз, пока активен первый звонок?
Нет. Перед началом звонка система проверяет обе стороны: если у кого-то уже идёт или звонит другой звонок — выдаёт ошибку «у вас уже есть активный звонок» или «собеседник сейчас занят». Звонить самому себе тоже нельзя.
Что хранится в заметке и причине завершения?
Заметка — свободный текст менеджера про разговор: о чём договорились, что отправить, когда перезвонить. Причина завершения — например, «договорились о встрече», «отказ», «попросил перезвонить». Оба поля видны в карточке звонка и помогают восстановить контекст спустя время.
Как работают теги звонков?
Теги звонков личные у каждого менеджера, не общие на всю компанию. Имя и цвет настраиваются в личных настройках. Менеджер делает свои теги — «продажа», «жалоба», «callback», «горячий клиент» — и помечает звонки. У другого менеджера могут быть свои теги, не пересекающиеся.
Можно ли скрыть звонок из истории?
Да, но только у себя. Собеседник по-прежнему видит звонок в своей истории. Физически звонок не удаляется — это нужно для аудита и связи с записью.
Какая статистика доступна?
Сводка по сотруднику: всего звонков, пропущенных, входящих, исходящих, общая длительность в секундах, средняя по завершённым, разбивка по дням и топ-5 собеседников с количеством звонков, именем, фамилией и аватаром.
Можно ли фильтровать историю?
Да. Фильтры: направление (входящие или исходящие), статусы (любые из семи), период создания, поиск по имени или фамилии собеседника, размер страницы. Скрытые звонки автоматически отфильтрованы. Экспорт истории работает потоком — без раздувания памяти на больших объёмах.
Сколько статусов у участника группового звонка?
Шесть: приглашён (ещё не отвечал), звонит, в разговоре, вышел, отклонил приглашение, пропустил. Они отличаются от статусов звонка тем, что относятся к каждому участнику отдельно — кто-то может быть в разговоре, а кто-то уже вышел в той же группе.
Как реализовано принудительное выключение микрофона?
Хост может выключить микрофон конкретному участнику — фиксируется кто, когда и от кого пришло выключение, все активные участники получают уведомление. Замьюченный участник не может говорить, пока хост не вернёт ему микрофон или не снимет общее выключение.
Какие realtime-события рассылаются?
Появление нового звонка, его принятие, отклонение, отмена и завершение; технические сигналы соединения; приглашение в группу, вход и выход участников; начало и остановка демонстрации экрана; принудительное выключение и включение микрофона; старт и стоп записи. Каждое — мгновенно у всех участников.
Что значит сигнальное событие?
Это передача технических сигналов соединения (предложение, ответ, кандидаты) между участниками: фронт одной стороны отправляет на сервер, сервер проверяет тип сигнала и статус звонка, вычисляет получателя и доставляет ему. Это техническая обвязка, обеспечивающая установку соединения.
Можно ли удалить звонок физически?
Нет. Звонки не удаляются физически — это нужно для аудита, разбора инцидентов и сохранения связи с записями (запись могла быть выгружена в объектное хранилище, а её ссылка хранится в карточке звонка).
Появляется ли запись звонка в чате?
Да. После завершения звонка в связанный чат автоматически попадает системное сообщение с длительностью, статусом и ссылкой на запись (если она была). История переговоров не теряется в чате — её видно вместе с обычными сообщениями.
Какие ограничения на запись?
Запись доступна только для групповых звонков — для 1-на-1 не предусмотрена. Запустить или остановить запись может только хост. Параллельная запись одного звонка запрещена. Если хранилище недоступно — статус становится «ошибка».
Где хранятся записи разговоров?
В объектном хранилище. Путь к файлу формируется по шаблону с подстановками — имя комнаты, время и другие. Публичная ссылка сохраняется в карточке записи. По событию завершения карточка финализируется и ссылка становится активной.
Можно ли запустить созвон прямо из календаря?
Да. Событие календаря с типом «Созвон» или «Встреча» поднимает LiveKit-комнату. По кнопке «Присоединиться» система ищет уже активный звонок этой даты и подключает к нему; если его ещё нет — создаёт групповой звонок, привязанный к конкретному вхождению события, назначает вошедшего ведущим и приглашает остальных участников встречи. Присоединиться может только участник события, отменённая дата созвона в звонок не пускает.
Как это работает с повторяющимися встречами?
Для повторяющегося события создаётся или находится нужное вхождение по исходной дате начала, и звонок привязывается именно к этой дате, а не ко всей серии. Каждый экземпляр серии — свой звонок со своей историей и записью.
Что такое группы созвонов?
Это ваши постоянные именованные наборы участников — например «Опт», «Региональные», «ИТ-дежурные» — с названием и цветом. По группе собирается групповой созвон одним действием, без набора людей заново. Владелец группы автоматически становится ведущим и в состав отдельно не добавляется; в участники попадают только реально существующие пользователи. Имя группы уникально в рамках владельца.
Кто видит группу созвонов и её историю?
Группа видна её владельцу и всем участникам. По каждой группе доступна история собранных звонков (последние сначала) с инициатором и количеством участников. Владелец может переименовать группу, изменить состав и цвет или удалить её.
Можно ли пригласить в звонок человека без аккаунта в системе?
Да, двумя способами. Гостевая ссылка — именная, ведущий создаёт её на активный звонок; гость входит аудио-only прямо в браузере, без учётной записи. Публичная ссылка — многоразовая ссылка-комната для группового звонка: по ней входят и сотрудники под своей учёткой, и анонимные гости, которые вводят имя при входе.
Чем гостевая ссылка отличается от публичной?
Гостевая ссылка именная и одноразово-персональная: ведущий выдаёт её конкретному человеку на конкретный активный звонок, гость подключается только аудио. Публичная ссылка — многоразовая на групповой звонок: её может включить любой участник, вход по ней разветвляется на сотрудника (полные права, попадает в список участников) и анонима (аудио-only, обязан указать имя от 2 до 60 символов).
Что будет с гостевой ссылкой, если гостя отключило?
Ссылка работает, пока звонок активен, и допускает переподключение. Идентичность гостя стабильна в пределах ссылки, поэтому повторный вход заменяет «зависшее» соединение, а не создаёт второго участника-двойника. Гостевой LiveKit-токен выдаётся на 6 часов — этого хватает на подключение и переподключение в течение разговора.
Как отозвать доступ по публичной ссылке?
Отключить публичную ссылку. Это сбрасывает признак публичности и обнуляет токен — старая ссылка сразу перестаёт работать, зайти по ней уже нельзя. Повторное включение выдаёт ссылку заново (при этом включение идемпотентно: пока ссылка активна, повторный вызов не плодит новые токены).
Может ли руководитель видеть звонки всех сотрудников?
Да, через административный доступ. Он отдаёт историю и статистику не по одному человеку, а по всей организации: те же фильтры (направление, статусы, период, поиск по собеседнику) и та же агрегированная статистика за период. Обычный сотрудник видит только свои звонки, административный обзор — картину по всей сети.
Какие операции доступны для звонков?
Полный набор: история, статистика, экспорт, инициирование, приём, отклонение, отмена, завершение, сигналы соединения, скрытие из истории, заметка, теги. Групповые звонки: создание, вход, выход, отклонение приглашения, приглашение, выключение микрофона участнику или всем, демонстрация экрана. Запись: старт и стоп. Расширения: созвон из встречи календаря, постоянные группы созвонов, гостевые и публичные ссылки для внешних участников, административный обзор звонков по всей организации.
Что меняется на реальной сети
- Было
- Менеджеры разных магазинов созванивались через WhatsApp и личные мобильные: уточнить наличие, согласовать перенос остатков, провести планёрку. История разговоров терялась, руководитель не понимал, сколько времени занимают межмагазинные коммуникации, кто кого долго ждёт на линии.
- Сделали
- Включили встроенные звонки прямо в ERP. Менеджер кликает на коллегу в чате — открывается WebRTC-звонок через LiveKit без установки софтфонов. Групповые планёрки региональных руководителей — через групповые звонки с одним хостом, демонстрацией экрана с панелью BI и записью.
- Стало
- Все коммуникации теперь в системе: статистика по дням, топ собеседников, средняя длительность. Видно, кто реально работает с коллегами, а кто закрылся в своём магазине. Записи планёрок доступны тем, кто пропустил — обучение и контроль исполнения стало проще.
- Было
- У ключевых клиентов несколько ответственных в холдинге, переговоры по крупным сделкам — это конференц-связь 5–7 человек. Раньше собирались в Zoom/Teams: ссылки забывали, ссылки терялись, контекст сделки приходилось пересказывать заново.
- Сделали
- Перевели многосторонние переговоры на групповые звонки AIERP. Хост приглашает участников одним действием, демонстрирует коммерческое предложение через демонстрацию экрана, ведёт запись (только хост может запустить). После завершения — заметка и тег «согласование цен», ссылка на запись в чате сделки.
- Стало
- Контекст переговоров не теряется: запись и заметка лежат рядом с заказом, новый менеджер за 10 минут восстанавливает картину. Инструменты — те же, что и для CRM и склада, никаких внешних сервисов и счетов за переговорные комнаты.
- Было
- Контроль качества звонков между сменами и магазинами хромал: руководитель просил «расскажи, как договорились с поставщиком», ответ был «не помню, давно было». Системы записи не было, разборы инцидентов превращались в «слово против слова».
- Сделали
- Запустили групповые звонки для сложных переговоров с поставщиками и горячих ситуаций с клиентами. Хост (руководитель магазина) запускает запись, ставит тег «инцидент» или «согласование с поставщиком». Записи лежат в объектном хранилище, ссылки доступны через права роли.
- Стало
- Разборы стали быстрыми и фактическими: «вот запись, на 4:12 поставщик согласился». Контроль качества прекратился быть карательным и стал обучающим — лучшие записи идут в обучение новых сотрудников.
- Было
- Кассир из магазина в Сургуте просил помощь — Telegram, голосом плохо слышно, что нажимать. Тимвьюер запускали по 10 минут, потом ещё 5 минут вспоминали пароли. Заявки в службу поддержки копились, время ответа росло.
- Сделали
- Перевели техподдержку магазинов на видеозвонки с демонстрацией экрана прямо из ERP. Кассир кликает «вызвать поддержку» в кассовом интерфейсе, ИТ-специалист принимает, кассир включает демонстрацию экрана — ИТ видит ровно то, что видит кассир.
- Стало
- Время решения упало в 3 раза: техспец видит проблему сразу, не пересказывает шаги по голосу. Запись групповых звонков с типовыми кейсами — в базу знаний поддержки. Кассирам новых магазинов уже не нужно объяснять заново.
- Было
- Водители распределительного центра звонили в магазины уточнить, где разгружаться, кто принимает. Звонили по сменным мобильным магазинов, попадали то к старшему смены, то «алло, кто это», теряли время на каждом адресе.
- Сделали
- Подключили всех водителей и приёмщиков к ERP. Водитель из приложения видит, кто на смене в магазине-получателе, кликает «позвонить» — открывается WebRTC-звонок с приёмщиком напрямую. Если уже идёт другой звонок — система защищает от наложения, второй водитель видит «занят, перезвонить позже».
- Стало
- Маршруты ускорились на 19 минут в среднем за рейс — нет потери времени на «дозвониться до того, кто примет». Двойные звонки исключены защитой «собеседник занят». Все звонки видны руководителю — кто звонит, кому, как долго.
- Было
- Фармацевты периодически консультировались с провизорами центрального офиса — голосом по мобильным, провизоры не успевали ответить всем, кто-то отказывался от ответа, какой именно консультант помог в спорной ситуации, проверить было невозможно.
- Сделали
- Перевели консультации на встроенные звонки. Фармацевт нажимает «спросить провизора» в карточке товара — групповой звонок поднимается у дежурного провизора, при необходимости подключается второй. Запись сохраняет факт консультации, добавляется тег «консультация» и заметка с препаратом.
- Стало
- Спорные ситуации (отпуск рецептурных препаратов, замена аналогом) разрешаются по факту записи. Провизоры видят свою загрузку через топ собеседников и разбивку по дням, перераспределяют смены. Зависших звонков нет — фоновое задание каждую минуту чистит.
- Было
- Еженедельные планёрки филиалов и переговоры с внешними подрядчиками (логисты, 1С-интеграторы, аудиторы) вели в Zoom и Teams: ссылки создавали вручную и рассылали в чатах, подрядчикам заводить учётки было негде, повторяющиеся планёрки путались — какая запись от какой недели, никто не помнил.
- Сделали
- Планёрки завели событиями-созвонами в календаре: участники нажимают «Присоединиться» прямо из встречи, первый вошедший поднимает комнату и подтягивает остальных. Для повторяющихся планёрок каждая дата — свой звонок со своей записью. Подрядчиков пускают по гостевой или публичной ссылке без аккаунта — аудио прямо в браузере. Часто собираемые составы вынесли в постоянные группы созвонов.
- Стало
- Планёрки перестали зависеть от «кто создаст ссылку»: календарь и есть точка входа. Записи разложены по датам, а не свалены в один чат. Подрядчики подключаются по ссылке за секунды, руководитель через административный обзор видит все созвоны сети целиком.
Как модуль помогает розничной сети
Корпоративная телефония в ERP: голос, видео и запись без отдельной АТС
AIERP содержит собственную систему звонков для общения сотрудников — без установки софтфонов, SIP-шлюзов и подключения внешних АТС. Голос, видео и демонстрация экрана работают прямо в браузере через WebRTC, серверная сторона — LiveKit. Это корпоративная связь, не интеграция с городскими номерами: цель — упростить общение продавцов, менеджеров, ИТ и руководителей внутри одной системы, а не заменить виртуальную АТС.
Любой звонок в AIERP — это карточка с уникальным идентификатором, статусом (один из семи), временами начала, ответа и завершения, длительностью в секундах, причиной завершения и заметкой. Уникальный идентификатор звонка одновременно становится именем комнаты в LiveKit — это даёт стабильный ключ и упрощает связку «звонок ↔ комната ↔ файл записи».
Связь с чатом делает разговор частью переписки: в чат автоматически попадает системное сообщение с длительностью и статусом, а если была запись — ссылка на неё. История переговоров не теряется между чатом и журналом звонков — её видно в одном месте.
Стек: WebRTC + LiveKit + Laravel Broadcasting
На клиенте — стандартный WebRTC API браузера для одноранговой передачи аудио и видео, доступ к микрофону и демонстрация экрана. На сервере — LiveKit, open-source SFU (Selective Forwarding Unit) для эффективной маршрутизации потоков. Сервер взаимодействует с LiveKit через три блока: токены, комнаты, запись.
Для подключения участника к комнате генерируется временный токен доступа на 1 час с правами на отправку и приём аудио и данных. В токен включаются имя и аватар сотрудника — другие участники видят, кто говорит.
Управление комнатами: создание, удаление, список участников. Запись разговоров: старт аудиозаписи комнаты, шаблон пути файла с подстановками имени комнаты и времени, остановка, формирование публичной ссылки на прослушивание.
Мгновенные обновления между участниками работают через серверный broadcast. Каждое значимое событие в жизни звонка рассылается участникам сразу: появление, принятие, отклонение, технические сигналы соединения, завершение. Это даёт мгновенный интерфейс у всех без поллинга.
7 статусов звонка и 6 статусов участника
Жизненный цикл звонка описывают семь статусов: вызов (инициатор ждёт ответа), идёт разговор (у обоих фиксируется время ответа), завершён (нормально), пропущен (получатель не ответил — авто-помечается фоновым заданием), отклонён, отменён инициатором до ответа, ошибка соединения (например, не удалось установить связь). Финальные статусы — все, кроме «вызов» и «идёт разговор» — отделяются специальным признаком.
У каждого статуса свой цвет в интерфейсе (жёлтый, синий, зелёный, красный, серый) — менеджер видит историю звонков и сразу понимает, какие были пропущены, какие отклонены. Цвет и подпись приходят с сервера готовыми.
Статус участника в групповом звонке хранится отдельно: приглашён (ещё не отвечал), звонит, в разговоре (зафиксировано время входа), вышел (зафиксировано время выхода), отклонил приглашение, пропустил. Это важно, потому что в группе один участник может быть в разговоре, другой уже вышел, третий пропустил одновременно. По каждому участнику хранится время приглашения, входа и выхода — полный таймлайн пребывания.
Групповые звонки: роли хоста, мьюты, демо экрана
Групповые звонки включаются отдельным флагом «групповой» на звонке. Вместо фиксированной пары инициатор и получатель — отдельный список участников. У каждого участника есть роль: хост или обычный участник. Обычно хост — это инициатор, но систему можно настроить так, что хостом становится первый ответивший.
Хост группового звонка управляет всеми: выключить микрофон одному (фиксируется кто, когда и от кого пришло выключение), вернуть, выключить всем кроме себя одной операцией, запустить и остановить демонстрацию экрана. Все действия рассылаются участникам сразу.
Запись групповых звонков — отдельная подсистема. Запись стартует по команде хоста: фиксируется идентификатор записи и статус «идёт», формируется публичная ссылка по шаблону пути, фиксируется время старта и автор. Запустить и остановить запись может только хост. Параллельная запись одного звонка запрещена. Если хранилище недоступно — статус становится «ошибка». По событию завершения записи карточка финализируется автоматически.
Все действия хоста рассылаются активным участникам мгновенно — интерфейс обновляется сразу: красная точка REC у всех, индикатор выключенного микрофона на нужном участнике, рамка вокруг показывающего экран.
Защита от двойных звонков, авто-Missed, persistence
Перед началом звонка система проверяет обе стороны: если у кого-то уже идёт или звонит другой звонок — звонок не стартует. Получателю — текст «собеседник сейчас занят», инициатору — «у вас уже есть активный звонок». Фронт показывает «занят, перезвонить позже» вместо тщетных дозвонов.
Авто-перевод в «пропущен» решает проблему обрывов на стороне звонящего. Если у звонящего пропал интернет в момент дозвона, без страховки звонок остался бы навечно в статусе «звонит» и заблокировал бы дальнейшие звонки участников. Раз в минуту фоновое задание находит все звонки в статусе «звонит» старше 60 секунд и переводит их в «пропущен» — обе стороны получают уведомление.
Звонки не удаляются физически — это нужно для аудита и сохранения связи с файлами записей. Каждая сторона может скрыть звонок из своей истории — собеседник по-прежнему видит его. Перед скрытием система проверяет, что пользователь действительно участник звонка.
История, статистика и фильтры
История звонков пользователя — пагинированный список (по умолчанию 30 на страницу), уже без скрытых. Фильтры: направление (входящие или исходящие), статусы (любые из семи), период по дате создания, поиск по имени или фамилии собеседника.
История отдаётся для экспорта по частям — это используется в экспорте истории. Сервис не раздувает память даже на сотнях тысяч звонков. Формат экспорта — CSV или XLSX с теми же полями, что и в интерфейсе: собеседник, направление, статус, длительность, дата, теги, заметка.
Статистика считает агрегаты за период: всего звонков, пропущенных, входящих, исходящих, общая длительность в секундах, средняя по завершённым, разбивка по дням с количеством всех и пропущенных для графика, топ-5 собеседников с количеством звонков, именем, фамилией и аватаром. Сразу пригодно для дашборда менеджера: «с кем я больше всего общался, сколько пропустил, как распределена нагрузка по дням».
Теги, заметки, реальный сценарий использования
Теги звонков личные у каждого менеджера, не общие на всю систему — это даёт каждому свою рабочую схему классификации. Имя и цвет настраиваются в личных настройках: «продажа», «жалоба», «callback», «горячий клиент», «обучение». Один звонок может иметь несколько тегов одновременно. У другого менеджера могут быть свои теги, не пересекающиеся с первым.
Заметка — свободный текст про разговор. Фиксируется сразу после звонка. Пример: «договорились о встрече 28-го в 14:00, нужно отправить КП». Причина завершения — отдельное структурированное поле, пригодится для отчётов «почему мы много отказов получаем».
Типовой сценарий — звонок с клиентом по сделке. Менеджер открывает чат сделки, кликает «позвонить» — звонок автоматически привязан к этой сделке. После разговора ставит тег «согласование цен», в заметке пишет договорённости, при необходимости поднимает групповой звонок с руководителем и записывает обсуждение. После завершения в чат сделки автоматически попадает «Звонок 12 мин, ссылка на запись» — весь контекст сделки остаётся в одном месте.
Созвоны из календаря и постоянные группы
Групповые созвоны в AIERP не обязательно поднимать вручную. Событие календаря с типом «Созвон» или «Встреча» само становится точкой входа в живой звонок: при старте оно поднимает LiveKit-комнату, а кнопка «Присоединиться» превращает запланированную встречу в активный групповой звонок. Первый вошедший поднимает комнату и автоматически приглашает остальных участников события, становясь ведущим; следующие подключаются к тому же звонку. Присоединиться может только участник встречи, а отменённая дата созвона в звонок не пускает.
Повторяющиеся встречи обрабатываются аккуратно: для нужной даты создаётся (или находится) отдельное вхождение события, и звонок привязывается именно к нему, а не к серии целиком. Каждая планёрка получает свой звонок, свою запись и свою историю — еженедельный созвон отдела не смешивается в один бесконечный лог.
Для регулярного общения есть постоянные группы созвонов — личные именованные наборы участников с цветом: «Опт», «Региональные менеджеры», «ИТ-дежурные». По группе групповой созвон собирается одним действием, без ручного набора людей. Владелец группы автоматически становится ведущим и в состав отдельно не входит; в участники попадают только реальные пользователи, дубликаты отсеиваются, а имя группы уникально в пределах владельца. Группа видна владельцу и её участникам, по ней ведётся история собранных звонков с инициатором и числом участников — видно, как часто и кем группа используется.
Гостевые и публичные ссылки: внешние участники без аккаунта
Иногда в разговор нужно пустить человека извне — клиента, подрядчика, кандидата, эксперта. Для этого есть два вида ссылок. Гостевая ссылка — именная: ведущий создаёт её на конкретный активный звонок, гостю выдаётся уникальный 48-символьный токен, а на подключение — временный LiveKit-токен с правом только на микрофон сроком на 6 часов. Ссылка действует, пока звонок не завершён. Идентичность гостя стабильна в пределах ссылки: если гостя случайно отключило, повторный вход по той же ссылке заменяет «зависшее» соединение, а не создаёт второго участника-двойника.
Публичная ссылка — многоразовая ссылка-комната, доступная только для группового звонка. Включить её может любой участник; включение идемпотентно — пока ссылка активна, повторный вызов не выдаёт новый токен. Вход по публичной ссылке разветвляется: авторизованный сотрудник подключается под своей учётной записью с полными правами и попадает в список участников звонка, а анонимный гость входит аудио-only и обязан указать имя (от 2 до 60 символов). Отключение публичной ссылки сбрасывает признак публичности и обнуляет токен — старая ссылка мгновенно перестаёт работать.
Оба механизма не требуют от внешнего участника ни установки приложений, ни учётной записи в ERP — только браузер и ссылка. При этом доступ управляемый: гостевая ссылка привязана к одному звонку и живёт вместе с ним, публичную можно в любой момент отозвать.
Обзор звонков по всей организации для руководителя
Помимо личной истории и статистики каждого сотрудника, в системе есть административный обзор — история и статистика звонков по всей организации сразу. Те же инструменты, что и в личном кабинете: фильтры по направлению (входящие или исходящие), статусам, периоду и поиску по имени или фамилии собеседника, пагинация до 100 записей на страницу, агрегированная статистика за период.
Это даёт руководителю и службе контроля качества единую картину коммуникаций сети: кто с кем и сколько общается, где копятся пропуски, как распределена нагрузка по дням. В связке с записью групповых созвонов, тегами и заметками административный обзор превращает внутреннюю связь из «чёрного ящика» в наблюдаемый процесс — без выгрузок из сторонней АТС и без ручного сведения журналов.
Готовы автоматизировать?
Покажем модуль на ваших данных и подключим за 1–2 недели.
