Пора заканчивать, а то «Война и мир» получается 🙂 Часть1, Часть2.
Переходим к 1С-у, к глобальному модулю. Напишем пару сервисных функций и будем уже слушать наш Asterisk.
Для начала, сделаем переменную _Телефония глобальной и экспортной. В первой части, мы уже инициализировали эту переменную в функции _АстерискЗагрузитьВК(<?>)
1 |
<span style="color: #ff0000;">Перем</span> <span style="color: #888888;">_Телефония</span> <span style="color: #ff0000;">Экспорт;</span> |
Напишем функцию для организации подключения к AMI
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: #0000ff;">IP</span><span style="color: #ff0000;">,</span><span style="color: #0000ff;">Port</span><span style="color: #ff0000;">=</span><span style="color: #000000;">5038</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;">Connect</span><span style="color: #ff0000;">(</span><span style="color: #0000ff;">IP</span><span style="color: #ff0000;">,</span><span style="color: #0000ff;">Port</span><span style="color: #ff0000;">); Если</span> <span style="color: #0000ff;">КодОшибки</span><span style="color: #ff0000;"><></span>0 <span style="color: #ff0000;">Тогда Сообщить(</span><span style="color: #000000;">"Ошибка:"</span><span style="color: #ff0000;">+</span><span style="color: #0000ff;">КодОшибки</span><span style="color: #ff0000;">); Возврат</span> 0<span style="color: #ff0000;">; КонецЕсли; Если</span> _<span style="color: #0000ff;">Телефония</span><span style="color: #ff0000;">.</span><span style="color: #0000ff;">Connected</span><span style="color: #ff0000;">=</span>1 <span style="color: #ff0000;">Тогда Возврат</span> 1<span style="color: #ff0000;">; КонецЕсли; КонецФункции</span> |
Нужна универсальная функция, которая позволяет выполнять произвольную команду в AMI.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<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;">Connected</span><span style="color: #ff0000;">=</span>0 <span style="color: #ff0000;">Тогда Сообщить(</span>"<span style="color: #000000;">Соединение не установлено</span>"<span style="color: #ff0000;">); Возврат</span> 0<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: #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>0 <span style="color: #ff0000;">Тогда Возврат</span> 1<span style="color: #ff0000;">; КонецЕсли; Сообщить(</span><span style="color: #000000;">"Asterisk. Выполнение команды. Ошибка: "</span><span style="color: #ff0000;">+</span><span style="color: #0000ff;">КодОшибки</span><span style="color: #ff0000;">); Сообщить(</span><span style="color: #000000;">"Asterisk. ТекстКоманды: "</span><span style="color: #ff0000;">+</span><span style="color: #0000ff;">ТекстКоманды</span><span style="color: #ff0000;">); КонецФункции</span> |
Теперь, нужна функция авторизации. Во 2-й части мы авторизовались из командной строки, теперь сделаем это из 1С.
1 2 3 4 5 6 7 8 9 10 11 |
<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;"> CRLF</span><span style="color: #ff0000;">=РазделительСтрок;</span> <span style="color: #0000ff;"> ТекстКоманды</span><span style="color: #ff0000;">=</span><span style="color: #000000;">"Action: login"</span><span style="color: #ff0000;">+</span><span style="color: #0000ff;">CRLF</span><span style="color: #ff0000;">+</span> <span style="color: #000000;"> "Username: "</span><span style="color: #ff0000;">+</span><span style="color: #0000ff;">Юзер</span><span style="color: #ff0000;">+</span><span style="color: #0000ff;">CRLF</span><span style="color: #ff0000;">+</span> <span style="color: #000000;"> "Secret: "</span><span style="color: #ff0000;">+</span><span style="color: #0000ff;">Хеш</span><span style="color: #ff0000;">+</span><span style="color: #0000ff;">CRLF</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>0 <span style="color: #ff0000;">Тогда Возврат</span> 0<span style="color: #ff0000;">; КонецЕсли; Возврат</span> 1<span style="color: #ff0000;">; КонецФункции</span> |
Напишем функцию прослушивания событий AMI
1 2 3 4 5 6 7 8 9 10 11 12 |
<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;">Connected</span><span style="color: #ff0000;">=</span>0 <span style="color: #ff0000;">Тогда Сообщить(</span><span style="color: #000000;">"Соединение не установлено"</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: #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>0 <span style="color: #ff0000;">Тогда Сообщить(</span><span style="color: #000000;">"Ошибка с кодом:"</span><span style="color: #ff0000;">+</span><span style="color: #0000ff;">КодОшибки</span><span style="color: #ff0000;">); КонецЕсли; КонецПроцедуры</span> |
Осталось только вызвать все эти процедуры и функции. Сделаем это ПриНачалеРаботыСистемы(<?>), добавим в эту процедуру строки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<span style="color: #ff0000;">Если</span> _<span style="color: #0000ff;">АстерискЗагрузитьВК</span><span style="color: #ff0000;">()=</span>1 <span style="color: #ff0000;">Тогда Если</span> <span style="color: #0000ff;">_Телефония</span><span style="color: #ff0000;">.</span><span style="color: #0000ff;">Connected</span><span style="color: #ff0000;">=</span>0 <span style="color: #ff0000;">Тогда Если</span> _<span style="color: #0000ff;">АстерискСоединиться</span><span style="color: #ff0000;">(</span>"192.168.1.100",5038<span style="color: #ff0000;">)=</span>0 <span style="color: #ff0000;">Тогда Сообщить(</span><span style="color: #000000;">"Не удалось соединиться с сервером Астериск"</span><span style="color: #ff0000;">); Возврат</span> 0<span style="color: #ff0000;">; КонецЕсли;</span> <span style="color: #0000ff;"> АмиПользователь</span><span style="color: #ff0000;">=</span>"admin"<span style="color: #ff0000;">;</span> <span style="color: #0000ff;"> АмиХешПароля</span><span style="color: #ff0000;">=</span>"password1234"<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>0 <span style="color: #ff0000;">Тогда Сообщить(</span><span style="color: #000000;">"Не удалось авторизоваться на сервере Астериск"</span><span style="color: #ff0000;">); Возврат</span> 0<span style="color: #ff0000;">; КонецЕсли; КонецЕсли;</span> <span style="color: #0000ff;"> _АстерискСлушать</span><span style="color: #ff0000;">(); КонецЕсли;</span> |
Загружаем 1С в режиме «Предприятие». Если все сделано правильно, то в строке сообщений появится куча всяких интересных событий AMI. Как минимум, мы должны увидеть событие своей успешной авторизации.
Поздравляю и желаю успехов 🙂 🙂 🙂
P.S.
Все вопросы можно и нужно задавать в Форуме