Како да повежете Заббик са Астериск из кутије

У претходном чланку „Заббик – ширење макро граница“ Рекао сам вам како да примите сесију ауторизације и да је замените у локални макро макро. У овом чланку ћу вам рећи како да повежете Заббик са Астериск-ом без спољних скрипти и софтвера.

Идеја да се ова два система „спријатељите“ родила се давно, без инсталирања додатног софтвера или скрипти. Брзо гуглање је дало многа могућа решења, све се сводило на то да отпремите скрипте (у Пиха, Басх, Питхон итд.) на сервер и бићете срећни. Хтео сам да имплементирам надгледање „из кутије“ - без екстерних скрипти и инсталирања додатног софтвера на сервер са надзором и ПБКС-ом.

Провео сам укупно 4 радна дана са овим, али резултат је вредео тога. Рад преко АМИ интерфејса, детекција ниског нивоа, тригера и што је најважније, повезивање ПБКС-а и свих осталих подешавања сада траје око 15 минута.

Доступан је Заббик 4.4, око 100 комада Астериск верзије 13. Неке централе долазе са ФрееПБКС веб интерфејсом, неке са голом конзолом, гомилом трикова и интеграцијом преко плана бирања.

Пријем података са ПБКС-а

Прва и главна ствар коју треба решити је добијање података о вршњацима и СИП регистрацијама. У ту сврху, ПБКС има АГИ, АМИ, АРИ и ССХ интерфејс конзоле. Из очигледних разлога, нисам разматрао додатне модуле.

Прво треба да схватимо шта су ови аги, ами, ари...

  • АГИ - коришћење скрипти у дијалплану. Углавном се користи за управљање позивима.
  • АМИ - може да пружи све потребне информације, ради преко порта 5038, слично Телнету. Одговара нам!
  • АРИ - модеран, модеран, ЈСОН. Постоји много могућности, формат података је разумљив за Заббик, али за мене не постоји главна ствар: не можете контролисати регистрацију гутљаја. Још један недостатак је што за вршњаке постоје само два стања онлајн/офлајн, иако има више стања и корисно је узети их у обзир приликом дијагностиковања.
  • ССХ може све, али понекад није дозвољено из „безбедносних разлога“. Разматрања могу бити другачија, нећу улазити у њих.

Међутим, уз све своје недостатке, АРИ покрива 90% свих потреба за праћењем.

Заббик и Телнет - моје разочарење

Добро познајем АМИ, својевремено сам имплементирао праћење губитака у разговорима са одељењем по удаљеним канцеларијама, управљање позивима итд. Са Телнетом је такође све врло јасно: отворите везу, пошаљите команде и прочитајте одговор. То сам и урадио, али ме је резултат разочарао.

Телнет у Заббик-у није исти као у Линук конзоли, мало је једноставнији и прилагођен стандардној ауторизацији као што је пријава/лозинка. Ако је логика ауторизације другачија и нема захтева за пар пријављивање/лозинка, долази до грешке. Након узалудних покушаја да се заобиђе захтев за ауторизацију, било је корисно погледати изворни код Телнет модула.

Схватио сам да све док не постоји традиционални захтев за пријаву и лозинку, нећу напредовати. Из забаве сам уклонио све што се тиче ауторизације из кода и све поново саставио. Извођење радова! Али не испуњава услове. Хајде…

Вратимо се на претрагу

Поново сам прочитао АРИ документацију, извршио додатне тестове - овде нема регистрације гутљаја. Гозбе има, разговора има, панталона има, а регистрација нема. У неком тренутку сам чак помислио, да ли нам је заиста потребна регистрација лешинара?

Смешном коинциденцијом, у овом тренутку стиже још један захтев од корисника, са проблемом са одлазним позивима. Проблем је био у томе што се регистрација гутљаја замрзнула и решен је једноставним поновним покретањем модула.

asterisk -rx "sip reload"

Било би сјајно приступити АМИ-ју преко веба: то би решило све проблеме, помислио сам. Почињем да копам у овом правцу и буквално прва линија за претрагу води до званичне документације Астериск, која каже да постоји опција за моје задатке вебенаблед у фајлу /етц/астериск/манагер.цонф, који треба да буде подешен на ДА, у одељку [Генерал]

Након тога, путем редовног веб захтева обрасца http://ats:8089/mxml?action=SIPshowregistry добијамо све потребне информације.

Када користите ФрееПБКС интерфејс, не можете да омогућите ову опцију преко веба; потребно је да је омогућите преко конзоле уносећи измене у датотеку манагер.цонф. ФрееПБКС га не брише када се промене конфигурације изврше путем веба.

Дуго сам радио са разним врстама Астериск интеграција, али никада нисам видео да се ова функција помиње нигде. Био сам изненађен што нико не описује овај метод интеракције са ПБКС-ом. Чак је било посебно корисно тражити информације о овој теми: практично нема ничега или је коришћено за сасвим друге задатке.

ВЕБ АМИ - каква звер?

Додавање опције вебенаблед да поднесе манагер.цонф обезбедио потпун приступ управљању АТС-ом преко веба. Све команде доступне преко обичног АМИ-ја су сада на вебу, можете слушати догађаје са ПБКС-а преко утичнице. Принцип рада се не разликује од АМИ конзоле. Након активирања ове опције, ПБКС можете контактирати на следеће адресе:

https://ats:8089/manager — веб страница са једноставним интерфејсом за тестирање и ручно слање захтева. Сви одговори су форматирани у читљив ХТМЛ. Није баш погодно за праћење.
https://ats:8089/rawman — само излаз текста, формат сличан АМИ конзоли
https://ats:8089/mxml - само текстуални излаз, у КСМЛ формату. Одговара нам!

Како да повежете Заббик са Астериск из кутије

Онда сам помислио: „Ово је решење! Сада ће све бити спремно! Еаси-пеези лемон скуеезеи“, али било је прерано за рад. Да бисмо добили информације које су нам потребне, довољно је користити ГЕТ захтев са потребном радњом акција, који као одговор враћа кмл са листом свих регистрација и њиховим статусом. Све је ово сјајно, али вам је потребно овлашћење да запамтите сесију из колачића. Када тестирате у претраживачу, не размишљате о овом процесу.

Процес ауторизације

Прво се обраћамо адреси http://ats:8089/mxml?action=login&username=zabbix&secret=zabbix, као одговор, сервер нам шаље колачић са сесијом ауторизације. Овако изгледа ХТТП захтев:

https://ats:8089/mxml?action=login&username=zabbix&secret=zabbix

Host: ats:8089
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:77.0) Gecko/20100101 Firefox/77.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1

Одговор:

GET: HTTP/1.1 200 OK
Server: Asterisk/13.29.2
Date: Thu, 18 Jun 2020 17:41:19 GMT
Cache-Control: no-cache, no-store
Content-type: text/xml
Set-Cookie: mansession_id="6f5de42c"; Version=1; Max-Age=600
Pragma: SuppressEvents
Content-Length: 146

<ajax-response>
<response type="object" id="unknown">
<generic response="Success" message="Authentication accepted"/>
</response>
</ajax-response>

Да бисте тамо радили, морате мансессион_ид="6ф5де42ц“, односно сам ауторизациони колачић.
Садржај који само треба да проверите за одговор "Аутентификација је прихваћена" Затим, за све позиве ка ПБКС серверу, мораћемо да додамо ауторизациони колачић у захтев.

https://ats:8089/mxml?action=SIPpeers

Host: ats:8089
Connection: close
Cookie: mansession_id="6f5de42c"

Прочитајте како да добијете ауторизациони колачић и да га користите у другим захтевима овде: “Заббик - ширење граница макроа»

За креирање елемената за праћење у Заббик-у користићу аутоматску детекцију.

Ауто детецтион

Да бисте аутоматски открили регистрације и пратили стања вршњака, потребно је да контактирате следећу адресу: https://ats:8089/mxml?action=SIPshowregistry или https://ats:8089/mxml?action=SIPpeers

Као одговор, ПБКС нам враћа КСМЛ одговор:

<ajax-response>
<response type="object" id="unknown">
<generic response="Success" eventlist="start" message="Registrations will follow"/>
</response>
...
<response type="object" id="unknown">
<generic event="RegistryEntry" host="login.mtt.ru" port="5060" username="111111" domain="login.mtt.ru" domainport="5060" refresh="105" state="Registered" registrationtime="1592502142"/>
</response>
<response type="object" id="unknown">
<generic event="RegistryEntry" host="voip.uiscom.ru" port="5060" username="222222" domain="voip.uiscom.ru" domainport="5060" refresh="105" state="Registered" registrationtime="1592502142"/>
</response>
<response type="object" id="unknown">
<generic event="RegistryEntry" host="voip.uiscom.ru" port="5060" username="333333" domain="voip.uiscom.ru" domainport="5060" refresh="105" state="Registered" registrationtime="1592502142"/>
</response>
...
</ajax-response>

У одговору има много смећа, па га у претходној обради филтрирамо по шаблону КСПатх: //респонсе/генериц[@хост]
Онда забава почиње. Да бисте радили са откривањем и динамички креирали елементе, одговор мора бити у ЈСОН формату. КСМЛ није подржан за аутоматско откривање.

Да бих претворио КСМЛ у ЈСОН, морао сам мало да се играм са аутоматском заменом, за шта сам направио скрипту у ЈС

Како да повежете Заббик са Астериск из кутије

Занимљива ствар: у АТС одговору, сви параметри су окружени појединачним наводницима, а након примене шаблона //респонсе/генериц[@хост] замењују се двоструким.

Да бисмо креирали елементе, користимо променљиве из КСМЛ одговора (сада ЈСОН)​.

Како да повежете Заббик са Астериск из кутије

СИП регистар

За регистрацију за сип користимо три варијабле: корисничко име, домаћин, лука. Био сам задовољан именом елемента [емаил заштићен]: КСНУМКС, нисам нашао ниједну ситуацију у којој треба да користите свих пет варијабли.

Главни елемент који прима информације о свим регистрацијама, Астериск - АМИ СИПсховрегистри. Једном у минуту поставља ГЕТ захтев за https://ats:8089/mxml?action=SIPshowregistry, након чега се КСМЛ подаци одговора прослеђују свим зависним елементима ради рашчлањивања. За сваку регистрацију креирам елемент који зависи од тога. Ово је згодно јер добијамо ажурне информације у једном захтеву, а не за сваки захтев посебно. Ова имплементација има значајан недостатак - оптерећење процесора.

Приликом тестирања до 100 зависних елемената нисам приметио оптерећење, али са 1700 елемената ово је дало приметно оптерећење процесора од 15 секунди. Имајте ово на уму ако имате велики број зависних елемената.

Као опцију да „распростирате“ оптерећење или поставите различите фреквенције прозивања за елемент, можете преместити логику обраде на сваки елемент посебно.

Примљене информације не чувам у главном елементу. Прво, не видим потребу за овим, а друго, ако је одговор већи од 64К, онда га Заббик прекида.

Пошто користимо пун КСМЛ одговор за зависни елемент, потребно је да добијемо вредност овог елемента у претходној обради. Кроз КСПатх то се ради овако:
стринг(//респонсе/генериц[@евент="РегистриЕнтри"][@усернаме="{#СИП_РЕГИСТРИ_УСЕРНАМЕ}"][@хост="{#СИП_РЕГИСТРИ_ХОСТ}"][@порт="{#СИП_РЕГИСТРИ_ПОРТ}"]/@ држава)
За статусе регистрације нисам користио текстуалне статусе, већ сам их конвертовао у нумерички облик користећи ЈаваСцрипт:

switch(value) {
  case 'Registered':
    return 1;
  case 'Unregistered':
    return 0;
  default:
    return -1;
}

СИП Пеерс

По аналогији са СИП регистрацијама, постоји главни елемент Астериск-а - АМИ СИПсховрегистри, коме се додају зависни.

Ово ствара два зависна елемента:

  • Статус вршњака у текстуалном облику
  • Време одговора уређаја - ако је статус ОК, тада се уписује време одговора уређаја, у супротном „-1“

Пут до самог елемента је мало једноставнији КСПатх:

стринг(//респонсе/генериц[@објецтнаме="{#СИП_ПЕЕР_ОБЕЈЕЦТНАМЕ}"]/@статус)

За други елемент користио сам ЈаваСцрипт за раздвајање Време одзива из равноправног статуса, пошто се чувају заједно:

if(value.substring(0,2) == 'OK'){
	return value.match(/(d+)/gm);
}
else {
	return -1;
}

Закључак

Готово решење може бити сложено и није одмах јасно. Повећава флексибилност и преносивост између различитих система

Срећна и лака интеграција свима! Шаблон и упутства за подешавање ГитХуб.

Извор: ввв.хабр.цом

Додај коментар