Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. + 7 499 704 2566 Skype Me™!

Функция Dial

Оцените материал
(7 голосов)

Dial()

Пытается соединить каналы

Dial(технология/имяпользователя:пароль@имяхоста/добавочныйномер[&технология2/peer2...] [,времяожидания-ответа[,флаги[,URL]]])

Позволяет соединять все возможные типы каналов. Dial() – самое важное приложение в Asterisk. Для приложения Dial() приемлем любой действительный тип каналов (такие, как SIP, IAX2, H.323, MGCP, Local или Zap), но то, какие параметры необходимо будет передать для канала, зависит от информации, которая требуется каналу данного типа для работы.

Например, SIP-каналу для соединения понадобится сетевой адрес и пользователь, тогда как Zap-канал потребует телефонный номер. Когда задается сетевой тип канала, в качестве опций Dial() могут передаваться хост назначения (имя или IP-адрес), имя пользователя, пароль и удаленный добавочный номер или можно указать имя записи канала в соответствующем файле .conf; тогда вся необходимая информация должна поступать из этого файла. Имя пользователя и пароль можно заменить именем, указанным в квадратных скобках ([]) в конфигурационном файле канала. Имя хоста является необязательным. Вот действительное выражение Dial:

exten => s,1,Dial(SIP/sake: Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. )

Такая запись аналогична предыдущей:

exten => s,1,Dial(SIP/some_SIP_friend)

но будет работать, только если в sip.conf есть канал [some_SIP_friend], описание которого включает fromuser=sake, password=arigato и host=thathostoverthere.tld. Часто добавочный номер указывается после адреса:

exten => s,1,Dial(IAX2/user: Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. /500)

Таким образом мы указываем дальнему концу соединения направить вызов на добавочный номер 500 в том же контексте, в который поступил вызов. Необязательно указывать добавочный номер в Dial(), поскольку может использоваться информация конфигурационного файла канала удаленного конца соединения или удаленный сервер передаст вызов на добавочный номер s в контексте, в котором поступил вызов. В конечном счете, дальний конец соединения управляет тем, что происходит с вызовом; вы можете только запрашивать определенную обработку. Если не задан параметр времяожидания-ответа, канал будет совершать вызов неопределенно долго. Это не всегда плохо, поэтому не надо полагать, что это обязательный параметр; просто знайте, что «неопределенно долго» может означать «очень долго». Параметр времяожидания-ответа задается в секундах и всегда следует за адресной информацией:

exten => s,1,Dial(IAX2/user: Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. /500,времяожидания-ответа)

Мощь приложения Dial() во многом определяется флагами. Они указываются после адреса и времени ожидания:

exten => s,1,Dial(IAX2/user: Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. /500,60,флаги)

Если время ожидания не задано и вы желаете задать флаги, необходимо обозначить место, где можно указать время ожидания. Делается это введением дополнительной запятой на месте времени ожидания, как здесь:

exten => s,1,Dial(IAX2/user: Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. /500,,флаги)

Для приложения Dial() могут использоваться следующие флаги:

A( x )

Воспроизводится приветствие для вызываемой стороны; x – имя звукового файла, используемого в качестве приветствия.

C

Выполняется сброс записи Call Detail Record для звонка. Поскольку в CDR выставляется время ответа (Answer()) на звонок, вероятно, вы захотите сбросить запись CDR, чтобы пользователю не приходилось оплачивать время, прошедшее до вызова приложения Dial().

d

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

D([ вызываемый ][: вызывающий ])

DTMF-коды передаются после ответа на звонок, но до того, как выполнено соединение. Параметр вызываемый передается вызываемой стороне, а параметр вызывающий – вызывающей стороне. Эти параметры могут использоваться по отдельности.

f

Caller ID (ID звонящего) вызывающей стороны принудительно устанавливается как добавочный номер, связанный с каналом, с помощью подсказки диалплана. Часто это используется, когда провайдер разрешает задавать в качестве Caller ID только выделенные для вас номера. Например, при наличии PRI флаг f использовался бы для переопределения любого заданного локально Caller ID для SIP-телефона.

g

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

G( контекст ^ добавочныйномер ^ приоритет )

Когда ответ на звонок получен, вызывающая сторона переводится в заданный приоритет, а вызываемая сторона – в заданный приоритет + 1. В сочетании с этой опцией не могут использоваться никакие дополнительные опции, определяющие операции после ответа.

h

Позволяет вызванному абоненту разорвать соединение нажатием кнопки *.

H

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

i

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

j

Asterisk будет переходить в приоритет n + 101 в случае занятости запрашиваемых каналов (где n – текущий приоритет).

L( x [: y ][: z ])

Продолжительность звонка ограничивается x миллисекундами, дается предупреждение, когда осталось y миллисекунд, и предупреждение повторяется каждые y миллисекунд вплоть до истечения допустимой продолжительности разговора. Параметр x – обязательный; y и z – необязательные. Для обеспечения дополнительного контроля могут использоваться следующие специальные переменные:

LIMIT_PLAYAUDIO_CALLER=yes|no

Определяет, воспроизводится ли звуковой файл для вызывающего абонента. По умолчанию – yes.

LIMIT_PLAYAUDIO_CALLEE=yes|no

Определяет, воспроизводится ли звуковой файл для вызываемого абонента.

LIMIT_TIMEOUT_FILE= имяфайла

Определяет, какой файл воспроизводится, когда время истекло.

LIMIT_CONNECT_FILE= имяфайла

Определяет, какой файл воспроизводится в начале вызова.

LIMIT_WARNING_FILE= имяфайла

Определяет, какой файл воспроизводится, если определен аргумент y. По умолчанию проговаривается оставшееся время.

m[класс]

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

M( x [ ^аргумент ])

При соединении выполняется макрос x и передаются (необязательно) аргументы, разделенные символом ^. Макрос также может задавать одно из приведенных ниже значение для переменной канала MACRO_RESULT, чтобы обозначить, что должно произойти после завершения макроса:

ABORT (прервать)

Повесить трубку на обоих концах соединения.

CONGESTION (перегрузка)

Действовать так, как при перегрузке линии.

BUSY (занято)

Действовать так, как при занятости линии. Если задана опция j,вызов перенаправляется в приоритет n + 101, где n – текущий приоритет.

CONTINUE (продолжить)

Отключить вызываемую сторону и продолжить выполнение диалплана.

GOTO:<контекст>^<добавочныйномер>^<приоритет>

Выполнить переадресацию вызова в заданную точку. В сочетании с этой опцией нельзя использовать никакие другие дополнительные опции, определяющие действия после ответа. Также сервисы офисной АТС не выполняются для вызванного канала, поэтому не получится задать значения времени ожидания посредством функции TIMEOUT в этом макросе.

n

Эта опция является модификатором для экранного/конфиденциального режима (screen/privacy mode). Она определяет, что вступления (introductions) не должны сохраняться в папке priv-callerintros.

N

Эта опция является модификатором для экранного/конфиденциального режима. Она указывает Asterisk не экранировать вызов, если представлен Caller ID.

o

Использует Caller ID, полученный по входящему плечу вызова,в качестве Caller ID на исходящем плече вызова. Это полезно, если вы принимаете вызов и перенаправляете его в другую точку, но хотите передать Caller ID из входящего плеча вызова, а не заменять его локальным Caller ID. Таким было поведение по умолчанию Asterisk в версиях до 1.0.

O[x]

Эта опция включает режим услуг оператора (Operator Services) для канала Zaptel. При использовании в не-Zaptel-интерфейсе эта опция будет проигнорирована. После ответа вызываемой стороны (предположительно, станции услуг оператора) источник вызова теряет контроль над линией. Вызывающий абонент может повесить трубку, но линия не будет освобождена да тех пор, пока не повесит трубку вызываемая сторона (оператор). Если аргумент не задан или задана 1, то, когда вызывающая сторона вешает трубку, ее телефон немедленно зазвонит. Если задан аргумент 2, то, когда «оператор» выполняет мгновенный сброс магистральной линии, зазвонит телефон вызывающего абонента.

p

Активирует режим экранирования. По сути, это конфиденциальный режим без запоминания.

P[(x)]

Задает конфиденциальный режим. Может быть задан необязательный параметр x как значение семейство/ключ локальной базы данных AstDB. Эта опция полезна для принятия звонков на основании черного списка (явно запрещающего звонки с указанных номеров) или белого списка (явно перечисляющего номера, звонки с которых должны приниматься обязательно). См. также LookupBlacklist().

r

Указывает генерировать сигналы вызова вызывающему абоненту, не передавая никаких аудиосигналов до тех пор, пока не получен ответ на звонок. Обычно этот флаг не нужен, поскольку Asterisk сама будет генерировать сигналы вызова.

S(x)

Прерывает звонок через x секунд после ответа вызываемой стороны.

t

Разрешает вызываемой стороне переадресовать звонок, нажав кнопку #. Пожалуйста, обратите внимание, что, если используется эта опция, повторные приглашения выключены, поскольку Asterisk необходимо отслеживать вызов, чтобы зафиксировать момент нажатия кнопки # вызываемой стороной.

T

Разрешает ответившему абоненту переадресовывать соединенный вызов, нажав кнопку #. Опять же, обратите внимание, что при использовании этой опции повторные приглашения выключены, поскольку Asterisk необходимо отслеживать вызов, чтобы зафиксировать момент нажатия кнопки # вызываемой стороной.

w

Разрешает ответившему абоненту начинать и останавливать запись разговора на диск, нажав последовательность кнопок automon (которая задана в файле features.conf). Если задана переменная TOUCH_MONITOR, ее значение будет передано как аргумент в приложение Monitor() в начале записи. Если переменная не задана, в Monitor() передаются значения по умолчанию, WAV||m.

W

Позволяет вызывающему абоненту записывать разговор на диск, нажав последовательность кнопок automon (которая задана в файле features.conf).

k

Позволяет ответившему абоненту парковать вызов (переключать на другой телефон), передав DTMF-последовательность, определенную для парковки вызовов в файле features.conf.

K

Позволяет вызывающей стороне парковать вызов, передав DTMF-последовательность, определенную для парковки вызовов в файле features.conf. Если включен аргумент URL, этот URL будет отправлен каналу (если поддерживается). Если задать переменную канала OUTBOUND_GROUP перед вызовом Dial(), все каналы типа peer, созданные данным приложением, будут помещаться в эту группу вызовов. В следующем примере все каналы peer, созданные приложением Dial(), будут частью группы вызовов test:

; используем OUTBOUND_GROUP

exten => 123,1,Set(OUTBOUND_GROUP=test)

exten => 123,n,Dial(IAX2/anotherbox/12345)

Если задана переменная OUTBOUND_GROUP_ONCE, все каналы peer,созданные данным приложением, будут помещены в эту группу. Однако, в отличие от OUTBOUND_GROUP, эта переменная будет сброшена после использования. Приложение Dial() при выходе задает следующие переменные:

DIALEDTIME (время дозвона)

Общее время с момента начала выполнения Dial() до завершения.

ANSWEREDTIME (время ответа)

Общее время вызова.

DIALSTATUS (статус звонка)

Статус звонка, задается одним из следующих значений:

CHANUNAVAIL (канал недоступен)

Канал недоступен.

CONGESTION (перегрузка)

Канал возвратил сигнал перегрузки, обычно свидетельствующий о невозможности завершить соединение.

NOANSWER (не отвечает)

Канал не ответил в течение времени, заданного опцией времяожидания-ответа.

BUSY (занят)

Вызываемый канал в настоящее время занят.

ANSWER (ответ)

Канал ответил на вызов.

CANCEL (отмена)

Вызов был отменен.

DONTCALL (не вызывать)

Вызов был переведен в состояние DONTCALL опциями экранирования или конфиденциальности.

TORTURE (отключение)

Вызов был переведен в состояние TORTURE опциями экранирования или конфиденциальности.

INVALIDARGS (недействительные аргументы)

В приложение Dial() были переданы недействительные аргументы.

; набираем семизначный номер по Zap-каналу 4

exten => 123,1,Dial(Zap/4/2317154)

; набираем тот же номер, но на этот раз дозвон будет

; осуществляться только в течение 10 с,

; после чего будет продолжено выполнение диалплана

exten => 124,1,Dial(Zap/4/2317154,10)

exten => 124,2,Playback(im-sorry)

exten => 124,3,Hangup()

; набираем тот же номер, но на этот раз без времени

; ожидания, и используем флаги t, T и m

exten => 125,1,Dial(Zap/4/2317154,,tTm)

; набираем добавочный номер 500 на удаленном хосте

; (по протоколу IAX), используя заданные

; имя пользователя и пароль

exten => 126,1,Dial(IAX2/username:password@remotehost/500)

; набираем номер, но ограничиваем звонок 5 мин

; (300 000 мс), начинаем предупреждать вызывающего

; абонента через 4 мин (240 000 мс) разговора

; и повторяем предупреждение каждые 30 с (30 000 мс)

exten => 127,1,Dial(Zap/4/2317154,,L[300000:240000:30000])