เทคนิคการแปลง Caller ID ใน Asterisk

Asterisk Opensource IP Pbx

เทคนิคการแปลง Caller ID ใน Asterisk

โพสต์โดย voip4share » 12 มี.ค. 2010 09:54

ดาวน์โหลดบทความ Asterisk Caller ID นี้ในรูปแบบ PDF

Caller ID หรือ Caller Identification หรือ A-Number หรือ ANI (Automatic Number Identification) แปลเป็นภาษาไทยว่า เบอร์ต้นทาง หรือเบอร์ผู้โทร นะครับ ยกตัวอย่างเช่นคุณหนุ่ยใช้เบอร์ 087005xxxx โทรหาคุณกิ๊กเบอร์ 085066xxxx เบอร์คุณหนุ่ยจะเป็น A-Number เวลาไปโชว์ที่หน้าจอของเครื่องคุณกิ๊กก็จะโชว์เป็น 087005xxxx เบอร์ที่โชว์ขึ้นมานี้เราเรียกว่า Caller ID ครับ อันนี้เป็นกรณีของการโทรจากมือถือไปมือถือ

ในกรณีของ Asterisk เวลาเราไปขอใช้บริการเบอร์ DID ไม่ว่าจะจากใครก็แล้วแต่ เช่น CAT2Call + หรือจากต่างประเทศ เช่นผมไปขอเบอร์ DID จาก CAT2CALL + ได้เบอร์มาเป็น 02402xxxx ผมใช้เบอร์มือถือ 087005xxxx โทรเข้าไปที่เบอร์ DID นี้ เวลาเขาส่ง Caller ID มาให้เขาจะส่งมาเป็น 087005xxxx เลย ซึ่งเวลาโชว์ที่ Asterisk หรือ IP Phone ก็จะโชว์แบบนี้ ถ้าเราต้องการแบบนีอยู่แล้วก็ไม่ต้องแปลง Caller ID เลยครับ แต่ถ้าเราอยากให้มันโชว์เป็น 6687005xxxx แทน อย่างนี้เราต้องแปลง Caller ID ครับ

อีกกรณีนึงเวลาซื้อเบอร์ DID ของไทยจากเว็บต่างประเทศ เขาอาจจะส่ง Caller ID มาเป็น 6687005xxxx แต่เราอยากให้โชว์เป็น 087005xxxx ก็ต้องแปลงครับ และอีกกรณีนึงถ้าเขาส่ง Caller ID มาเป็น 87005xxxx (ขาด 0 ข้างหน้า) แล้วเราต้องการให้โชว์เป็น 087005xxxx หรือ 6687005xxxx ก็ต้องแปลงเช่นกันครับ

แปลงเบอร์ที่ Dialplan ครับใช้ตัวแปร ${CALLERID(num)} และ/หรือ ${CALLERID(name)} ซึ่งเป็นตัวแปรแบบ Channel Variable ของ Asterisk ครับ

ทำ 2 ที่ครับ คือไฟล์ sip.conf และ extensions.conf สมมติว่าเบอร์ DID ที่เราขอใช้คือ 021001000 นะครับ

ไฟล์ sip.conf
สร้าง Trunk เพื่อรองรับเบอร์ DID จากผู้ให้บริการ พร้อมตั้ง Context
[trunk]
host=x.x.x.x
port=5060
context=trunk_did

ไฟล์ extensions.conf
สร้าง Dialplan สำหรับเบอร์ภายในและเบอร์ DID ผมต้องการให้โทรเข้ามาแล้วดังที่เบอร์ Extension เลย

[from-internal]
exten => _1XX,1,Dial(SIP/${EXTEN},30,tT)
exten => _1XX,n,Hangup

1. Caller ID = 87005xxxx ต้องการแปลงเป็น 087005xxxx
เติม 0 เข้าไปข้างหน้า

[trunk_did]
exten => 021001000,1,Set(CALLERID(num)=0${CALLERID(num)})
exten => 021001000,n,Goto(from-internal,100,1)

2. Caller ID = 087005xxxx ต้องการแปลงเป็น 6687005xxxx
ตัด 1 หลักแรก คือ 0 แล้วเติม 66 เข้าไป

[trunk_did]
exten => 021001000,1,Set(CALLERID(num)=66${CALLERID(num):1})
exten => 021001000,n,Goto(from-internal,100,1)

3. Caller ID = +6687005xxxx ต้องการแปลงเป็น 087005xxxx
ตัด 3 หลักแรกออก คือ +66 แล้วเติม 0 เข้าไป

[trunk_did]
exten => 021001000,1,Set(CALLERID(num)=0${CALLERID(num):3})
exten => 021001000,n,Goto(from-internal,100,1)

ตัวแปร ${CALLERID(num)} ใช้เซ็ตค่า Caller ID Number ส่วนตัวแปร ${CALLERID(name)} นั้นใช้สำหรับเซ็ตค่า Caller ID Name ครับ ซึ่งอาจเอามาใช้แทนได้กรณีที่เครื่อง IP Phone มันเอา Caller ID Name มาโชว์

กรณีเราโทรระหว่าง Extension ด้วยกัน Caller ID ก็คือเบอร์ Extension ต้นทางนั่นเองครับ หวังว่าบทความนี้คงจะช่วยแก้ปัญหาการใช้งานได้บ้างนะครับ

บทความที่เกี่ยวข้อง
รู้จักกับ Caller ID Number และ Caller ID Name ใน Asterisk
voip4share
Administrator
 
โพสต์: 656
ลงทะเบียนเมื่อ: 18 พ.ย. 2009 11:26
ที่อยู่: รามคำแหง กรุงเทพฯ

ย้อนกลับไปยัง Asterisk SIP Server

ผู้ใช้งานขณะนี้

กำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และ บุคคลทั่วไป 0 ท่าน