Развитие мобильных рабочих мест на платформе 1С позволяет автоматизировать работу курьеров, торговых представителей, сервисных инженеров и менеджеров по продажам. Одной из ключевых потребностей при работе с мобильным клиентом или автономным мобильным приложением является возможность оперативной связи с клиентом напрямую из интерфейса программы. В рамках данной статьи мы подробно разберем, как реализовать функции телефонии и отправки SMS-сообщений в мобильной платформе 1С, проанализируем доступные методы, рассмотрим ограничения операционных систем и научимся правильно настраивать права доступа.
Прежде чем приступать к написанию программного кода, необходимо понять важнейшее правило мобильной разработки: ни один метод телефонии не сработает на реальном мобильном устройстве без предварительной настройки разрешений в конфигурации. Если проигнорировать этот шаг, операционная система мобильного телефона (как Android, так и iOS) заблокирует вызов программы, а платформа 1С сгенерирует критическую ошибку выполнения (runtime exception).
Для настройки разрешений выполним следующие действия:
Исторически первым и самым простым способом совершить звонок или подготовить SMS-сообщение была передача управления операционной системе устройства через зарегистрированные схемы протоколов tel: и sms:. Этот метод до сих пор актуален благодаря своей простоте и абсолютной кроссплатформенности.
Давайте разберем по шагам, как это работает. При вызове функции ЗапуститьПриложение() с префиксом протокола мобильная операционная система перехватывает запрос и открывает назначенное по умолчанию приложение (диалер для звонков или мессенджер для СМС).
Рассмотрим пример программного кода для совершения вызова:
&НаКлиенте
Процедура СовершитьЗвонокЧерезСистему(НомерТелефона)
// Очищаем номер от лишних символов (пробелов, скобок, дефисов), оставляя только цифры и знак плюс
ОчищенныйНомер = ОчиститьНомерТелефона(НомерТелефона);
// Формируем системную команду запуска с протоколом "tel:"
СистемнаяКоманда = "tel:" + ОчищенныйНомер;
Попытка
ЗапуститьПриложение(СистемнаяКоманда);
Исключение
ИнформацияОбОшибке = ОписаниеОшибки();
ПоказатьПредупреждение(, "Не удалось выполнить звонок. Ошибка: " + ИнформацияОбОшибке);
КонецПопытки;
КонецПроцедуры
Аналогичным образом мы можем открыть системный редактор SMS-сообщений, передав номер получателя:
&НаКлиенте
Процедура ОткрытьРедакторSMSЧерезСистему(НомерТелефона)
ОчищенныйНомер = ОчиститьНомерТелефона(НомерТелефона);
СистемнаяКоманда = "sms:" + ОчищенныйНомер;
Попытка
ЗапуститьПриложение(СистемнаяКоманда);
Исключение
ПоказатьПредупреждение(, "Не удалось запустить отправку SMS.");
КонецПопытки;
КонецПроцедуры
Преимущества данного метода: предельная простота внедрения, работа на любых версиях платформы 1С.
Недостатки метода: у разработчика нет возможности управлять процессом звонка, контролировать его завершение, автоматически отправлять заранее подготовленный текст СМС без участия пользователя или совершать вызовы в фоновом режиме.
Начиная с современных версий мобильной платформы 1С, разработчикам стал доступен мощный специализированный объект СредстваТелефонии. Он предоставляет прямой доступ к аппаратным возможностям смартфона и позволяет гибко управлять звонками и сообщениями на уровне кода.
Прежде чем вызывать методы набора номера, крайне важно убедиться, что устройство пользователя в принципе поддерживает телефонную связь (например, приложение может быть запущено на планшете без SIM-карты или на эмуляторе). Проанализируем правильный шаблон вызова функции набора номера:
&НаКлиенте
Процедура НабратьНомерНаУстройстве(НомерТелефона)
// Шаг 1. Проверяем, поддерживает ли устройство телефонные звонки
Если СредстваТелефонии.ПоддерживаетсяНаборНомера() Тогда
// Шаг 2. Совершаем звонок.
// Второй параметр определяет, будет ли вызов интерактивным (Ложь) или мгновенным без подтверждения (Истина).
РежимВызова = Ложь;
Попытка
СредстваТелефонии.НабратьНомер(НомерТелефона, РежимВызова);
Исключение
ЗаписатьЛогОшибки(ОписаниеОшибки());
ПоказатьПредупреждение(, "Произошла ошибка при попытке набора номера.");
КонецПопытки;
Иначе
ПоказатьПредупреждение(, "Ваше устройство не поддерживает выполнение телефонных вызовов.");
КонецЕсли;
КонецПроцедуры
Рассмотрим подробнее поведение второго параметра метода СредстваТелефонии.НабратьНомер():
Разработчикам мобильных решений на 1С необходимо четко понимать ограничения целевых операционных систем, так как возможности работы с телефонией на Android и iOS кардинально различаются.
Операционная система iOS (Apple Devices):
Компания Apple уделяет повышенное внимание конфиденциальности личных данных пользователей. Из-за этого функционал телефонии на устройствах Apple жестко ограничен. В среде iOS разработчик в мобильной 1С может выполнять только одно действие — инициировать исходящий телефонный вызов. Доступ к журналу звонков, определение номеров входящих вызовов и перехват событий разговора полностью заблокированы на уровне самой ОС.
Операционная система Android:
Android предоставляет разработчикам гораздо больше свободы для создания полноценных CRM-инструментов. Используя объект СредстваТелефонии на Android-устройствах, мы можем реализовать следующие функции:
СредстваТелефонии.ПолучитьЖурналЗвонков() позволяет прочитать историю вызовов устройства, узнать продолжительность разговора, статус звонка (входящий, исходящий, пропущенный) и сопоставить эти данные с базой клиентов. Это незаменимо для контроля работы менеджеров на выезде.СредстваТелефонии.ПоддерживаетсяОбработкаЗвонков() позволяет приложению подписаться на события телефонии. При входящем звонке мобильное приложение 1С может мгновенно перехватить номер звонящего, найти его в локальной базе данных и автоматически отобразить на экране смартфона карточку клиента с историей его заказов еще до того, как менеджер поднимет трубку.Если для простых задач достаточно вызвать внешнее приложение через протокол sms:, то для автоматических систем уведомлений (например, отправка кодов подтверждения или статусов заказов) требуется контролируемая программная отправка. Платформа 1С позволяет конструировать сообщения как полноценные объекты.
Разберем пример создания и отправки программного SMS-сообщения:
&НаКлиенте
Процедура ОтправитьСМСКлиенту(НомерПолучателя, ТекстОповещения)
// Создаем новый объект сообщения
НовоеSMS = Новый SMSСообщение;
НовоеSMS.Получатели.Добавить(НомерПолучателя);
НовоеSMS.Текст = ТекстОповещения;
// Проверяем возможность отправки на устройстве
Если СредстваТелефонии.ПоддерживаетсяОтправкаSMS() Тогда
Попытка
// Второй параметр: Истина - открыть редактор для ручной отправки пользователем,
// Ложь - отправить СМС сразу в фоновом режиме (требует дополнительных разрешений ОС)
СредстваТелефонии.ПослатьSMS(НовоеSMS, Истина);
Исключение
ПоказатьПредупреждение(, "Ошибка отправки СМС: " + ОписаниеОшибки());
КонецПопытки;
Иначе
ПоказатьПредупреждение(, "Данное устройство не поддерживает отправку SMS-сообщений.");
КонецЕсли;
КонецПроцедуры
На устройствах под управлением Android также доступно чтение входящих сообщений с помощью метода СредстваТелефонии.ПолучитьЖурналSMS(). Это открывает широкие возможности для автоматического разбора входящих СМС-уведомлений, например, банковских подтверждений оплаты или кодов авторизации сторонних сервисов.
Если перед вами стоит задача развернуть готовую систему учета звонков, не обязательно писать весь функционал с нуля. Фирма 1С активно развивает встроенные механизмы интеграции мобильных устройств со стационарными базами данных. Ярким примером служит подсистема «Мобильная телефония» в конфигурации «1С:Управление нашей фирмой» (УНФ).
Данная технология работает следующим образом:
Таким образом, правильное сочетание настроек прав доступа, обработчиков платформы 1С и возможностей мобильных операционных систем позволяет превратить обычный смартфон в полноценное рабочее место сотрудника бэк-офиса или отдела продаж с глубокой интеграцией телефонии.