Saturday, January 18, 2025

[Asterisk] Macro trong Asterisk

-

Macro trong Asterisk là một tính năng cho phép tạo các lệnh tự động hoạt động theo một chuỗi các bước đã định sẵn. Các macro có thể được sử dụng để thực hiện các tác vụ phức tạp như tương tác với người dùng, chuyển cuộc gọi đến các số khác, hoặc tạo các menu điều hướng.

Cách sử dụng Macro:

  • Tạo một tập tin cấu hình macro trong thư mục “extensions.conf” của Asterisk
  • Định nghĩa macro trong tập tin cấu hình bằng cách sử dụng cặp ngoặc nhọn “exten => macro_name,1,Macro(macro_body) “
  • Macro_name là tên của macro và macro_body là nội dung của macro
  • Gọi macro trong tập tin cấu hình bằng cách sử dụng cặp ngoặc nhọn “exten => số_điện_thoại,1,Macro(macro_name)”

– Ví dụ đơn giản :

; Tạo macro tên là "welcome"
exten => s,1,Macro(welcome)

; Định nghĩa macro
[macro-welcome]
exten => s,1,Answer()
exten => s,2,Playback(welcome)
exten => s,3,Hangup()

Trong ví dụ trên, khi có cuộc gọi đến số “s”, macro “welcome” sẽ được gọi tự động và thực hiện các bước như đã khai báo ở macro

– Ví dụ phức tạp hơn: Tạo một macro cho việc xử lý cuộc gọi vào hệ thống tư vấn khách hàng của một công ty.

; Tạo macro tên là "call_handler"
exten => s,1,Macro(call_handler)

; Định nghĩa macro
[macro-call_handler]
exten => s,1,Answer()
exten => s,2,Wait(1)
exten => s,3,Playback(please-hold)
exten => s,4,Queue(support)
exten => s,5,Wait(30)
exten => s,6,Playback(sorry)
exten => s,7,Hangup()

; Định nghĩa các tác vụ trong macro
exten => support,1,Answer()
exten => support,2,Playback(greeting)
exten => support,3,Read(option,please-select)
exten => support,4,GotoIf($["${option}" = "1"]?sales)
exten => support,5,GotoIf($["${option}" = "2"]?support)
exten => support,6,GotoIf($["${option}" = "3"]?billing)
exten => support,7,GotoIf($["${option}" = "4"]?feedback)
exten => support,8,Goto(s,7)

; Định nghĩa các tác vụ cho mỗi lựa chọn
exten => sales,1,Queue(sales)
exten => support,1,Queue(support)
exten => billing,1,Queue(billing)
exten => feedback,1,Queue(feedback)

; Các tác vụ sau khi được gọi vào hàng đợi tương ứng
exten => sales,1,Answer()
exten => sales,2,Playback(sales-greeting)
exten => sales,3,Read(product,select-product)
exten => sales,4,GotoIf($["${product}" = "1"]?product1)
exten => sales,5,GotoIf($["${product}" = "2"]?product2)
exten => sales,6,GotoIf($["${product}" = "3"]?product3)
exten => sales,7,Playback(invalid-selection)
exten => sales,8,Goto(sales,3)

exten => product1,1,Playback(product1-description)
exten => product1,2,Read(buy,buy-product)
exten => product1,3,GotoIf($["${buy}" = "yes"]?purchase)
exten => product1,4,GotoIf($["${buy}" = "no"]?s,7)

; Tương tự với các tác vụ cho product2 và product3
exten => purchase,1,Playback(thank-you)
exten => purchase,2,Hangup()

Trong ví dụ trên, khi có cuộc gọi đến số “s”, macro “call_handler” sẽ được gọi tự động và thực hiện các bước theo thứ tự: chào đón người dùng, cho người dùng chờ trong hàng đợi, hướng dẫn người dùng chọn lựa chọn, chuyển người dùng đến hàng đợi tương ứng và xử lý các yêu cầu của người dùng. Nếu không có người trả lời trong hàng đợi, cuộc gọi sẽ bị từ chối và người dùng sẽ nhận được thông báo lỗi. Macro này có thể được mở rộng và tùy chỉnh thêm các tác vụ khác để phù hợp với yêu cầu của hệ thống.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories