การใช้งานฟีเจอร์ Action URL ใครยุ่งกับปุ่ม DND ให้แจ้งเตือน

Grandstream IP Phone, IP-PBX, VDO Phone, Camera

การใช้งานฟีเจอร์ Action URL ใครยุ่งกับปุ่ม DND ให้แจ้งเตือน

โพสต์โดย nuiz » 06 พ.ย. 2019 13:51

รวมเทคนิคการใช้งาน Elastix
รวมเทคนิคการใช้งาน Asterisk
รวมเทคนิคการใช้งาน Issabel
รวมเทคนิคการใช้งาน FreePBX

ปุ่ม DND บนเครื่อง IP Phone หรือ Softphone ก็แล้วแต่ ถ้าเราเผลอไปกดเข้า คนอื่นจะโทรหาเครื่องเราไม่ได้นะครับ เครื่องธรรมดาๆก็ไม่ค่อยมีปัญหาเท่าไหร่ครับ แต่ถ้าเป็นเครื่องของ Call Center ก็จะมีปัญหาเยอะหน่อย
ทีนี้ถ้าเราอยากให้มีการแจ้งเตือนว่า ณ ขณะนี้มี IP Phone เครื่องไหนที่ปุ่ม DND ถูกกดอยู่ (Enabled อยู่) แจ้งเตือนทางไหนก็ได้ครับแล้วแต่เราถนัด เช่น ส่ง Emal ส่ง Line ส่ง SMS หรือแสดงบนหน้าเว็บเพจเป็นต้น เราต้องดัก Event การกดปุ่ม DND บน IP Phone ครับ แล้วเราจะให้ใครดักให้ ก็ให้ IP Phone นั่นแหล่ะครับทำให้

