Интеграция учетной системы 1С с IP-АТС Asterisk — это одна из наиболее востребованных задач при автоматизации бизнес-процессов. Она позволяет сократить время на набор номера, автоматически открывать карточки клиентов при входящих вызовах и сохранять историю разговоров. В данной статье мы подробно разберем, как реализовать механизм исходящего звонка (Click-to-Call) и какие архитектурные подходы существуют для полноценного взаимодействия двух систем.
Прежде чем переходить к написанию кода, проанализируем основные способы «общения» 1С с телефонной станцией. Существует несколько основных интерфейсов:
Рассмотрим подробнее реализацию наиболее популярного сценария — выполнение исходящего вызова через ARI.
Суть метода заключается в том, что 1С отправляет HTTP-запрос на сервер Asterisk. Тот, в свою очередь, сначала совершает вызов на внутренний номер сотрудника (например, на его настольный IP-телефон или софтфон), а когда сотрудник поднимает трубку, система начинает набор внешнего номера клиента.
Для реализации этого алгоритма в 1С нам потребуется объект HTTPСоединение и правильно сформированный HTTPЗапрос. Разберем пример кода:
Процедура НабратьНомер(НомерТелефона)
// 1. Получаем настройки подключения (обычно хранятся в константах или справочнике)
СерверАстериск = "192.168.1.50";
Порт = 8088;
КлючAPI = "my_super_secret_key_12345";
// 2. Определяем внутреннюю линию текущего пользователя
// Линия должна быть настроена в Asterisk (например, PJSIP/101)
Линия = ПолучитьЛиниюТекущегоПользователя();
Если ЗначениеЗаполнено(Линия) Тогда
// Создаем соединение с сервером
// Использование защищенного соединения зависит от настроек http.conf в Asterisk
HTTPСоединение = Новый HTTPСоединение(СерверАстериск, Порт, , , , Ложь);
// Формируем строку запроса для ARI
// Параметры:
// endpoint - внутренний номер сотрудника (технология/номер)
// extension - номер, на который нужно позвонить
// context - контекст в диалплане для исходящих звонков
// callerId - идентификатор, который увидит сотрудник на экране телефона
ПутьЗапроса = "ari/channels?context=from-internal"
+ "&endpoint=PJSIP%2F" + Линия
+ "&extension=" + НомерТелефона
+ "&api_key=" + КлючAPI
+ "&callerId=""1C_Call""";
Запрос = Новый HTTPЗапрос(ПутьЗапроса);
Попытка
ОтветСервера = HTTPСоединение.ОтправитьДляОбработки(Запрос);
Если ОтветСервера.КодСостояния = 200 ИЛИ ОтветСервера.КодСостояния = 201 Тогда
Сообщить("Вызов инициирован успешно.");
Иначе
Сообщить("Ошибка Asterisk. Код ответа: " + ОтветСервера.КодСостояния);
Сообщить(ОтветСервера.ПолучитьТелоКакСтроку());
КонецЕсли;
Исключение
Сообщить("Не удалось связаться с сервером телефонии: " + КраткоеОписаниеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЕсли;
КонецПроцедуры
В данном коде важно обратить внимание на параметр endpoint. В современных версиях Asterisk чаще используется драйвер PJSIP, поэтому строка выглядит как PJSIP/101. Если ваша станция настроена на старом драйвере chan_sip, следует указывать SIP/101.
Как мы выяснили, для работы скрипта 1С должна «знать», какой внутренний телефон стоит на столе у конкретного менеджера. Рассмотрим, как это лучше организовать в структуре метаданных.
Обычно в 1С создается либо дополнительный реквизит в справочнике Пользователи, либо отдельный регистр сведений «Настройки телефонии». Выясним, почему регистр предпочтительнее:
Функция ПолучитьЛиниюТекущегоПользователя() в нашем примере должна обращаться к этим данным и возвращать строку с номером (например, "105").
Иногда возникают задачи, требующие более глубокого управления вызовами, чем позволяет стандартный ARI. В этом случае программисты используют rawman — интерфейс доступа к AMI через HTTP. Проанализируем типичный пример авторизации в этом интерфейсе:
Соединение = Новый HTTPСоединение(IP, Port, , , , 60);
Запрос = Новый HTTPЗапрос("/asterisk/rawman?action=login&username=" + User + "&secret=" + Password);
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
// Получаем Cookie для поддержки сессии в последующих запросах
Cookie = Ответ.Заголовки.Получить("Set-Cookie");
КонецЕсли;
Важное замечание: При работе с AJAM пользователи часто сталкиваются с ошибкой «209». Выясним причину: это внутренний код Asterisk, который часто означает отсутствие активной сессии или ошибку прав доступа в файле manager.conf. Если вы получаете Internet error: Timeout exceeded, проверьте, открыт ли порт (обычно 8088) в брандмауэре сервера Asterisk и разрешены ли внешние подключения в http.conf.
Рассмотрим ситуацию, когда нам нужно не только звонить самим, но и обрабатывать входящие вызовы. Полноценная интеграция должна решать следующие задачи:
Контрагенты и выводит на экран «Карточку входящего звонка».LinkedID) и сопоставляет его с файлом в хранилище Asterisk.Чтобы ваш код в 1С заработал, системный администратор должен подготовить сервер телефонии. Проанализируем ключевые настройки:
В файле http.conf необходимо включить веб-сервер:
[general]
enabled=yes
bindaddr=0.0.0.0
bindport=8088
В файле ari.conf нужно создать пользователя, под которым 1С будет выполнять запросы:
[1c_user]
type = user
read_only = no
password = my_super_secret_key_12345
Если используется AMI/AJAM, соответствующие доступы настраиваются в manager.conf. Обязательно проверьте права (read и write), чтобы разрешить выполнение команд originate (инициация вызова).
Если задача стоит шире, чем просто кнопка «Позвонить», стоит обратить внимание на готовые панели телефонии. Рассмотрим их преимущества:
Выясним, когда стоит писать свое решение, а когда покупать готовое. Если вам нужен только Click-to-Call — достаточно нескольких процедур на 1С и настройки ARI. Если же требуется сложная аналитика, работа с очередями и автоматическое открытие форм — готовые модули сэкономят сотни часов разработки. В качестве альтернативы собственной разработке под Asterisk можно использовать готовое расширение для интеграции 1С с облачной телефонией Билайн.
Таким образом, мы разобрали основы интеграции 1С и Asterisk. Начиная с простых HTTP-запросов к интерфейсу ARI, вы можете постепенно наращивать функционал, внедряя обработку событий AMI и сложные скрипты маршрутизации AGI, создавая единую коммуникационную среду для вашего бизнеса. Если вы рассматриваете другие популярные платформы телефонии, в качестве примера реализации схожей логики подойдет модуль интеграции 1С с Comagic для определения номера и открытия карточки.