Блог на Subnets.ru
Мрежи, конфигурация на оборудването, мрежови услуги.
Автоматичен
Има задачи, изпълнението на които е възможно чрез автоматично набиране. например ?
Например вие сте sys.admin, имате локална мрежа и куп оборудване в нея, но не сте на работа денонощно и ако е така, нещо може да се случи в мрежата, например събитие в системата за наблюдение, но не сте на работното място. Разбира се, можете да си изпратите SMS, ако имате такава възможност, но имате сървър Звездичка можете да се обадите и да си кажете какво се е случило 😉
И така, предполагаме, че вече имате инсталиран и конфигуриран сървър. Звездичка, който има достъп до града.
За да осъществим автоматично обаждане, са ни необходими следните неща:
- генериране на файл за повикване
- има в плана за набиране (план за набиране (дефиниран в /usr/local/etc/asterisk/extensions.conf)) контекст със списък с действия
Нека започнем с файл за повикване, основният му синтаксис е:
- Канал: - Кой канал да използвате за разговора
- CallerID: "name" - Задайте Caller ID, тук е по-лесно да кажем, че можем да зададем Caller ID (номера, от който се обаждаме).
- MaxRetries: - Максимален брой опити за повикване, по подразбиране 0, което е един опит.
- RetryTime: - Време в секунди между опитите за набиране, по подразбиране 300 (5 минути).
- WaitTime: - Колко секунди да изчакате, за да се откачите, 45 по подразбиране.
- Контекст: - Кой контекст използваме от extensions.conf
- Разширение: - Кое разширение използваме в избрания контекст (също и в extensions.conf).
- Приоритет:
- С какъв приоритет започваме.
Дадох непълен списък, пълният списък е достъпен тук. Лично за всяко число създавам свой собствен контекст в extensions.conf .
Съответно, познавайки синтаксиса, вече можем да генерираме файл за повикване, като използваме примера за повикване през SIP канала:
За тези, които са в резервоара, нека анализираме файла за обаждания ред по ред:
- обадете се на SIP номер 89161112233 чрез sip-доставчика (име от /usr/local/etc/asterisk/sip.conf, за да отидете в града)
- използвайте идентификатор на повикващия 9998877
- Максимален брой опити за набиране 2
- Пауза между опитите 20 секунди
- Изчакайте 60 секунди, за да се откачите
- Използвайте контекст с име outgoing_to_89161112233
- Започнете с разширение (ext) s
- И започнете с приоритет 1 в разширението s
След като формира файл за повикване, той трябва да бъде поставен в папката:/var/spool/asterisk/outgoing/server Звездичка намирането на файл в тази папка веднага ще се опита да го обработи.
Трябва веднага да кажа, че можете да забавите обработката на файла, т.е. задържат реф. обадете се и го отложете за определено време.
Сървър Звездичка гледа датата на създаване на файла с повикванията и ако промените датата на създаване на дата в бъдеще, тогава Звездичка няма да обработи файла с повикванията, докато не дойде точно тази дата.
Как да го направя ? Много просто, за това използваме командата за докосване, която е достъпна във всички системи Unix.
След като създадем самия файл с повиквания, вземаме и променяме датата на неговото създаване, шаблонът за дата е както следва:
ГОДИНА МЕСЕЦ ДЕН ЧАСИ МИНУТИ . СЕКУНДИ (внимание: пред секундите има точка, това е, което ви трябва, а не печатна грешка).
/ usr/bin/touch -t 1007091918.55 /path/to/call/file.call
Датата на създаване на файла за повикване ще се промени и ако преместите файла в/var/spool/asterisk/outgoing /, съответно Звездичка няма да бъде обработен, докато не дойде зададената дата.
Съвет: по-добре е да генерирате файл за повикване в някаква tmp директория, да извършите всички необходими действия върху тях и след това да преместите (прехвърлите) в/var/spool/asterisk/outgoing/.
Сега нека разгледаме самия контекст, за една система за наблюдение може да бъде така:
Въз основа на този контекст Звездичка набирането на 89161112233 (лицето, вдигнало телефона) ще направи следното:
- вдига телефона от неговата страна
- чакай малко
- ще възпроизвежда записани от вас звукови файлове (посочени са пълните пътеки до файловете)
- затварям телефона
Как да записвате гласови файлове (какво ще възпроизвеждате) можете да разберете от тази статия.
След като Asterisk завърши файла с повикванията, той го изтрива от директорията/var/spool/asterisk/outgoing/.
Специално разширение 'се провали‘
Ако на повикването не се отговори и има стандартно разширение с име неуспешно и команда с приоритет 1 в посочения (в .call файла) контекст, контролът ще бъде прехвърлен към тази команда.
Може да се появи друга задача, а именно: ако телефонът не е бил вдигнат по време на автоматично набиране, веднага наберете друг номер. Пример за такава конструкция:
- първо набираме вътрешния SIP номер (6003) на човека
- ако вътрешният SIP номер не отговаря/зает/недостъпен - наберете мобилния номер
Изглежда, добре, какво по-лесно може да се напише:
И тогава се оказа, че не всичко е толкова просто. За такова действие ще видите подобно съобщение в конзолата (чрез задаване на подробен набор от ядра 3):
- Изпълнение [неуспешен @ dialsip: 1] Набиране ("OutgoingSpoolFailed", "SIP/6003") в нов стек
[11 февруари 16:57:44] ПРЕДУПРЕЖДЕНИЕ [94371]: channel.c: 3441 ast_request: Не съществува път на преводач за тип канал SIP (роден 65535) до 0
[11 февруари 16:57:44] ПРЕДУПРЕЖДЕНИЕ [94371]: app_dial.c: 1296 dial_exec_full: Не може да се създаде канал от тип „SIP“ (причина 58 - Възможността за носител не е налична)
== Понастоящем всички са заети/претоварени (1: 0/0/1)
== Автоматично преминаване, състоянието на канала „OutgoingSpoolFailed“ е „CHANUNAVAIL“
[11 февруари 16:57:54] ЗАБЕЛЕЖКА [94371]: pbx_spool.c: 356 try_thread: Обаждането не е преминало, причина (8) Претоварване (веригите са заети)
Мустаци ... пристигнаха .... Изкачвайки резултатите от търсене в Google, попаднах на съобщения:
Каналът се оказва OutgoingSpoolFailed и в него Dial and Playback се опитва да се обади и пусне. Как мога да се обадя до SIP и да пусна съобщение, докато не съм успял?
Всъщност аз самият си зададох абсолютно същия въпрос, но нямах отговор и на него в Интернет.
Точно като мен, хората се опитаха да приложат това чрез неуспешно с Goto, System и т.н., но резултатът беше същият - не 🙁
Оказва се, че от starndart разширението не е набрало друг номер, няма да работи ....
Вече си мислех, че не е съдба и ще трябва да хвана DIALSTATUS, да го прехвърля в AGI скрипта (който също ще трябва да бъде написан) и който вече ще реши какво да прави с него (създаване на нов файл за повикване или нещо друго ), но след това се роди още един вариант:
Създаваме файл за повикване с малко по-различно съдържание:
Когато autocaller е името на контекста, а 1 е приоритетът в този контекст. Съответно правим този контекст в extensions.conf:
По този начин ние, като че ли, вече не набираме номер, а конкретно разширяване в контекста и в него предаваме повикването на макроса, ние също създаваме макрос, който се използва в този контекст:
Всъщност този макрос ни позволява вече да контролираме къде и в какъв случай ще отиде повикването. Примерът разбира се е "груб", но основното е принципът, а след това и вашето творчество 😉
И по този начин получаваме желания резултат.
Обратно обаждане
Работи по същия начин като описаното по-горе автоматично набиране, с няколко изключения:
- файл с повикване се генерира, когато човек се обади на номера, за който е определен обратно извикване.
- в контекста (context) ние не просто възпроизвеждаме звук, но предлагаме на потребителя да въведе номера, който иска да повика
Какво ни трябва в този случай:
- разпределете номер за обратно извикване и създайте контекст за него в extensions.conf .
- "Прехвърлете" повикването към AGI скрипт, който ще провери идентификатора на повикващия, за да види дали този номер е разрешен обратно извикване
- ако обратно извикване разрешено, тогава той ще генерира файл за повикване.
AGI - това Aстериск Gтрапезария Азnterface.
Aстериск Gтрапезария Азnterface е възможност за разширяване на функционалността Звездичка`но чрез използване на скриптове на много езици за програмиране. Например Perl, PHP, C, Pascal, Bourne Shell.
Да започнем с числото, да речем, че ще са планини. номер 84955556677. Добавете към extensions.conf в контекста, в който се получават всички входящи повиквания:
Тези. обаждане към удължаване (ext) 84955556677 ще бъде прехвърлено AGI php скрипт и след това обаждането ще бъде прекратено незабавно.
AGI скриптове за Звездичка намира се в директорията/usr/local/share/asterisk/agi-bin/.
Защо PHP скрипт? PHP беше избран за AGI, от callback е неразделна част от проект, написан на PHP + MySQL, затова решихме AGI нека е в PHP.
Самият скрипт: http://subnets.ru/files/callback.php.txt
Какво се случва със сценария ?
- дефинирайте необходимите променливи
- получаваме данни от Звездичка`но.
- трупи, къде без тях. Ще сложим всичко, което сме получили в дневника AGI скрипт от Звездичка`ах, това е за отстраняване на грешки, след което можете да изключите регистрирането.
- проверете идентификационния номер на повикващия за достъп до обратно извикване
- вижте дали вече има файл за повикване за този номер, ако не, тогава го създайте
Е, остава малко да се направи, а именно какъв би бил контекстът за извикващия номер в extensions.conf .
Да кажем нашите обратно извикване номерът 84955556677 е набран от мобилния 89105647899 и е разрешен обратно извикване (номер 84955556677 е посочен в масива $ allow_num в скрипта), тогава неговият контекст може да изглежда така:
- Ubiquiti - Страница 2 - IT блог
- Очароваме в мрежата Когато използваме мрежата за
- Изложба "Котки на известни художници", Блог Фиеста
- Ампролиум за зайци и други лекарства за кокцидиоза състав и употреба
- Блогът на Анфиса Бреус, Как да създам формуляр за обратна връзка в блог в съответствие с 152-FZ - About