ฟีเจอร์ Action URL บน IP Phone
ไม่เฉพาะ Grandstream IP Phone เท่านั้นนะครับที่มีฟีเจอร์ Action URL นี้ ผมเชื่อว่า IP Phone ยี่ห้ออื่นๆก็มีฟีเจอร์นี้เหมือนกัน แต่ขอให้เป็น IP Phone รุ่นใหม่ๆหน่อยนะครับ ตัว IP Phone จะใช้ฟีเจอร์ Action URL นี้ในการส่ง URL (เช่น http://www.google.com ยกตัวอย่างเฉยๆครับ เราไม่ได้จะให้มันส่ง URL Request ไปยัง Google หรอก) เมื่อเกิด Event ต่างๆบนตัวมัน เช่น รีจิสเตอร์สำเร็จ รีจิสเตอร์ไม่สำเร็จ มีสายเรียกเข้า มีคนโทรออก มีคนยกหู มีคนวางหู มีคนกดปุ่ม DND มี... กว่า 30 Events ครับ เยอะมาก

Action URL บน Grandstream IP Phone
อยู่เมนูนี้ครับ MAINTENANCE > Action URL
รูปภาพ

และนี้คือ Events ทั้งหมดที่สามารถส่ง URL ออกไปได้ครับ - คำแปลของแต่ละ Event ก็ตรงตัวเลยครับ
รูปภาพ

บทความนี้ผมจะใช้ 2 Events คือ Open DND (กดปุ่ม DND เพื่อ Enable) และ Close DND (กดปุ่ม DND เพื่อ Disable) ครับ

พารามิเตอร์ที่ส่งไปพร้อมกับ URL ได้
URL ที่ IP Phone ส่งไปยัง Web Server นั้นจำเป็นต้องมีพารามิเตอร์ของ IP Phone ส่งไปด้วย ไม่เช่นนั้นโปรแกรมหรือสคริปต์ที่เราเขียนไว้บนฝั่ง Web Server เพื่อดักจับ Events จะไม่รู้ว่า IP Phone เครื่องไหนส่งมา จะดูจาก Source IP Address ก็ใช่ที่ โดยพารามิเตอร์ที่ Grandstream IP Phone ส่งไปพร้อมกับ URL ได้มีดังต่อไปนี้ครับ

$phone_ip - ไอพีแอดเดรสของเครื่อง
$mac - ค่า MAC Address ของเครื่อง
$product - รุ่นของ IP Phone เช่น GXP1625
$program_version - เวอร์ชั่นเฟิร์มแวร์
$hardware_version - เวอร์ชั่นฮาร์ดแวร์
$language - ภาษาบนหน้า Web Interface
$local - เบอร์ Called Number หรือก็คือเบอร์บน IP Phone ที่มีคนโทรเข้ามา
$display_local - ค่า Display Name บนเครื่องมันเอง ค่านี้ผมไม่รู้ว่าตรงกับบรรทัด Name หรือว่า Account Name ในเมนู Account
$remote - เป็น CallerID Number ของเบอร์ที่โทรเข้ามา
$display_remote - เป็น Caller ID Name ของเบอร์ที่โทรเข้ามา
$call-id - เป็นค่า Call-ID อ่านมาจาก SIP Message ที่ SIP Server ส่งมา
$active_user - ค่าเบอร์ของ Account ที่ใช้ในการโทรออกหรือรับสาย
$active_host - เป็น IP Address ของ SIP Server ที่คอนฟิกใน Account ที่ใช้ในการโทรออกหรือรับสาย
$duration - ระยะเวลาการโทร หน่วยเป็นวินาที
$calldirection - ทิศทางของการโทร บอกว่ามันเป็นฝ่ายโทรออก (Calling Party) หรือเป็นฝ่ายรับสาย (Called Party)

หมายเหตุ
ไม่ใช่ว่าทุกพารามิเตอร์จะมีค่า (Value) ตลอดนะครับ ขึ้นอยู่กับ Event นั้นๆด้วย เช่น Open/Close DND จะไม่มี $call-id, $local (เบอร์ sip) , $remote ครับ เพราะยังไม่มีการ Call เกิดขึ้น แต่อย่างไรก็ตามพารามิเตอร์ $phone_ip, $mac, $product, $program_version, $hardware_version พวกนี้จะมีค่าในทุกๆ Events ครับ

ต้องมีอะไรอยู่บน Web Server เพื่อที่จะรับ Action URL จาก IP Phone และการนำไปใช้งาน
เราต้องมีสคริปต์มารับ URL ที่ IP Phone ส่งมาครับ ซึ่งมันจะส่งพารามิเตอร์ต่างๆมาด้วย ในสคริปต์ที่เราเขียนจะนำพารามิเตอร์ที่ IP Phone ส่งมาด้วยมาทำงานต่อครับ ใครถนัดเขียนภาษาอะไรก็ใช้ภาษานั้นแหล่ะครับ เช่น php

บน Web Server ที่ผมทำไว้ ผมมีไฟล์เดียวคือ index.php ครับ เป็นสคริปต์เขียนด้วย php เช็คว่าเป็น Event อะไร และรับค่าพารามิเตอร์ไปทำงานต่อ

คอนฟิก Action URL ช่อง Open DND และ Close DND
จากหัวข้อที่แล้วนะครับ ผมเกริ่นว่า Event ของการ Open/Close DND จะไม่มี $local ดังนั้นหากต้องการรู้ว่า IP Phone เครื่องไหนกดเพื่อ Enable/Disable DND เราต้องให้ IP Phone ส่งค่าอื่นมาแทน เช่น $mac หรือ $phone_ip แล้วเราค่อยเอาไปค้นหาว่า IP Phone เครื่องนี้ใช้เบอร์อะไร

ใน Action URL ที่เป็น Open DND ผมจะให้ IP Phone ส่งไปแบบนี้
http://192.168.100.53/index.php?action=dnd_on&ip_addr=$phone_ip&mac_addr=$mac

ใน Action URL ที่เป็น Close DND ผมจะให้ IP Phone ส่งไปแบบนี้
http://192.168.100.53/index.php?action=dnd_off&ip_addr=$phone_ip&mac_addr=$mac

รูปแบบใน Action URL เราจะเขียนตามฟอร์แม็ต HTTP GET และขอให้มีพารามิเตอร์ของ IP Phone และต้องถูกต้องด้วย ตัวอย่างข้างบนนั้น action = dnd_on และ dnd_off ผมตั้งเอาเอง ในสคริปต์ผมต้องสร้างเงื่อนไขเช็ค action นี้

ไฟล์ index.php สคริปต์ที่ผมเขียนไว้บน Web Server ที่จะรับ Action URL ที่ IP Phone ส่งมา

โค้ด: เลือกทั้งหมด
<?php

$event=$_GET['action'];

if($event=='dnd_on'){
   /* Open DND */
   $ip=$_GET['ip'];
   $mac=$_GET['mac'];
   echo "event=$event ip=$ip mac=$mac";
   /* Next step is send email notification */
   exit;
} elseif ($event=='dnd_off') {
   /* Close DND */
   $ip=$_GET['ip'];
   $mac=$_GET['mac'];
   echo "event=$event ip=$ip mac=$mac";
   exit;
} else {
   /* Others */
   echo "unknown event";
}

?>


เป็นสคริปต์ง่ายๆก่อนครับ รับ event เข้ามา เช็คว่าเป็น dnd_on หรือ dnd_off มั๊ย ถ้าใช่ก็อ่านค่าตัวแปร $ip และ $mac มา จากนั้นก็นำ 2 ค่านี้ไปดำเนินการต่อครับ เช่น ส่ง Email และ/หรือส่ง Line และ/หรือส่ง SMS อะไรก็ว่าไป

เทคนิคการติดตั้ง Asterisk 17.x + DAHDI 3.1.0 บน CentOS 7
** หากมีปัญหากับอุปกรณ์ที่ซื้อมาเองหรือบริการที่ทำขึ้นมาเอง ให้โพสต์ถามในเว็บบอร์ดนี้นะครับ **
** งานเร่งด่วนติดต่อว่าจ้างที่เบอร์ 08-5161-9439 อีเมล์ iamaladin@gmail.com ไลน์ NuizVoip ครับ **
nuiz
Diamond Member
 
โพสต์: 7069
ลงทะเบียนเมื่อ: 24 มี.ค. 2010 09:33

ย้อนกลับไปยัง Grandstream - Connecting The World

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

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