Asterisk & FastAGI with Node.js #1 시작하기

Pustinia·2020년 6월 24일
1

1. Velog를 시작하며..

Voice에 발들 들이고 Asterisk를 시작한 지 1년이 넘어간다.
처음에는 이렇게 오랫동안 이쪽 일을 하게 될 줄 몰랐었고 당연히 VOIP가 뭔지, SIP 가 뭔지, IVR은 왜 필요한지, 교환기가 뭔지 정말 백지상태 였었다.
단지 순수하게 node.js / javascript 가 배우고 싶어 시작한 일이었었다.
이 자리를 빌려 무모한 제 Voice관련 질문에 성심껏 대답해준 회사 동료들에게 무한한 감사와 존경을 드린다.

Asterisk와 외부 DB 연동을 위해서는 FastAGI 개발이 필요하다. 앞으로의 글에서는 FastAGI 를 Node.js 로 개발했었던 기록들과 삽질, 팁글 위주로 글을 작성할 예정이다. 시리즈의 최종 목표는 AGI 상용 서비스를 위한 pm2, logger, RestApi 연동 까지 글로 풀어볼 예정이다.(가능하다면..)

혼자서 맨땅 해딩하면서 습득한 정보 + 구글링 기준으로 설명하다 보니 부족한 부분이나 틀린 부분이 있을 것이다. 댓글 남겨 주시면 적극적으로 수정하도록 하겠다.

2. Asterisk 란?

Asterisk는 OpenSource IP-PBX 프로그램 이다. 전화를 연결해 주는 사설 교환기 역활을 IP 기반의 소프트웨어가 대신해주는 일을 하며 무려 공짜이다 !!

예를 들어, 배고픈 개똥이가 중국집으로 전화를 걸면,
"안녕하세요 하오츠 중국집입니다. 맛있는 음식을 대접하겠습니다. 잠시만 기다려 주시면 연결해 드리겠습니다."
라고 음성을 들려주는 기능도 그 기능 중 하나이다.

당연하게 생각했었던 전화를 걸고, 멘트를 듣고, 응답을 하고, 주문을 했었던 이 모든 기능이 사실은 정해진 시나리오와 정해진 DB를 설정해 수행되고 있었던 것이다. 참으로, 놀랍지 않은가 ?;; -_-;

3. Dialplan 은 ?

사실 Asterisk에 대해 자세히 설명하고 싶은 것은 아니다. 세상에는 고수들이 넘치고, 홈페이지의 Document에도 설명이 아주 잘 되어 있다.(영어로..)
AGI 를 이야기하기 전에, Dialplan 을 알고 가야 한다.
Dialplan은 IP-PBX로 전화가 들어오면 sequential 하게 한줄 한줄 실행되는 스크립트 명령문이다.
Asterisk가 설치되어 있다면, /etc/asterisk/extension.conf 파일 이 그것이다.

[context1]
exten => s,1,NoOp(context1====>)  ; log
 same => n,Answer()               ; answer
 same => n,Playback(hello-world)  ; "hello world" 음성 멘트 play      
 same => n,AGI(agi://127.0.0.1:5000) ; AGI 호출
 same => n,Wait(10)               ; 10초 wait
 same => n,Hangup()               ; 전화 종료

4. FastAGI 는 뭐 할때 사용할까 ?

웬만한 로직들은 Dialplan에서 대부분 구현이 가능하다. 약간의 shell script와 Dialplan 함수를 잘 알고 있다면 말이다. 난 아니다..
하지만 아래의 경우 FastAGI 를 사용하면 효과적인 경우가 존재한다.
- 외부 연동 DB (CRUD) 처리
- Asterisk 서버 외부에서 데이터를 연동 해야 하는 경우 (RestAPI)
- 나머지는 생각이 나지 않는다... OTL
어쨌든,, 시나리오 처리를 하려면 사용자가 설정한 시나리오 데이터들을 DB에서 불러와야 할 것이다. 이때 FastAGI 를 활용하면 효과적이다.

그래서 Asterisk AGI 를 구글에서 검색하면, 혼돈의 카오스가 펼쳐진다. 적어도 난 그랬었다..

AGI 너무 많다 !!!!

AGI 는 Asterisk Gateway Interface의 약자 이며, 여러 언어로 Asterisk 기능을 이용할 수 있게 제공되는 Interface이며 extensions.conf(dialplan) 파일에서 호출된다.

FastAGI 는 network connection을 이용해 원격에서 dialplan 프로세싱이 가능한 Interface이다. 물론 AGI 기반 위에서 작동한다.

FastAGI 는 여러 가지 언어에서 지원 가능하지만, 그 중 여기서는 javascript(Node.js)언어를 이용하고, npm 에서 ding-dong 기반의 모듈로 설명하고자 한다.

나머지 DeadAGI 는 1.6 버전부터 사용하지 않고, EAGI 는 음성 데이터가 필요할 때 사용되며, Async AGI 는 아직 사용 경험이 없다.

5. 그럼 이제 어떻게 시작 할까 ?

필요 준비물
1. vscode 설치 (https://code.visualstudio.com)
2. node.js 설치 (https://nodejs.org/ko)
3. npm 설치 (Node.js 를 설치하면 된다.)

node.js 로 개발을 시작한 EU ?

  • npm 기반의 정말 빠른 prototype 개발
  • 접근하기 쉬운 javascript
  • 과거 웹 개발자 였었다...
  • 짧은 코드량

자, 다음 장에 계속...
ps. 처음 글을 적는데 2시간이 넘게 걸렸어!! 다들 이렇게 오래 걸리나요 ?

[참고자료]
Asterisk AGI 지원 언어 및 라이브러리 (https://wiki.asterisk.org/wiki/pages/viewpage.action?pageId=32375589)

profile
취미로 개발 하고 싶은 개발자

0개의 댓글