среда, 7 мая 2014 г.

Команды Goto и GotoIf в диалплане

Goto
Назначение
Переход на указанный приоритет, екстеншен или контекст

Описание
Goto([[context|]extension|]priority)

Устанавливает текущей приоритет выполнения команды в заданное значение, дополнительно можно указать екстеншен и контекст для совершения перехода. Специальное имя екстеншена BYEXTENSION используется в тех случаях, когда Вы хотите совершить переход с использованием текущего имени екстеншена, в другой контекст. Обратите внимание, что можно опустить необязательные параметры команды только в КОНЦЕ списка аргументов, нельзя опустить необязательный аргумент, идущий до или между заданными параметрами.

Варианты использования:
Goto(context,extension,priority)
Goto(extension,priority)
Goto(priority)

Примеры:
exten => 1,1,Goto(submenu,s,1) ; переход в контекст "submenu", на екстеншен "s", к команде с приоритетом 1
exten => 600,4,Goto(s,6) ; переход в текущем контексте, к екстеншену "s", к команде с приоритетом 6

exten => s,1,Dial(${ARG2},20,r)
exten => s,2,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,Voicemail(u${ARG1})
exten => s-CHANUNAVAIL,1,Voicemail(b${ARG1})
exten => s-BUSY,1,Voicemail(b${ARG1})
exten => _s-.,1,Voicemail(u${ARG1})
Команда GotoIf()

Назначение
Переход по условию

GotoIf
Описание
GotoIf(condition?label1[:label2])

Переход к команде label1, если условие condition истина, или выполнение следующей, по приоритету, команды (или, если определено, переход к команде label2) если условие condition ложно, или:

GotoIf(condition?[label1]:label2)

Выполнение следующей, по приоритету, команды (или команды label1, если определено) если условие condition истина, или переход к команде label2, если условие condition ложно.

Параметры label1 или label2 могут быть опущены (в этом случае, ветвление возможно только по одному из условий). Отсутствие обоих точек перехода не допускается.

Условие condition - это текстовая строка. Если строка пустая или содержит "0", то условие будет считаться ложью. Если она содержит что-то другое, то условие будет истиной. Это сделано для совместимости с механизмом регулярных выражений, используемых в Asterisk.

Метка перехода задается в виде '[[контекст,]екстеншен,]приоритет. Итак, для нее мы можем задать следующие комбинации: (a) только приоритет, (b) екстеншен и приоритет, или (c) контекст, екстеншен и приоритет. Этот формат такой же, как и формат аргумента команды Goto.

Пример 1
  exten => 206,1,GotoIf($["${CALLERIDNUM}" = "303"]?3:2)
  exten => 206,2,GotoIf($["${CALLERIDNUM}" = "304"]?5:7)
  exten => 206,3,Dial(${SPHONE1},15,rt)
  exten => 206,4,Hangup
  exten => 206,5,Dial(${PHONE2},15,rt)
  exten => 206,6,Hangup
  exten => 206,7,MusicOnHold(default)

Пример 2
 ; Надо определить, являются ли первые три символа, полученного значения в переменной
; ${ENUM}, значениями SIP или IAX. Если нет, игнорируем эту переменную и переходим к
; приоритету 4, где осуществляем стандартный набор номера
 exten => _011X.,2,GotoIf($[$["${ENUM:0:3}" = "SIP"] | $["${ENUM:0:3}" = "IAX"]]?3:4)



Пример 3
  ; Этот пример проверяет на пустое значение callerID или на номер 800 серии.
  ; Вызывающим абонентам с номерами на 800 (обычно "telemarketers") или
  ; те, у которых не представлено caller ID, будет предложено нажать 1 для разговора.
  exten => s,1,NoOp(${CALLERID}) ; просто смотрим на callerID
  ; проверяем callerID. Если не задан, предлагаем абоненту нажать 1.
  exten => s,2,GotoIf($["${CALLERIDNUM}" = ""]?s|1000)
  ; Если номер начинается на 800, предлагаем абоненту нажать 1.
  exten => s,3,GotoIf($["${CALLERIDNUM:0:3}" = "877"]?s|1000)
  exten => s,4,GotoIf($["${CALLERIDNUM:0:3}" = "800"]?s|1000)
  ; OK, тут у нас нормальный callerID и точно не номер из 800 серии.
  ; Теперь вызываем нужный нам телефон:
  exten => s,5,Dial(SIP/604&SIP/602,25,tr)

  exten => s,1000,Background(press1tospeaktome)

взято с http://asterisk.ru/

Комментариев нет:

Отправить комментарий