ทำระบบเสียงตามสายด้วย IZPBX และ Linphone(Rpi) ตอนที่ 1 (setup)
สำหรับตอนนี้ จะทดสอบ สร้างระบบเสียงตามสายผ่านระบบอินเทอร์เน็ตหรือระบบเน็ตเวิร์ก(VoIP) ที่สามารถพูดจากไมค์หนึ่ง ไปออกลำโพงของอีกเครื่องหนึ่ง…
ทำระบบเสียงตามสายด้วย IZPBX และ Linphone(Rpi) ตอนที่ 1 (setup)
สำหรับตอนนี้ จะทดสอบ สร้างระบบเสียงตามสายผ่านระบบอินเทอร์เน็ตหรือระบบเน็ตเวิร์ก(VoIP) ที่สามารถพูดจากไมค์หนึ่ง ไปออกลำโพงของอีกเครื่องหนึ่ง โดยสามารถเลือกสถานีปลายทางได้ โดยเราจะสร้าง server ที่คอยจัดการ ด้วย IZPBX และ device ปลายทางจะใช้ microsip ทดสอบบน window และ linphone ทดสอบบน rpi

diagram concept
IZPBX คือ service ที่รวมกันระหว่าง Asterisk ที่เป็น Open source ที่นิยมใช้สำหรับจัดการระบบ VoIP และ FreePBX ที่เป็น Dashboard สำหรับจัดการหน้าโทรศัพท์
เริ่มต้นใช้งาน
เราจะใช้งาน server IZPBX ด้วย docker compose โดยในไฟล์ compose จะมีการ setting ตามนี้
# NOTE: don't edit this file, instead specify your changes creating docker-compose.override.yml
networks:
izpbx:
driver: bridge
## if you want run other izpbx deploy in the same docker host enable the macvlan interface driver
#izpbx-ext:
#driver: macvlan
#driver_opts:
#parent: eth0
ipam:
config:
- subnet: 10.1.1.0/24
# secrets:
# IZPBX_MYSQL_ROOT_PASSWORD:
# environment: MYSQL_ROOT_PASSWORD
# IZPBX_MYSQL_PASSWORD:
# environment: MYSQL_PASSWORD
services:
# https://hub.docker.com/_/mariadb?tab=tags&page=1&ordering=last_updated
db:
# current LTS (Long Term Support) release
image: docker.io/mariadb:10.11.11
# previous LTS (Long Term Support) release
#image: docker.io/mariadb:10.6.14
container_name: izpbx-db
user: 0:0
## WARNING: if you upgrade image tag enter the container and run mysql_upgrade:
## source .env ; docker exec -it izpbx-db mysql_upgrade -u root -p$MYSQL_ROOT_PASSWORD
command: --sql-mode=ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
restart: unless-stopped
env_file:
- .env
environment:
- TZ
- MYSQL_DATABASE
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_ROOT_PASSWORD
## NOTE: using secrets files need further testing
#- MYSQL_PASSWORD_FILE=/run/secrets/IZPBX_MYSQL_PASSWORD
#- MYSQL_ROOT_PASSWORD_FILE=/run/secrets/IZPBX_MYSQL_ROOT_PASSWORD
#- MARIADB_RANDOM_ROOT_PASSWORD=${MYSQL_RANDOM_ROOT_PASSWORD}
#- MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=${MYSQL_ALLOW_EMPTY_ROOT_PASSWORD}
#secrets:
#- IZPBX_MYSQL_PASSWORD
#- IZPBX_MYSQL_ROOT_PASSWORD
volumes:
#- /etc/localtime:/etc/localtime:ro
# - ./data/db:/var/lib/mysql
- db_data:/var/lib/mysql
## NOTE: to avoid nat management use: 'network_mode: host'
#network_mode: host
## WARNING: if 'network_mode: host' is disabled, comment out the following lines
networks:
- izpbx
## WARNING: if not commented out, the database will be exposed outside the container
ports:
- ${APP_PORT_MYSQL}:3306
# https://hub.docker.com/r/izdock/izpbx-asterisk/tags?page=1&ordering=last_updated
izpbx:
image: docker.io/izdock/izpbx-asterisk:20.16.21
container_name: izpbx
user: 0:0
#entrypoint: /bin/bash -c "/bin/bash -c \"sleep 3600\""
#hostname: ${APP_FQDN}
restart: unless-stopped
depends_on:
- db
env_file:
- .env
#secrets:
#- IZPBX_MYSQL_PASSWORD
#- IZPBX_MYSQL_ROOT_PASSWORD
volumes:
#- /etc/localtime:/etc/localtime:ro
# - ./data/izpbx:/data
- izpbx_data:/data
## fail2ban need privileged mode to manage iptables
cap_drop:
- NET_ADMIN
environment:
- SKIP_CHOWN=true
security_opt:
# - apparmor=unconfined
- seccomp=unconfined
privileged: false
ulimits:
nofile:
soft: 8192
hard: 32768
## NOTE: to avoid SIP-RTP NAT issues use: 'network_mode: host'
# network_mode: host
## WARNING: if 'network_mode: host' is disabled, comment out the following lines
## ports are not needed if using 'network_mode: host' or macvlan network driver
## if you want use macvlan network driver comment out 'izpbx-ext:' too and change exposed IP according your needs
networks:
- izpbx
# izpbx-ext:
# ipv4_address: 10.1.1.221
ports:
- 8000:${APP_PORT_HTTP}
# - ${APP_PORT_HTTPS}:${APP_PORT_HTTPS}
- 4570:${APP_PORT_IAX}
- 4570:${APP_PORT_IAX}/udp
- ${APP_PORT_PJSIP}:${APP_PORT_PJSIP}
- ${APP_PORT_PJSIP}:${APP_PORT_PJSIP}/udp
- ${APP_PORT_SIP}:${APP_PORT_SIP}/udp
- ${APP_PORT_SIP}:${APP_PORT_SIP}
# - ${APP_PORT_WEBRTC}:${APP_PORT_WEBRTC}
# - ${APP_PORT_UCP_HTTP}:${APP_PORT_UCP_HTTP}
# - ${APP_PORT_UCP_HTTPS}:${APP_PORT_UCP_HTTPS}
# - ${APP_PORT_AMI}:${APP_PORT_AMI}
# - ${APP_PORT_RTP_START}-${APP_PORT_RTP_END}:${APP_PORT_RTP_START}-${APP_PORT_RTP_END}
# - ${APP_PORT_RTP_START}-${APP_PORT_RTP_END}:${APP_PORT_RTP_START}-${APP_PORT_RTP_END}/udp
# - ${APP_PORT_DHCP}:${APP_PORT_DHCP}/udp
# - ${APP_PORT_TFTP}:${APP_PORT_TFTP}
# - ${APP_PORT_TFTP}:${APP_PORT_TFTP}/udp
# - ${APP_PORT_NTP}:${APP_PORT_NTP}/udp
# - ${APP_PORT_FOP2}:${APP_PORT_FOP2}
# - ${APP_PORT_ZABBIX}:${APP_PORT_ZABBIX}
volumes:
db_data:
izpbx_data:
จาก compose เราใช้ volumn ภายใน เนื่องจาก ถ้า map file มาใช้ด้านนอก จะติดปัญหา permission ทำให้ build container ไม่ขึ้น
ส่วนการ setting อื่นๆ ให้ไปใส่ใน docker-compose.override.yml
services:
db:
networks:
izpbx:
ipv4_address: 10.1.1.220
izpbx:
networks:
izpbx:
ipv4_address: 10.1.1.221
ส่วนไฟล์ .env ให้โหลดไฟล์ default.env จากลิ้งนี้มาใช้ โดยจะมีการปรับเพิ่มเติม เพื่อเปิดใช้ function ตามนี้ ส่วน function อื่นสามารถเปิดใช้งานได้ภายหลัง
TZ=Asia/Bangkok
HTTPD_ALLOW_FROM=127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
MYSQL_SERVER=db
MYSQL_DATABASE=asterisk
MYSQL_DATABASE_CDR=asteriskcdrdb
MYSQL_USER=asterisk
FREEPBX_TONEZONE=th
FREEPBX_PHPTIMEZONE=Asia/Bangkok
หลังจาก compose up แล้ว เข้าหน้าเว็บ localhost:8000 จะได้หน้าต่างที่ให้เซต user & password หลังจากเซตเสร็จแล้ว จะได้หน้า login แบบนี้

