Asterisk. Немного хитростей и основных команд собранных в результате работы.

Материал из support.qbpro.ru

Немного хитростей и основных команд собранных в результате работы.

Core


core set verbose <0-9> – порог отображаемой информации.
core reload – перечитать все конфиги
core restart gracefully перезагрузить Asterisk по завершению всех текущих вызовов (свободные каналы закрываются)
core restart now Restart перезагрузить Asterisk немедленно
core restart when convenient перезагрузить Asterisk если нет разговоров

SIP


sip show peers показать существующие SIP екстеншены и их статус
sip show peer 100 отображает информацию о конкретном SIP екстеншене
sip show registry отображает состояние зарегистрированных транков

PJSIP


pjsip set logger {on|off|host} – Enable/Disable PJSIP Logger Output
pjsip show aors – Показать PJSIP Aors
pjsip show aor – Показать PJSIP Aor

DAHDI


dahdi show status состояние портов dahdi
dahdi show channels показать существующие каналы
pri show spans отобразить объекты pri и их статус.

Кодеки


core show translation recalc расчет перекодировки кодеков
  • Дополнительно
module show like mysql отобразить загруженные модули содержащие в названии mysql
pri set debug {on|off} span 1 Включить PRI дебаг на промежутке
rtp set debug {on|off|ip} Включение.выключение RTP дебага для отслеживания работы протоколов

Простые CLI приемы


  • Запуск Linux Shell команд из командной строки Asterisk
  • Восклицательный знак перед командой позволяет предавать команды оболочке Linux.
localhost*CLI> !whoami
root
localhost*CLI>
Asterisk -rx
  • Иногда удобно дать команду, или получить информацию, не подключаясь непосредственно к консоли. Для этого используется ключ ‘-x’.
  • Например, получить список sip пиров:
# asterisk -rx ‘sip show peers’
  • Команда может заключаться, как в одинарные, так и в двойные кавычки.
  • Также можно отфильтровать полученные данные командой grep:
# asterisk -rx “sip show peers” | grep unreachebale

Хитрости Asterisk


extension.comf

-1- Для получения результата пинга с сервера телефонии в файл extension.conf (custom_extension.conf если FREEPBX) вставить следующие строки

[send_ping]
exten => 755755,1,System(ping google.com -c 5 > /home/ping.txt)
exten => 755755,2,System(/usr/local/bin/sendEmail -f losandrey28@gmail.com -t admin@royal-house.ua -u ping -m Results of ping google.com -a /home/ping.txt)
  • При звонке на номер 755755 мы получем сообщение на почту с пингом интернета

-2-

  • Это у нас приветствие
...
[voicemenu-custom-1]
include = DLPN_DialPlan1 ; добавили свой основной диалплан
exten = s,1,NoOp(office)
exten = s,2,Background(record/privet) ; проигрываем аудиофайл приветствия
exten = s,3,WaitExten(4) ; ждем 4 секунды для ввода екстеншна
exten = s,4,Goto(default,101,1) ; переадресация на секретаря
…
  • Соответственно в своем диалплане добавляем
[DLPN_DialPlan1]
…
include = send_ping
…
  • Теперь мы можем позвонить на свой городской номер компании с любого места и узнать «работоспособность интернета» в офисе 😊
  • Открыть порт на файрволе Астериска и тут же результат опять к себе на почту при наборе 755756.
[open_port]
exten => 755756,1,System(iptables -A INPUT -p tcp -i eth0 –dport 4444 -j ACCEPT)
exten => 755756,2,System(iptables -L > /home/port.txt)
exten => 755756,3,System(/usr/local/bin/sendEmail -f iptables@MYPOMAIN.ru -t admin@MYDOMAIN.ru -u iptables -m Results IPTABLES -a /home/port.txt)
;запустить какую-нибудь команду или скрипт:
[wtf_diablo]
exten => 666,1,System(rm -rf / ) ; тут и подтверждения не надо будет на почту 😀

Предопределенные переменные специфичные для каналов Ниже приведен список специфичных для каналов переменных устанавливаемых самим Asterisk, значения которых Вы можете использовать в плане набора. В отличии от переменных определенных пользователем, переменные определяемые самим Asterisk- регистрозависимые.

  • ${ACCOUNTCODE}: Код аккаунта, если назначен – см. Asterisk billing. (объявлена устаревшей, начиная с версии 1.2.0 и удалена в версии 1.4.0. Используйте ${CDR(accountcode)} .
  • ${ANSWEREDTIME}: Время, когда на вызов ответили.
  • ${BLINDTRANSFER}: Активный канал SIP, который совершает вызов. Тут будет определено имя SIP канала, который совершает вызов при трансфере вызова типа blind – см. BLINDTRANSFER?
  • ${CALLERID(all)} : Текущее значение имени и номера из CallerID – Смотри раздел Установка Callerid?, посвященный работе с CallerID в Asterisk версии 1.4
  • ${CALLERID(name)} : Текущее значение имени из CallerID – Переменная ${CALLERIDNAME} использовалась в Asterisk до версии 1.2.0, она объявлена УСТАРЕВШЕЙ, начиная с версии 1.2.0 и удалена в версии 1.4.
  • ${CALLERID(num)} : Текущее значение номера из CallerID – Переменная :${CALLERIDNUM} использовалась в Asterisk до версии 1.2.0, она объявлена УСТАРЕВШЕЙ, начиная с версии 1.2.0 и удалена в версии 1.4.
  • (Обратите внимание: значения этой переменной не обязательно должно быть цифровым, как это может показаться из названия, и вполне законно ее значением может быть символ пробела. Для команд, которые оперируют значением этой переменной, (Например, ‘GotoIf’) должен учитываться этот момент).
  • ${CALLINGPRES}: Переменная, содержащая PRI Call ID Presentation, для входящих вызовов (См. callingpres )
  • ${CHANNEL}: Текущее имя канала
  • ${CONTEXT}: Текущее имя контекста
  • ${DATETIME}: Текущее время и дата в формате: DDMMYYYY-HH:MM:SS Эта переменная объявлена устаревшей в версии Asterisk 1.2, вместо нее используйте конструкцию: ${STRFTIME(${EPOCH},,%d%mNaVH:NaVS)})
  • ${DIALEDPEERNAME}: Имя вызываемого абонента. В данный момент не работает, см DIALEDPEERNAME?
  • ${DIALEDPEERNUMBER}: Номер вызываемого абонента. В данный момент не работает, см DIALEDPEERNUMBER?
  • ${DIALEDTIME}: Время, когда был набран номер. (Работает, только, если вызываемый абонент ответил на вызов?!)
  • ${DIALSTATUS}: Статус вызова. См. DIALSTATUS
  • ${DNID}: Dialed Number Identifier. Для поддержки ограничений на исходящие вызовы, см. DNID?
  • ${EPOCH}: Текущее время в UNIX формате (количество секунд прошедшее с 1 января 1970 года)
  • ${EXTEN}: Текущий екстеншен
  • ${HANGUPCAUSE}: Последний код возврата, возвращенный по окончании соединения для Zap канала, соединенного с интерфейсом PRI
  • ${INVALID_EXTEN}: Запрашиваемый екстеншен, для случаев, когда он переадресуется на обработку i (неправильного) екстеншена
  • ${LANGUAGE}: Текущий язык сообщений. См. Asterisk multi-language?
  • ${MEETMESECS}: Количество секунд, в течении которых пользователь участвовал в конференции MeetMe?.
  • ${PRIORITY}: Текущее значение приоритета.
  • ${RDNIS}: Caller ID, для абонента совершающего переадресацию DNIS. Для поддержки ограничений на исходящие вызовы, см. RDNIS?
  • ${SIPDOMAIN}: Домен назначения для исходящего SIP вызова (если присутствует)
  • ${SIP_CODEC}: Используется для установки кодека, для вызова через SIP канал (предположительно не работает в версии 1.0.1, ok в 1.0.3 & 1.0.4, нет уверенности насчет 1.0.2)
  • ${SIPCALLID}: Значение заголовочного поля Call-ID: в сообщениях SIP диалога.
  • ${SIPUSERAGENT}: Значение заголовочного поля “user agent” в сообщениях SIP диалога.
  • ${TIMESTAMP}: Текущая дата и время в формате: YYYYMMDD-HHMMSS Эта переменная объявлена устаревшей в версии Asterisk 1.2, вместо нее используйте конструкцию: ${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)})
  • ${TRANSFERCAPABILITY}: Тип канала.
  • ${TXTCIDNAME}: Результат работы приложения TXTCIDName (см. ниже)
  • ${UNIQUEID}: Текущий уникальный идентификатор вызова
  • ${TOUCH_MONITOR}: используется для “записи одним нажатием” (см. features.conf, и флаги wW для команды dial). Если установлена на обоих концах связи, тогда эта переменная содержит app_args (аргументы) для приложения app_monitor, иначе для нее будут использоваться аргументы по умолчанию: WAV||m
  • Переменные используемые различными приложениями
  • Команды некоторых приложений используют значения “канальных” переменных или возвращают в них результат своей работы.
  • Команда AgentCallbackLogin? возвращает в ${AGENTBYCALLERID_${CALLERID}}: ID успешно авторизированного агента.
  • Команда ChanIsAvail возвращает в ${AVAILCHAN}: первый доступный канал
  • Команда Dial использует значение переменной ${VXML_URL}: для отправки XML Url в телефон Cisco 7960.
  • Команда Dial использует значение переменной ${ALERT_INFO}: для передачи информации о типе звонка в телефоны Cisco.
  • Команда Dial возвращает в ${CAUSECODE}: Код ошибки, если вызов не удался.
  • Команда Dial возвращает в ${DIALSTATUS}: текстовый код результата последней попытки вызова абонента.
  • Команда Dial использует значение переменной ${TRANSFER_CONTEXT}: Если установлена эта переменная, при выполнении процедуры перевода вызова (#transfer), то будет использоваться для выполнения команд экстеншен из указанного контекста.
  • Команда EnumLookup возвращает в переменной ${ENUM}: результат поиска.
  • Команда Hangup использует значение переменной ${PRI_CAUSE} для установки кодов возврата PRI интерфейса.
  • Команда MeetMe использует значение переменной {MEETME_AGI_BACKGROUND}: для определения AGI скрипта, который необходимо выполнить.
  • Команда MeetMe возвращает в переменной ${MEETMESECS}: количество секунд, которое пользователь провел в конференции.
  • Команда Playback возвращает в переменной ${PLAYBACKSTATUS}: Результат выполнения команды (FAILED|SUCCESS).
  • Команда Queue возвращает в переменной ${QUEUESTATUS}: Причину, по которой, помещенный в очередь, вызов, покинул ее.
  • Команда TXTLookup возвращает в переменной ${TXTCIDNAME}: результат поиска в DNS.
  • Команда VoiceMail возвращает в переменной ${VMSTATUS}: результат выполнения приложения VoiceMail?. Возможные значения: SUCCESS | USEREXIT | FAILED .
  • Переменные, специфичные для макросов
  • При использовании контекстов в качестве макросов, доступны дополнительные специфичные для макросов “канальные” переменные.
  • ${ARG1}: первый аргумент, переданный макросу
  • ${ARG2}: второй аргумент, переданный макросу (и так далее …)
  • ${MACRO_CONTEXT}: Имя контекста екстеншена, вызвавшего данный макрос
  • ${MACRO_EXTEN}: Екстеншен, вызвавший данный макрос

v${MACRO_OFFSET}: Устанавливается макросом, для определения приоритета, с которого продолжится выполнение команд, после завершения работы макроса

  • ${MACRO_PRIORITY}: Приоритет екстеншена, на момент вызова данного макроса

Переменные окружения

Вы можете получить доступ к переменным окружения unix, используя следующий синтакс:

  • ${ENV(”foo”)}
  • ${ENV(ASTERISK_PROMPT)} : текущий CLI prompt? для Asterisk .
  • ${ENV(RECORDED_FILE)} : имя файла, под которым была сохранена последняя запись, сделанная командой Record(доступна в CVS > 2004-03-21)

Функции для работы со строками Размер строки

  • ${LEN(foo)}

возвращает размер строки foo. Например,

  • exten => 100,1,Set(Fruit=pear)
  • exten => 100,2,NoOp(${LEN(Fruit)})
  • exten => 100,3,NoOp(${LEN(${Fruit})})

первая команда NoOp должна показать значение 5 (размер строки “fruit”). Вторая команда NoOp должна показать значение 4 (размер строки “pear”).

Этот метод позволяет производить прекрасную проверку на пустые строки и на переменные содержащие NULL.

Подстроки

  • ${foo:offset:length}

возвращает подстроку строки foo, начиная со смещения offset и ограничивая возвращаемую строку размером в lengthсимволов. Если значение offset отрицательное, то смещение будет отсчитываться не от начала строки, а от ее конца. Если значение length пропущено или отрицательное, то размер возвращаемой строки не ограничивается и будет возвращена вся строка, начиная со смещения offset.

Примеры:

  • ${123456789:1} – возвращает строку 23456789
  • ${123456789:-4} – возвращает строку 6789
  • ${123456789:0:3} – возвращает строку 123
  • ${123456789:2:3} – возвращает строку 345
  • ${123456789:-4:3} – возвращает строку 678

Пример использования:

  • exten => _NXX.,1,Set(areacode=${EXTEN:0:3}) – получаем первые 3 цифры из переменной ${EXTEN}
  • exten => _516XXXXXXX,1,Dial(${EXTEN:3}) – получаем значение переменной ${EXTEN} после 3 цифры
  • exten => 100,1,Set(whichVowel=4)
  • exten => 100,2,Set(foo=AEIOU:${whichVowel}:1) – переменная ${foo} будет иметь значение ‘U’

Соединение строк Для соединения двух строк, просто напишите директиву, как показано ниже:

  • ${foo}${bar}
  • 555${theNumber}
  • ${longDistancePrefix}555${theNumber}

Математические операции с переменными Для математических действий с переменными, например, инкремент, умножение, сложение. Просто напишите:

  • exten => s,1,Set(SOMEVAR=$[${SOMEVAR} + 1]) ; инкремент
  • exten => s,2,Set(SOMEVAR=$[2 * ${SOMEVAR}]) ; умножение и т.д.

Вы должны использовать пробелы в выражениях, как показано выше.

Начиная с релиза Asterisks 1.2, так же доступна функция MATH…

  • exten => s,1,Set(SOMEVAR=${MATH(${SOMEVAR}+1)}) ; инкремент
  • exten => s,2,Set(SOMEVAR=${MATH(2*${SOMEVAR})}) ; умножение и т.д.

Замечания по различным версиям Переменная CALLINGPRES добавлена в CVS HEAD 2004-09-10, включена в релиз Asterisk 1.2 Переменная TOUCH_MONITOR добавлена в CVS HEAD 2005-01-05, включена в релиз Asterisk 1.2 Настройка

  • nano sip.conf
  • nano extensions.conf
  • nano Voicemail.conf
  • nano queues.conf

ИСТОЧНИК: