Asterisk에서 Dial Plan 설정하는 extensions.conf 파일
◈ 다이얼 플랜(Dial Plan)의 개요
1. 다이얼 플랜이란?
간단히 말하자면 어느 번호의 Inbound(착신)와 Oubound(발신) Call(호)를 어떻게 처리할까 하는 통화 룰을
결정하는 것이라 할 수 있겠 습니다.(이런 부분을 Asterisk는 자유롭게 커스텀마이즈 할 수 있다는 것이,
Asterisk의 강점입니다.)
따라서, extensions.conf 은 위와 같은 콜의 흐름을 기술해 나가는 설정 파일이라 하겠습니다.
2. extensions.conf 파일
Extension은 , 어느 채널의 착신(처)이나 다이얼 숫자를 기동되는 명령이 됩니다.
Call이 다이얼 플랜에 따라서 어떻게 다루어질까를 결정합니다.
이 파일에 기술 되는 다이얼 플랜은,
Context(문맥), Extension(내선번호), Priority(우선순위), Application(응용부)
의 4 부분으로 구성되어집니다. (※ 위의 한글용어는 설명을 위해 임의로 붙였습니다.)
exten => extension명(내선번호), priority(우선순위), Application(응용명령)
3. Context(문맥)
다이얼 플랜을 그룹에 이름을 붙인 것이 Context가 됩니다. 어떤 Context 안에 정의된 extension는
다른 Context에 영향을 주지 못합니다. (단 "include =>"로 관계가 연결되지 않았을 경우임.)
Context는 괄호 [ ] 안에 표기하여 사용하며, 알파벳(대,소문자), 숫자, 하이픈(-),언더스코아(_)로만
이루어진 문자로 표기합니다. 예) [out-going], [070_inbound]
Context 중에서 [general] 은 다이얼 플랜에 관한 일반 설정이 있는 Context 이고, [global]은 설정
파일에서 사용될 전역변수(Global Variable)를 정의하는 특별한 콘텍스트명이 있습니다.
◈ 다이얼 플랜(Dial Plan) 설정하기
전번에 설명드린 sip.conf와 연장하여 /etc/asterisk/extensions.conf 파일을 설명드리고자 합니다.
전에 sip.conf에 등록하였던 내선번호 2000~2002 사이에 통화에 대한 다이얼 플랜을 예로 들어 설명하고자 합니다.
1. 우선 /etc/asterisk/extensions.conf 파일을 백업을 하여 두십시오.
# cp /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.bak |
위와 같이 백업을 해두셨다면, 신규파일을 작성하면서 설명을 보는 것이 좋다고 생각됩니다.
2. 이제 아래와 같은 내용으로 /etc/asterisk/extensions.conf 를 편집합시다.
;-------------------------이하 설정-----------------------
[default];현재 설정 없음.
[lan]exten => 2000,1,Dial(SIP/2000,30) exten => 2000,2,Congestion exten => 2000,102,Busy exten => 2001,1,Dial(SIP/2001,30) exten => 2001,2,Congestion exten => 2001,102,Busy exten => 2002,1,Dial(SIP/2002,30) exten => 2002,2,Congestion exten => 2002,102,Busy
;콜 테스트용
; 9000번 번호에 다이얼 하면, 아래 행의 순서로 실행됩니다. exten => 9000,1,Answer() exten => 9000,2,Wait(1) exten => 9000,3,Playback(demo-congrats) exten => 9000,4,Echo() exten => 9000,5,Hangup() ;---------------------------설정 끝 ---------------------------- |
할 수 있게 될 겁니다.
3. 위파일을 적용 시키려면 콘솔 화면에서 Asterisk를 재가동합니다.
# asteriskr -vvvvvr ipbpxsrv*CLI> reload |
◈ 다이얼 플랜(Dial Plan)의 각 항목 해석
9000 번으로 콜 테스트를 성공 하면, 각각의 내선번호로 걸어 보십시오. 각각의 내선번호끼리 통화가 가능하면
위 설정이 잘 적용 된것입니다. ( 앗 ! 저의 환경에서는 약간의 에코가 걸렸습니다만, 통화는 가능 햇습니다.)
그럼 위의 설정한 다이얼 플랜의 각 항목을 설명해 보겟습니다.
/etc/asterisk/extensions.conf
1: [default]
2: ;현재 설정 없음.
3:
4: [lan]
5: exten => 2000,1,Dial(SIP/2000,30)
6: exten => 2000,2,Congestion
7: exten => 2000,102,Busy
8: exten => 2001,1,Dial(SIP/2001,30)
9: exten => 2001,2,Congestion
10: exten => 2001,102,Busy
11: exten => 2002,1,Dial(SIP/2002,30)
12: exten => 2002,2,Congestion
13: exten => 2002,102,Busy
14: ; 콜 테스트용
15: ; 9000 번호에 다이얼 하면, 아래의 행의 순서로 실행됩니다.
16: exten => 9000,1,Answer()
17: exten => 9000,2,Wait(1)
18: exten => 9000,3,Playback(demo-congrats)
19: exten => 9000,4,Echo()
20: exten => 9000,5,Hangup()
[해설]
1행 Context [default]는 sip.conf 등으로 현재 사용하고 있었습니다만,
[general]에 기술되어 있기 때문에, 준비되어 있어라고 하는 것으로 기입했습니다.
4행 sip.conf그리고 기술한, Context [lan]을 준비합니다.
5행 exten => 2000,1,Dial(SIP/2000,30)
Dial()함수로 SIP의 2000(내선2000)을 불러 내며(calling), 응답 제산시간을 30초로 하고 있습니다.
2000(내선2000)이 응답하면 통화가 가능 합니다.
제한 시간 내에 응답하지 않을 경우, 현재의 우선 순위(priority)에+1(합계2)해, 거기에 대응한
레코드를 호출합니다.
그리고 2000(내선2000)이 통화중인 경우 원래 호출 자체를 할 수 없는 경우는 현재의 우선 순위에
+101되어 대응 레코드가 불려 갑니다.
6행 exten => 2000,2,Congestion
우선 순위가2, 즉 Dial() 함수로 2000을 콜링하여,
제한 시간내에 응답하지 않았던 경우에 호출되는 부분입니다..
Congestion 명령어는 발신측이 자르는 것을 기다립니다. 자를 때까지는 절단음이 흐릅니다.
7행 exten => 2000,102,Busy
우선 순위가102, 즉 2000(내선2000)이 다른 곳과 통화중에 있어,
Dial() 함수로 2000을 호출할 수 없었던 경우의 처리입니다.
Busy명령어로 Busy음을 흘립니다.
8~10행 2001의 설정
11~13행 2002의 설정
16행 exten => 9000,1,Answer()
9000번의 콜에 응답합니다.
17행 exten => 9000,2,Wait(1)
착신과 동시에 음성을 발생시키면, 이야기 처음이 빠지는 일이 있으므로1초 wait 시킵니다.
18행 exten => 9000,3,Playback(demo-congrats)
demo-congrats.gsm파일을 재생합니다. 확장자(extension)는 기입할 필요는 없습니다.
19행 exten => 9000,4,Echo()
메세지 재생 후(선택한 녀석이라면 길다!)자신의 소리를 에코 해 줍니다.
발신자가 '#' 를 누르면 종료합니다.
20행째 exten => 9000,5,Hangup()
끊기, 콜의 단절을 실시합니다.
방금전의 내선의 정보를 정리해 보겠습니다.(매크로 지정)
위에서는 3개의 내선번로만 다이얼 플랜을 했을 뿐입니다만, 많은 내선번홀 가지고 위와 같은 내용을 복수 써 가며 설
정 하는 것은 큰 일입니다.
200X 로 시작되는 번호를 같은 동작을 주도록 다음과 같이 합니다.
붉은 글씨는 변경하기위하여 삭제될 문이다.현재의 파일
1: [default]
2: ;현재 설정 없음.
3:
4: [lan]
5: exten => 2000,1,Dial(SIP/2000,30)
6: exten => 2000,2,Congestion
7: exten => 2000,102,Busy
8: exten => 2001,1,Dial(SIP/2001,30)
9: exten => 2001,2,Congestion
10: exten => 2001,102,Busy
11: exten => 2002,1,Dial(SIP/2002,30)
12: exten => 2002,2,Congestion
13: exten => 2002,102,Busy
14:; 콜 테스트용
15:; 9000 번호에 다이얼 하면 아래의 행 순서로 실행됩니다.
16: exten => 9000,1,Answer()
17: exten => 9000,2,Wait(1)
18: exten => 9000,3,Playback(demo-congrats)
19: exten => 9000,4,Echo()
20: exten => 9000,5,Hangup()
변경 후의 파일
녹색 글자가 바뀐 글자이다.
1: [default]
2: ;현재 설정 없음.
3:
4: [lan]
5: exten => _200X,1,Dial(SIP/{EXTEN},30)
6: exten => _200X,2,Congestion
7: exten => _200X,102,Busy
8: ; 콜 테스트용
9: ; 9000번호로 다이얼 하면 아래의 행 순서로 실행됩니다.
10: exten => 9000,1,Answer()
11: exten => 9000,2,Wait(1)
12: exten => 9000,3,Playback(demo-congrats)
13: exten => 9000,4,Echo()
14: exten => 9000,5,Hangup()
내선마다 준비해 있었던 extension을 하나로 정리했습니다.
1.”_200X”와 같이”_”로 시작되는 경우는, 패턴 지정이라고 나타내 보입니다.2.다음의 문자를 사용할 수 있습니다.
X : 0 - 9 의 숫자
Z : 1 - 9 의 숫자
N : 2 - 9 의 숫자
[12679] : 1,2,6,7,9
. : 와일드 카드
여기에서는 200X 그러니까, 2000~2009번까지를 지정해 있습니다.
3.${EXTEN} 은 입력된 내선 번호가 들어가는 환경 변수입니다.,
"2000" 과 다이얼 되면 ${EXTEN} 는, "2000" 되어, "내선 번호 "2000" 가 호출되어집니다.
4. extensions.conf를 리로드 하려면 ,
asterisk의 화면에서
# asterisk -vvvvr
>extensions reload
을 실행 합니다.
댓글 없음:
댓글 쓰기