Използване на променливи в Asterisk

Asterisk може да използва както глобални променливи, така и специфични за канала променливи, които могат да се използват като аргументи на команди в плана за набиране. Променливите, използвани в плана за набиране (extensions.conf), използват следния синтаксис:

къдетоfooе името на променливата. Името на променливата може да бъде буквено-цифров низ, който трябва да започва с буква. Дефинираните от потребителя променливи не са чувствителни към главни и малки букви $ и $ се отнасят за една и съща променлива. Но променливите, които са дефинирани от самия Asterisk, са чувствителни към главни и малки букви, променливата $ ще работи, но $ няма.

Има три вида променливи: глобални, специфични за канала променливи и променливи на средата.

  • ПроменливитеGlobalмогат да бъдат дефинирани или в секцията [globals] на конфигурационния файл extensions.conf, или чрез използване на командата SetGlobalVar в плана за набиране. След като променливата е дефинирана, тя може да се използва за всеки канал по всяко време.
  • Специфичните за канала променливисе задават с помощта на командата Set (команда SetVar е остаряла). Всеки канал използва изолирано пространство за имена на променливи, следователно за различни повиквания няма да има сблъсъци в стойностите на променлива със същото име и променливата ще бъде изчистена автоматично, когато повикването на който и да е канал приключи.
  • Променливите на средатаосигуряват достъп от Asterisk до променливите на средата на unix. Списък с тях можете да намерите под тази страница.
Ако дефинирате променлива за всеки канал със същото име като съществуваща глобална променлива (запомнете: дефинирани от потребителя променливибез значение за малки и главни букви), тогава като се позовавате на това име на променлива в командата, ще получите стойността, която сте дефинирали за тази променлива "канал" (не стойността на глобалната променлива). Например, вижте сами какво се случва, ако направим следното в контекста на "FooTest" с едно разширение 100:

(Забележка: използването на командата NoOp ще ни помогне да следим нашите действия и стойности на променливи.) Ако направите повикване до разширение 100 в контекста на FooTest и имате конзолата Asterisk пред вас, която показва подробна информация за случващото се, ще видите нещо като следното:

— Изпълнение на SetGlobalVar("Zap/1-1", "FOO=5") в нов стек — Задаване на глобална променлива 'FOO' на '5' — Изпълнение на NoOp("Zap/1-1", "5") в нов стек — Изпълнение на NoOp("Zap/1-1", "5") в нов стек — Изпълнение на Set("Zap/1-1", "fo o=8") в нов стек — Изпълнение на NoOp("Zap/1-1", "8") в нов стек — Изпълнение на NoOp("Zap/1-1", "8") в нов стек

Виждаме, че след изпълнение на командата SetGlobalVar, променливите $ и $ връщат стойността на глобалната променлива със стойност 5. След изпълнение на командата Set, глобалната променлива "foo" се замества от променливата на канала "foo"; И двете променливи $ и $ (всъщност една и съща променлива) имат стойност 8. Стойността на глобалната променлива обаче остава непроменена на 5 и използването й в други канали ще доведе до стойността на глобалната променлива $, която все още е равна на пет.

Наследяване на променливи, специфични за канала

Ако добавим един знак _ към името на променливата пред командата Set, тогава тази променлива ще бъде наследена от канала, който ще бъде създаден от основния канал, например, когато използвате командатаDial(Local/. ); . Веднъж наследена, тази променлива няма да бъде наследена повече. Ако добавим два знака _ пред името на променливата, променливата ще бъде наследена неограничен брой пъти.(Работи само за CVS HEAD, не се поддържа в Asterisk 1.0.9.)

Имайте предвид, че ако искаме да получим стойността на променлива, няма нужда от водещи долни черти, когато се позоваваме на нейното име.

[TestInherit] exten => 100,1,Set( __ FOO=5) exten => 100,2,Dial(Local/test@CheckInherit) exten => тест,1,NoOp($)

В резултат на това променливата FOO ще бъде наследена. Без долна черта, тази променлива ще бъде недефинирана в нова тръба от тип local.

като резултат получаваме:

— Изпълнение на Set("SIP/oberon-365e", "FEE=fee") в нов стек — Изпълнение на Set("SIP/oberon-365e", "_FIE=fie") в нов стек — Изпълнение на Set("SIP/oberon-365e", "__FUM=fum") в нов стек — Изпълнение на Dial("SIP/oberon-3) 65e", "Local/ 105") в нов стек — Извикан 105 — Изпълнение на NoOp("Local/105@default-7263,2", "") в нов стек — Изпълнение на NoOp("Local/105@default-7263,2", "") в нов стек — Изпълнение на NoOp("Local/105@defa ult-7263,2", "fum") в нов стек — Изпълнение на Dial("Local/105@default-7263,2", "Local/106") в нов стек — Извикано 106 — Изпълнение на NoOp("Local/106@default-49be,2", "") в нов стек — Изпълнение на NoOp("Local/10) 6@default-49be,2", "") в нов стек — Изпълнение на NoOp ("Local/106@default-49be,2", "fum") в нов стек

(Този пример няма да работи правилно във версии преди пускането на Asterisk 1.2.)

Специфични за канала предварително дефинирани променливи

Променливи, използвани от различни приложения

Макро-специфични променливи

Променливи на средата

Можете да получите достъп до променливите на средата на unix, като използвате следния синтаксис:

  • $ : текущ CLI подкана? за Asterisk .
  • $ : име на файл, под който е записан последният запис, направен от командата Record (налично в CVS > 2004-03-21)

Функции за низове

Размер на линията

връща размера на низаfoo. Например,

първата команда NoOp трябва да показва стойността 5 (размера на низа "плод"). Втората команда NoOp трябва да показва стойност 4 (размера на низа "круша").

Този метод ви позволява да извършвате фина проверка за празни низове и за променливи, съдържащи NULL.

връща подниз на низаfoo, започвайки от отместванеотместванеи ограничавайки върнатия низ додължиназнаци.

  • Ако стойността наoffsetе отрицателна, тогава отместването ще се брои не от началото на реда, а от неговия край.
  • Акоlengthе пропуснат или отрицателен, тогава размерът на върнатия низ е неограничен и ще бъде върнат целият низ, започвайки от отместванеoffset.
Примери:

exten=> _NXX.,1,Set(areacode=$) - вземете първите 3 цифри от променлива $ exten => _516XXXXXXX,1,Dial($) - получава стойността на променливата $ след 3 цифри exten => 100,1,Set(whichVowel=4) exten => 100,2,Set(foo=AEIOU:$:1) - променлива $ ще има стойност 'U'

Съединяване на низове

За да свържете два низа, просто напишете директива, както е показано по-долу:

Математически операции с променливи

За математически операции с променливи, например нарастване, умножение, събиране. Просто напишете:

exten=> s,1,Set(SOMEVAR=$[$ + 1]) ; нарастване exten=> s,2,Set(SOMEVAR=$[2 * $]) ; умножение и др.Трябва да използвате интервали в изразите, както е показано по-горе.

Започвайки с пускането на Asterisks 1.2, функцията MATH също е достъпна.