|
|
Line 112: |
Line 112: |
|
| |
|
| CHANNEL 변수 역시 각 채널마다 중복되지 않는 키 정보로 사용될 수 있다. Hex number 값으로 구성되며, 해당 Exten 으로 채널을 생성할 경우, 1씩 올라가는 방식이다. 하지만 Asterisk 재시작시, 모든 채널 값들이 0으로 초기화되기 때문에 재시작을 하게 된다면, 재시작 이전의 CHANNEL 변수 값과 중복되는 현상이 발생한다. | | CHANNEL 변수 역시 각 채널마다 중복되지 않는 키 정보로 사용될 수 있다. Hex number 값으로 구성되며, 해당 Exten 으로 채널을 생성할 경우, 1씩 올라가는 방식이다. 하지만 Asterisk 재시작시, 모든 채널 값들이 0으로 초기화되기 때문에 재시작을 하게 된다면, 재시작 이전의 CHANNEL 변수 값과 중복되는 현상이 발생한다. |
|
| |
| == Functions ==
| |
| === AddQueueMember(), RemoveQueueMember() ===
| |
| Queue 에 멤버를 추가/삭제 한다. 상담원의 Login/Logout 으로 이해하면 된다.
| |
| <pre>
| |
| [QueueMemberFunctions]
| |
| exten => *54,1,Verbose(2,Logging In Queue Member)
| |
| smae => n,Set(MemberChannel=${CHANNEL(channeltype)}/${CHANNEL(peername)})
| |
| same => n,AddQueueMember(support,${MemberChannel})
| |
| same => n,Verbose(1,${AQMSTATUS}) ; ADDED, MEMBERALREADY, NOSUCHQUEUE
| |
| smae => n,Playback(agent-loginok)
| |
| same => n,Hangup()
| |
|
| |
| exten => *56,1,Verbose(2,Logging Out Queue Member)
| |
| same => n,Set(MemberChannel=${CHANNEL(channeltype)}/${CHANNEL(peername)})
| |
| same => n,RemoveQueueMember(support,${MemberChannel})
| |
| same => n,Verbose(1,${RQMSTATUS}) ; ADDED, MEMBERALREADY, NOSUCHQUEUE
| |
| same => n,Playback(agent-loggedoff)
| |
| same => n,Hangup()
| |
| </pre>
| |
|
| |
| === PauseQueueMember(), UnpauseQueueMember() ===
| |
| 해당 멤버를 Pause/Unpause 시킨다. 상담원의 자리비움, 대기중 으로 이해하면 된다. Queue 에서 멤버를 추가/삭제 하지 않고도 가용/비가용 여부를 설정할 수 있다.
| |
| <pre>
| |
| exten => *72,1,Verbose(2,Pause Queue Member)
| |
| same => n,Set(MemberChannel=${CHANNEL(channeltype)}/${CHANNEL(peername)})
| |
| same => n,PauseQueueMember(support,${MemberChannel})
| |
| same => n,Verbose(1,${PQMSTATUS}); PAUSED, NOTFOUND
| |
| same => n,Playback(dictate/paused)
| |
| same => n,Hangup()
| |
|
| |
| exten => *87,1,Verbose(2,Unpause Queue Member)
| |
| same => n,Set(MemberChannel=${CHANNEL(channeltype)}/${CHANNEL(peername)})
| |
| same => n,UnpauseQueueMember(support,${MemberChannel})
| |
| same => n,Verbose(1,${UPQMSTATUS}); UNPAUSED, NOTFOUND
| |
| same => n,Playback(agent-loginok)
| |
| same => n,Hangup()
| |
| </pre>
| |
|
| |
| === AMD() ===
| |
| This application attempts to detect answering machines at the beginning of outbound calls. Simply call this application after the call has been answered (outbound only, of course).
| |
|
| |
| When loaded, AMD reads amd.conf and uses the parameters specified as default values. Those default values get overwritten when the calling AMD with parameters.
| |
|
| |
| This application sets the following channel variables:
| |
|
| |
| <pre>
| |
| AMDSTATUS - This is the status of the answering machine detection
| |
| MACHINE
| |
| HUMAN
| |
| NOTSURE
| |
| HANGUP
| |
| AMDCAUSE - Indicates the cause that led to the conclusion
| |
| TOOLONG - Total Time.
| |
| INITIALSILENCE - Silence Duration - Initial Silence.
| |
| HUMAN - Silence Duration - afterGreetingSilence.
| |
| LONGGREETING - Voice Duration - Greeting.
| |
| MAXWORDLENGTH - Word Count - maximum number of words.
| |
| </pre>
| |
|
| |
| Syntax
| |
| <pre>
| |
| AMD([initialSilence,[greeting,[afterGreetingSilence,[totalAnalysis Time,[miniumWordLength,[betweenWordSilence,[maximumNumberOfWords,[silenceThreshold,[maximumWordLength]]]]]]]]])
| |
| </pre>
| |
| * initialSilence - Is maximum initial silence duration before greeting. If this is exceeded set as MACHINE
| |
| * greeting - is the maximum length of a greeting. If this is exceeded set as MACHINE
| |
| * afterGreetingSilence - Is the silence after detecting a greeting. If this is exceeded set as HUMAN
| |
| * totalAnalysis Time - Is the maximum time allowed for the algorithm to decide HUMAN or MACHINE
| |
| * miniumWordLength - Is the minimum duration of Voice considered to be a word
| |
| * betweenWordSilence - Is the minimum duration of silence after a word to consider the audio that follows to be a new word
| |
| * maximumNumberOfWords - Is the maximum number of words in a greeting. If this is exceeded set as MACHINE
| |
| * silenceThreshold - How long do we consider silence
| |
| * maximumWordLength - Is the maximum duration of a word to accept. If exceeded set as MACHINE
| |
|
| |
| === Queue ===
| |
| In addition to transferring the call, a call may be parked and then picked up by another user.
| |
|
| |
| This application will return to the dialplan if the queue does not exist, or any of the join options cause the caller to not enter the queue.
| |
|
| |
| This application does not automatically answer and should be preceeded by an application such as Answer(), Progress(), or Ringing().
| |
|
| |
| This application sets the following channel variable upon completion:
| |
| <pre>
| |
| QUEUESTATUS - The status of the call as a text string.
| |
| TIMEOUT
| |
| FULL
| |
| JOINEMPTY
| |
| LEAVEEMPTY
| |
| JOINUNAVAIL
| |
| LEAVEUNAVAIL
| |
| CONTINUE
| |
| </pre>
| |
|
| |
| Syntax
| |
| <pre>
| |
| Queue(queuename,[options,[URL,[announceoverride,[timeout,[AGI,[macro,[gosub,[rule,[position]]]]]]]]])
| |
| </pre>
| |
| * queuename
| |
| * options
| |
| ** C - Mark all calls as "answered elsewhere" when cancelled.
| |
| ** c - Continue in the dialplan if the callee hangs up.
| |
| ** d - data-quality (modem) call (minimum delay).
| |
| ** F - When the caller hangs up, transfer the called member to the specified destination and start execution at that location.
| |
| *** context
| |
| *** exten
| |
| *** priority
| |
| ** F - When the caller hangs up, transfer the called member to the next priority of the current extension and start execution at that location.
| |
| ** h - Allow callee to hang up by pressing *.
| |
| ** H - Allow caller to hang up by pressing *.
| |
| ** n - No retries on the timeout; will exit this application and go to the next step.
| |
| ** i - Ignore call forward requests from queue members and do nothing when they are requested.
| |
| ** I - Asterisk will ignore any connected line update requests or any redirecting party update requests it may receive on this dial attempt.
| |
| ** r - Ring instead of playing MOH. Periodic Announcements are still made, if applicable.
| |
| ** R - Ring instead of playing MOH when a member channel is actually ringing.
| |
| ** t - Allow the called user to transfer the calling user.
| |
| ** T - Allow the calling user to transfer the call.
| |
| ** w - Allow the called user to write the conversation to disk via Monitor.
| |
| ** W - Allow the calling user to write the conversation to disk via Monitor.
| |
| ** k - Allow the called party to enable parking of the call by sending the DTMF sequence defined for call parking in features.conf.
| |
| ** K - Allow the calling party to enable parking of the call by sending the DTMF sequence defined for call parking in features.conf.
| |
| ** x - Allow the called user to write the conversation to disk via MixMonitor.
| |
| ** X - Allow the calling user to write the conversation to disk via MixMonitor.
| |
| * URL - URL will be sent to the called party if the channel supports it.
| |
| * announceoverride
| |
| * timeout - Will cause the queue to fail out after a specified number of seconds, checked between each queues.conf timeout and retry cycle.
| |
| * AGI - Will setup an AGI script to be executed on the calling party's channel once they are connected to a queue member.
| |
| * macro - Will run a macro on the called party's channel (the queue member) once the parties are connected.
| |
| * gosub - Will run a gosub on the called party's channel (the queue member) once the parties are connected.
| |
| * rule - Will cause the queue's defaultrule to be overridden by the rule specified.
| |
| * position - Attempt to enter the caller into the queue at the numerical position specified. 1 would attempt to enter the caller at the head of the queue, and 3 would attempt to place the caller third in the queue.
| |
|
| |
|
| == Books == | | == Books == |
개요
Asterisk Dialplan 설정 법 설명.
Dialplan syntax
Asterisk 에서 Dialplan 을 설정하는 파일 이름은 extensions.conf 이다.
Dialplan 은 크게 4가지 컨셉으로 구성되어 있다.
contexts, extensions, priorities, applications
Context
Context 는 쉽게 말해서 객체지향의 Class 와 비슷한 개념으로 볼 수 있다.
Context 를 생성할 때는 Context 이름을 중괄호([])로 감싸야한다. 이름에 사용할 수 있는 문자는 A-Z, a-z, 0-9, -, _ 이다.
[incoming]
- Context 생성시 사용가능한 문자 길이는 최대 79 자 이다. (80 characters - 1 terminating null).
Context 에는 특별히 사용되는 특수 Context 두 가지가 있는데, [general] 과 [globals] 이다. [general] 섹션은 일반적인 Dialplan 설정들, [globals] 섹션에는 전역 Dialplan 설정들이 있는 Context 이다. 새로운 Context 생성시 [general], [globals], [default] 이름은 피하도록 하자. 이 외의 다른 이름은 전부 사용 가능하다.
채널을 설정할 경우(sip.conf, iax.conf, chan_dahdi.conf 등등..) 필수 입력 항목중에 context 항목이 있다. Context 는 호간의 연결 성립시, 채널이 동작하게되는 Dialplan 의 시작점이다. 즉, Asterisk 에 등록된 채널 A 가 있을 경우, 만약 A 로 전화가 걸려왔을 때, 어떤 방식으로 전화가 흘러가게끔 할 것인지를 결정하게 되는 것이다.
- 전화(Connection)가 걸려왔을 경우 정해진 수순에 따라 전화가 흘러가게끔 하는 것, 이것이 Dialplan 이다.
- ex) 10초동안 응답이 없을 경우 자동 IVR 연결, 10초 동안 연결이 없을 경우 휴대폰 전화로 연결 등등..
Context 사용시 주의해야 할 점은 보안이다. 정확한 방법으로 Context 을 설정한다면 정해진 사용자에게 정해진 기능을 제공할 수 있다. 하지만 엉뚱한 방법으로 Context 를 설정하게 되면, 엉뚱한 기능들이 동작할 수 있다. 게다가 Asterisk 를 위시한 많은 IP-PBX 시스템은 주요 해킹 공격 대상이 된다. 일반적인 Web 과 달리 통화요금 과금과 같이 돈이 관련된 부분이기 때문이다. 때문에 Context 와 같은 Dialplan 설정시 많은 주의를 요한다.
Extensions
Extensions 흔히 전화번호로도 번역이 된다. 하지만 Asterisk 에서의 Extensions 는 더 강력한 기능을 가진다.
Asterisk 에서는 각각의 Context 마다 하나 혹은 다수의 Extensions 를 가질 수 있다. 해당 Extension 이 동작할 경우(전화가 걸려온 경우), Asterisk 는 해당 Extension 에 설정된 Dialplan 을 수행하는 것이다.
Extension 설정시, exten 구문으로 시작하게 된다.
exten =>
Extension 은 세가지 구성요소들을 가진다.
- name(or number)
- priority
- application
이 구성 요소들은 쉼표(,)로 구분된다.
exten => name, priority, application()
Pattern Matching
원문은 이곳<ref>https://wiki.asterisk.org/wiki/display/AST/Pattern+Matching</ref>에서 확인할 수 있다.
패턴 매칭은 항상 "_" 기호로 시작한다. 해당 기호로 시작해야지만 Asterisk 에서 패턴 매칭을 사용한다는 것을 인식할 수 있기 때문이다.
X, Z, N
X, Z, N 은 가장 흔히 사용하는 패턴 매칭 기호이다.
- X/x 대/소문자 구분이 없다. 0 ~ 9 까지의 하나의 숫자를 의미한다.
- Z/z 대/소문자 구분이 없다. 1 ~ 9 까지의 하나의 숫자를 의미한다.
- N/n 대/소문자 구분이 없다. 2 ~ 9 까지의 하나의 숫자를 의미한다.
- 예제를 들어보자. 다음은 6400 부터 6499 까지 의 번호를 매칭하는 패턴이다.
exten => _64XX,1,SayDigits(${EXTEN})
Character Sets
만약 특정 숫자의 범위를 지정하고자 한다면, "[]" 기호안에 숫자의 범위를 입력하여 지정할 수 있다. 예를 들어, 6300 번 부터 6400 번까지의 번호를 지정하고 싶다면 어떻게 해야 할까? (_64XX, _63XX) 과 같이 두개의 번호를 지정하여 사용할 수 있다. 하지만 범위지정 방식으로 사용할 경우 (_6[34]XX) 으로 설정이 가능하다.
만약 [1-468] 과 같이 지정을 했다면, 이는 1 부터 468 까지의 숫자가 아니라, 4, 6, 8 의 숫자를 의미하는 것이다.
Other Special Characters
Within Asterisk patterns, we can also use a couple of other characters to represent ranges of numbers. The period character (.) at the end of a pattern matches one or more remaining characters. You put it at the end of a pattern when you want to match extensions of an indeterminate length. As an example, the pattern _9876. would match any number that began with 9876 and had at least one more character or digit.
The exclamation mark (!) character is similar to the period and matches zero or more remaining characters. It is used in overlap dialing to dial through Asterisk. For example, _9876! would match any number that began with 9876 including 9876, and would respond that the number was complete as soon as there was an unambiguous match.
Asterisk treats a period or exclamation mark as the end of a pattern. If you want a period or exclamation mark in your pattern as a plain character you should put it into a character set: [.] or [!].
Variables
Using the CONTEXT, EXTEN, PRIORITY, UNIQUEID, and CHANNEL Variables
원문은 이곳<ref>https://wiki.asterisk.org/wiki/display/AST/Using+the+CONTEXT%2C+EXTEN%2C+PRIORITY%2C+UNIQUEID%2C+and+CHANNEL+Variables</ref>에서 확인할 수 있다.
Asterisk dialplan 에서 채널을 생성하고 사용할 때 필요한 정보는 CONTEXT, EXTEN, PRIORITY 이다. 즉 다음과 같이 사용한다.
exten=>6123,1,SayNumber(${EXTEN})
그런데, 만약 extension 정보를 수정하고 다시 reload 를 했다면 어떻게 될까? 만약 채널에서 현재 사용중인 EXTEN 정보가 변경이 되었다면 문제가 발생할 것이다. 그래서 이를 위해 Asterisk 내부적으로 생성되고 관리되는 키 정보가 있는데, 이것이 바로 UNIQUEID 이다. 모든 채널들은 고유의 Unique 값들을 가지게 된다. UNIQUEID 값은 흔히 다음과 같이 표현된다.
1267568856.11
Dialplan 에서 채널을 생성할 경우, UniqueID 값은 자동생성되며, 만약 AMI 등과 같은 명령으로 채널을 생성할 경우, 이를 지정해줄 수도 있다.
Asterisk 에서 자동생성되는 Unique ID 값은 다음과 같이 구성되어 있다.
1267568856.11
채널_생성_당시의_유닉스_타임.Asterisk_재시작_이후_만들어진_채널_갯수
CHANNEL 변수 역시 각 채널마다 중복되지 않는 키 정보로 사용될 수 있다. Hex number 값으로 구성되며, 해당 Exten 으로 채널을 생성할 경우, 1씩 올라가는 방식이다. 하지만 Asterisk 재시작시, 모든 채널 값들이 0으로 초기화되기 때문에 재시작을 하게 된다면, 재시작 이전의 CHANNEL 변수 값과 중복되는 현상이 발생한다.
Books
- Asterisk: The Definitive Guide, 4th Edition
References
<references />