Как реализовать перехват и обработку звонков в мобильном приложении 1С

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

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

Основы работы со средствами телефонии в мобильной платформе

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

Разберем базовый принцип работы. Нам необходимо создать описание оповещения, которое будет указывать на процедуру-обработчик, и передать его в системный механизм. Рассмотрим программный код, который инициализирует эту подписку:


&НаКлиенте
Процедура ПодключитьМониторингЗвонков(Команда)
    
    #Если МобильноеПриложениеКлиент Тогда
        // Создаем описание оповещения, указывая процедуру и модуль, где она находится
        ПодпискаНаЗвонки = Новый ОписаниеОповещения("ОбработкаСобытияЗвонка", ЭтаФорма);
        
        // Регистрируем обработчик в системе
        СредстваТелефонии.ПодключитьОбработчикЗвонков(ПодпискаНаЗвонки);
        
        Сообщить("Мониторинг звонков успешно запущен");
    #КонецЕсли
    
КонецПроцедуры

Обратите внимание на использование директивы #Если МобильноеПриложениеКлиент Тогда. Это обязательное условие, так как объект СредстваТелефонии недоступен в обычном тонком клиенте на ПК. Также крайне важно передавать в качестве второго параметра ЭтаФорма или ОбщийМодуль, где будет располагаться экспортная процедура обработки.

Реализация процедуры обработки звонка

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


&НаКлиенте
Процедура ОбработкаСобытияЗвонка(НомерТелефона, ДатаСобытия, ВариантСобытия, ТипЗвонка, ДополнительныеПараметры) Экспорт
    
    // НомерТелефона - Строка, номер звонящего
    // ВариантСобытия - Системное перечисление ВариантСобытияТелефонии
    // ТипЗвонка - Системное перечисление ТипЗвонка
    
    Если ВариантСобытия = ВариантСобытияТелефонии.Начало Тогда
        
        Если ТипЗвонка = ТипЗвонка.Входящий Тогда
            // Здесь мы можем реализовать поиск контрагента в базе по номеру телефона
            // И открыть соответствующую форму с данными о задолженности
            ОткрытьКарточкуЗвонящего(НомерТелефона);
        КонецЕсли;
        
    КонецЕсли;
    
    Если ВариантСобытия = ВариантСобытияТелефонии.Завершение Тогда
        // Логика по фиксации звонка в журнале взаимодействий
        ЗафиксироватьОкончаниеРазговора(НомерТелефона, ДатаСобытия);
    КонецЕсли;

КонецПроцедуры

Рассмотрим подробнее системное перечисление ВариантСобытияТелефонии. Оно позволяет нам отслеживать жизненный цикл звонка:

  1. Начало: Момент поступления входящего звонка (телефон зазвонил) или инициация набора номера пользователем.
  2. Установление: Момент, когда абонент поднял трубку. Именно на этой стадии начинается фактический разговор, и здесь логично запускать таймер учета времени.
  3. Завершение: Момент разрыва соединения. Здесь мы получаем финальную дату и время для расчета длительности разговора.

Настройка разрешений и стабильность работы на Android

Выясним причину, по которой у многих разработчиков данный код может не срабатывать. Современные версии Android (особенно 9.0 и выше) накладывают жесткие ограничения на доступ к личным данным. Чтобы 1С могла получить номер телефона, недостаточно просто написать код — необходимо правильно собрать мобильное приложение.

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

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

Отображение данных поверх стандартного окна звонка

Одна из главных сложностей заключается в том, что при звонке стандартное приложение «Телефон» (диалер) перекрывает собой всё пространство экрана. Разберем, как сделать так, чтобы 1С показала задолженность клиента поверх этого окна.

Начиная с платформы 8.3.18, в 1С улучшена работа с системными уведомлениями. Рассмотрим два подхода:

  1. Локальные уведомления: При получении события Начало, 1С отправляет локальное уведомление с текстом «Звонит: ООО Ромашка, Долг: 50 000 руб.». Пользователь видит это всплывающее сообщение прямо во время звонка в верхней части экрана.
  2. Отображение поверх других окон: В настройках смартфона (раздел «Специальный доступ») необходимо вручную дать приложению 1С право «Отображение поверх других приложений». В этом случае при вызове метода ОткрытьФорму() внутри обработчика звонка, 1С сможет отобразить небольшое модальное окно прямо поверх окна звонка.

Ограничения и важные замечания

Нужно учитывать, что штатные СредстваТелефонии в 1С имеют свои границы возможностей. На текущий момент платформа не позволяет программно сбрасывать звонок или блокировать нежелательные номера. Это ограничение безопасности самой операционной системы Android для обычных приложений.

Также стоит помнить о версии платформы. Как показала практика обсуждений, версии 8.3.10.51 и 8.3.10.57 имели баги, приводившие к завершению работы приложения при попытке перехвата звонка. Для стабильной работы рекомендуется использовать версии не ниже 8.3.10.62 или современные сборки веток 8.3.18 - 8.3.23, где эти механизмы значительно отлажены.

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

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

← На главную