Thursday, November 21, 2024

[Asterisk] AMI trong Asterisk

-

1. Tổng quan

AMI (Asterisk Manager Interface) trong Asterisk là một giao diện quản lý cho phép bạn tương tác với hệ thống Asterisk bằng cách gửi các lệnh qua giao thức TCP. Giao diện này cho phép bạn tương tác với các tính năng của Asterisk như gọi điện, chuyển cuộc gọi, lấy thông tin cuộc gọi, v.v.

AMI cung cấp một số lệnh cơ bản như :

  • “Login” cho phép đăng nhập vào hệ thống
  • “Originate” cho phép tạo một cuộc gọi mới
  • “Hangup” cho phép kết thúc một cuộc gọi
  • “Status” cho phép lấy thông tin trạng thái của một cuộc gọi
  • “Ping” cho phép kiểm tra kết nối

AMI cũng có thể được sử dụng với các ngôn ngữ lập trình như Python, Perl, PHP, v.v. để tạo các script quản lý hoặc tích hợp với các hệ thống quản lý khác.

2. Ví dụ lấy thời gian cuộc gọi bằng cách thông thường

Ví dụ để lấy thông tin thời gian cuộc gọi, bạn sử dụng lệnh “core show channel” với ID của kênh cuộc gọi. Lệnh sẽ trả về thông tin chi tiết về kênh, bao gồm thông tin thời gian gọi, thời gian kết thúc, và thời gian trạng thái hiện tại của kênh.

Ví dụ:

asterisk*CLI> core show channel SIP/1000-00000000
Channel: SIP/1000-00000000
UniqueID: 1614294905.8
Context: from-internal
Extension: 1000
Priority: 1
...
Caller ID: "John Doe" <1000>
...
Start time: Jan 14 14:15:05 2021
Answer time: Jan 14 14:15:10 2021
End time: Jan 14 14:16:05 2021
...

Ngoài ra, bạn có thể sử dụng các lệnh khác như “logger show channels” để xem thông tin chi tiết của cuộc gọi và thời gian của chúng.

Lưu ý: Nếu bạn muốn lấy thông tin thời gian cuộc gọi trong bảng dữ liệu của asterisk, bạn có thể sử dụng các truy vấn SQL để truy xuất các bảng cdr (Call Detail Record)

3. Ví dụ lấy thời gian cuộc gọi bằng AMI

Để sử dụng API để lấy thông tin thời gian cuộc gọi trong Asterisk có thể là một quá trình phức tạp hơn so với sử dụng lệnh trên Command Line Interface. Tuy nhiên, nó có thể giúp bạn tích hợp thông tin cuộc gọi vào hệ thống của bạn một cách dễ dàng hơn.

Bước 1: Cài đặt và cấu hình Asterisk Manager Interface (AMI)

Trước tiên, bạn cần cài đặt và cấu hình Asterisk Manager Interface (AMI) trên máy chủ Asterisk của bạn. AMI là một giao diện quản lý cho phép bạn truy cập vào các tính năng và thông tin của Asterisk thông qua giao thức TCP. Bạn có thể tìm hiểu cách cài đặt và cấu hình AMI trong tài liệu của Asterisk.

Bước 2: Tạo một kết nối đến AMI

Sau khi cấu hình AMI, bạn cần tạo một kết nối đến nó bằng cách sử dụng giao thức TCP. Bạn có thể sử dụng các thư viện như pyst2 hoặc python-ari để tạo kết nối với AMI.

Bước 3: Gửi các lệnh AMI để lấy thông tin thời gian cuộc gọi

Sau khi kết nối được thiết lập, bạn có thể gửi các lệnnh AMI để lấy thông tin thời gian cuộc gọi. Ví dụ, bạn có thể sử dụng lệnh “CoreShowChannels” để lấy thông tin về các kênh đang hoạt động trong hệ thống, bao gồm thông tin thời gian cuộc gọi.

Action: CoreShowChannels
Response: Success
Event: CoreShowChannels
...
Channel: SIP/1000-00000000
UniqueID: 1614294905.8
Context: from-internal
Extension: 1000
Priority: 1
...
Caller ID: "John Doe" <1000>
...
Start time: Jan 14 14:15:05 2021
Answer time: Jan 14 14:15:10 2021
End time: Jan 14 14:16:05 2021
...

Cần lưu ý rằng lấy thông tin cuộc gọi qua API yêu cầu sự tương tác với máy chủ Asterisk, do đó yêu cầu một kết nối mạng ổn định và cấu hình máy chủ tương thích.

Để cấu hình Asterisk Manager Interface (AMI) trên Asterisk, bạn cần thực hiện các bước sau:

Bước 1: Mở tập tin cấu hình AMI trong thư mục cấu hình của Asterisk. Tập tin này thường là manager.conf hoặc asterisk.conf.

Bước 2: Thêm một “user” mới để cho phép kết nối tới AMI. Ví dụ:

[admin]
secret = adminpassword
read = all
write = all

Bước 3: Thêm một “permit” để cho phép kết nối tới AMI từ một địa chỉ IP nhất định hoặc tất cả các địa chỉ. Ví dụ:

permit=127.0.0.1

Bước 4: Bật AMI trong tập tin cấu hình của Asterisk. Tìm dòng “enabled = no” và thay đổi thành “enabled = yes”.

Bước 5: Kiểm tra kết nối AMI bằng cách sử dụng các công cụ như telnet hoặc các thư viện Python để gửi và nhận các lệnh AMI.

Bước 6: Bảo mật kết nối AMI bằng cách thiết lập mật khẩu và chỉ cho phép kết nối từ các địa chỉ IP được cho phép.

Bạn có thể dùng Python kết nối tới Asterisk Manager Interface (AMI) có thể được thực hiện bằng cách sử dụng các thư viện như pyst2 hoặc python-ari.

Ví dụ sử dụng thư viện pyst2:

Bước 1: Cài đặt pyst2 bằng câu lệnh sau:

pip install pyst2

Bước 2: Tạo một đối tượng kết nối với AMI

from pyst2.manager import Manager

ami = Manager(address="192.168.1.100", port=5038, username="admin", password="password")
ami.connect()

Bước 3: Gửi lệnh AMI để lấy thông tin thời gian cuộc gọi

response = ami.send_action({'Action': 'CoreShowChannels'})

# parse the response to get the start time, answer time and end time of the call
start_time = response.get('start_time')
answer_time = response.get('answer_time')
end_time = response.get('end_time')

# print the call times
print("Start time:", start_time)
print("Answer time:", answer_time)
print("End time:", end_time)

Bước 4: Đóng kết nối

ami.close()

Lưu ý: Địa chỉ IP, port, username, password cần được thay thế bằng thông tin của máy chủ của bạn.

Cũng có thể sử dụng thư viện python-ari để kết nối với AMI, tuy nhiên cần tham khảo tài liệu của thư viện để biết cách sử dụng.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories