네이버카페 KAUG


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을 호출할 수 없었던 경우의 처리입니다.