IT/Unified Communications

[FreePBX] AMI란 무엇이고 접속해보기

변화의 물결1 2025. 4. 27. 12:16

 

 

안녕하세요

 

 FreePBX 관련해서 물리적 측면 보다 SW적 확인할 일이 있어서 자료를 찾아보고 테스트해 본 내용을 공유드립니다.

 FreePBX분야 전문 개발자가 아니다 보니, 실수한 내용들이 있을 수 있습니다.

 참고 정도로 봐주시고, 잘못된 부분은 댓글 주시면 수정하도록 하겠습니다.

 

 FreePBX에 접근해서 신호를 제어하기 위해서 AMI(Asterisk Manager Interface)를 먼저 알고 접속해야 합니다. 그래서 첫 번째 내용으로 간단한 이론과 접속하는 방법을 정해보았습니다.

  API 방법도 있지만, AMI가 좀 더 제어권한이 많아 선택해서 테스트했습니다.

 

 이후 AMI로 해볼 수 있는 기능을 python으로 몇 가지 테스트하는 글을 올려 보겠습니다.

 테스트한 환경은 Virtual Box, FreePBX 15.0.23입니다.

 


 

1. AMI (Asterisk Manager Interface) 란?

 

 AMI는 Asterisk Manager Interface의 약자로, Asterisk PBX 시스템의 상태를 모니터링하고 제어할 수 있도록 외부에 제공하는 프로그래밍 인터페이스입니다.

 

 쉽게 말해, Asterisk 내부에서 일어나는 일들을 외부 프로그램이 확인하고, 전화를 걸거나 끊는 등의 명령을 내릴 수 있게 해주는 통신 창구라고 생각하면 됩니다.

 

1.1 AMI 주요 기능 및 역할

 

(1) 상태 모니터링: 현재 활성화된 통화 채널, 등록된 SIP 장치 상태, 통화 대기열(Queue) 상태 등 실시간 정보를 얻을 수 있습니다.

 

(2) 제어: 외부 프로그램에서 명령을 보내 전화를 걸거나(Originate), 채널을 끊거나(Hangup), 특정 설정을 변경하는 등의 작업을 수행할 수 있습니다.

 

(3) 이벤트 알림: 전화 수신, 통화 종료, 장치 상태 변경 등 Asterisk 내부에서 발생하는 다양한 이벤트를 실시간으로 외부 프로그램에 알려줍니다.

 

(4) 통합: CRM, 콜센터 솔루션, 커스텀 대시보드 등 다른 시스템과 Asterisk를 연동하는 데 핵심적인 역할을 합니다.

 

 

1.2 AMI를 사용 이유

 

(1) 자동화: 반복적인 전화 작업이나 상태 확인을 자동화할 수 있습니다.

 

(2) 맞춤형 솔루션 개발: FreePBX/Asterisk의 기본 기능을 넘어선 특화된 전화 관련 애플리케이션 개발이 가능합니다. (예: 클릭 투 콜, 실시간 통계 대시보드)

 

(3) 시스템 통합: 기존에 사용하던 다른 업무 시스템과 전화 시스템을 연동하여 업무 효율을 높일 수 있습니다.

 

 

2. AMI 접속 방법

 

 AMI에 접속하려면 먼저 FreePBX에서 AMI 사용자를 생성하고 설정을 활성화해야 합니다. 그런 다음, Telnet과 같은 간단한 도구나 프로그래밍 언어를 사용하여 접속할 수 있습니다.

 

2.1. FreePBX에서 AMI 사용자 설정하기

 

2.1.1 FreePBX Web에서 계정 생성하기

 

 FreePBX 웹 관리자 접속: FreePBX 관리자 페이지에 로그인합니다. 

 Asterisk Manager Users 이동: 상단 메뉴에서 Settings -> Asterisk Manager Users로 이동합니다.

 설정 메뉴와 기능은 FreePBX 버전에 따라 다를 수 있습니다.

 

새 사용자 추가: + Add Manager 버튼을 클릭합니다.

 

사용자 정보 입력:

Manager Name: AMI 접속 시 사용할 사용자 이름(ID)

Manager Secret: AMI 접속 시 사용할 비밀번호(PASSWORD) - 보안을 위해 복잡하게 설정하는 것이 좋습니다.

Deny & Permit: 보안을 위해 특정 IP 주소나 네트워크 대역에서만 접속을 허용하도록 설정합니다.

 

Deny: 0.0.0.0/0.0.0.0 (기본적으로 모든 IP 차단)

Permit: 192.168.0.10/255.255.255.255 (특정 IP 허용) 또는 192.168.0.0/255.255.255.0 (특정 네트워크 대역 허용) - AMI에 접속할 클라이언트 PC 또는 서버의 IP 주소를 입력해야 합니다.

 

 

 

Permissions: 이 사용자에게 부여할 권한을 설정합니다. 특정 작업만 허용하려면 필요한 권한(예: read=system,call,log, write=originate,command)을 선택하고, 모든 권한을 주려면 all을 체크합니다. (보안상 필요한 최소한의 권한만 부여하는 것이 좋습니다.)

 

 

 

