ใน Asterisk เราสามารถแอบฟังคนอื่นเขาคุยกันได้ด้วยนะครับขอบอก ไม่ได้เป็นการอัดเสียงแล้วเอามาฟังนะครับ แต่ฟังตอนที่เขาคุยกันเลย ฟีเจอร์แบบนี้เขาเรียกว่า "whisper (กระซิบ)" เอาไว้ใช้ในกิจการงานคอลเซ็นเตอร์นะครับ ประมาณว่าเวลาลูกค้าโทรเข้ามาถามปัญหาแล้วคอลเซ็นเตอร์แก้ไขให้ไม่ได้ ครั้นจะโอนสายให้ไปคุยกับหัวหน้าเลยก็กระไรอยู่เดี๋ยวลูกค้าจะหาว่าคอลเซ็นเตอร์ที่นี่ไม่เก่ง
งั้นก็ให้หัวหน้าแฝงตัวเข้าไปในสายที่กำลังคุยกับลูกค้า แล้วก็คอยบอกบทให้คอลเซ็นเตอร์พูดกับลูกค้า เวลาลูกค้าพูดตัวเองก็ได้ยินด้วย แต่ลูกค้าไม่รู้ตัวนะครับว่ามีใครอยู่เบื้องหลัง เป็นไงเจ๋งมั๊ยหล่ะ
อีกกรณีหนึ่งคือหัวหน้าคอยสุ่มแอบฟังเสียงที่คอลเซ็นเตอร์กำลังคุยกับลูกค้า อยากรู้ว่าลูกน้องตัวเองคุยกับลูกค้าดีมั๊ย เสียงเพราะมั๊ย มีตะคอกลูกค้าบ้างมั๊ย ประมาณนี้หน่ะครับ โดยที่ทั้งคอลเซ็นเตอร์และลูกค้าต่างก็ไม่รู้ว่าสายถูกแอบฟังอยู่
การดักฟังสามารถตั้งพาสเวอร์ดกันไว้ได้นะครับ เพื่อไม่ให้มีการแอบฟังกันจนพร่ำเพรื่อเกินไป
มีศัพท์อยู่ 2 คำ
spy channel คือคนที่กำลังแอบฟัง
spied-on channel คือสายที่กำลังถูกแอบฟัง
ฟีเจอร์ Whisper (กระซิบ) เป็นฟีเจอร์ที่เพิ่มขึ้นมาในคำสั่ง ChanSpy ทำให้บุคคลที่ 3 สามารถพูดหรือฟังสายที่กำลังสนทนากันอยู่ได้
คำสั่ง ChanSpy มีรูปดังนี้
Chanspy([<chanprefix>][,<options>])
โดยที่
chanprefix คือเบอร์ Extension ที่เราจะกดเข้าไปเพื่อที่จะไปแอบฟัง เช่น 1234 หรือ *1234 เป็นต้น ต้องเป็นเบอร์ที่ยังว่างอยู่นะครับ เบอร์นี้เป็นเบอร์ Extension ปลอมๆ ซึ่งหมายความว่าไม่ต้องสร้างเบอร์นี้ขึ้นมา เวลาจะใช้งานก็เขียนเบอร์ลงไปเลย
options คือออปชั่นที่ทำให้เราดัดแปลงการใช้งานให้เหมาะกับความต้องการได้ มีดังนี้
- b แอบฟังได้เฉพาะเบอร์ที่กำลังสนทนาอยู่เท่านั้น เบอร์ที่ยังไม่ได้รับสายจะแอบฟังไม่ได้ ถ้าไม่ได้ใช้ออปชั่น b จะสามารถรอจนกว่าเบอร์ที่ต้องการดักฟังจะใช้สาย แบบว่าซุ่มรออยู่ ประมาณนี้ครับ
- g(grp) ให้แอบฟังเฉพาะเบอร์ที่มีตัวแปร ${SPYGROUP} มีชื่อขึ้นต้นด้วย 'grp'
- q ไม่ต้องมีเสียง beep เมื่อเริ่มต้นแอบฟัง ไม่ต้องประกาศชื่อ channel ที่กำลังจะดักฟัง
- r[(basename)] บันทึกการสนทนาไปเก็บไว้ในไดเร็คตอรี่เก็บไฟล์เสียงบันทึก ซึ่งดีฟอลท์คือ /var/spool/asterisk/monitor ครับ ซึ่ง basename คือตัวอักษรตั้งต้นของชื่อไฟล์เสียงที่บันทึก (ไม่ต้องใส่ก็ได้) ซึ่งถ้าไม่ใส่จะใช้ค่าดีฟอลท์คือ chanspy
- v([value]) ปรับระดับเสียงเริ่มต้นในช่วงตั้งแต่ -4 ถึง 4 ค่าลบเสียงจะเบา
- s เลิก Spy เมื่อไม่มี channel ให้ spy อีกแล้ว
เริ่มตั้งแต่เวอร์ชั่น 1.4:
- w เปิดใช้งานโหมด "whisper" ซึ่งผู้ที่กำลังแอบฟังสามารถพูดคุยกับสายที่กำลังถูกแอบฟังได้
- W เปิดใช้งานโหมด "private whisper" ซึ่งผู้ที่กำลังแอบฟังสามารถพูดเข้าไปในสายที่กำลังถูกแอบฟังได้ แต่จะไม่ได้ยินว่าสายนั้นกำลังคุยอะไรกันอยู่
เริ่มตั้งแต่เวอร์ชั่น 1.6:
- o ฟังได้อย่างเดียว พูดเข้าไปในสายไม่ได้ (เอ่อ จริงๆก็พูดได้นะครับแต่เขาไม่ได้ยิน พูดคนเดียว 55+)
- X: Allow the user to exit ChanSpy to a valid single digit numeric extension in the current context or the context specified by the SPY_EXIT_CONTEXT channel variable. The name of the last channel that was spied on will be stored in the SPY_CHANNEL variable.
- e(ext) ใช้งานในโหมด enforced ซึ่งสายที่กำลังแอบฟังจะสามารถแอบฟังได้เฉพาะเบอร์ Extension ที่มีชื่ออยู่ใน ext เท่านั้น
- d กดปุ่มตัวเลขเลือกโหมดทำงานได้ กดได้ 3 ตัวคือ 4 (spy mode) หรือ 5 (whisper mode) หรือ 6 (barge mode)
- B สามารถ Whisper ได้ทั้ง 2 ฝั่งของสายที่กำลัง Spy อยู่
- x(digit) ระบุปุ่มตัวเลขที่เมื่อกดจะออกจาก ChanSpy
- c(digit) ระบุปุ่มตัวเลขกดเพื่อย้ายไป spy channel ต่อไป
ในระหว่างการ Whisper สามารถกดปุ่มต่างๆได้ดังนี้
ปุ่ม # ปรับระดับเสียง
ปุ่ม * จะยกเลิกการแอบฟังสายนี้ ไปแอบฟังสายอื่นแทน
ปุ่มตัวเลข (ตัวเดียวหรือมากกว่า) ตามด้วย # จะนำตัวเลขที่กดไปต่อท้ายค่าใน <chanprefix> เช่น chanprefix คือ 12 และกด 34# จะทำให้ chanprefix ใหม่กลายเป็น 1234 เป็นต้น
Note! คำสั่ง ChanSpy จะไม่เวอร์คถ้าเบอร์ที่ถูกแอบฟังมีการเปิดบันทึกการสนทนาไว้ (Recording) แต่มีทางแก้ไขคือในไฟล์ "asterisk.conf" ให้เพิ่มบรรทัดtransmit_silence_during_record=yes ไว้ในส่วน [options] ดังนี้
[options]
transmit_silence_during_record=yes
สมมติว่าเบอร์ Extension อยู่ใน context ชื่อ from-internal นะครับ
ที่ไฟล์ extensions.conf เพิ่มเข้าไปดังนี้
[from-internal]
exten => *556,1,Authenticate(8888)
exten => *556,n,Read(SPYNUM,extension)
exten => *556,n,ChanSpy(SIP/${SPYNUM},qw)
;บรรทัดที่ 1 จะมีเสียงให้ใส่พาสเวอร์ด พาสเวอร์ดคือ 8888
;บรรทัดที่ 2 อ่านเบอร์ Extension มาเก็บไว้ในตัวแปร SPYNUM ดังนั้น SPYNUM จะมีค่าเป็น *556
;บรรทัดที่ 3 ใช้ฟังก์ชั่น ChanSpy โทรไปหาเบอร์ SPYNUM แบบ SIP พร้อมออปชั่น qw
exten => *557,1,Authenticate(8888)
exten => *557,n,Read(SPYNUM,extension)
exten => *557,n,ChanSpy(SIP/${SPYNUM},qW)
;บรรทัดที่ 1 จะมีเสียงให้ใส่พาสเวอร์ด พาสเวอร์ดคือ 8888
;บรรทัดที่ 2 อ่านเบอร์ Extension มาเก็บไว้ในตัวแปร SPYNUM ดังนั้น SPYNUM จะมีค่าเป็น *557
;บรรทัดที่ 3 ใช้ฟังก์ชั่น ChanSpy โทรไปหาเบอร์ SPYNUM แบบ SIP พร้อมออปชั่น qW
;เพิ่มเสร็จแล้วก็เข้า Asterisk Console นะครับ แล้วพิมพ์คำสั่ง dialplan reload แล้วก็ลองได้เลย
บทความที่เกี่ยวข้อง
เทคนิคการทำ Spy/Whisper บน Elastix