
บทความที่ผ่านมาเราได้พูดถึงการติดตั้ง SIP Trunk ไปยัง Provider เรียบร้อยแล้วนะครับ ใครยังไม่ได้ติดตามสามารถไปดูรายละเอียดเพิ่มเติมได้จาก Link นี้นะครับ https://www.ablenet.co.th/2025/08/23/cisco-callmanager-express-cli
ส่วนบทความนี้เกิดจากปัญหา และในชีวิตจริงของเรา บ่อยครั้งเมื่อเราติดตั้งเสร็จ เรามักจะเจอกับการโทรแล้วได้ยินเสียงข้างเดียว อีกฝั่งไม่ได้ยินเสียงเรา โดยปกติแล้ว เราไปไล่รายละเอียดด้วยกันอีกครั้งนะครับ
อาการปัญหา
- ปลายสาย ได้ยินเสียงข้างเดียว (เช่น เราโทรออกได้ แต่ไม่ได้ยินเสียงตอบกลับ หรือกลับกัน)
- Call Setup ปกติ (SIP 200 OK, INVITE/ACK ครบ) แต่ RTP ไม่ได้มีทั้งสองทาง
- เกิดบ่อยเมื่อเชื่อม SIP Trunk กับผู้ให้บริการ (ISP/Telco) หรือผ่าน Firewall/NAT
สาเหตุหลัก ๆ ที่มักเจอ
- Routing Table
- การที่มี Routing Table ไม่ครบทั้ง 2 ฝั่ง อีกฝั่งนึงมีแล้ว อีกฝั่งนึงยังไม่ได้ทำ Route กลับ ทำให้ได้ยินเสียงแค่ฝั่งเดียว สาเหตุนี้โดยส่วนตัวผมเจอบ่อยที่สุดแล้วครับ
- Codec Mismatch
- CME/Call Manager ใช้ G.711ulaw/alaw แต่ฝั่ง SIP Provider อาจใช้ G.729
- ถ้าไม่มี transcoder → จะได้ยินเสียงข้างเดียว หรือไม่มีเสียงเลย
- NAT / Firewall ไม่ส่ง RTP
- SIP Signaling (Port 5060/5061) ผ่านได้ แต่ RTP (Media Port 16384–32767) ถูก Block หรือแปลผิดพลาด
- ALG (Application Layer Gateway) ของ Firewall บางรุ่นแก้ SIP Header แต่ไม่แก้ Media → ทำให้ RTP หาย
- Incorrect SIP Header (Contact/SDP)
- SIP Message บอก Media IP เป็น Private (เช่น 192.168.x.x) แต่ฝั่ง Provider พยายามส่ง RTP มาที่ Public → RTP ไม่ถึงปลายทาง
- DTMF Method ไม่ตรงกัน
- ถ้าใช้ RFC2833 (RTP-NTE) แต่ Provider ใช้ SIP INFO หรือ In-band → ได้ยินเสียงคุย แต่กด IVR ไม่ติด
แนวทางแก้ปัญหา
1. ตรวจสอบ Codec
ใน Cisco CME / Voice Gateway:
voice class codec 1
codec preference 1 g711ulaw
codec preference 2 g711alaw
codec preference 3 g729r8
!
dial-peer voice 1000 voip
voice-class codec 1
- เรียงลำดับ codec ให้ตรงกับที่ Provider รองรับ
- ถ้าจำเป็น ใช้ transcoder (CUBE / DSP)
2. แก้ NAT / Firewall
- เปิด RTP Port Range (UDP 16384–32767)
- ถ้า Cisco Router ทำ NAT ให้ใส่:
voice service voip
ip address trusted list
ipv4 0.0.0.0 0.0.0.0
ip address trusted authenticate
!
sip
midcall-signaling passthru
- บน Firewall ปิด SIP ALG (เพราะมักทำ SIP Header ผิด)
3. ปรับ SIP SDP / Header (Public IP)
บน Cisco CUBE:
voice service voip
sip
bind control source-interface GigabitEthernet0/0
bind media source-interface GigabitEthernet0/0
- เพื่อให้ SIP และ RTP ใช้ Public Interface ที่ถูกต้อง ไม่ใช้ Private IP นั่นเองครับ
4. ตรวจสอบ DTMF Method
dial-peer voice 1000 voip
dtmf-relay rtp-nte
- ถ้า Provider ใช้แบบอื่น ต้องเปลี่ยนเป็น sip-notify หรือ sip-kpml ตามที่เขารองรับด้วยครับ
Tools ที่ใช้ Debug
- Cisco Router
debug ccsip messages
debug voip rtp session named-event
- Wireshark → เช็คว่า RTP วิ่งสองทางหรือไม่ (มี packet ขาเดียว?)
- Telco Trace → ขอ Provider เช็ค SDP/Codec
Best Practices
- คุยกับ Telco ว่า รองรับ Codec/DTMF/NAT Type อะไร
- ใช้ CUBE (Cisco Unified Border Element) แทน CME ตรง ๆ ถ้ามี SIP Trunk จาก ISP → เพราะ CUBE ทำ NAT, Transcoding, Header Fix ได้ดีกว่า
- ทดสอบ Call ทั้ง Inbound + Outbound หลังแก้ Config ทุกครั้ง
ขอบคุณสำหรับการติดตามบทความดี ๆ กับทาง AbleNet มาตลอดครับ และสามารถติดต่อสอบถามข้อมูลเพิ่มเติมได้ตามข้อมูลด้านล่างนี้ครับ