Asterisk là gì
Asterisk là phần mềm thực hiện chức năng tổng đài điện thoại (PBX), Asterisk chạy trên Linux, BSD, Windows (mô phỏng) và OS X, cung cấp tất cả các tính năng bạn mong chờ từ một tổng đài điện thoại và nhiều hơn nữa, cho phép các máy điện thoại nội bộ (extension) thực hiện cuộc gọi với nhau và kết nối với các hệ thống điện thoại khác bao gồm cả mạng điện thoại công cộng (PSTN) và VoIP. Asterisk thực hiện thoại qua IP (VoIP) trong bốn giao thức, và có thể tương thích với hầu như tất cả các thiết bị điện thoại dựa trên tiêu chuẩn sử dụng phần cứng tương đối rẻ tiền. Asterisk có đầy đủ tính năng của tổng đài điện thoại thương mại: phân luồng cuộc gọi, hội đàm, gọi hội nghị, thư thoại, tương tác IVR (menu thoại)… Đặc biệt, Asterisk còn hỗ trợ nhiều giao thức VoIP như ADSI, IAX, SIP và H.323, hoạt động như trạm kết nối giữa các điện thoại IP và mạng PSTN.
Asterisk là hệ thống chuyển mạch mềm, là phần mềm nguồn mở được viết bằng ngôn ngữ C chạy trên hệ điều hành Linux, Asterisk thực hiện tất cả các tính năng của tổng đài điện thoại và hơn thế nữa. Asterisk là một phần mềm mang tính cách mạng, tin cậy, mã nguồn mở và miễn phí, biến một PC rẻ tiền thông thường chạy Linux thành một hệ thống điện thoại doanh nghiệp mạnh mẽ hoạt động trên nền IP. Asterisk là một bộ công cụ mã nguồn mở cho các ứng dụng thoại và là một Server xử lý cuộc gọi đầy đủ chức năng. Asterisk là một nền tảng tích hợp điện thoại vi tính hoá kiến trúc mở.
Asterisk miễn phí theo giấy phép GPL. Tên Asterisk có nguồn gốc từ ký hiệu * được dùng trong Unix và Linux, thể hiện cho tùy chọn bất kỳ.
Asterisk là hệ thống chuyển mạch tích hợp vừa là công nghệ truyền thống TDM vừa là chuyển mạch VoIP. Hình mô tả bên dưới cho thấy khả năng giao tiếp của hệ thống : giao tiếp với điện thoại Analog thông thường, giao tiếp với thiết bị điện thoại VoIP, ngoài ra còn có thể giao tiếp với mạng PSTN và các nhà cung cấp VoIP khác.
Pull images Debian 8
# docker pull debian:jessie
Kiểm tra images
# docker images
Chạy container và truy cập vào container
docker run -it –name= –network=host
#docker run -itd –name=PBX-Asterisk –network=host -p 5060:5060/tcp -p 5060:5060/udp -p 10000:30000/udp bash
Cài đặt Asterisk
# apt-get update
# apt-get install asterisk
Tại dòng хác nhận Do уou ᴡant to continue ?, nhập Y để tiếp tục cài đặt. Tại Configuring libvpb0 thấу ѕố ITU-T telephone code là 61. Nếu là ở Việt Nam thì chúng ta đổi thành 84 ᴠà tiếp tục. Như ᴠậу là chúng ta đã hoàn thành cài đặt cho Aѕteriѕk. Nhưng ᴠẫn cần phải check lại một ѕố thứ.
Khởi động asterisk
# /etc/init.d/asterisk start
Kiểm tra хem nếu Aѕteriѕk đang chạу ѕẽ như thế nào.
ѕudo aѕteriѕk -r
Bạn ѕẽ thấу được bằng bạn đang login ᴠào CLI của Aѕteriѕk. Bạn ѕẽ cấu hình cho nó.
Để thoát khỏi CLI, nhập ᴠào dòng lệnh :
eхit
Như ᴠậу là chúng ta đã hoàn thành cài đặt ᴠà Aѕteriѕk ᴠà login thành công. Tiếp theo là các bước cấu hình cơ bản cho Aѕteriѕk.
Những bước cấu hình ѕau đâу, ѕẽ giúp cho hệ thống tổng đài Aѕteriѕk có thể :
Gọi điện thoại nội bộTruу cập mail boх
Những file cần thực hiện chỉnh ѕửa :
ѕip.conf
eхtenѕionѕ.conf
ᴠoicemail.conf
Vị trí folder đặt các file nàу tại /etc/aѕteriѕk
Trước khi thực hiện chỉnh ѕửa file, để chắc chắn, chúng ta cần tiến hành thực hiện backup, nhập dòng lệnh ѕau để di chuуển file ѕip.conf thành một file dự phòng :
ѕudo mᴠ /etc/aѕteriѕk/ѕip.conf /etc/aѕteriѕk/ѕip.conf.orig
Tạo một file ѕip.conf ᴠà cấu hình nó :
ѕudo ᴠi /etc/aѕteriѕk/ѕip.conf
Nhập ᴠào nội dung :
conteхt=internal
alloᴡgueѕt=no
alloᴡoᴠerlap=no
bindport=5060
bindaddr=0.0.0.0
ѕrᴠlookup=no
diѕalloᴡ=all
alloᴡ=ulaᴡ
alᴡaуѕauthreject=уeѕ
canreinᴠite=no
nat=уeѕ
ѕeѕѕion-timerѕ=refuѕe
localnet=192.168.1.0/255.255.255.0
<7001>
tуpe=friend
hoѕt=dуnamic
ѕecret=123
conteхt=internal
<7002>
tуpe=friend
hoѕt=dуnamic
ѕecret=456
conteхt=internal
Sau khi đã nhập хong, bấm Eѕc để thoát ra. Gõ :ᴡq để lưu nội dung ᴠà thoát hoàn toàn khỏi trình ѕoạn thảo ᴠi. Tương tự, chúng ta cũng tạo Backup ᴠới file eхtenѕionѕ.conf
ѕudo mᴠ /etc/aѕteriѕk/eхtenѕionѕ.conf /etc/aѕteriѕk/eхtenѕionѕ.conf.orig
Tạo file eхtenѕionѕ.conf mới ᴠà cấu hình nó :
ѕudo ᴠi /etc/aѕteriѕk/eхtenѕionѕ.conf
eхten => 7001,1,Anѕᴡer()
eхten => 7001,2,Dial(SIP/7001,60)
eхten => 7001,3,Plaуback(ᴠm-nobodуaᴠail)
eхten => 7001,4,VoiceMail()</email protected>
eхten => 7001,5,Hangup()
eхten => 7002,1,Anѕᴡer()
eхten => 7002,2,Dial(SIP/7002,60)
eхten => 7002,3,Plaуback(ᴠm-nobodуaᴠail)
eхten => 7002,4,VoiceMail()</email protected>
eхten => 7002,5,Hangup()
eхten => 8001,1,VoicemailMain()</email protected>
eхten => 8001,2,Hangup()
eхten => 8002,1,VoicemailMain()</email protected>
eхten => 8002,2,Hangup()
Tương tự file ѕip.conf, chúng ta cũng bấm Eѕc để thoát. Sau đó bấm :ᴡq để lưu ᴠà thoát.
Sau đó tạo tiếp bản backup cho file ᴠoicemail.conf :
ѕudo mᴠ /etc/aѕteriѕk/ᴠoicemail.conf /etc/aѕteriѕk/ᴠoicemail.conf.orig
Tạo file ᴠoicemail.conf mới ᴠà cấu hình cho nó :
ѕudo ᴠi /etc/aѕteriѕk/ᴠoicemail.conf
Nhập nội dung :
7001 => 123
7002 => 456
Sau khi nhập nội dung hoàn tất, bấm Eѕc. Tiếp tục là :ᴡq để lưu ᴠà thoát.
Reload lại Aѕteriѕk để những thaу đổi có hiệu lực :
Bạn có thể thực hiện reѕtart lại cho Aѕteriѕk bằng 3 cách ѕau :
Phương pháp 1 :
ѕudo aѕteriѕk -rх reload
Phương pháp 2 :
ѕudo /etc/init.d/aѕteriѕk reѕtart
Phương pháp 3 :
ѕudo aѕteriѕk -r
Tiếp theo nhập :
reload
Rồi nhập :
Eхit
Như ᴠậу là chúng ta đã hoàn thành cài đặt ᴠà cấu hình tổng đài Aѕteriѕk.
Thoát khỏi container vẫn giữ hoạt động
# Ctrl + p + q Truy cập vào container, khởi động asterisk
# docker exec -it CONTAINER_ID /bin/bash
# /etc/init.d/asterisk start
Giới thiệu cách thức cấu hình tổng đài Asterisk
I. Tạo hai sip gọi nội bộ với nhau 1
II. Cuộc gọi kịch bản cơ bản ban đầu diaplan 3
*** cách sử dụng và chuyển đổi một file âm thanh 3
****cách chuyển đổi một file WAV 4
III. Phần nhạc chờ cho SIP (music on hold) 4
IV. Một kịch bản cơ bản Hàm goto() 5
========================Content====================
I. Tạo hai sip gọi nội bộ với nhau
Ví dụ ta tạo 2 sip gọi với nhau ta tạo trong hai file sau :
1.file ‘sip.conf’
là file định nghĩa tài khoảng sip
2.file ‘extensions.conf’
là file dailpan cấu hình cuộc gọi, định nghĩa cho tài khoảng sip được gọi hay không được gọi, và chỉ cho phép gọi hoặc không vào những số mong muốn
Tạo hai trường user sip như bên dưới trong file sip.conf chú ý phần màu đỏ.
——————————-
Sip.conf | |
[100] deny=0.0.0.0/0.0.0.0 secret=100abc dtmfmode=rfc2833 canreinvite=no context=user_cua_cong_ty_sait.vn host=dynamic type=friend nat=yes port=5060 qualify=yes callgroup= pickupgroup= dial=SIP/100 accountcode= mailbox=100@device permit=0.0.0.0/0.0.0.0 callerid=device <100> call-limit=50
| [101] deny=0.0.0.0/0.0.0.0 secret=101abc dtmfmode=rfc2833 canreinvite=no context=user_cua_cong_ty_sait.vn host=dynamic type=friend nat=yes port=5060 qualify=yes callgroup= pickupgroup= dial=SIP/100 accountcode= mailbox=100@device permit=0.0.0.0/0.0.0.0 callerid=device <101> call-limit=50
|
file extensions.conf
extensions.conf |
[user_cua_cong_ty_sait.vn]exten => 100,1,Answer() exten => 100,n,Dial(SIP/100,60);rung chuong trong 60 s exten => 100,n,Hangup()
exten => 101,1,Answer() exten => 101,n,Dial(SIP/101,60) exten => 101,n,Hangup() |
Dùng soft phone đăng ký hai sip trên và thực hiện bấm 100 để gọi cho user 100, 101 để gọi cho 101.
Ngoài ra ta còn có thể setup như sau
[user_cua_cong_ty_sait.vn]exten => _10X,1,Answer()exten => _10X,2,Dial(SIP/${EXTEN})exten => _10X,3,Hangup() |
Gói VoiIP có sẳn và web quản trị
Việc thao tác nhiều công việc thủ công như vậy chiếm rất nhiều thời gian và dễ xảy ra sai xót. Vì vậy mà hiện nay, nhiều bản distro ra đời mà tích hợp đầy đủ các thành phần của việc xây dựng hệ thống tổng đài như OS, Asterisk, Giao diện, DAHDI và nhiều gói hỗ trợ khác, giúp cho việc triển khai được nhanh chóng và chính xác hơn.
Một số bản distro Asterisk phổ biến hiện nay:
- Elastix – Debian Linux Asterisk Distribution
- PBXinaflash – Linux PBX
- FreePBX – Based on CENTOS – most module require payment
FreePBX Distro là bản OS dựa trên CentOS, gồm giao diện đồ họa (FreePBX) cho cấu hình và quản lý Assterisk. FreePBX Distro gồm các gói cài đặt mà cung cấp các tính năng như VoIP, PBX, Fax, IVR, Voicemail.
Chi tiết xem tại: https://hub.docker.com/r/tiredofit/freepbx/
Sau khi cài đặt xong, truy cập FreePBX server và cấu hình network. Cách cấu hình network tương tự với CentOS/RHEL.
1 2 3 4 5 6 7 | DEVICE="eth0" ONBOOT="yes" IPADDR=192.168.10.118 NETMASK=255.255.255.0 GATEWAY=192.168.10.1 DNS1=8.8.8.8 DNS2=1.1.1.1 |
Sau đó thực hiện restart networksystemctl restart network
Tiếp theo mở web browser và truy cập FreePBX theo địa chỉ http://192.168.10.118
Màn hình khởi tạo đầu tiên yêu cầu tạo tài khoản cho quản trị hệ thống FreePBX.
Sau khi vào thông tin tài khoản, nhấn Create Account để tạo tài khoản quản trị.
Màn hình chính FreePBX, xuất hiện gồm 04 options:
- FreePBX Administration: cho phép chúng ta cấu hình FreePBX, với thông tin tài khoản quản trị vừa tạo ở trên.
- User Control Panel: Là nơi người dùng có thể login và thực hiện gọi qua giao diện web, thiết lập nút phone, xem voicemail, gửi tin nhắn SMS & XMPP, … (Thông tin tài khoản login cho option này nằm ở module User Management
- Operator Panel: Là màn hình mà cho phép operator để kiểm soát cuộc gọi
- Get Support: Chuyển hướng support sang trang chủ FreePBX
Chúng ta chọn “FreePBX Administration” để login vào trang quản trị FreePBX
Tại màn hình chính là Dashboard của FreePBX với các thông tin tổng quan, thống kê số liệu hệ thống, network, trạng thái dịch vụ, …
2. Tạo extension – máy nhánh
Chúng ta thực hiện tạo số máy nhánh (hay SIP Account hoặc Extension)
Trong giao diện chính mở: Applications> Extensions> Add Extension> Add New Chan_SIP Extension
Thực hiện tạo một extension Chan_SIP với thông tin:
- User Extension: Vào thông tin số máy nhánh dùng khi dial, ở đây là 100
- Display Name: Thiết lập tên hiển thị KeepWalking cho số nhánh này
- Secret: Vào thông tin mật khẩu cho tài khoản này (Ở đây tôi đặt P@ssw0rd)
Note: Cả Chan_SIP và PJSIP đều cho phép tạo extension number nhưng Chan_SIP cho phép hỗ trợ NAT. Hiện tại thì PJSIP được sử dụng cho default SIP (với port 5060), Chan_SIP sử dụng port 5160.
Để tạo các tài khoản khoản cho SIP extension gồm cả Chan_SIP và PJSIP, chúng ta thực hiện như các bước ở trên.
3. Thiết lập chuyển hướng cuộc gọi
Trên giao diện web của FreePBX, chúng ta có thể cấu hình để cho phép chuyển hướng cuộc gọi (với tùy chọn Follow Me) từ một số khi số đó không answer hoặc busy.
Chúng ta cấu hình chuyển hướng cuộc gọi từ số 100 đến 101 khi số máy 100 không answer hoặc busy.
Step1: Enable Follow Me
Mở Applications → Follow Me
Khi đó chọn Yes cho số extension cần enabled tính năng Follow Me
Step2: Edit extensions
Mở Applications → Extensions (Hoặc mở Application → Follow Me)
Khi đó chọn số extension cần edit, ví dụ ở đây là 100
Khi đó vào các thông số sau:
- Ring Time (max 60 sec): thiết lập khoảng thời gian tối đa rung chuông, nếu sau khoảng thời gian này extension 100 không trả lời thì sẽ forward sang Extensions 101. Ta thiết lập khoảng time là 20sec.
- Destination if no answer: chọn Extension và chọn số nhánh sẽ forward. Ở đây, chúng ta thiết lập khi số 100 không answer hoặc busy thì sẽ forward cuộc gọi đến số 101.
Cuối cùng nhấn Submit → Apply Config
4. Hệ thống trả lời tự động – IVR
Mục đích phát thông điệp từ tệp audio đến người gọi (caller) từ bên ngoài gọi vào hệ thống tổng đài. Các bước thực hiện như sau:
Step1: Tạo System Recordings
Chúng ta sẽ cấu hình module System Recordings để ghi âm hoặc upload các tệp tin audio làm thông điệp và phát lại cho caller ở một module khác. Trong trường hợp này, tôi sẽ upload tệp tin audio làm lời chào cho hệ thống trả lời tự động (IVR).
Thực hiện như sau:
Mở Admin → System Recordings → Add Recording
Sau đó vào các thông tin sau:
- Phần Name & Description đặt tên và mô tả phù hợp cho thông điệp sẽ phát. Chẳng hạn phát thông điệp lời chào và hướng dẫn nhấn phím để truy cập bộ phận .. Ở đây, tôi đặt greeting.
- File List for english: Chúng ta có thể browser hoặc kéo tệp tin audio đã có sẵn với một số định dạng như waw, law, ..
Note:
Ở đây, chúng ta có thể sử dụng nhiều tệp tin audio cho một System Recording. Nó sẽ phát lần lượt từng tệp audio theo thứ tự từ trên xuống.
Đường dẫn lưu tệp tin audio mặc định là /var/lib/asterisk/sounds/en/custom
Cuối cùng nhấn Submit → Apply Config để tạo một system recording.
Step2: Tạo IVR
Module IVR cho phép tạo các hệ thống trả lời tự động (IVR), từ đó chúng ta có thể điều hướng cuộc gọi từ ngoài vào một trong các IVR này.
Thực hiện tạo IVR như sau:
Mở Applications → IVR → Add IVR
Sau đó vào các thông tin sau:
- Phần IVR Name và IVR Description đặt tên và mô tả cho tạo một IVR phù hợp. Ở đây, tôi đặt tên một IVR là Greeting IVR
- Announcement: Chọn thông điệp sẽ phát. Ở đây chúng ta sẽ chọn greeting mà đã tạo ở System Recordings trong Step1.
- Enable Direct Dial: Enabled tùy chọn này để phép caller có thể dial đến một extension trong khi đang nghe phát một thông điệp (Tức là có thể dial extension như 100 mà không cần nhấn phím một phím để gặp bộ phận xxx nào đó). Nếu không cho phép thực hiện dial extension như vậy thì chọn tùy chọn Disabled
- Timeout: Thiết lập lượng thời gian (second) mà hệ thống sẽ người gọi quay số. Sau khoảng thời gian này, nếu người gọi không thực hiện quay số thì hệ thống thực hiện một số tùy chọn tiếp theo.
- Invalid Retries: Thiết lập số lần cho phép người gọi chọn lại phím số khi nhấn sai phím cần chuyển hướng đến số extension. (ví dụ chỉ thiết lập số 1 gọi đến 101, nhưng người gọi nhấn phím 2 sẽ là phím sai, yêu cầu thực hiện lại).
Tiếp đó trong phần IVR Entries, chúng thiết lập các phím dial tùy chọn để hệ thống direct đến extension phù hợp
- Digits: Chọn phím để nhấn (ví dụ nhấn phím 1 để direct)
- Destination: Chọn tùy chọn Extensions và chọn extension phù hợp( chẳng hạn 100 KeepWalking)
Tiếp tục nhấn Add Another Entry để thêm phím khác
Sau đó thực hiện nhấn Submit → Apply Config
Step3: Cấu hình Inbound Routes
Sau khi tạo xong Step1 và Step2, chúng ta thực hiện định tuyến Inbound để cho phép người gọi vào hệ thống tổng đài và chuyển vào IVR.
Trong phần trước, chúng ta đã hướng dẫn cấu hình Inbound Routes. Phần này, chúng ta edit lại phần Inbound Routes đó.
Mở Connectivity → Inbound Routes → Chọn một Inbound Route và thực hiện chỉnh sửa
- Set Destination: Thiết lập đích route là IVR và chọn tên IVR là Greeting IVR đã tạo ở Step2
Cuối cùng nhấn Submit → Apply Config
Freepbx trong Docker
Cho phép xây dựng một freepbx bên trong vùng chứa docker
Đầu tiên, Tạo một tệp có tên là docker-compose.yml trong thư mục dự án của bạn và dán như sau:
version: '3'
services:
freepbx-app:
container_name: freepbx-app
image: tiredofit/freepbx
ports:
#### If you aren't using a reverse proxy
- 2000:80
#### If you want SSL Support and not using a reverse proxy
#- 443:443
- 5060:5060/udp
- 5160:5160/udp
- 18000-18100:18000-18100/udp
#### Flash Operator Panel
- 4445:4445
volumes:
- ./certs:/certs
- ./data:/data
- ./logs:/var/log
- ./data/www:/var/www/html
environment:
#- DEBUG_MODE=TRUE
- VIRTUAL_HOST=hostname.example.com
#- VIRTUAL_NETWORK=nginx-proxy
- VIRTUAL_NETWORK=host
### If you want to connect to the SSL Enabled Container
#- VIRTUAL_PORT=443
#- VIRTUAL_PROTO=https
- VIRTUAL_PORT=80
- LETSENCRYPT_HOST=hostname.example.com
- LETSENCRYPT_EMAIL=email@example.com
- ZABBIX_HOSTNAME=freepbx-app
- RTP_START=18000
- RTP_FINISH=18100
## Use for External MySQL Server
- DB_EMBEDDED=FALSE
### These are only necessary if DB_EMBEDDED=FALSE
- DB_HOST=freepbx-db
- DB_PORT=3306
- DB_NAME=asterisk
- DB_USER=asterisk
- DB_PASS=asteriskpass
### If you are using TLS Support for Apache to listen on 443 in the container drop them in /certs and set these:
#- TLS_CERT=cert.pem
#- TLS_KEY=key.pem
restart: always
networks:
- proxy-tier
### These final lines are for Fail2ban. If you don't want, comment and also add ENABLE_FAIL2BAN=FALSE to your environment
cap_add:
- NET_ADMIN
privileged: true
freepbx-db:
container_name: freepbx-db
image: tiredofit/mariadb
restart: always
volumes:
- ./db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=asterisk
- MYSQL_USER=asterisk
- MYSQL_PASSWORD=asteriskpass
networks:
- proxy-tier
freepbx-db-backup:
container_name: freepbx-db-backup
image: tiredofit/db-backup
links:
- freepbx-db
volumes:
- ./dbbackup:/backup
environment:
- ZABBIX_HOSTNAME=freepbx-db-backup
- DB_HOST=freepbx-db
- DB_TYPE=mariadb
- DB_NAME=asterisk
- DB_USER=asterisk
- DB_PASS=asteriskpass
- DB_DUMP_FREQ=1440
- DB_DUMP_BEGIN=0000
- DB_CLEANUP_TIME=8640
- COMPRESSION=BZ
- MD5=TRUE
networks:
- proxy-tier
restart: always
networks:
proxy-tier:
driver: bridge
Từ thư mục dự án của bạn, khởi động ứng dụng của bạn bằng cách chạy trình docker compose up. Nguồn từ muchikon.com/freepbx-in-docker/
$ docker-compose up -d
Sau một thời gian, bạn sẽ thấy các containers hoạt động
Khi chúng tôi đặt trong tệp docker-compile, web của chúng tôi đang chuyển hướng đến cổng 2000, vì vậy chúng tôi truy cập: http: // IP: 2000 / admin và đặt mật khẩu quản trị
Nhấp vào thiết lập ở cuối và truy cập bằng thông tin đăng nhập trong Quản trị Freepbx
Tạo 2 phần mở rộng SIP.
Nhìn chung, cài đặt nhâm nhi đã thực hiện thay đổi này, trong địa chỉ IP bên ngoài, hãy đặt địa chỉ IP lan của bạn để các thiết bị khác có thể đăng ký mà không có vấn đề gì.
Ví dụ trong 3CX Sipphone, tôi đặt điều này
Và chúng tôi thấy đăng ký sipphone của chúng tôi trong freepbx
Chúng tôi có thể truy cập bảng điều khiển và xem kết quả, trước tiên chúng tôi cần thay đổi một số cài đặt trong freepbx để cho phép đăng nhập bảng điều khiển và lưu các thay đổi
sau đó trong bảng điều khiển chạy để truy cập bảng điều khiển dấu hoa thị
docker exec -it freepbx-app bash
asterisk -rvvvvvv
Thiết lập cuộc gọi giữa hai đồng nghiệp và trong bảng điều khiển, chúng tôi chạy các kênh chương trình cốt lõi để xem cuộc gọi.
Nếu bạn gặp bất kỳ sự cố nào, bạn có thể bật tùy chọn gỡ lỗi để xem điều gì sẽ xảy ra. muchikon.com/freepbx-in-docker/
Bài viết liên quan: