Quantcast
Channel: IP АТС Asterisk
Viewing all 1041 articles
Browse latest View live

function 'QUEUE_WAITING_COUNT'

$
0
0

Запись разговоров

$
0
0

function 'BLACKLIST'

$
0
0

function 'BLACKLIST'

Функция Asterisk: сверяет callerid с черным списком в базе данных Astersik.

Check if the callerid is on the blacklist.

Описание

Использует astdbдля проверки не содержит ли family 'blacklist' CallerID вызывающего абонента.
Возвращает '1' или '0', соответственно.

Uses astdb to check if the Caller*ID is in family 'blacklist'. Returns '1' or '0'.

Синтаксис

BLACKLIST()

Пример

Контекст для проверки CallerID в черном списке, где:

  • 1000 - вызываемый абонент.
  • 6662666 - CallerID в черном списке.

exten => _1000,1,GotoIf($[${BLACKLIST()}]?black,1)
   same => n,Dial(PJSIP/1000,,tr)

exten => black,1,Playback(privacy-you-are-blacklisted)
   same => n,Hangup()

Добавить номер в черный список, при помощи Asterisk CLI:

 asterisk -rx "database put blacklist 6662666 1"

Посмотреть записи с family blacklist, при помощи Asterisk CLI:

asterisk -rx 'database show' | grep blacklist
/blacklist/6662666                                   : 1

Посмотреть записи при помощи sqlite cli:

sqlite> select *  from astdb where key like '%blacklist%';
/blacklist/6662666|1

Смотри также:
function 'DB'

Функции Asterisk

function 'ARRAY'

$
0
0

function 'ARRAY'

Функция Asterisk ARRAY, позволяет назначить множество переменных за раз.

Описание

Списку разделенных запятыми переменных присваиваются значения в порядке перечисления.

Пример:

 Set(ARRAY(var1,var2)=1,2) 

назначит var1 = 1 и var2 = 2

СинтаксисARRAY(var1[,var2[,…][,varN]])

См. пример в описании QUEUE_VARIABLES

Функции Asterisk

function 'CALLERID'

$
0
0

function 'CALLERID'

Функция Asterisk: Получает или устанавливает CallerID канала.
Позволяет использовать полученное callerid или установить собственное.
Существуют следующие <name-charset>:

  • unknown - Unknown
  • iso8859-1 - ISO8859-1
  • withdrawn - Withdrawn
  • iso8859-2 - ISO8859-2
  • iso8859-3 - ISO8859-3
  • iso8859-4 - ISO8859-4
  • iso8859-5 - ISO8859-5
  • iso8859-7 - ISO8859-7
  • bmp - ISO10646 Bmp String
  • utf8 - ISO10646 UTF-8 String

синтаксис
CALLERID(datatype[,CID])

Аргументы

datatype - доступные типы данных:

  • all
  • name
  • name-valid
  • name-charset
  • name-pres
  • num
  • num-valid
  • num-plan
  • num-pres
  • subaddr
  • subaddr-valid
  • subaddr-type
  • subaddr-odd
  • tag
  • priv-all
  • priv-name
  • priv-name-valid
  • priv-name-charset
  • priv-name-pres
  • priv-num
  • priv-num-valid
  • priv-num-plan
  • priv-num-pres
  • priv-subaddr
  • priv-subaddr-valid
  • priv-subaddr-type
  • priv-subaddr-odd
  • priv-tag
  • ANI-all
  • ANI-name
  • ANI-name-valid
  • ANI-name-charset
  • ANI-name-pres
  • ANI-num
  • ANI-num-valid
  • ANI-num-plan
  • ANI-num-pres
  • ANI-tag
  • RDNIS
  • DNID
  • dnid-num-plan
  • dnid-subaddr
  • dnid-subaddr-valid
  • dnid-subaddr-type
  • dnid-subaddr-odd

CID - Дополнительный параметр.

Пример

Задать CallerID номер

  exten => s,1,Set(CALLERID(num)=812991138)

Задать CallerID имя

  exten => s,1,set(CALLERID(name)=Звездочкин)

получить CallerID

  exten => s,1,Set(_callidvar=${CALLERID(num)}

Функции Asterisk

Использование переменных в плане набора Asterisk

$
0
0

Использование переменных в плане набора Asterisk

В Asterisk могут использоваться как глобальные переменные, так и переменные специфичные для каждого канала, которые могут быть использованы как аргументы для команд в плане набора. Для переменных, используемых в плане набора (extensions.conf) используется следующий синтаксис:

${foo}

где foo - имя переменной. Именем переменной может быть цифробуквенная строка, которая должна начинаться с буквы. Переменные, определенные пользователями, не являются регистрозависимыми ${FOO} и ${Foo} ссылаются на одну и ту же переменную. Но переменные, которые определяются самим Asterisk, являются регистрозависимыми переменная ${EXTEN}будет работать, но ${exten} — не будет.

Существует три типа переменных: глобальные, переменные специфичные для каждого канала и переменные окружения.

  • Глобальные переменные могут быть определены или в секции [globals] файла конфигурации extensions.conf или используя команду SetGlobalVar в плане набора. Если переменная однажды определена, тогда она может быть использована для любого канала в любое время.
  • Переменные специфичные для каждого канала задаются с помощью команды Set (команда SetVar устарела). Каждый канал использует изолированное пространство для имен переменных, следовательно, для различных вызовов не будет коллизий в значениях переменной с одним и тем же именем и переменная будет автоматически очищена, когда вызов по какому-либо каналу будет завершен.
  • Переменные окружения обеспечивают доступ из Asterisk к переменным окружения unix. Их список можно найти ниже в данной странце.

Если Вы зададите переменную для какого-либо канала с аналогичным именем, как у существующей глобальной переменной (запомните: определенные пользователем переменные регистронезависимые) то, ссылаясь на это имя переменной в команде, Вы получите значение, которое Вы определили для этой «канальной» переменной (а не значение глобальной переменной). Например, посмотрите сами, что получится, если мы в контексте «FooTest» с одним экстеншеном 100, проделаем следующие действия:

[FooTest]
exten => 100,1,SetGlobalVar(FOO=5)
exten => 100,2,NoOp(${FOO})
exten => 100,3,NoOp(${foo})
exten => 100,4,Set(foo=8)
exten => 100,5,NoOp(${FOO})
exten => 100,6,NoOp(${foo})
(Замечание: использование команды NoOp поможет нам отследить наши действия и значения переменных.) Если вы произведете вызов на экстеншен 100 в контексте FooTest, и перед вами консоль Asterisk, которая отображает подробную информацию о происходящем, то Вы увидите приблизительно следующую информацию:
— Executing SetGlobalVar("Zap/1-1", "FOO=5") in new stack
— Setting global variable 'FOO' to '5'
— Executing NoOp("Zap/1-1", "5") in new stack
— Executing NoOp("Zap/1-1", "5") in new stack
— Executing Set("Zap/1-1", "foo=8") in new stack
— Executing NoOp("Zap/1-1", "8") in new stack
— Executing NoOp("Zap/1-1", "8") in new stack
Мы видим, что после выполнения команды SetGlobalVar, переменные ${FOO} и ${foo} возвращают значение глобальной переменной с присвоенным значением 5. После выполнения команды Set, глобальная переменная «foo» перекрывается канальной переменной «foo»; Обе переменные ${FOO} и ${foo} (на самом деле это одна и та же переменная) имеют значение 8. Тем не менее, значение глобальной переменной остается неизменным и равным 5, и при использовании ее в других каналах будет получено значение глобальной переменной ${foo}, которое по прежнему равно пяти.

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

Если мы в команде Set присоединим спереди к имени переменной одиночный символ _ , то в этом случае эта переменная будет унаследована каналом, который будет создан основным каналом, например, при использовании команды Dial(Local/…); . Однажды будучи наследована, эта переменная не будет далее унаследована. В случае, если мы присоединим спереди к имени переменной два символа _, переменная будет наследоваться неограниченное число раз. (Работает только для CVS HEAD, не поддерживается в Asterisk 1.0.9.)

Заметьте, что если нам нужно получить значение переменной, то при ссылке на ее имя нет необходимости в ведущих символах подчеркивания.

[TestInherit]
exten => 100,1,Set( __ FOO=5)
exten => 100,2,Dial(Local/test@CheckInherit)
exten => test,1,NoOp(${FOO})
Как результат, переменная FOO будет унаследована. Без символов подчеркивания, в новом канале типа local эта переменная будет не определена.

Пример

exten => 104,1,Set(FEE=${fee})
exten => 104,2,Set(_FIE=${fie})
exten => 104,3,Set(__FUM=${fum})
exten => 104,4,Dial(Local/105)

exten => 105,1,NoOp(${FEE})
exten => 105,2,NoOp(${FIE})
exten => 105,3,NoOp(${FUM})
exten => 105,4,Dial(Local/106)

exten => 106,1,NoOp(${FEE})
exten => 106,2,NoOp(${FIE})
exten => 106,3,NoOp(${FUM})
как результат получим:
— Executing Set("SIP/oberon-365e", "FEE=fee") in new stack
— Executing Set("SIP/oberon-365e", "_FIE=fie") in new stack
— Executing Set("SIP/oberon-365e", "__FUM=fum") in new stack
— Executing Dial("SIP/oberon-365e", "Local/105") in new stack
— Called 105
— Executing NoOp("Local/105@default-7263,2", "") in new stack
— Executing NoOp("Local/105@default-7263,2", "") in new stack
— Executing NoOp("Local/105@default-7263,2", "fum") in new stack
— Executing Dial("Local/105@default-7263,2", "Local/106") in new stack
— Called 106
— Executing NoOp("Local/106@default-49be,2", "") in new stack
— Executing NoOp("Local/106@default-49be,2", "") in new stack
— Executing NoOp("Local/106@default-49be,2", "fum") in new stack
(Этот пример не будет правильно работать в версиях до релиза Asterisk 1.2.)

Предопределенные переменные специфичные для каналов

Ниже приведен список специфичных для каналов переменных устанавливаемых самим 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}: Екстеншен, вызвавший данный макрос
  • ${MACRO_OFFSET}: Устанавливается макросом, для определения приоритета, с которого продолжится выполнение команд, после завершения работы макроса
  • ${MACRO_PRIORITY}: Приоритет екстеншена, на момент вызова данного макроса

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

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

${ENV(''foo'')}

${ENV(ASTERISK_PROMPT)} : текущий CLI prompt? для Asterisk .
${ENV(RECORDED_FILE)} : имя файла, под которым была сохранена последняя запись, 
сделанная командой Record 

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

Размер строки

${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})}) ; умножение и т.д.

Asterisk Dialplan - extensions.conf

Файлы конфигурации Asterisk

Настройка Asterisk

Asterisk-cdr-viewer

$
0
0

Asterisk-cdr-viewer

Отличное приложение, сменившее в FreePBX 2.10 устаревший asterisk-stat

Asterisk статистика звонков

установка

  • cd /var/www/html
  • tar -xzvf asterisk-cdr-viewer-*.tgz
  • cp asterisk-cdr-viewer/contrib/httpd/asterisk-cdr-viewer.conf /etc/httpd/conf.d/

asterisk-cdr-viewer.conf

Alias /acdr/ "/var/www/html/asterisk-cdr-viewer/"<Location "/acdr/">
        AuthName "Asterisk-CDR-Stat"
        AuthType Basic
        AuthUserFile /var/www/html/asterisk-cdr-viewer/.htpasswd
        AuthGroupFile /dev/null
        require valid-user</Location>
  cd /var/www/html/asterisk-cdr-viewer
  htpasswd -b .htpasswd user password
  • service restart httpd
  • change settings in /var/www/asterisk-cdr-viewer/include/config.inc.php

Asterisk CDR MySQL table

Создайте файл, например:

touch asteriskcdrdb.sql

И скопируйте структуру таблицы БД:

CREATE TABLE cdr (
   calldate datetime NOT NULL default '0000-00-00 00:00:00',
   clid varchar(80) NOT NULL default '',
   src varchar(80) NOT NULL default '',
   dst varchar(80) NOT NULL default '',
   dcontext varchar(80) NOT NULL default '',
   channel varchar(80) NOT NULL default '',
   dstchannel varchar(80) NOT NULL default '',
   lastapp varchar(80) NOT NULL default '',
   lastdata varchar(80) NOT NULL default '',
   duration int(11) NOT NULL default '0',
   billsec int(11) NOT NULL default '0',
   disposition varchar(45) NOT NULL default '',
   amaflags int(11) NOT NULL default '0',
   accountcode varchar(20) NOT NULL default '',
   uniqueid varchar(32) NOT NULL default '',
   userfield varchar(255) NOT NULL default '',
   did varchar(50) NOT NULL default '',
   recordingfile varchar(255) NOT NULL default '',
   KEY `calldate` (`calldate`),
   KEY `dst` (`dst`),
   KEY `accountcode` (`accountcode`),
   KEY `uniqueid` (`uniqueid`)
);
 mysqladmin create asteriskcdrdb
 mysql asteriskcdrdb < asteriskcdrdb.sql
 mysql> GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO db_asteriskuser@localhost  IDENTIFIED BY 'DB_PASSWORD';
 flush privileges;
 \q

Asterisk cdr_mysql

/etc/asterisk/cdr_mysql.conf

[global]
hostname=localhost
dbname=asteriskcdrdb
table=cdr
password=DB_PASSWORD
user=db_asteriskuser
;port=3306
;sock=/tmp/mysql.sock
;timezone=UTC ; Previously called usegmtime

localhost*CLI> module show like mysql
Module                         Description                              Use Count
cdr_mysql.so                   MySQL CDR Backend                        0
res_config_mysql.so            MySQL RealTime Configuration Driver      0
app_mysql.so                   Simple Mysql Interface                   0
3 modules loaded

настройка записи

To display the links to the recorded files:

    * change the following settings in configuration file ( config.inc.php ):
         1. $system_monitor_dir = '/var/spool/asterisk/monitor'; - is the directory where call recordings are stored
         2. $system_audio_format = 'wav'; - audio file format 
    * Use like this command to start recording ( in asterisk dialplan ):
    [macro-monitor]
    exten => s,1,Set(MONITOR_FILE=/var/spool/asterisk/monitor/${UNIQUEID})
    exten => s,n,MixMonitor(${MONITOR_FILE}.wav,b)
  select * from cdr ORDER BY calldate DESC LIMIT 5;

Модификация Asterisk-CDR-Viewer

Простейшая настройка

..viewer/inc/config.inc.php

 $system_column_name = 'recordingfile';
 $system_storage_format = 0;
 $system_monitor_dir = '/var/spool/asterisk/monitor/mp3';
Spoiler
диалплан

[from-om]
exten => _X.,1,GoSub(sub-monitor,s,1(${EXTEN}))
exten => _X.,n,Dial(PJSIP/${EXTEN}@sip_trunk,,)
[sub-monitor]
exten => s,1,Set(WAV=/var/spool/asterisk/monitor/${UNIQUEID})
exten => s,n,Set(MP3=/var/spool/asterisk/monitor/mp3/${UNIQUEID})
exten => s,n,Set(monopt=nice -n 19 /usr/local/bin/lame -b 32  --silent "${WAV}.wav"  "${MP3}.mp3" && rm -f "${WAV}.wav" && chmod o+r "${MP3}.mp3")
exten => s,n,Set(CDR(recordingfile)=${UNIQUEID}.mp3)
exten => s,n,Set(CDR(userfield)=${ARG1})
exten => s,n,MixMonitor(${WAV}.wav,b,${monopt})  
exten => s,n,return

директория /var/spool/asterisk/monitor/mp3 должна быть создана.

# which lame

/usr/local/bin/lame

How To

Asterisk: PauseQueueMember

$
0
0

Asterisk: PauseQueueMember

Приложение Asterisk: Поставить агента очереди на паузу (временно вывести из обслуживания очереди).

Описание

Не направлять вызовы из очереди статическому или динамическому агенту. Устанавливает паузу на указаном интерфейсе, в указанной очереди.
Если очередь не определена, устанавливает паузу для указанного интерфейса во всех очередях, которые он обслуживает.
Приложение не выполняется, если интерфейс агента не найден.
Следующие текстовын значения возвращаются в переменную ${PQMSTATUS} по выполнению:

  • PAUSED
  • NOTFOUND
пример:
 PauseQueueMember(,SIP/3000)
Синтаксис

PauseQueueMember([queuename],interface[,options[,reason]])

Аргументы
  • queuename - имя очереди
  • queuename - интерфейс агента
  • options - ?
  • reason - если назначено, дополнительная информация добавляется в лог очередии в события AMI.

Пример

exten => _[1234]02,1,Noop(agent pause)
   same => n,Set(queueN=q${EXTEN:0:1})
   same => n,PauseQueueMember(${queueN},SIP/${CALLERID(num)})
   same => n,PlayBack(ru/agent-loggedoff)
   SIP/4887 (ringinuse disabled) (dynamic) (paused) (Not in use) has taken no calls yet
См. также

Asterisk: RemoveQueueMember

$
0
0

Asterisk: RemoveQueueMember

Приложение Asterisk: Удаление динамического агента очереди

Описание

Пытается удалить интерфейс из обслуживание очереди. Если не существует- возвращает код ошибки. Устанавливает следующие значения переменной ${RQMSTATUS}по выполнению:

  • REMOVED - интерфейс удален
  • NOTINQUEUE - не обслуживает эту очередь
  • NOSUCHQUEUE - нет очереди
  • NOTDYNAMIC - интерфейс не динамический

Пример:

 RemoveQueueMember(techsupport,SIP/3000)

Пример2:

exten => _[1234]00,1,Noop(agent logged off)
   same => n,Set(queueN=q${EXTEN:0:1})
   same => n,RemoveQueueMember(${queueN},SIP/${CALLERID(num)})
   same => n,PlayBack(ru/agent-loggedoff)
Синтаксис

RemoveQueueMember(queuename[,interface])

См. также

Asterisk: Queue