login page
หน้า dashboard จะแสดงสถานะของ server ให้ดู

dashboard page
Register device
ทำการลงทะเบียน device เพื่อใช้งาน โดยไปที่แถบ Application -> Extension -> Add Extension -> Add new SIP extension

Add new SIP extension
จากนั้นตั้ง เบอร์ที่จะใช้งานกับ device นั้น ในช่อง User Extension และตั้งชื่อ device ใน Display name และช่อง secret จะเป็นค่า password

create new user
หลังจากเซตค่าเสร็จแล้ว กด submit ด้านล่าง และแถว apply change สีแดงจะแสดงขึ้นมาที่ มุมขวาบน ของหน้าเว็บ ให้กดเพื่อเปลี่ยนแปลงค่าด้วย

apply change
ลองสร้าง device มาซัก 2–3 ตัว โดยใช้หลักการเดียวกัน

create other device
ทดสอบด้วย Microsip (สำหรับ window)
Download Microsip จากลิ้งนี้ แนะนำว่าให้โหลดแบบ portable เพราะจะสามารถเปิดพร้อมๆกันหลาย device เพื่อทดสอบได้

Microsip interface and add account
เมื่อเปิดมาแล้ว หน้าตาจะเป็นแบบนี้ ทำการเซต account โดยไปที่ มุมบนด้านขวา Add acount แล้วเซตค่าตามนี้ โดย User & password เซตให้ตรงกับที่เรา register ไว้ ส่วน SIP server และ Domain ให้ใส่ ip และ port ของ server

setting server connection
ในส่วนของ settings ให้เซต server name และ port ต่างๆให้ตรงกับ compose file ที่เราเซตใน docker
ถ้าเชื่อมต่อได้แล้ว ที่มุมล่างซ้ายจะเป็นสีเขียว ขึ้นว่า Online
ทดสอบลองโทรเข้าหา server โดยใช้เบอร์ภายในเช่น 43 จะเป็น Echo test จะได้ยินเสียงที่เราพูด หรือ 60 จะเป็นการบอกเวลา ถ้าลองแล้วได้ยินเสียงตอบกลับมา แสดงว่าเบอร์นั้นเชื่อมต่อกับ server ได้แล้ว

Feature codes
เราสามารถดู เบอร์ภายในอื่นๆ เพื่อทดสอบได้จาก Admin -> Feature codes
จากนั้นเราทำแบบเดียวกัน กับ Microsip อีกตัวหนึ่ง จะเทสในคอมเดียวกัน หรือ คอมคนละเครื่องก็ได้ เมื่อกดโทรไปแล้ว จะขึ้นหน้าต่างแจ้งเตือนให้รับสาย

test calling from 1001 to 1003
เมื่อกด Answer และพูดจากไมค์จากเครื่องต้นทาง เสียงจะไปออกปลายทางแล้ว

speak from 1001 announce to 1002
จากการทดลองนี้ เราสามารถโทรได้แล้ว แต่ถ้าเราจะทำระบบเสียงตามสาย เราจะใช้หลักการเดียวกัน เพียงแต่ปลายสาย จะต้อง Auto answer เองโดยไม่ต้องมีคนกดรับ โดยจะเซต auto answer ในตอนถัดไป
메타데이터
- post_id
- 3f9a8dc404cf
- slug
- ทำระบบเสียงตามสายด้วย-izpbx-และ-linphone-rpi-ตอนที่-1-setup-3f9a8dc404cf
- url
- https://medium.com/@nutert321/%E0%B8%97%E0%B8%B3%E0%B8%A3%E0%B8%B0%E0%B8%9A%E0%B8%9A%E0%B9%80%E0%B8%AA%E0%B8%B5%E0%B8%A2%E0%B8%87%E0%B8%95%E0%B8%B2%E0%B8%A1%E0%B8%AA%E0%B8%B2%E0%B8%A2%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-izpbx-%E0%B9%81%E0%B8%A5%E0%B8%B0-linphone-rpi-%E0%B8%95%E0%B8%AD%E0%B8%99%E0%B8%97%E0%B8%B5%E0%B9%88-1-setup-3f9a8dc404cf
- canonical_url
- https://medium.com/@nutert321/%E0%B8%97%E0%B8%B3%E0%B8%A3%E0%B8%B0%E0%B8%9A%E0%B8%9A%E0%B9%80%E0%B8%AA%E0%B8%B5%E0%B8%A2%E0%B8%87%E0%B8%95%E0%B8%B2%E0%B8%A1%E0%B8%AA%E0%B8%B2%E0%B8%A2%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-izpbx-%E0%B9%81%E0%B8%A5%E0%B8%B0-linphone-rpi-%E0%B8%95%E0%B8%AD%E0%B8%99%E0%B8%97%E0%B8%B5%E0%B9%88-1-setup-3f9a8dc404cf
- author_url
- https://medium.com/@nutert321
- status
- ok
- fetched_at
- 2026-08-21 13:14:52