Одной из наиболее востребованных функций в мобильной автоматизации является тесная интеграция с телефонией. Представьте сценарий: менеджеру звонит клиент, и еще до того, как сотрудник поднимет трубку, мобильное приложение 1С автоматически открывает карточку контрагента, показывает текущую задолженность, последние заказы или напоминания о важных договоренностях. В рамках данной статьи мы разберем, как реализовать этот механизм, используя штатные возможности мобильной платформы 1С, и обсудим критически важные нюансы настройки операционной системы Android.
Для взаимодействия с функциями телефона в 1С предусмотрен специализированный объект СредстваТелефонии. Начиная с версии 8.3.9, в платформе появился метод ПодключитьОбработчикЗвонков(), который позволяет приложению «подписаться» на события изменения состояния телефона. Важно понимать, что это событие срабатывает как при входящих, так и при исходящих вызовах.
Разберем базовый принцип работы. Нам необходимо создать описание оповещения, которое будет указывать на процедуру-обработчик, и передать его в системный механизм. Рассмотрим программный код, который инициализирует эту подписку:
&НаКлиенте
Процедура ПодключитьМониторингЗвонков(Команда)
#Если МобильноеПриложениеКлиент Тогда
// Создаем описание оповещения, указывая процедуру и модуль, где она находится
ПодпискаНаЗвонки = Новый ОписаниеОповещения("ОбработкаСобытияЗвонка", ЭтаФорма);
// Регистрируем обработчик в системе
СредстваТелефонии.ПодключитьОбработчикЗвонков(ПодпискаНаЗвонки);
Сообщить("Мониторинг звонков успешно запущен");
#КонецЕсли
КонецПроцедуры
Обратите внимание на использование директивы #Если МобильноеПриложениеКлиент Тогда. Это обязательное условие, так как объект СредстваТелефонии недоступен в обычном тонком клиенте на ПК. Также крайне важно передавать в качестве второго параметра ЭтаФорма или ОбщийМодуль, где будет располагаться экспортная процедура обработки.
Теперь проанализируем, как должна выглядеть сама процедура, принимающая данные о звонке. Система передает в нее несколько ключевых параметров: номер телефона, дату и время события, вариант события (начало, установление соединения, завершение) и тип звонка (входящий или исходящий).
&НаКлиенте
Процедура ОбработкаСобытияЗвонка(НомерТелефона, ДатаСобытия, ВариантСобытия, ТипЗвонка, ДополнительныеПараметры) Экспорт
// НомерТелефона - Строка, номер звонящего
// ВариантСобытия - Системное перечисление ВариантСобытияТелефонии
// ТипЗвонка - Системное перечисление ТипЗвонка
Если ВариантСобытия = ВариантСобытияТелефонии.Начало Тогда
Если ТипЗвонка = ТипЗвонка.Входящий Тогда
// Здесь мы можем реализовать поиск контрагента в базе по номеру телефона
// И открыть соответствующую форму с данными о задолженности
ОткрытьКарточкуЗвонящего(НомерТелефона);
КонецЕсли;
КонецЕсли;
Если ВариантСобытия = ВариантСобытияТелефонии.Завершение Тогда
// Логика по фиксации звонка в журнале взаимодействий
ЗафиксироватьОкончаниеРазговора(НомерТелефона, ДатаСобытия);
КонецЕсли;
КонецПроцедуры
Рассмотрим подробнее системное перечисление ВариантСобытияТелефонии. Оно позволяет нам отслеживать жизненный цикл звонка:
Выясним причину, по которой у многих разработчиков данный код может не срабатывать. Современные версии Android (особенно 9.0 и выше) накладывают жесткие ограничения на доступ к личным данным. Чтобы 1С могла получить номер телефона, недостаточно просто написать код — необходимо правильно собрать мобильное приложение.
При сборке в конфигураторе (или в сборщике мобильных приложений) необходимо убедиться, что включены следующие разрешения (Permissions):
НомерТелефона в процедуру 1С может прийти пустым.Проанализируем ситуацию с «вылетами» приложения. Пользователи часто сталкиваются с тем, что мобильная платформа 1С закрывается системой, когда она находится в фоновом режиме. Чтобы мониторинг звонков работал стабильно, приложение должно быть активно. В настройках Android рекомендуется отключить «Оптимизацию энергопотребления» для приложения 1С и разрешить ему «Автозапуск».
Одна из главных сложностей заключается в том, что при звонке стандартное приложение «Телефон» (диалер) перекрывает собой всё пространство экрана. Разберем, как сделать так, чтобы 1С показала задолженность клиента поверх этого окна.
Начиная с платформы 8.3.18, в 1С улучшена работа с системными уведомлениями. Рассмотрим два подхода:
Начало, 1С отправляет локальное уведомление с текстом «Звонит: ООО Ромашка, Долг: 50 000 руб.». Пользователь видит это всплывающее сообщение прямо во время звонка в верхней части экрана.ОткрытьФорму() внутри обработчика звонка, 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, мы получаем возможность предоставлять пользователю ценную бизнес-информацию именно в тот момент, когда она ему больше всего необходима.