Существует три типа переменных, которые мы можем использовать в нашем диалплане: глобальные переменные, переменные канала и переменные среды.
Как следует из их названия, глобальные переменные видны всем каналам в любое время. Глобальные переменные полезны тем, что их можно использовать в любом месте диалплана для повышения читаемости и управляемости. Предположим, что у вас есть большой диалплан и несколько десяток ссылок на канал SIP/myprovider1
. Теперь представьте, что вы подключили еще одного провайдера и теперь и должны теперь пройтись по диалплану и изменить все эти ссылки на SIP/myprovider2
.
Задача решится быстрее и с меньшей вероятностью где-то опечататься, если на этапе создания диалплана вы определили этот канал в глобальной переменной файла extensions.conf.
...
[globals]
MainProvider=SIP/myprovider1
ReserveProvider=SIP/myprovider2
...
[outgoing]
exten => _8X.,1,Dial(${MainProvider}/${EXTEN})
Переменная канала - это переменная, связанная только с определенным вызовом. В отличие от глобальных переменных, переменные канала определяются только на время текущего вызова и доступны только для каналов, участвующих в этом вызове. Существует множество предопределенных переменных канала, доступных для использования в диалплане.
Пример - переменная CallerID
:
exten => 000,1,NoOp(Testing CALLERID)
same => n,NoOp(all ${CALLERID(all)})
same => n,NoOp(name ${CALLERID(name)})
same => n,NoOp(num ${CALLERID(num)})
same => n,NoOp(ANI ${CALLERID(ANI)})
same => n,NoOp(DNID ${CALLERID(DNID)})
same => n,NoOp(RDNIS ${CALLERID(RDNIS)})
same => n,Playback(beep)
same => n,Hangup()
Переменные среды - это способ доступа к переменным среды Unix из Asterisk. На них ссылаются с помощью функции диалплана ENV(). Синтаксис выглядит как ${ENV(var)}
, где var - переменная среды Linux, на которую вы хотите ссылаться. Переменные среды обычно не используются в диалплане Asterisk, но они доступны в случае необходимости.