1C+Asterisk. Пример интеграции


Пример интеграции 1С:Предприятие 7.7 и Asterisk PBX. Прослушивание событий, совершение исходящих звонков, отправка команд в Asterisk.

1СКакая самая распространенная система IP-телефонии? Правильно - Asterisk. Какая самая распространенная учетная система? Правильно - . А если их подружить, тогда - профит. Smile

Возможно, статья написана излишне подробно - не обессудьте. Хотелось, чтобы было понятно всем, да и множество важных деталей упустить не хотелось.

Условия.

Начнем "дружить" 1С и Asterisk. Возьмем самый тяжелый случай со стороны 1С - версию 7.7 (версия 8.х в уме), а со стороны Asterisk версию 1.6.2.x.

Чего мы хотим:

  1. Функцию исходящего звонка из 1С.
  2. Знать в 1С-е номер звонящего при входящем звонке.

Как будем строить.

У Asterisk-а есть свой API, через который мы и будем подключаться к нему. Называется он AMI - Asterisk Management Interface. Со стороны 1С будем использовать механизм внешних компонент.

Выбор внешней компоненты.

Google в помощь, ищем готовые внешние компоненты. Находим: Asterisk.dll, находим Obeliks, находим VVSAst.dll, находим ROM-Asterisk.dll.

Смотрим, анализируем... Возможно, в будущем захочется развить нашу систему, поэтому смотрим еще и на масштабируемость, наличие универсальных методов отправки команд в Asterisk, на поддержку версии 8.х

Asterisk.dll только для 1С версии 8.х, к тому же у этой ВК нет универсального метода отправки команд в AMI, она может только позвонить и все. Не подходит. :(

Obeliks - ограничения функциональности в шареварной версии. Каждый час перезагрузка, разговор 3 минуты. Снятие ограничений только в платной версии. Не подходит. :(

VVSAst.dll - для версии 7.7 ограничений нет, версия для 8.х платная. Есть универсальные методы отправки команд в AMI. Подходит, но лишь частично.

ROM-Asterisk.dll- полностью свободная и для 7.7 и для 8.х. Есть универсальные методы отправки команд в AMI. Есть мощные средства фильтрации. Полностью подходит.

Подключение внешней компоненты.

Компонента ROM-Asterisk саморегистрирующаяся, загружается через ЗагрузитьВнешнююКомпоненту()

Функция _АстерискЗагрузитьВК() Экспорт;
    Попытка
        ЗагрузитьВнешнююКомпоненту(КаталогИБ()+
"ROM-Asterisk.dll");
       
_Телефония = СоздатьОбъект("AddIn.ROM-Asterisk");
        Возврат
1;
    Исключение
        Сообщить(
"Не удалось загрузить внешнюю компоненту для связи с Asterisk");
    КонецПопытки;
    Возврат
0;
КонецФункции

Дальше, нам нужна еще одна предопределенная процедура - ОбработкаВнешнегоСобытия()

Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
    Если
Источник="ROM-Asterisk" Тогда
        Сообщить(
Данные);
    КонецЕсли;
КонецПроцедуры

Теперь, нам нужно будет выполнить настройку со стороны Asterisk-а, а уже затем будем продолжать разбираться с 1С.

Файлы обработки:

-