저장 및 적용: 사용자 정보를 입력하고 Submit 버튼을 누른 후, 상단의 Apply Config 버튼을 눌러 변경 사항을 적용합니다.

 

 

 

 위와 같이 설정이 완료되면, manager_addtional.conf 파일에 계정정보가 추가됩니다.

 

 

2.1.2 리눅스 셀(Shell)에서 설정파일로 계정 생성

 

 Virtual Box(FreePBX)의 리눅스 셀(Shell) 상에서 AMI 접속 계정 정보를 추가하거나 SSH로 FreePBX 서버에 접속하여 해당 파일 내용을 수정할 수 있습니다.

 

# SSH로 FreePBX 서버 접속 후 vim 혹은 nano로 편집합니다.

sudo vim /etc/asterisk/manager_custom.conf

 

계정정보를 아래의 형식으로 입력합니다. (테스트를 위해서 간단하게 ID, PW, 권한을 입력했습니다.)

 

  

 

2.2 Telnet 또는 nc(netcat)로 접속 테스트

 

 AMI 접속을 테스트하는 방법은 Telnet 클라이언트나 nc (netcat) 유틸리티를 사용할 수 있습니다.

 

(1) 접속에 필요한 정보

 

 FreePBX 서버 IP 주소 (예: 192.168.219.110)

 AMI 포트 (기본값: 5038)

 생성한 AMI 사용자 ID(Username) (예: myuser)

 생성한 AMI 비밀번호(Secret) (예: myuser)

 

(2) Telnet 프로그램 windows용 Putty 이용하여 접속 테스트

 

Putty에 프로그램에서 telnet으로 선택하고 FreePBX 서버주소와 포트를 입력하고 "Open"을 눌러 접속합니다.

 

 

 

참고, 리눅스에서 nc 사용해서 접속 가능합니다.

$ nc 192.168.219.110 5038

 

(3) 접속 성공 시:

 

Asterisk Call Manager/X.Y.Z 와 같은 환영 메시지가 표시됩니다. (X.Y.Z는 AMI 프로토콜 버전)

 

 

 

2.3 AMI 로그인과 명령어 실행

 

(1) 로그인 명령어 실행

 

 버전 메시지를 확인한 후, 로그인 명령어를 직접 입력하고 Enter 키를 두 번 눌러 전송합니다.     

 (명령어 끝에는 항상 빈 줄이 필요하며, 대소문자 구분하지 않습니다.)

   

Action: Login

Username: myuser

Secret: myuser

(Enter 키 두 번 입력)

 

 로그인 성공 시 Response: Success와 Message: Authentication accepted 메시지가 포함된 응답이 옵니다. (명령어 뭉치를 복사해서 붙여넣기로 해도 됩니다. 로그인할 처음에 입력하면 에러가 나올 수 있습니다. 에러가 나오면 다시 붙여넣기 해서 엔터를 누르면 로그인됩니다.)

 

Web에서 만든 계정으로 접속한 경우

 

 

 

manger_custom.conf에서 만든 계정으로 접속한 경우

 

   

  

(2) 현재 채널 정보 명령어

 

 로그인 후 다른 명령어를 실행해 볼 수 있습니다. (테스트는 manger_custom.conf에서 만든 계정으로 진행합니다.)

 현재 활성 채널 정보를 보려면 action:과 함께 coreshowchannels를 입력하면 됩니다.

 

Action: CoreShowChannels

(Enter 키 두 번 입력)

 

 

(3) 로그아웃 명령어

 

 종료하려면 로그아웃 명령을 보냅니다.

 

Action: Logoff

(Enter 키 두 번 입력)

 

 

3. AMI 접속 시 발생할 수 있는 문제

 

(1) 연결 거부 (Connection refused):

 

 - FreePBX 서버의 방화벽에서 5038 포트가 열려 있는지 확인합니다.

 - Asterisk Manager 서비스가 실행 중인지 확인합니다 (systemctl status asterisk 또는 fwconsole restart).

 - AMI 설정에서 permit IP 주소가 현재 접속하려는 PC의 IP 주소를 포함하는지 확인합니다.

 

(2) 인증 실패 (Authentication failed):

 

 - AMI 사용자 이름과 비밀번호가 정확한지 확인합니다. (대소문자 구분)

 - FreePBX GUI에서 설정을 변경한 후 Apply Config를 눌렀는지 확인합니다.

 

 

 다음 글에서는 Python 코드를 사용해서 AMI에 접속해서 명령어를 실행하는 방법 확인해 보겠습니다.

 

 

감사합니다.

 

 

<참고사이트>

1. AMI (Asterisk Manager Interface) configuration

https://hotkey404.com/ami-asterisk-manager-interface-configuration/

2. PBX GUI - AMI Default Configuration in 16

https://sangomakb.atlassian.net/wiki/spaces/PG/pages/26706045/PBX+GUI+-+AMI+Default+Configuration+in+16

3. Asterisk & FreePBX: How To Create AMI User?

https://fatiherikci.com/en/asterisk-freepbx-ami-user/

4. AMI Libraries and Frameworks

https://docs.asterisk.org/Configuration/Interfaces/Asterisk-Manager-Interface-AMI/AMI-Libraries-and-Frameworks/

 

반응형