Какая самая распространенная система IP-телефонии?
Правильно — Asterisk.
Какая самая распространенная учетная система?
Правильно — 1С.
А если их подружить, тогда — профит. 🙂
Условия.
Начнем «дружить» 1С и Asterisk. Возьмем самый тяжелый случай со стороны 1С — версию 7.7, а со стороны Asterisk версию 1.6.2.x.
Чего мы хотим:
- Функцию исходящего звонка из 1С.
- Знать в 1С-е номер звонящего при входящем звонке.
Как будем строить.
У Asterisk-а есть свой API, через который мы и будем подключаться к нему. Называется он AMI — Asterisk Management Interface. Со стороны 1С будем использовать механизм внешних компонент.
Выбор внешней компоненты.
Google в помощь, ищем готовые внешние компоненты. Находим Asterisk.dll, находим Obeliks, находим VVSAst.dll. Смотрим, анализируем…
Возможно, в будущем захочется развить нашу систему, поэтому смотрим еще и на масштабируемость и наличие универсальных методов отправки команд в Asterisk.
Asterisk.dll только для 1С версии 8.х, к тому же у этой ВК нет универсального метода отправки команд в AMI, она может только позвонить и все. Не подходит. 🙁
Obeliks — ограничения функциональности в шареварной версии. Каждый час перезагрузка, разговор 3 минуты. Снятие ограничений только в платной версии. Не подходит. 🙁
VVSAst.dll — для версии 7.7 ограничений нет. Есть универсальные методы отправки команд в AMI. Полностью подходит. 😀
Подключение внешней компоненты.
Компонента VVSAst саморегистрирующаяся, загружается через метод ЗагрузитьВнешнююКомпоненту(<?>).
1 2 3 4 5 6 7 8 9 10 |
<span style="color: #ff0000;">Функция</span> _<span style="color: #0000ff;">АстерискЗагрузитьВК</span><span style="color: #ff0000;">()Экспорт;</span> <span style="color: #ff0000;"> Попытка</span> <span style="color: #ff0000;"> ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+</span>"VVSAst.dll"<span style="color: #ff0000;">);</span> _<span style="color: #0000ff;">Телефония </span><span style="color: #ff0000;">= СоздатьОбъект(</span>"AddIn.VVSAst"<span style="color: #ff0000;">);</span> <span style="color: #ff0000;"> Возврат</span> 1<span style="color: #ff0000;">;</span> <span style="color: #ff0000;"> Исключение</span> <span style="color: #ff0000;"> Сообщить(</span>"Не удалось загрузить внешнюю компоненту для связи с Asterisk"<span style="color: #ff0000;">);</span> <span style="color: #ff0000;"> КонецПопытки;</span> <span style="color: #ff0000;"> Возврат</span> 0<span style="color: #ff0000;">;</span> <span style="color: #ff0000;">КонецФункции</span> // _АстерискЗагрузитьВК() |
Дальше, нам нужна еще одна предопределенная процедура — ОбработкаВнешнегоСобытия(<?>)
1 2 3 4 5 6 7 |
<span style="color: #ff0000;">Процедура</span> <span style="color: #0000ff;">ОбработкаВнешнегоСобытия</span><span style="color: #ff0000;">(</span><span style="color: #0000ff;">Источник</span><span style="color: #ff0000;">,</span><span style="color: #0000ff;">Событие</span><span style="color: #ff0000;">,</span><span style="color: #0000ff;">Данные</span><span style="color: #ff0000;">)</span> <span style="color: #ff0000;"> Если</span> <span style="color: #0000ff;">Источник</span><span style="color: #ff0000;">=</span>"addin.VVSAst" <span style="color: #ff0000;">Тогда</span> <span style="color: #ff0000;"> Сообщить(</span><span style="color: #0000ff;">Данные</span><span style="color: #ff0000;">);</span> <span style="color: #ff0000;"> Возврат;</span> <span style="color: #ff0000;"> КонецЕсли;</span> <span style="color: #ff0000;">КонецПроцедуры</span> |
Теперь, нам нужно будет выполнить настройку со стороны Asterisk-а, а уже затем будем продолжать разбираться с 1С. Но это уже тема другой части…