หน้า 1 จากทั้งหมด 1

การเพิ่ม SIP Header เข้าไปใน SIP INVITE ที่ส่งไปยัง Callee

โพสต์โพสต์แล้ว: 20 ธ.ค. 2019 12:18
โดย nuiz
บทความนี้ผมจะแนะนำวิธีการเพิ่ม SIP Header ใหม่เข้าไปใน SIP INVITE ที่ Asterisk ส่งไปยังเครื่องเบอร์ปลายทางครับ ซึ่งเบอร์ปลายทางเราเรียกว่า Callee ครับ (ส่วนเบอร์ต้นทางเราเรียกว่า Caller)

Asterisk มีฟังก์ชั่น SIP_HEADER() และฟังก์ชั่น PJSIP_HEADER() ครับ ให้เราเลือกใช้ตาม SIP Driver ที่เราใช้สร้างเบอร์ Callee ขึ้นมา ยกตัวอย่างเช่น ถ้าเราสร้างด้วย SIP Driver เราก็ใช้ SIP_HEADER() แต่ถ้าเราสร้างด้วย PJSIP Driver เราก็ใช้ PJSIP_HEADER() ครับ

หมายเหตุ ถ้าเราไปดูใน Google จะเห็นหลายฟังก์ชั่นมากที่สามารถเพิ่ม ลบ หรือแก้ไข SIP Header ได้ ส่วนใหญ่เป็นของ Asterisk เวอร์ชั่นเก่าๆครับ สำหรับ Asterisk เวอร์ชั่นใหม่ๆก็จะเหลือแค่ฟังก์ชั่น SIP_HEADER() และ PJSIP_HEADER() ครับ

SIP Header คืออะไร?
SIP Header คือฟิลด์ข้อมูลที่อยู่ใน SIP messages ครับ (แล้ว SIP messages คืออะไร มันคือข้อมูล ข้อความที่อุปกรณ์ SIP สองตัวใช้ติดต่อกัน เช่น REGISTER, INVITE, OPTION, NOTIFY, BY, CANCEL, ...) เวลาเราคอนฟิก IP Phone ให้รีจิสเตอร์กับ Asterisk มันก็จะส่ง REGISTER ไปยัง Asterisk ครับ แล้วเวลาเรากดโทรออก มันก็จะส่ง INVITE ไปยัง Asterisk

ทำไมเราต้องเพิ่ม SIP Header?
เน้นนะครับว่า "เป็นบางครั้ง" ผมทำงานฟิลด์นี้มาหลายปี เพิ่งจะได้เพิ่ม SIP Header แค่ 2 ครั้ง (เมื่อวานเป็นครั้งที่ 2) สาเหตุเพราะทางคนเขียน App Softphone เขาต้องการค่าๆหนึ่งใน SIP INVITE ที่ Asterisk โทรไปหา App ผมก็เลยต้องเอาค่าๆนี้ใส่เข้าไปใน Header ใหม่ที่ผมตั้งขึ้นมา แล้วให้ App มันไปจับเอาเอง ผลก็เวิร์คดีครับ

วิธีการเพิ่ม SIP Header
บอกก่อนนะครับ Header ที่จะเพิ่มเข้าไปนี้ เพิ่มได้ใน INVITE เท่านั้นครับ ผมจะเพิ่ม Header ชื่อ X-UUID โดยใส่ค่าตามตัวแปร ${UUID} เข้าไป

[from-internal]
;หาค่า ${UUID} มาจากขั้นตอนอื่นแล้ว

exten => _X.,1,Dial(PJSIP/${EXTEN},,b(pjsip-addheader^addheader^1(${UUID}))

[pjsip-addheader]
exten => addheader,1,Set(PJSIP_HEADER(add,X-UUID)=${UUID})
exten => addheader,n,Return

ในคำสั่ง Dial ผมใช้ออปชั่น b() ส่งค่า ${UUID} ไปให้แก่ [pjsip-addheader] ซึ่งจะทำการเพิ่ม X-UUID: ${UUID} ใน SIP INVITE ที่ Asterisk ส่งไปยังเบอร์ปลายทางครับ ลองนำไปประยุกต์ใช้งานดูครับ

บทความที่เกี่ยวข้อง
เทคนิคการแก้ปัญหาเมื่อ Asterisk ฟ้อง No RTP Engine
เทคนิคการติดตั้ง Asterisk-GUI เพื่อคอนฟิก Asterisk
การเขียน Dialplan เพื่อโอนสายไปยังเบอร์อื่นตามเงื่อนไขการโทร
เทคนิคการดาวน์โหลดไฟล์เสียง mp3 จากเว็บ TTS (ใหม่)
เทคนิคการติดตั้ง Asterisk 16.x + DAHDI 2.11.1 บน CentOS 7
เปิดบริการ อบรม Issabel/FreePBX/Elastix ด้วยคอร์สพิเศษ ให้ติดตั้ง คอนฟิกคล่อง ใช้งานคล่อง ได้ใน 3 วัน
วิธีการติดตั้ง Issabel บน CentOS 7
ตัวอย่างการใช้งาน Action URL บน Grandstream IP Phone
รวมเทคนิคการใช้งาน RasPBX - Asterisk on Raspberry Pi