Как перехватывать GSM-звонки напрямую с мобильных телефонов сотрудников и передавать их в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Интеграция офисной телефонии с CRM-системами на базе 1С давно стала стандартом для эффективного бизнеса. Однако классические схемы интеграции строятся вокруг стационарных или облачных АТС (например, Asterisk, Mango Office, МегаФон и др.), работающих по протоколу SIP. Но как быть в ситуации, когда менеджеры работают «в полях», совершают и принимают звонки на свои личные или рабочие мобильные номера напрямую через GSM-сеть, минуя офисную АТС? Нам необходим механизм, который позволит зафиксировать сам факт звонка, оперативно передать эту информацию в 1С и открыть карточку клиента на экране компьютера менеджера.

В этой статье мы подробно проанализируем существующие подходы к решению этой задачи: от готовых коммерческих сервисов и мобильной платформы 1С до технологии FMC и создания собственного Android-приложения.

Способ 1. Использование готовых интеграционных сервисов для Android

Вопреки распространенному мнению, специализированный софт для интеграции мобильных телефонов с 1С существует и успешно применяется. Подобные системы состоят из двух частей: мобильного приложения-клиента на смартфоне сотрудника и модуля интеграции (обработки) на стороне 1С.

Давайте рассмотрим наиболее популярные и проверенные решения:

  1. «Простые звонки»: Вопреки заблуждениям на форумах, этот сервис умеет работать напрямую с Android-смартфонами. Специальное приложение на телефоне отслеживает состояние системного лога звонков. Как только на телефон поступает входящий вызов, приложение мгновенно посылает сигнал на сервер интеграции, откуда событие транслируется в 1С. На экране компьютера менеджера моментально всплывает карточка звонка.
  2. «Мои Звонки»: Это комплексное облачное решение, ориентированное именно на мобильные продажи. Приложение на Android фиксирует факт входящих, исходящих и пропущенных вызовов, записывает аудио разговоров, определяет их длительность и передает всю статистику вместе со ссылками на аудиофайлы в 1С через API.
  3. «Telefum24»: Сервис связывает Android-смартфоны сотрудников с 1С. Он позволяет не только фиксировать звонки в базе, но и осуществлять обратную связь: при входящем звонке на экране смартфона отображается имя клиента, полученное в режиме реального времени из базы 1С.

Важное ограничение: Все подобные приложения стабильно работают исключительно на операционной системе Android. Из-за жесткой политики безопасности Apple и закрытости операционной системы iOS, перехватывать входящие и исходящие GSM-звонки сторонними программами в фоновом режиме на iPhone технически невозможно. Если ваши сотрудники используют iPhone, этот способ вам не подойдет.

Способ 2. Использование встроенной мобильной телефонии в решениях 1С

Если вы используете современные типовые конфигурации, например, 1С:Управление нашей фирмой (1С:УНФ), то нужный функционал уже заложен разработчиками фирмы «1С» непосредственно в платформу.

Давайте разберем по шагам, как это работает:

  1. Сотрудник устанавливает на свой Android-смартфон официальное мобильное приложение (например, «1С:УНФ для мобильной работы»).
  2. Мобильное приложение синхронизируется с центральной базой 1С, которая должна быть опубликована на веб-сервере или размещена в облаке (например, в сервисе 1С:Fresh).
  3. В настройках мобильного приложения активируется функция отслеживания звонков.
  4. При входящем или исходящем вызове на мобильном телефоне приложение перехватывает событие ОС Android. Если у пользователя в этот момент открыта сессия основной базы 1С на стационарном компьютере, система через механизм Системы взаимодействия мгновенно открывает карточку звонка на ПК.
  5. По завершении разговора в базе автоматически регистрируется документ Событие с типом Телефонный звонок.

Способ 3. Технология FMC (Fixed Mobile Convergence) — профессиональное решение

Если вам требуется абсолютная надежность, запись всех разговоров, поддержка абсолютно любых мобильных телефонов (включая iOS-устройства и даже простые кнопочные аппараты) без установки каких-либо программ на телефон и без использования мобильного интернета, вашим выбором должна стать технология FMC.

Проанализируем суть этой технологии:

Операторы сотовой связи («МегаФон», «Билайн», «МТС», «Теле2») предоставляют услугу интеграции мобильных номеров с виртуальными АТС. Сотрудникам выдаются специальные корпоративные FMC SIM-карты.

Когда сотрудник совершает вызов или принимает звонок через обычную сотовую сеть GSM, этот звонок физически маршрутизируется не напрямую сотовым оператором, а сначала направляется в вашу корпоративную виртуальную или локальную АТС (например, Asterisk) как вызов с внутреннего добавочного номера.

Поскольку звонок в конечном итоге проходит через АТС, стандартные панели телефонии для 1С (такие как решения от МИКО, Itgrix или встроенные софтфоны) перехватывают это событие точно так же, как если бы менеджер сидел в офисе за SIP-телефоном. При этом у сотрудника на мобильном телефоне не расходуется интернет-трафик, а качество связи остается на уровне стандарта GSM.

