1. บันทึกเสียง (voice prompt)

ก่อนที่จะสร้าง IVR นั้น เราจะต้องบันทึกเสียง (voice prompt) เสียก่อน โดยเขียน dial plan ง่ายๆ ดังนี้

(อยู่ใน context internal ดูบทความตอนที่แล้ว)

extensions.conf

==========

... ...

[internal]

...

; used to record voice prompt
exten => 999,1,Answer()
exten => 999,2,Wait(2)
exten => 999,3,Record(record-no-%d:ulaw)
exten => 999,4,Wait(2)
exten => 999,5,Playback(${RECORDED_FILE})
exten => 999,6,Wait(2)
exten => 999,7,Hangup()

...

Record command จะบันทึกเสียงของเราลงใน file ชื่อ record-no-1 (%d จะเปลี่ยนเป็น 2, 3, 4, ... เมื่อเรา record ครั้งต่อๆ ไป)

file เสียงจะอยู่ใน directory /var/lib/asterisk/sounds   format ที่บันทึก คือ ulaw     การใช้งานมีขั้นตอนดังนี้คือ โทรไปที่เบอร์

999 ระบบจะให้สัญญาน beep เราก็เริ่มบันทึกเสียงตามที่ต้องการได้ เมื่อบันทึกเสร็จให้กดเครื่องหมายสี่เหลี่ยม ระบบจะ playback

เสียงที่เราบันทึก

 

2. IVR อย่างง่าย

call flow ที่เราต้องการ คือ ไม่ว่า incoming call จาก Zap trunk (TOT PSTN) หรือ SIP trunk (TOT netcall) call จะถูกส่งไปที่

IVR ก่อน IVR จะ play message ให้ผู้โทรกดหมายเลขภายใน หรือ กด 0 เพื่อติดต่อ operater   ถ้าผู้โทรไม่กดอะไรเลยในเวลา 10 วินาที่

ระบบจะกลับมา play message อีกครั้งหนึ่ง   หรือถ้าผู็โทรกดหมายเลขที่ไม่มี ระบบจะ play message ว่ากดผิด แล้วจะย้อนกลับมา

play message หลักอีกครั้งหนึ่ง   มาดู dial plan ใน extensions.conf กันเลย

extensions.conf

========== 

[general]

 

[from-pstn]
exten => s,1,Goto(main-ivr,s,1)                               ; incoming call จาก TOT PSTN จะถูกส่งไปที่ main-ivr

[from-sip]
exten => s,1,Goto(main-ivr,s,1)                               ; incoming call จาก TOT netcall จะถูกส่งไปที่ main-ivr

 

[main-ivr]
exten => s,1,Answer()
exten => s,2,Background(record-no-4)                      ; play message หลัก

exten => t,1,Goto(s,2)                                           ; timeout (default = 10 second) ให้กลับไป play

                                                                                      ; message หลัก

 

exten => i,1,Background(record-no-5)                       ; กดผิด ให้ play message กดผิดแล้วกลับไป play

                                                                                      ; message หลัก 
exten => i,2,Goto(s,2)

 

exten => 0,1,Dial(SIP/102)                                      ; ถ้าผู้โทรกด 0 ระบบจะ ring extension 102 (กำหนดให้ extension

                                                                                      ; นี้เป็น operator
exten => 0,2,Hangup()

 

exten => _1XX,1,Goto(internal,${EXTEN},1)              ; ถ้าผู้โทรกดเบอร์ภายใน ระบบจะส่ง call ไปยัง context internal

                                                                                      ; ซึ่งมีการกำหนดการโทรเบอร์ภายใน

 

[internal]
exten => _1XX,1,Dial(SIP/${EXTEN})
exten => _1XX,2,Hangup()

exten => _0[345678]XXX!,1,Dial(SIP/nc-2/${EXTEN})
exten => _0[345678]XXX!,2,Hangup()

exten => _02XXX!,1,Dial(DAHDI/g0/${EXTEN})
exten => _02XXX!,2,Hangup()

 

3. What's next

จะเห็นว่า dial plan ของเราไม่ได้จำกัด จำนวน loop ที่เกิดขึ้น ถ้าผู้โทรไม่กดอะไรเลยระบบก็จะ play message หลัก

ไปเรื่อยๆ ไม่มีจุดจบ   วิธีการกำหนดจำนวน loop เคยเขียนในบทความตอนแรกๆ กลับไปดูได้   กรณีที่จะเพิ่ม option

เช่น กด 1 ติดต่อ sales กด 2 ติดต่อ support ก็สามารถ ทำได้ง่ายๆ โดยใช้ กด 0 เพื่อติดต่อ operator เป็นต้นแบบ