$
0
0

Asterisk: Queue

Команда Asterisk постановки вызова в очередь

Описание

Приложение Asterisk Queue() вызывает указанную очередь, предварительно настроенную в queues.confили соответствующем модуле FreePBX
В дополнение к настройкам очереди используйте аргументы для определения дополнительных свойств очереди, таких как - продолжение выполнения диалплана по завершению вызова одной из сторон; перехода в другой контекст; назначения голосового приветствия; тайм-аут вызова и тд.

Приложение Queue() не отвечает на вызов автоматически (не открывает аудио канал).
Чтобы воспроизвести вызывающему абоненту голосовое приветствие и включить музыку на удержании (MOH) на время ожидания, перед ним должно быть выполнено какое-либо из приложений Answer, Progressили Ringing.

Приложение возвращает переменную ${QUEUESTATUS}с одним из ниже перечисленных значений:

  • TIMEOUT
  • FULL
  • JOINEMPTY
  • LEAVEEMPTY
  • JOINUNAVAIL
  • LEAVEUNAVAIL
  • CONTINUE

Также приложение Queue() возвращает в переменную ${MEMBERINTERFACE}с номером агента принявшего вызов и другие переменные. Установите для этого параметр setinterfacevar=yesв настройках очереди queues.conf.

Синтаксис

Queue(queuename[,options[,URL[,announceoverride[,timeout[,AGI[,macro[,gosub[,rule[,position]]]]]]]]])

Аргументы

options

  • C: Установить статус вызова «answered elsewhere» даже если вызов отвергнут.
  • c: Продолжить выполнение диалплана, если вызываемыйпервым положил трубку.
  • d: режим модема с минимальной задержкой.
  • F([[context^]exten^]priority): Если вызывающийабонент повесил трубку первым, продолжить обработку вызова для вызываемогоагента в указанном контексте. Любые переменные определенные для данного контекста должны начинаться с одинарной или двойной нижней черты ('_'), чтобы наследоваться в контексте назначения.
  • F: Отличает от предыдущей опции тем, что не переходит в другой контекст, если вызывающийабонент повесил трубку, но продолжает выполнение текущего контекста со следующего приоритета.

Примечание: При использовании данной опции из Macroили Gosubне будет возврата.(?)

  • h: Разрешить вызываемойстороне повесить трубку нажатием -'*'.
  • H: Разрешить вызывающейстороне повесить трубку нажатием -'*'.
  • n: Не предпринимать повторных попыток вызова агентов очереди по истечению таймаута и перейти к выполнению следующего приоритета в текущем контексте.
  • i: Игнорировать установки переадресации вызова, если таковые заданы на вызываемых екстеншенах агентов очереди.
  • I: Данная опция указывает Asterisk игнорировать любые запросы на обновление или перенаправление получаемые от вызываемых устройств.
  • r: Установить КПВ (гудки) вместо Музыки на Удержании для ожидающих в очереди. Периодические анонсы будут воспроизводится по прежнему, если заданы.
  • R: Установить КПВ (гудки) вместо Музыки на Удержании для ожидающих в очереди, если устройство действительно вызывается.
  • t: Разрешить вызываемомуабоненту переадресацию вызова при помощи кода, назначенного в features.conf.
  • T:Разрешить вызывающемуабоненту переадресацию вызова при помощи кода, назначенного в features.conf.
  • w: Разрешить вызываемомуабоненту записать разговор при помощи приложения Asterisk: Monitor.
  • W: Разрешить вызывающемуабоненту записать разговор при помощи приложения Asterisk: Monitor.
  • k: Разрешить вызываемойстороне припарковать вызов посылкой DTMFкода, назначенного в features.conf.
  • K: Разрешить вызывающейстороне припарковать вызов посылкой DTMFкода, назначенного в features.conf.
  • x: Разрешить вызываемомуабоненту записать разговор при помощи приложения Asterisk: MixMonitor
  • X: Разрешить вызывающемуабоненту записать разговор при помощи приложения Asterisk: MixMonitor

URL - Добавить значение Access-URL: в SIP Invite. Если вызываемое устройство поддерживает данную функцию, возможно вывести на дисплей телефона дополнительную информацию.

timeout - Завершить вызов приложения Queue() по истечению заданного в секундах таймаута. Данная опция превалирует над параметром <timeout> в настройках очереди queues.conf, если в настройках очереди задано timeoutpriority=app. Например, если timeout=30, но Queue(qname,,,,10), то вызов перейдет на следующий приоритет через 10 секунд.
Смотрите подробнее в queue timing options - queues.conf.

AGI - выполнить AGI скрипт, когда вызывающая при ответе оператора.

macro - Перейти в Macro-контекст при ответе оператора.

gosub - Перейти по Sub-маршруту при ответе оператора.

rule - Назначить специфические правила, вместо правил по умолчанию см. Asterisk queuerules.conf.

position - Попытаться поставить вызывающего абонента на указанную позицию в очереди. Например, если указано '1' на первую, а '3' на третью.

См. также

Команды диалплана Asterisk в алфавитном порядке

Asterisk app Macro

$
0
0

Asterisk app Macro

Приложение Asterisk Macro выполняет переход в специальный контекст, передавая специфические параметры и если приказано возвращается в исходный контекст.

Описание

При выполнении macroиспользуется контекст macro-<name>, только со стандартным расширением 's'.
В этом контексте исполняются все назначенные шаги и по окончании возвращаются в родительский контекст,
где продолжается выполнение диалплана.
Вызываемые расширение (extension), контекст и приоритет сохраняются в переменных:
${MACRO_EXTEN}, ${MACRO_CONTEXT} и ${MACRO_PRIORITY} соответственно. Аргументы становятся данными Macro-контекста.
Если произвести переход из Macro-контекста командой GoToв другой контекст,
Macro утратит контроль и передаст его назначенному в GoTo контексту.

If ${MACRO_OFFSET} is set at termination, Macro will attempt to continue at priority MACRO_OFFSET + N + 1 if such a step exists, and N + 1 otherwise.

WARNING!!!: Because of the way Macro is implemented (it executes the priorities contained within it via sub-engine), and a fixed per-thread memory stack allowance, macros are limited to 7 levels of nesting (macro calling macro calling macro, etc.); It may be possible that stack-intensive applications in deeply nested macros could cause asterisk to crash earlier than this limit. It is advised that if you need to deeply nest macro calls, that you use the Gosub application (now allows arguments like a Macro) with explict Return() calls instead. WARNING!!!: Use of the application 'WaitExten' within a macro will not function as expected. Please use the 'Read' application in order to read DTMF from a channel currently executing a macro.

Синтаксис

Macro(name[,arg1[,arg2[,…]]])

Аргументы

name - Macro-<name> имя контекста.

См также

Использование Макросов в Asterisk

Вам может потребоваться создать множество екстеншенов (расширений) очень похожих друг на друга. Чтобы упростить работу с диалпланом используются Макросы. Для создания макроса используется контекст имя которого начинается с «macro-» и далее уникальное имя макроса. Выполнение макроса начинается с ектеншена 's'. В макросах используются локальные переменные:

${MACRO_EXTEN} – Екстеншен вызываемый макросом ${MACRO_CONTEXT} – Контекст вызываемый макросом ${MACRO_PRIORITY} – активный приоритет вызываемый макросом ${MACRO_OFFSET} – если установлено вызывает смещение n + ${MACRO_OFFSET} ${ARGn} – аргумент 'n' в макросе.

[macro-oneline]
;
; Однолинейный телефон
;
; ${ARG1} – Телефон
;
exten => s,1,Dial(${ARG1},20)
exten => s,2,Voicemail(u${MACRO_EXTEN})
exten => s,3,Hangup
exten => s,102,Voicemail(b${MACRO_EXTEN})
exten => s,103,Hangup
[macro-twoline]
;
; Двухлинейный телефон
;
; ${ARG1} – Телефон (линия) 1
; ${ARG2} – Телефон (линия) 2
;
exten => s,1,Dial(${ARG1},20)
exten => s,2,Voicemail(u${MACRO_EXTEN})
exten => s,102,Dial(${ARG2},20)
exten => s,103,Voicemail(b${MACRO_EXTEN})

[default]
exten => 1000,1,Macro(oneline,DAHDI/1)
exten => 1001,1,Macro(oneline,SIP/1001)
exten => 1002,1,Macro(twoline,DAHDI/3,DAHDI/4)

Когда макросы [macro-oneline] и [macro-twoline] созданы, в контексте [default] надо написать только одну сроку для выполнения нескольких стандартных действий.

12/08/2014 16:51

FreeSWITCH CDR MySQL

$
0
0

FreeSWITCH CDR MySQL

Просмотр данных CDR FreeSWITCH при помощи веб интерфейса CDR-Viewer БД MySQL

Подготовим FreeSWITCH для работы с MySQL через ODBC

Предполагается, что сервер mysql ( mariadb) установлен.

 yum install -y mysql-connector-odbc unixODBC unixODBC-devel

Проверим odbcinst.ini

# Driver from the mysql-connector-odbc package
# Setup from the unixODBC package
[MySQL]
Description     = ODBC for MySQL
Driver          = /usr/lib/libmyodbc5.so
Setup           = /usr/lib/libodbcmyS.so
Driver64        = /usr/lib64/libmyodbc5.so
Setup64         = /usr/lib64/libodbcmyS.so
FileUsage       = 1

Заполним odbc.ini

[freeswitch]
Driver=MySQL
SERVER=localhost
PORT=3306
DATABASE=freeswitchcdr
USER=DB_USER
PASSWORD=DB_PASSWORD
Проверим подключение к MySQL

Создадим БД MySQL в формате Asterisk CDR

Создайте файл, например:

 touch freeswitchcdr.sql

И скопируйте в него структуру таблицы БД:

CREATE TABLE cdr (
   calldate datetime NOT NULL default '0000-00-00 00:00:00',
   clid varchar(80) NOT NULL default '',
   src varchar(80) NOT NULL default '',
   dst varchar(80) NOT NULL default '',
   dcontext varchar(80) NOT NULL default '',
   channel varchar(80) NOT NULL default '',
   dstchannel varchar(80) NOT NULL default '',
   lastapp varchar(80) NOT NULL default '',
   lastdata varchar(80) NOT NULL default '',
   duration int(11) NOT NULL default '0',
   billsec int(11) NOT NULL default '0',
   disposition varchar(45) NOT NULL default '',
   amaflags int(11) NOT NULL default '0',
   accountcode varchar(20) NOT NULL default '',
   uniqueid varchar(32) NOT NULL default '',
   userfield varchar(255) NOT NULL default '',
   did varchar(50) NOT NULL default '',
   recordingfile varchar(255) NOT NULL default '',
   KEY `calldate` (`calldate`),
   KEY `dst` (`dst`),
   KEY `accountcode` (`accountcode`),
   KEY `uniqueid` (`uniqueid`)
);
Создаем БД:freeswitchcdr
 mysqladmin create freeswitchcdr
Создаем таблицу:cdr
 mysql asteriskcdrdb < freeswitchcdr.sql
Задаем права на БД с параметрами определенными в odbc.ini

 mysql> GRANT ALL PRIVILEGES ON freeswitchcdr.* TO DB_USER@localhost  IDENTIFIED BY 'DB_PASSWORD';
 flush privileges;
 \q

Подготовим FreeSWITCH

Расскомментируйте строку event_handlers/mod_odbc_cdrв файле исходников FS ../freeswitch/modules.conf

и выполните make && make install.

По окончании компиляции скопируйте файл odbc_cdr.conf.xml из исходников в директорию, где установлен FS.

В моем примере это /usr/local/src/freeswitchи /usr/local/freeswitchсоответственно

cp /usr/local/src/freeswitch/src/mod/event_handlers/mod_odbc_cdr/conf/autoload_configs/odbc_cdr.conf.xml /usr/local/freeswitch/conf/autoload_configs/odbc_cdr.conf.xml

И заполните файл следующим содержанием, где параметры БД (odbc-dsn), данные определенные нами в odbc.ini:

<configuration name="odbc_cdr.conf" description="ODBC CDR Configuration"><settings><!-- <param name="odbc-dsn" value="freeswitchcdr:DB_USER:DB_PASSWORD"/> --><param name="odbc-dsn" value="odbc://freeswitch"/><!-- global value can be "a-leg", "b-leg", "both" (default is "both") --><param name="log-leg" value="both"/><!-- value can be "always", "never", "on-db-fail" --><param name="write-csv" value="on-db-fail"/><!-- location to store csv copy of CDR --><param name="csv-path" value="/usr/local/freeswitch/log/odbc_cdr"/><!-- if "csv-path-on-fail" is set, failed INSERTs will be placed here as CSV files otherwise they will be placed in "csv-path" --><param name="csv-path-on-fail" value="/usr/local/freeswitch/log/odbc_cdr/failed"/><!-- dump SQL statement after leg ends --><param name="debug-sql" value="true"/></settings><tables><!-- only a-legs will be inserted into this table --><table name="cdr" log-leg="a-leg"><field name="calldate" chan-var-name="start_stamp"/><field name="clid" chan-var-name="caller_id_name"/><field name="src" chan-var-name="caller_id_number"/><field name="dst" chan-var-name="destination_number"/><field name="dcontext" chan-var-name=""/><field name="channel" chan-var-name="channel_name"/><field name="dstchannel" chan-var-name="bridge_channel"/><field name="lastapp" chan-var-name="hangup_cause"/><field name="lastdata" chan-var-name="sip_hangup_disposition"/><field name="duration" chan-var-name="duration"/><field name="billsec" chan-var-name="billsec"/><field name="disposition" chan-var-name="hangup_cause"/><field name="lastapp" chan-var-name="current_application"/><field name="amaflags" chan-var-name="amaflags"/><field name="uniqueid" chan-var-name="uuid"/><field name="recordingfile" chan-var-name="recordingfile"/><field name="userfield" chan-var-name=""/></table></tables></configuration>
Загрузим модуль mod_odbc_cdr
 fs_cli
 load mod_odbc_cdr

Если в дальнейшем вы будете вносить изменения в файл odbc_cdr.conf.xmlих можно применить командой:

 reload mod_odbc_cdr
Spoiler

Подготовим Asterisk CDR Viewer

 cd /var/www/html
 git clone https://github.com/g613/asterisk-cdr-viewer.git
 cd asterisk-cdr-viewer/include

Отредактируем файл config.inc.php

$db_type = 'mysql';
$db_host = 'localhost';
$db_port = '3306';
$db_user = 'DB_USER';
$db_pass = 'DB_PASSWORD';
$db_name = 'freeswitchcdrdb';
$db_table_name = 'cdr';
$db_options = array();

Если все сделано правильно в Asterisk-CDR-Viewer будут отображаться свежие данные о вызовах:

Для того, чтобы работала сортировка по статусу вызова надо отредактировать файл ../asterisk-cdr-viewer/templates/form.tpl.phpзаменив секцию:

<td nowrap=""nowrap><input <?php if ( isset($_REQUEST['disposition_neg'] ) && $_REQUEST['disposition_neg'] == 'true' ) { echo 'checked="checked"'; } ?> type="checkbox" name="disposition_neg" value="true" /> not<select name="disposition" id="disposition"><option <?php if (empty($_REQUEST['disposition']) || $_REQUEST['disposition'] == 'all') { echo 'selected="selected"'; } ?> value="all">All Dispositions</option><option <?php if (isset($_REQUEST['disposition']) && $_REQUEST['disposition'] == 'ANSWERED') { echo 'selected="selected"'; } ?> value="ANSWERED">Answered</option><option <?php if (isset($_REQUEST['disposition']) && $_REQUEST['disposition'] == 'BUSY') { echo 'selected="selected"'; } ?> value="BUSY">Busy</option><option <?php if (isset($_REQUEST['disposition']) && $_REQUEST['disposition'] == 'FAILED') { echo 'selected="selected"'; } ?> value="FAILED">Failed</option><option <?php if (isset($_REQUEST['disposition']) && $_REQUEST['disposition'] == 'NO ANSWER') { echo 'selected="selected"'; } ?> value="NO ANSWER">No Answer</option></select></td>

на следующий код:

<td nowrap=""nowrap><input <?php if ( isset($_REQUEST['disposition_neg'] ) && $_REQUEST['disposition_neg'] == 'true' ) { echo 'checked="checked"'; } ?> type="checkbox" name="disposition_neg" value="true" /> not<select name="disposition" id="disposition"><option <?php if (empty($_REQUEST['disposition']) || $_REQUEST['disposition'] == 'all') { echo 'selected="selected"'; } ?> value="all">All Dispositions</option><option <?php if (isset($_REQUEST['disposition']) && $_REQUEST['disposition'] == 'NORMAL_CLEARING') { echo 'selected="selected"'; } ?> value="NORMAL_CLEARING">Answer</option><option <?php if (isset($_REQUEST['disposition']) && $_REQUEST['disposition'] == 'USER_BUSY') { echo 'selected="selected"'; } ?> value="USER_BUSY">Busy</option><option <?php if (isset($_REQUEST['disposition']) && $_REQUEST['disposition'] == 'UNALLOCATED_NUMBER') { echo 'selected="selected"'; } ?> value="UNALLOCATED_NUMBER">No Number</option><option <?php if (isset($_REQUEST['disposition']) && $_REQUEST['disposition'] == 'NO_ROUTE_DESTINATION') { echo 'selected="selected"'; } ?> value="NO_ROUTE_DESTINATION">No Route</option><option <?php if (isset($_REQUEST['disposition']) && $_REQUEST['disposition'] == 'ORIGINATOR_CANCEL') { echo 'selected="selected"'; } ?> value="ORIGINATOR_CANCEL">No Answer</option></select></td>

FreeSWITCH

Asterisk Local channel

$
0
0

Asterisk Local channel

chan_local - это псевдоканал. Использование этого канала в плане набора позволяетпросто перенаправить уже поступивший вызов в другой контекст плана набора. Часто используется при рекурсивном поиске маршрута для поступившего вызова; В данном случае имеется возможность вернуться в исходную точку в плане набора после завершения вызова.

Синтаксис:

Local/extension@context[/n]

Назначение:

Конструкции с использованием Локального канала могут быть использованы для отправки поступившего вызова в любую точку Вашего плана набора.

Предположим, что в вашей системе имеется карта TE410P. И Вы хотите сделать некие действия, при которых Вам понадобиться использовать команду Dial (например, когда вы помещаете файл для автоматического набора в /var/spool/outgoing), но еще хотите использовать в вашем плане набора процедуру поиска маршрута с минимальной стоимостью (least-cost-routes) или другие алгоритмы. То, что нам нужно сделать до набора номера, мы делаем до того, как chan_local создаст связь между двумя портами, один из которых - это E410P, а другой - это место, где используется команда Dial для совершения вызовов. При этом Вы можете полностью контролировать действия в том месте плана набора, где совершаются исходящие вызовы.

Конечно, это можно было сделать, применив некоторые уловки, но с использованием chan_local позволяет сделать этот процесс более понятным.

Драйвер канала «Local» позволяет вам конвертировать любой екстеншен в канал. Это используется в различных ситуациях, включая работу с агентами очереди вызовов и т.д.

Ниже приведены некоторые примеры (в основном при использовании конференций), где может быть использован локальный канал:

  • Допустим, что вы хотите сделать WEB интерфейс для билинга использования конференций… Вы можете создать Ваш скрипт, который будет спрашивать вызываемый номер, и использовать «Local/number@context» в качестве канала в Вашем .call файле, где вы определяете конференцию в качестве екстеншена для вызова.
  • Предположим, что вы хотите соединить две конференции между собой.
  • Предположим, что вы хотите добавить музыку ожидания (MusicOnHold) в конференцию (только вот зачем).
  • Вы хотите использовать .call файлы для автоматического набора номера, а так же хотите быть уверенными, что CDRзаписи и записи в логе будут созданы.

Это так же позволяет нам переходить из контекста в контекст, как при использовании команды Gosub?; Смотри примеры ниже.

Примеры:

[ inbound ]
; Сюда поступают все входящие вызовы
exten => s,1,Answer
exten => s,2,Dial(local/200@internals,30,r)
exten => s,3,Playback(sorrynoanswer)
exten => s,4,Hangup

[ internals ]
; сюда наши телефоны попадают по умолчанию
exten => 200,1,Dial(sip/blah)
exten => 200,102,VoiceMail(${EXTEN}@default)

exten => 201,1,Dial(zap/1)
exten => 201,102,VoiceMail(${EXTEN}@default)

exten => _0.,1,Dial(Zap/g1/${EXTEN:1}) ; исходящие вызовы в виде 0+номер

so that let me to call a local (internal) extension, without:
  • duplicate the Dial & voicemail statements
  • don't letting them to Dial out, since in internal context I have the possibility to dialout.

Предостережения:

Если Вы используете chan_local в Ваших call-файлах и Вы хотите передать некоторые переменные канала в Ваш контекст, не забудьте добавить '/n', так как иначе chan_local сам себя 'оптимизирует' и вырежет себя из пути прохождения вызова, и как следствие значения переменных будут потеряны. Например:

Local/00531234567@pbx описывайте как: Local/00531234567@pbx/n

Каналы в Asterisk

QueuePenalty

$
0
0

QueuePenalty

Synopsis
Set the penalty for a queue member.
Description
Change the penalty of a queue member
Syntax
Action: QueuePenalty
ActionID: <value>
Interface: <value>
Penalty: <value>
Queue: <value>
Arguments
ActionID - ActionID for this transaction. Will be returned.
Interface - The interface (tech/name) of the member whose penalty to change.
Penalty - The new penalty (number) for the member. Must be nonnegative.
Queue - If specified, only set the penalty for the member of this queue. Otherwise, set the penalty for the member in all queues to which the member belongs.

Asterisk queuerules.conf

$
0
0

Asterisk queuerules.conf

queuerules - правила позволяющие динамически изменять диапазон QUEUE_MIN_PENALTY - QUEUE_MAX_PENALTY,
в зависимости от времени ожидания вызывающего абонента.

Penalty

Каждый оператор очереди Asteriskимеет параметр penalty.
Пенальти может быть определен в настройках пользователя очереди:

  member ⇒ interface[,penalty][,membername][,state_interface][,ringinuse]

или при добавлении динамического агента:

  queue add member <dial string> to <queue> [[[penalty <penalty>] as <membername>] state_interface <interface>] 

Данный параметр определяет приоритет для посылки вызова на оператора, чем ниже пенальти, тем выше приоритет при выборе оператора для вызова.
Если пенальти не задан, то по умолчанию = 0

Предположим, очередь обслуживают 3 оператора с пенальти - 0,1 и 2 соответственно.
Первым будет вызван оператор с пенальти = 0 и только если он недоступен, оператор с пенальти = 1 и так далее.

Пенальти оператора может быть динамически изменен, например через CLI:

 queue set penalty <penalty> on <interface> [in <queue>]

или через AMI Actions QueuePenalty.

Перед тем как входящий вызов будет поставлен в очередь, можно задать переменные канала - QUEUE_MIN_PENALTY и QUEUE_MAX_PENALTY. Они укажут диапазон пенальти операторов очереди, для посылки вызова.
Например:

exten => s,1,NoOp(**penalty**)
   same = n,Set(QUEUE_MIN_PENALTY=1)
   same = n,Set(QUEUE_MAX_PENALTY=2)
   same = n,Queue(queue101)

Вызовы очереди queue101будут распределены между операторами с пенальти 1 и 2. Но предположим, что все операторы с пенальти 1 и 2 заняты или недоступны. В этом случае можно применить queuerules.

Правила связываются с конкретной очередью параметром defaultrule:

 defaultrule = myrule
 penaltychange => <время ожидания в секундах>,<абсолютное или относительное изменение QUEUE_MAX_PENALTY>[,абсолютное или относительное изменение QUEUE_MIN_PENALTY]

etc/asterisk/queuerules.conf

[myrule]
penaltychange => 30,+3   ; через 30 секунд ожидания в  увеличить QUEUE_MAX_PENALTY на +3, но не менять QUEUE_MIN_PENALTY;
penaltychange => 60,10,5 ; через 60 секунд ожидания в  установить значение QUEUE_MAX_PENALTY = 10 и установить QUEUE_MIN_PENALTY = 5;
penaltychange => 75,,7   ; через 75 секунд ожидания не изменять QUEUE_MAX_PENALTY, но установить QUEUE_MIN_PENALTY = 7;

Таким образом очередь может получать дополнительных операторов, в зависимости от нагрузки (времени ожидания).

Правила могут получаться в реальном времени из хранилища Realtime. Для это включите опцию в секции [general] конфига queuerules.conf:

 realtime_rules = yes

Данная опция не требует работы только c реалтайм базами данных.При выполнении команды queue reload rulesвсе правила, независимо от расположения в БД или конфигурационном файле, будут применены. При условии, что они имеют уникальные имена и правильную конфигурацию мин/макс пенальти.

В etc/asterisk/extconfig.confопределите таблицу БД в которой находятся правила:

 queue_rules => odbc,asterisk,queue_rules

И создайте таблицу в используемой БД.

rule_nametimemin_penaltymax_penalty
'default''10''20''30'
'queue1''20''30''55'
'queue2''25''-11''+1111'
'queue2''400''112''333'
'queue3''0''4564''46546'
'queue_rule''40''15''50'
Spoiler

Asterisk: AddQueueMember

Asterisk: PauseQueueMember

Asterisk: Queue

Asterisk: QueueLog

Asterisk: RemoveQueueMember

Asterisk: UnpauseQueueMember

function 'QUEUE_EXISTS'

function 'QUEUE_MEMBER'

function 'QUEUE_MEMBER_LIST'

function 'QUEUE_VARIABLES'

function 'QUEUE_WAITING_COUNT'

Asterisk:Лог очереди (queue) в mysql

FreePBX Queues

Asterisk Call Center Stats


Функции Asterisk

$
0
0

Функции Asterisk

Функции Asterisk используются в диалплане. Это не командыдиалпланаи не могут быть использованы прямо. Функции возвращают значение для дальнейшего использования в логике диалплана.

function 'AES_DECRYPT'AES_DECRYPT(key,string) Decrypt a string encoded in base64 with AES given a 16 character key.
function 'AES_ENCRYPT'AES_ENCRYPT(key,string) Encrypt a string with AES given a 16 character key.
function 'AMI_CLIENT'AMI_CLIENT(loginname,field) Checks attributes of manager accounts
function 'ARRAY'ARRAY(var1[,var2[,…][,varN]]) Allows setting multiple variables at once.
function 'AST_CONFIG'AST_CONFIG(config_file,category,var Retrieve a variable from a configuration file.
function 'AUDIOHOOK_INHERIT'AUDIOHOOK_INHERIT(source) Set whether an audiohook may be inherited to another channel
function 'BASE64_DECODE'BASE64_DECODE(string) Decode a base64 string.
function 'BASE64_ENCODE'BASE64_ENCODE(string) Encode a string in base64.
function 'BLACKLIST'BLACKLIST() Check if the callerid is on the blacklist.
function 'CALLCOMPLETION'CALLCOMPLETION(option) Get or set a call completion configuration parameter for a channel.
function 'CALLERID'CALLERID(datatype[,CID]) Gets or sets Caller*ID data on the channel.
function 'CALLERPRES'CALLERPRES() Gets or sets Caller*ID presentation on the channel.
function 'CDR'CDR(name[,options]) Gets or sets a CDR variable.
function 'CDR_PROP'CDR_PROP(name) Set a property on a channel's CDR.
function 'CHANNEL'CHANNEL(item) Gets/sets various pieces of information about the channel.
function 'CHANNELS'CHANNELS([regular_expression]) Gets the list of channels, optionally filtering by a regular expression.
function 'CHECKSIPDOMAIN'CHECKSIPDOMAIN(domain) Checks if domain is a local domain.
function 'CONFBRIDGE'CONFBRIDGE(type,option) Set a custom dynamic bridge and user profile on a channel for the ConfBridge application using the same options defined in confbridge.conf.
CONFBRIDGE_INFOCONFBRIDGE_INFO(type,conf) Get information about a ConfBridge conference.
function 'CONNECTEDLINE'CONNECTEDLINE(datatype[,i]) Gets or sets Connected Line data on the channel.
function 'CSV_QUOTE'CSV_QUOTE(string) Quotes a given string for use in a CSV file, escaping embedded quotes as necessary
function 'CURL'CURL(url[,post-data]) Retrieves the contents of a URL
function 'CURLOPT'CURLOPT(<option>) Set options for use with the CURL() function
function 'CUT'CUT(varname,char-delim,range-spec) Slices and dices strings, based upon a named delimiter.
function 'DB'DB(family/key) Read from or write to the Asterisk database.
function 'DB_DELETE'DB_DELETE(family/key) Return a value from the database and delete it.
function 'DB_EXISTS'DB_EXISTS(family/key) Check to see if a key exists in the Asterisk database.
function 'DB_KEYS'DB_KEYS([prefix]) Obtain a list of keys within the Asterisk database.
function 'DEC'DEC(variable) Decrements the value of a variable, while returning the updated value to the dialplan
function 'DEVICE_STATE'DEVICE_STATE(device) Get or Set a device state.
function 'DIALGROUP'DIALGROUP(group[,op]) Manages a group of users for dialing.
function 'DIALPLAN_EXISTS'DIALPLAN_EXISTS(context[,extension[ Checks the existence of a dialplan target.
function 'ENUMLOOKUP'ENUMLOOKUP(number[,method-type[,opt General or specific querying of NAPTR records for ENUM or ENUM-like DNS pointers.
function 'ENUMQUERY'ENUMQUERY(number[,method-type[,zone Initiate an ENUM query.
function 'ENUMRESULT'ENUMRESULT(id,resultnum) Retrieve results from a ENUMQUERY.
function 'ENV'ENV(varname) Gets or sets the environment variable specified.
function 'EVAL'EVAL(variable) Evaluate stored variables
function 'EXCEPTION'EXCEPTION(field) Retrieve the details of the current dialplan exception.
function 'EXISTS'EXISTS(data) Test the existence of a value.
function 'EXTENSION_STATE'EXTENSION_STATE(extension[@context] Get an extension's state.
function 'FAXOPT'FAXOPT(item) Gets/sets various pieces of information about a fax session.
function 'FEATURE'FEATURE(option_name) Get or set a feature option on a channel.
function 'FEATUREMAP'FEATUREMAP(feature_name) Get or set a feature map to a given value on a specific channel.
function 'FIELDNUM'FIELDNUM(varname,delim,value) Return the 1-based offset of a field in a list
function 'FIELDQTY'FIELDQTY(varname,delim) Count the fields with an arbitrary delimiter
function 'FILE'FILE(filename[,offset[,length[,opti Read or write text file.
function 'FILE_COUNT_LINE'FILE_COUNT_LINE(filename[,format]) Obtains the number of lines of a text file.
function 'FILE_FORMAT'FILE_FORMAT(filename) Return the newline format of a text file.
function 'FILTER'FILTER(allowed-chars,string) Filter the string to include only the allowed characters
function 'FRAME_TRACE'FRAME_TRACE(filter list type) View internal ast_frames as they are read and written on a channel.
function 'GLOBAL'GLOBAL(varname) Gets or sets the global variable specified.
function 'GROUP'GROUP([category]) Gets or sets the channel group.
function 'GROUP_COUNT'GROUP_COUNT([groupname][@category]) Counts the number of channels in the specified group.
function 'GROUP_LIST'GROUP_LIST() Gets a list of the groups set on a channel.
function 'GROUP_MATCH_COUNT'GROUP_MATCH_COUNT(groupmatch[@categ Counts the number of channels in the groups matching the specified pattern.
function 'HANGUPCAUSE'HANGUPCAUSE(channel,type) Gets per-channel hangupcause information from the channel.
function 'HANGUPCAUSE_KEYS'HANGUPCAUSE_KEYS() Gets the list of channels for which hangup causes are available.
function 'HASH'HASH(hashname[,hashkey]) Implementation of a dialplan associative array
function 'HASHKEYS'HASHKEYS(hashname) Retrieve the keys of the HASH() function.
function 'HINT'HINT(extension[@context][,options]) Get the devices set for a dialplan hint.
function 'IAXPEER'IAXPEER(peername[,item]) Gets IAX peer information.
function 'IAXVAR'IAXVAR(varname) Sets or retrieves a remote variable.
function 'ICONV'ICONV(in-charset,out-charset,string Converts charsets of strings.
function 'IF'IF(expresion?[true][:false]) Check for an expresion.
function 'IFMODULE'IFMODULE(modulename.so) Checks if an Asterisk module is loaded in memory.
function 'IFTIME'IFTIME(timespec?[true][:false]) Temporal Conditional.
function 'IMPORT'IMPORT(channel,variable) Retrieve the value of a variable from another channel.
function 'INC'INC(variable) Increments the value of a variable, while returning the updated value to the dialplan
function 'ISNULL'ISNULL(data) Check if a value is NULL.
function 'JITTERBUFFER'JITTERBUFFER(jitterbuffer type) Add a Jitterbuffer to the Read side of the channel. This dejitters the audio stream before it reaches the Asterisk core. This is a write only function.
function 'KEYPADHASH'KEYPADHASH(string) Hash the letters in string into equivalent keypad numbers.
function 'LEN'LEN(string) Return the length of the string given.
function 'LISTFILTER'LISTFILTER(varname,delim,value) Remove an item from a list, by name.
function 'LOCAL'LOCAL(varname) Manage variables local to the gosub stack frame.
function 'LOCAL_PEEK'LOCAL_PEEK(n,varname) Retrieve variables hidden by the local gosub stack frame.
function 'LOCK'LOCK(lockname) Attempt to obtain a named mutex.
function 'MAILBOX_EXISTS'MAILBOX_EXISTS(mailbox[@context]) Tell if a mailbox is configured.
function 'MASTER_CHANNEL'MASTER_CHANNEL() Gets or sets variables on the master channel
function 'MATH'MATH(expression[,type]) Performs Mathematical Functions.
function 'MD5'MD5(data) Computes an MD5 digest.
function 'MESSAGE'MESSAGE(argument) Create a message or read fields from a message.
function 'MESSAGE_DATA'MESSAGE_DATA(argument) Read or write custom data attached to a message.
function 'MINIVMACCOUNT'MINIVMACCOUNT(account:item) Gets MiniVoicemail account information.
function 'MINIVMCOUNTER'MINIVMCOUNTER(account:name[:operand Reads or sets counters for MiniVoicemail message.
function 'MUTEAUDIO'MUTEAUDIO(direction) Muting audio streams in the channel
function 'ODBC'ODBC(property[,argument]) Controls ODBC transaction properties.
function 'ODBC_FETCH'ODBC_FETCH(result-id) Fetch a row from a multirow query.
function 'PASSTHRU'PASSTHRU([string]) Pass the given argument back as a value.
function 'PITCH_SHIFT'PITCH_SHIFT(channel direction) Pitch shift both tx and rx audio streams on a channel.
function 'PJSIP_DIAL_CONTACTS'PJSIP_DIAL_CONTACTS(endpoint[,aor[, Return a dial string for dialing all contacts on an AOR.
function 'PJSIP_ENDPOINT'PJSIP_ENDPOINT(name,field) Get information about a PJSIP endpoint
function 'PJSIP_HEADER'PJSIP_HEADER(action,name[,number]) Gets, adds, updates or removes the specified SIP header from a PJSIP session.
function 'PJSIP_MEDIA_OFFER'PJSIP_MEDIA_OFFER(media) Media and codec offerings to be set on an outbound SIP channel prior to dialing.
function 'POP'POP(varname[,delimiter]) Removes and returns the last item off of a variable containing delimited text
function 'PP_EACH_EXTENSION'PP_EACH_EXTENSION(mac,template) Execute specified template for each extension.
function 'PP_EACH_USER'PP_EACH_USER(string,exclude_mac) Generate a string for each phoneprov user.
function 'PRESENCE_STATE'PRESENCE_STATE(provider,field[,opti Get or Set a presence state.
function 'PUSH'PUSH(varname[,delimiter]) Appends one or more values to the end of a variable containing delimited text
function 'QUEUE_EXISTS'QUEUE_EXISTS([queuename]) Check if a named queue exists on this server
function 'QUEUE_MEMBER'QUEUE_MEMBER(queuename,option[,inte Count number of members answering a queue.
function 'QUEUE_MEMBER_COUNT'QUEUE_MEMBER_COUNT(queuename) Count number of members answering a queue.
function 'QUEUE_MEMBER_LIST'QUEUE_MEMBER_LIST(queuename) Returns a list of interfaces on a queue.
function 'QUEUE_MEMBER_PENALTY'QUEUE_MEMBER_PENALTY(queuename,inte Gets or sets queue members penalty.
function 'QUEUE_VARIABLES'QUEUE_VARIABLES(queuename) Return Queue information in variables.
function 'QUEUE_WAITING_COUNT'QUEUE_WAITING_COUNT([queuename]) Count number of calls currently waiting in a queue.
function 'QUOTE'QUOTE(string) Quotes a given string, escaping embedded quotes as necessary
function 'RAND'RAND([min][,max]) Choose a random number in a range.
function 'REALTIME'REALTIME(family,fieldmatch[,matchva RealTime Read/Write Functions.
function 'REALTIME_DESTROY'REALTIME_DESTROY(family,fieldmatch[ RealTime Destroy Function.
function 'REALTIME_FIELD'REALTIME_FIELD(family,fieldmatch,ma RealTime query function.
function 'REALTIME_HASH'REALTIME_HASH(family,fieldmatch,mat RealTime query function.
function 'REALTIME_STORE'REALTIME_STORE(family,field1,fieldN RealTime Store Function.
function 'REDIRECTING'REDIRECTING(datatype[,i]) Gets or sets Redirecting data on the channel.
function 'REGEX'REGEX(«regular expression» string) Check string against a regular expression.
function 'REPLACE'REPLACE(varname,find-chars[,replace Replace a set of characters in a given string with another character.
function 'SET'SET(varname[=value]) SET assigns a value to a channel variable.
function 'SHA1'SHA1(data) Computes a SHA1 digest.
function 'SHARED'SHARED(varname[,channel]) Gets or sets the shared variable specified.
function 'SHELL'SHELL(command) Executes a command using the system shell and captures its output.
function 'SHIFT'SHIFT(varname[,delimiter]) Removes and returns the first item off of a variable containing delimited text
function 'SIPCHANINFO'SIPCHANINFO(item) Gets the specified SIP parameter from the current channel.
function 'SIPPEER'SIPPEER(peername[,item]) Gets SIP peer information.
function 'SIP_HEADER'SIP_HEADER(name[,number]) Gets the specified SIP header from an incoming INVITE message.
function 'SORT'SORT(key1:val1[,key2:val2[,…]]) Sorts a list of key/vals into a list of keys, based upon the vals.
function 'SPEECH'SPEECH(argument) Gets information about speech recognition results.
function 'SPEECH_ENGINE'SPEECH_ENGINE(name) Get or change a speech engine specific attribute.
function 'SPEECH_GRAMMAR'SPEECH_GRAMMAR([nbest_number/]resul Gets the matched grammar of a result if available.
function 'SPEECH_RESULTS_TYPE'SPEECH_RESULTS_TYPE()
function 'SPEECH_SCORE'SPEECH_SCORE([nbest_number/]result_ Gets the confidence score of a result.
function 'SPEECH_TEXT'SPEECH_TEXT([nbest_number/]result_n Gets the recognized text of a result.
function 'SPRINTF'SPRINTF(format,arg1[,arg2[,…][,ar Format a variable according to a format string.
function 'SRVQUERY'SRVQUERY(service) Initiate an SRV query.
function 'SRVRESULT'SRVRESULT(id,resultnum) Retrieve results from an SRVQUERY.
function 'STACK_PEEK'STACK_PEEK(n,which[,suppress]) View info about the location which called Gosub
function 'STAT'STAT(flag,filename) Does a check on the specified file.
function 'STRFTIME'STRFTIME([epoch][,timezone[,format] Returns the current date/time in the specified format.
function 'STRPTIME'STRPTIME(datetime,timezone,format) Returns the epoch of the arbitrary date/time string structured as described by the format.
function 'STRREPLACE'STRREPLACE(varname,find-string[,rep Replace instances of a substring within a string with another string.
function 'SYSINFO'SYSINFO(parameter) Returns system information specified by parameter.
function 'TESTTIME'TESTTIME(date,time[,zone]) Sets a time to be used with the channel to test logical conditions.
function TIMEOUT TIMEOUT(timeouttype) Gets or sets timeouts on the channel. Timeout values are in seconds.
function 'TOLOWER'TOLOWER(string) Convert string to all lowercase letters.
function 'TOUPPER'TOUPPER(string) Convert string to all uppercase letters.
function 'TRYLOCK'TRYLOCK(lockname) Attempt to obtain a named mutex.
function 'TXTCIDNAME'TXTCIDNAME(number[,zone-suffix]) TXTCIDNAME looks up a caller name via DNS.
function 'UNLOCK'UNLOCK(lockname) Unlocks a named mutex.
function 'UNSHIFT'UNSHIFT(varname[,delimiter]) Inserts one or more values to the beginning of a variable containing delimited text
function 'URIDECODE'URIDECODE(data) Decodes a URI-encoded string according to RFC 2396.
function 'URIENCODE'URIENCODE(data) Encodes a string to URI-safe encoding according to RFC 2396.
function 'VALID_EXTEN'VALID_EXTEN([context],extension[,pr Determine whether an extension exists or not.
function 'VERSION'VERSION([info]) Return the Version info for this Asterisk.
function 'VMCOUNT'VMCOUNT(vmbox[,folder]) Count the voicemails in a specified mailbox.
function 'VM_INFO'VM_INFO(mailbox[@context],attribute Returns the selected attribute from a mailbox.
function 'VOLUME'VOLUME(direction[,options]) Set the TX or RX volume of a channel.

Настройка Asterisk

Команды диалплана Asterisk

$
0
0

Команды диалплана Asterisk

В данном документе приведен список команд, которые Вы можете использовать в плане набора (extensions.conf). Получить список и описание приложений, доступных на вашем сервере Asterisk Вы можете командами CLI:
core show applicationsи core show application <name>.

Asterisk Dialplan Applications

Asterisk app: AddQueueMember: Динамическое добавление агента для очереди.

Asterisk app: ADSIProg: Загрузка ADSI скрипта Asterisk в телефон.

Asterisk app: AELSub: Перейти в AEL (asterisk extension Language) подпрограмму.

Asterisk app: AGI: Выполнить AGI приложение.

Answer: Ответить на вызов.

Asterisk application: Authenticate: Авторизовать пользователя

BackGround: Проиграть аудио файл с возможностью посылки DTMFкоманд

BackgroundDetect: Распознавать речь при проигрывании аудио файла

Bridge: Соединить два канала

BridgeWait: Put a call into the holding bridge.

Busy: Установить состояние занято.

CallCompletionCancel: Cancel call completion service

CallCompletionRequest: Request call completion service for previous call

CELGenUserEvent: Generates a CEL User Defined Event.

Asterisk: ChangeMonitor: Изменения имени файла для записи разговора.

ChanIsAvail: Проверка доступности канала связи.

ChannelRedirect: Переадресация существующего канала в другую точку плана набора

ChanSpy: Прослушивание канала.

ClearHash: Clear the keys from a specified hashname.

ConfBridge: Conference bridge application.

Congestion: Indicate the Congestion condition.

ContinueWhile: Restart a While loop.

ControlPlayback: Play a file with fast forward and rewind.

DAHDIRAS: Executes DAHDI ISDN RAS application.

DAHDIScan: Scan DAHDI channels to monitor calls.

DAHDISendCallreroutingFacility: Send an ISDN call rerouting/deflection facility message.

DAHDISendKeypadFacility: Send digits out of band over a PRI.

DateTime: Says a specified time in a custom format.

DBdel: Delete a key from the asterisk database.

DBdeltree: Delete a family or keytree from the asterisk database.

DeadAGI: Executes AGI on a hungup channel.

Asterisk application: Dial: Пытается установить соединение, одного устройства с другим..

Dictate: Virtual Dictation Machine.

Directory: Provide directory of voicemail extensions.

DISA: Direct Inward System Access.

DumpChan: Dump Info About The Calling Channel.

EAGI: Executes an EAGI compliant application

Echo: Echo media, DTMF back to the calling party

EndWhile: End a while loop.

Exec: Executes dialplan application.

ExecIf: Executes dialplan application, conditionally.

ExecIfTime: Conditional application execution based on the current time.

ExitWhile: End a While loop.

ExtenSpy: Listen to a channel, and optionally whisper into it.

ExternalIVR: Interfaces with an external IVR application.

Flash: Flashes a DAHDI Trunk.

ForkCDR: Forks the current Call Data Record for this channel.

GetCPEID: Get ADSI CPE ID.

Gosub: Jump to label, saving return address.

GosubIf: Conditionally jump to label, saving return address.

Goto: Jump to a particular priority, extension, or context.

GotoIf: Conditional goto.

GotoIfTime: Conditional Goto based on the current time.

Hangup: Hang up the calling channel.

HangupCauseClear: Clears hangup cause information from the channel that is available through HANGUPCAUSE.

IAX2Provision: Provision a calling IAXy with a given template.

ICES: Encode and stream using 'ices'.

ImportVar: Import a variable from a channel into a new variable

Incomplete: Returns AST_PBX_INCOMPLETE value.

Log: Send arbitrary text to a selected log level.

Asterisk app Macro: Macro Implementation.

MacroExclusive: Exclusive Macro Implementation.

MacroExit: Exit from Macro

MacroIf: Conditional Macro implementation

MailboxExists: Check to see if Voicemail mailbox exists.

MessageSend: Send a text message.

Milliwatt: Generate a Constant 1004Hz tone at 0dbm (mu-law).

MinivmAccMess: Record account specific messages.

MinivmDelete: Delete Mini-Voicemail voicemail messages.

MinivmGreet: Play Mini-Voicemail prompts.

MinivmMWI: Send Message Waiting Notification to subscriber(s) of mailbox.

MinivmNotify: Notify voicemail owner about new messages.

MinivmRecord: Receive Mini-Voicemail and forward via e-mail.

Asterisk: MixMonitor: Record a call and mix the audio during the recording. Use of StopMixMonitor is required to guarantee the audio file is available for processing during dialplan execution.

Asterisk: Monitor: Monitor a channel.

Morsecode: Plays morse code.

MP3Player: Play an MP3 file or M3U playlist file or stream.

MSet: Set channel variable(s) or function value(s).

MusicOnHold: Play Music On Hold indefinitely.

MYSQL: Do several mySQLy things

NBScat: Play an NBS local stream.

NoCDR: Tell Asterisk to not maintain a CDR for this channel.

NoOp: Do Nothing (No Operation).

Originate: Originate a call.

Page: Page series of phones

Asterisk: PauseMonitor: Pause monitoring of a channel.

Asterisk: PauseQueueMember: Pauses a queue member.

Pickup: Directed extension call pickup.

PickupChan: Pickup a ringing channel.

Playback: Play a file.

PlayTones: Play a tone list.

PrivacyManager: Require phone number to be entered, if no CallerID sent

Proceeding: Indicate proceeding.

Progress: Indicate progress.

Asterisk: Queue: Queue a call for a call queue.

Asterisk: QueueLog: Writes to the queue_log file

RaiseException: Handle an exceptional condition.

Read: Read a variable.

ReadExten: Read an extension into a variable.

ReceiveFAX: Receive a FAX and save as a TIFF/F file.

Record: Record to a file.

Asterisk: RemoveQueueMember: Dynamically removes queue members.

ResetCDR: Resets the Call Data Record.

RetryDial: Place a call, retrying on failure allowing an optional exit extension.

Return: Return from gosub routine.

Ringing: Indicate ringing tone.

SayAlpha: Say Alpha.

SayAlphaCase: Say Alpha.

SayCountPL: Say Polish counting words.

SayDigits: Say Digits.

SayNumber: Say Number.

SayPhonetic: Say Phonetic.

SayUnixTime: Says a specified time in a custom format.

SendDTMF: Sends arbitrary DTMF digits

SendFAX: Sends a specified TIFF/F file as a FAX.

SendImage: Sends an image file.

SendText: Send a Text Message.

SendURL: Send a URL.

Set: Set channel variable or function value.

SetAMAFlags: Set the AMA Flags.

SetMusicOnHold: Set default Music On Hold class.

SIPAddHeader: Add a SIP header to the outbound call.

SIPDtmfMode: Change the dtmfmode for a SIP call.

SIPRemoveHeader: Remove SIP headers previously added with SIPAddHeader

SMS: Communicates with SMS service centres and SMS capable analogue phones.

SoftHangup: Hangs up the requested channel.

SpeechActivateGrammar: Activate a grammar.

SpeechBackground: Play a sound file and wait for speech to be recognized.

SpeechCreate: Create a Speech Structure.

SpeechDeactivateGrammar: Deactivate a grammar.

SpeechDestroy: End speech recognition.

SpeechLoadGrammar: Load a grammar.

SpeechProcessingSound: Change background processing sound.

SpeechStart: Start recognizing voice in the audio stream.

SpeechUnloadGrammar: Unload a grammar.

StackPop: Remove one address from gosub stack.

StartMusicOnHold: Play Music On Hold.

Stasis: Invoke an external Stasis application.

Asterisk: StopMixMonitor: Stop recording a call through MixMonitor, and free the recording's file handle.

Asterisk: StopMonitor: Stop monitoring a channel.

StopMusicOnHold: Stop playing Music On Hold.

StopPlayTones: Stop playing a tone list.

System: Execute a system command.

TestClient: Execute Interface Test Client.

TestServer: Execute Interface Test Server.

Transfer: Transfer caller to remote extension.

TryExec: Executes dialplan application, always returning.

TrySystem: Try executing a system command.

Asterisk: UnpauseMonitor: Unpause monitoring of a channel.

Asterisk: UnpauseQueueMember: Unpauses a queue member.

UserEvent: Send an arbitrary user-defined event to parties interested in a channel (AMI users and relevant res_stasis applications).

Verbose: Send arbitrary text to verbose output.

VMAuthenticate: Authenticate with Voicemail passwords.

VMSayName: Play the name of a voicemail user

VoiceMail: Leave a Voicemail message.

VoiceMailMain: Check Voicemail messages.

VoiceMailPlayMsg: Play a single voice mail msg from a mailbox by msg id.

Wait: Waits for some time.

WaitExten: Waits for an extension to be entered.

WaitForNoise: Waits for a specified amount of noise.

WaitForRing: Wait for Ring Application.

WaitForSilence: Waits for a specified amount of silence.

WaitMusicOnHold: Wait, playing Music On Hold.

WaitUntil: Wait (sleep) until the current time is the given epoch.

While: Start a while loop.

Zapateller: Block telemarketers with SIT.

Настройка Asterisk

Asterisk app: ADSIProg

$
0
0

Asterisk app: ADSIProg

Загрузка asterisk ADSI скрипта в телефон

This application programs an ADSI Phone with the given script

Синтаксис

ADSIProg([script])

[Arguments]

script - adsi скрипт для использования. Если не задано используется скрипт по умолчанию - «asterisk.adsi»

см также

GetCPEID

Команды диалплана Asterisk

Asterisk app: AELSub

$
0
0

Asterisk app: AELSub

Приложение диалплана Atserisk AELSub.
Перейти в AEL (asterisk extension Language) подпрограмму.

Описание

Выполняет указанную подпрограмму, назначенную в AEL, из другого языка диалплана: extensions.conf, realtime или Lua.

СинтаксисAELSub(routine[,args])

Аргументы

routine - наименование подпрограммы в extensions.ael

см также

Команды диалплана Asterisk

Asterisk app: AGI

$
0
0

Asterisk app: AGI

Выполнить приложение Aasterisk Gateway Interface (AGI) в канале вызова.

Описание

AGI позволяет Asterisk запустить внешнюю программу, написанную на любом языке,
для контроля над каналами связи, воспроизведением аудио, чтения DTMFсигналов и др.,
связываясь с Asterisk через стандартный потоковый ввод/вывод - stdin/stdout:

AGI >>>-stdout->>> Asterisk 
Asterisk >>>-stdin->>> AGI

AGI приложение отправляет команды через STDOUT,
Asterisk передает данные через STDIN.

По состоянию версии Asterisk 1.6.x, выполнение диалплана будет продолжаться даже после завершения вызова, пока скрипт явно не сигнализирует прекратить, просто закрыв соединение или соответствующей командой.

Запущенный локально AGI скрипт получит сигнал SIGHUP, при разъединении в канале, если только не используется DeadAGI

FastAGI (удаленный) сервер, соответственно, получит HANGUP. Оба этих сигнала могут быть отключены установкой переменной Set(AGISIGHUP=no), непосредственно перед выполнением скрипта AGI.

Если же требуется, чтобы AGI приложение завершалось немедленно, после получения информации о разъединении канала, установите переменную Set(AGIEXITONHANGUP=yes)

Используйте команду 'agi show commands' CLI, для получения полного списка команд AGI или 'agi show commands topic <command_name>' для описания указанной команды:

*CLI> agi show commands

Приложение диалплана Asterisk AGI возвращает ${AGISTATUS} переменную с одним из следующих значений:

  • SUCCESS
  • FAILURE
  • NOTFOUND
  • HANGUP
Синтаксис

AGI(command,arg1,arg2,…)

См. также

Команды диалплана Asterisk

Viewing all 1041 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>