2012년 5월 1일 화요일

Asterisk에서 Dial Plan 설정하는 extensions.conf 파일

출처 : http://jhyuns.tistory.com/entry/PracticerAsterisk%EC%9D%98-%EB%8B%A4%EC%9D%B4%EC%96%BC%ED%94%8C%EB%9E%9C%EC%9D%98-%EC%84%A4%EC%A0%95%EC%9D%84-%EC%9C%84%ED%95%9C-extensionsconf-%EC%84%A4%EB%AA%85


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()
;---------------------------설정 끝 ----------------------------
위 와 같이, extensions.conf을 설정하고 asterisk를 재시작하믄 간단하게나마 내선 통화와 콜백 테스트는 
할 수 있게 될 겁니다.

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
을 실행 합니다.

댓글 없음:

댓글 쓰기