Как реализовать интеграцию 1С и АТС Asterisk: подробное руководство от подключения до управления звонками

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

Интеграция 1С с телефонией на базе Asterisk является одной из самых востребованных задач при автоматизации отделов продаж и служб поддержки. Рассмотрим, как реализовать полноценное взаимодействие между этими системами, используя внешнюю компоненту, работающую по технологии Native API. Мы разберем этапы подключения, инициации звонков, обработки входящих событий и работы с записями разговоров.

Выбор инструментария для интеграции

Для взаимодействия 1С с Asterisk чаще всего используется интерфейс AMI (Asterisk Manager Interface). Чтобы 1С могла «слушать» события сервера в реальном времени, рекомендуется использовать внешнюю компоненту BROM-Asterisk-Native (или аналогичную InnovaIT_Asterisk_Native). Эта компонента позволяет устанавливать TCP-соединение с сервером Asterisk и обмениваться командами в асинхронном режиме.

Шаг 1. Подключение и авторизация на сервере Asterisk

Прежде чем отправлять команды, мы должны инициализировать компоненту и пройти авторизацию. Разберем пример кода для тонкого клиента. Важно помнить, что команды Asterisk требуют четкого соблюдения синтаксиса, включая символы переноса строки CRLF (Возврат каретки + Перевод строки).


&НаКлиенте
Процедура ПодключитьсяКАТС()
    ПС = Символы.ВК + Символы.ПС; // CRLF обязателен для AMI
    
    // Подключение компоненты из макета или файла
    Подключено = ПодключитьВнешнююКомпоненту("ОбщийМакет.AsteriskComponent", "Asterisk", ТипВнешнейКомпоненты.Native);
    
    Если Подключено Тогда
        ОбъектАТС = Новый("AddIn.Asterisk.ROM-Asterisk-Native");
        
        // Устанавливаем параметры соединения
        Сервер = "192.168.1.100";
        Порт = "5038";
        ОбъектАТС.Connect(Сервер, Порт);
        
        // Авторизация
        Логин = "admin";
        Пароль = "secret_password";
        
        ТекстКоманды = "Action: login" + ПС +
                       "Username: " + Логин + ПС +
                       "Secret: " + Пароль + ПС +
                       "Events: on" + ПС + ПС; // Двойной перенос в конце команды
                       
        Результат = ОбъектАТС.ВыполнитьКоманду(ТекстКоманды);
        Сообщить("Авторизация: " + Результат);
    КонецЕсли;
КонецПроцедуры

Обратите внимание: в файле manager.conf на стороне Asterisk для пользователя должны быть разрешены соответствующие права (read/write) и доступ с IP-адреса сервера 1С.

Шаг 2. Инициация исходящего звонка (Originate)

Функция Originate позволяет соединить два канала. Чаще всего сначала вызывается внутренний телефон менеджера, и как только он поднимает трубку, Asterisk начинает набор внешнего номера клиента. Проанализируем структуру команды:


&НаКлиенте
Процедура СовершитьЗвонок(НомерКлиента, ВнутреннийНомерМенеджера)
    ПС = Символы.ВК + Символы.ПС;
    
    // Формируем команду
    ТекстКоманды = "Action: Originate" + ПС +
                   "Channel: PJSIP/" + ВнутреннийНомерМенеджера + ПС +
                   "Context: from-internal" + ПС +
                   "Exten: " + НомерКлиента + ПС +
                   "Priority: 1" + ПС +
                   "Callerid: 1C_Call" + ПС +
                   "Async: true" + ПС + ПС;
                   
    Флаг = ОбъектАТС.ВыполнитьКоманду(ТекстКоманды);
КонецПроцедуры

Выясним причину возможных неудач: если в логах Asterisk пусто, проверьте правильность протокола (PJSIP/ или SIP/) и наличие контекста from-internal. Также критически важно наличие пустого переноса строки ПС + ПС в конце текстового блока команды.

Шаг 3. Обработка внешних событий и получение записи разговора

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

Рассмотрим порядок действий:

  1. Включаем режим прослушивания: ОбъектАТС.РежимПрослушивания = Истина;
  2. Устанавливаем регулярное выражение для фильтрации событий, например, по событию VarSet или Hangup.
  3. Обрабатываем результат в процедуре ВнешнееСобытие формы.

&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
    // Разбираем данные, пришедшие от компоненты
    Если Найти(Данные, "MIXMONITOR_FILENAME") > 0 Тогда
        // Извлекаем путь к файлу из строки события
        ИмяФайла = ИзвлечьИмяФайла(Данные);
        Сообщить("Запись сохранена в: " + ИмяФайла);
    КонецЕсли;
КонецПроцедуры

Если событие не приходит, проверьте настройки manager.conf. Параметр read = dialplan,call,all должен быть активен для вашей учетной записи AMI.

Шаг 4. Прослушивание записи через телефон (обратный звонок)

Если менеджеру нужно прослушать запись разговора из интерфейса 1С, мы можем инициировать звонок, где вместо внешнего абонента Asterisk воспроизведет аудиофайл с помощью приложения Playback или через специальный контекст. Разберем пример реализации через Originate:


&НаКлиенте
Процедура ПрослушатьЗапись(ПутьКФайлу, ВнутреннийНомер)
    ПС = Символы.ВК + Символы.ПС;
    
    // Убираем расширение, если Asterisk этого требует
    ИмяФайлаБезРасширения = СтрЗаменить(ПутьКФайлу, ".wav", "");
    
    ТекстКоманды = "Action: Originate" + ПС +
                   "Channel: PJSIP/" + ВнутреннийНомер + ПС +
                   "Application: Playback" + ПС +
                   "Data: " + ИмяФайлаБезРасширения + ПС +
                   "Async: true" + ПС + ПС;
                   
    ОбъектАТС.ВыполнитьКоманду(ТекстКоманды);
КонецПроцедуры

Шаг 5. Переадресация вызова (Redirect)

Для реализации «умной» маршрутизации, когда 1С определяет ответственного менеджера по номеру входящего клиента, используется команда Redirect. Выясним, какие параметры необходимы для успешного перенаправления:

Нам потребуется идентификатор канала (Channel), который можно получить из входящего события Newchannel или Dial Begin.


// Пример формирования команды переадресации
ТекстКоманды = "Action: Redirect" + ПС +
               "Channel: " + ИдентификаторКанала + ПС +
               "Exten: " + НовыйВнутреннийНомер + ПС +
               "Context: from-internal" + ПС +
               "Priority: 1" + ПС + ПС;

Практические советы по оптимизации

Проанализируем ситуацию с нагрузкой. Если ваша АТС обрабатывает сотни звонков одновременно, поток событий от Asterisk может замедлить работу интерфейса 1С. Чтобы этого избежать:

Таким образом, использование AMI совместно с технологией Native API в 1С открывает широкие возможности для создания полноценного рабочего места оператора с функциями Click-to-Call, автоматическим открытием карточки клиента и управлением записями разговоров прямо из учетной системы.

← На главную