Способ 4. Создание собственной системы перехвата звонков (DIY)

Если вы хотите полностью контролировать процесс и не платить за сторонние сервисы, мы можем реализовать собственную систему перехвата. Задача делится на две части: разработка легковесного приложения под Android и создание принимающего HTTP-сервиса на стороне 1С.

Рассмотрим архитектуру решения подробнее:

Шаг 1. Мобильное приложение на Android.
Нам необходимо написать фоновую службу (Service), которая регистрирует системный приемник BroadcastReceiver, реагирующий на изменение состояния телефона android.intent.action.PHONE_STATE. Код приложения должен отслеживать три состояния:

При переходе телефона в любое из этих состояний наше Android-приложение отправляет асинхронный HTTP POST запрос на заранее подготовленный веб-адрес нашей базы 1С.

Шаг 2. Разработка HTTP-сервиса в 1С.
В конфигураторе 1С создадим новый объект HTTPСервис (например, с именем ПерехватЗвонков) и шаблоном URL /event.

Давайте посмотрим на пример реализации метода POST для обработки входящих данных от нашего мобильного приложения:


Функция ИмяШаблона_POST(Запрос)
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    
    // Получаем JSON-данные из тела запроса
    СтрокаДанных = Запрос.ПолучитьТелоКакСтроку("UTF-8");
    
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(СтрокаДанных);
    ДанныеЗвонка = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
    
    // Извлекаем параметры, присланные мобильным телефоном
    НомерТелефона  = ДанныеЗвонка.Номер;
    СтатусТелефона = ДанныеЗвонка.Статус; // Напр: "RINGING", "OFFHOOK", "IDLE"
    Идентификатор  = ДанныеЗвонка.СотрудникИД;
    
    // Выполняем поиск контрагента в базе данных по номеру телефона
    СсылкаНаКлиента = НайтиКлиентаПоНомеру(НомерТелефона);
    
    // Если звонок только поступает (RINGING) — выводим оповещение на экран
    Если СтатусТелефона = "RINGING" Тогда
        ОповеститьПользователяОЗвонке(Идентификатор, СсылкаНаКлиента, НомерТелефона);
    ИначеЕсли СтатусТелефона = "IDLE" Тогда
        // Если разговор завершен — регистрируем событие в базе данных
        ЗафиксироватьЗвонокВИстории(Идентификатор, СсылкаНаКлиента, НомерТелефона);
    КонецЕсли;
    
    Ответ.УстановитьТелоИзСтроки("{""result"": ""success""}");
    Возврат Ответ;
    
КонецФункции

Давайте проанализируем вспомогательную функцию поиска контрагента по номеру телефона. Чтобы поиск работал быстро, рекомендуется использовать индексированные поля или искать по регистру сведений, содержащему контактную информацию:


Функция НайтиКлиентаПоНомеру(Знач ИсходныйНомер) Экспорт
    
    // Очищаем номер от лишних символов (скобки, дефисы, пробелы)
    ОчищенныйНомер = ОчиститьНомерТелефона(ИсходныйНомер);
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
        |	ПартнерыКонтакты.Ссылка КАК Клиент
        |ИЗ
        |	Справочник.Партнеры КАК ПартнерыКонтакты
        |ГДЕ
        |	ПартнерыКонтакты.ВключатьВПоиск 
        |	И ПартнерыКонтакты.НомерТелефонаПоиск ПОДОБНО &Номер";
    
    // Ищем совпадение по последним 10 цифрам номера телефона
    Запрос.УстановитьПараметр("Номер", "%" + Прав(ОчищенныйНомер, 10));
    
    РезультатЗапроса = Запрос.Выполнить();
    Если Не РезультатЗапроса.Пустой() Тогда
        Выборка = РезультатЗапроса.Выбрать();
        Выборка.Следующий();
        Возврат Выборка.Клиент;
    КонецЕсли;
    
    Возврат Справочники.Партнеры.ПустаяСсылка();
    
КонецФункции

Для мгновенного вывода карточки на экран компьютера конкретного пользователя мы рекомендуем задействовать механизм Системы взаимодействия 1С. Через функцию СистемаВзаимодействия.ПолучитьОбсуждение() вы можете отправить невидимое сообщение в специальный канал, которое будет перехвачено на клиенте у конкретного пользователя и откроет форму звонка.

Сложности при самостоятельной разработке под Android: Основная проблема, с которой вы столкнетесь — жесткое энергосбережение в современных версиях ОС Android (начиная с Android 8.0 и выше). Система переводит фоновые приложения в режим глубокого сна (Doze Mode). Чтобы ваше приложение не "засыпало" и не пропускало звонки, вам потребуется настроить его запуск в качестве Foreground Service (службы переднего плана с постоянным уведомлением в шторке телефона) и вручную добавить его в исключения оптимизации батареи на каждом смартфоне сотрудника.

Резюме: какой способ выбрать?

Выбор конкретного решения зависит от вашего бюджета, инфраструктуры и используемых сотрудниками мобильных устройств:

← На главную