จากข้อจำกัดที่ zendesk ไม่สามารถทำ desktop notification ได้ โดย zendesk แนะนำให้ใช้ slack เข้ามาช่วยในการทำ desktop notification แต่จาการทดสอบพบว่ามีข้อจำกัดที่ slack ไม่สามารถทำ desktop notification ได้ผ่าน api
เราจึงมองหาทางเลือกเพิ่มเติมและได้พบตัวเลือกที่น่าสนใจคือ OneSignal บริการ notification ที่รองรับหลายๆ platform ทั้ง desktop browser, android, ios
บริการ push notifications ไปยังผู้ใช้งานที่รองรับหลาย platform จุดประสงค์ต้องการให้ผู้ใช้ส่ง notification ไปยังกลุ่มเป้าหมายหลากหลาย segment โดยการใช้วิธี filter กลุ่มผู้ที่เข้ามาใช้งานเว็บ เช่น ส่งข้อความแจ้งไปยังกลุ่มลูกค้าที่เข้าใช้งานจากประเทศไทย, ส่งข้อความแจ้งไปยังผู้ใช้ที่เข้ามาเยี่ยมชมเว็บไซต์มากกว่า 5 ครั้ง
โดยการส่งข้อความเพียงแค่เรา create app เพื่อให้ได้ app id บน OneSignal แล้วนำ script ไปติดตั้งที่เว็บไซต์ของเรา OneSignal จะเก็บ session ของผู้ใช้งานไว้ให้เรานำมา filter เพื่อสร้างกลุ่มเป้่าหมาย และสามารถส่งข้อความ notification ไปยังกลุ่มเป้าหมายได้ที่เว็บของ OneSignal ได้เลย
แต่เราจะใช้บริการ OneSignal ในการทำ desktop notification ไปยังเจ้าหน้าที่จึงต้องมีการตั้งค่าเฉพาะเพิ่มเติมให้กับกลุ่ม user เพื่อให้สามารถแจ้งเตือนไปยังเจ้าหน้าที่ได้ถูกต้อง
การสร้าง app เพื่อทำ notification เราต้องสมัคร account ของ onesignal ก่อนแล้วจึงทำการสร้าง มีขั้นตอนดังนี้
ระบบของ OneSignal จะมองผู้ใช้บนเครื่องเป็นแค่ Player ID เราต้องเพิ่ม tag เข้าไปเพื่อ update ข้อมูล player id ให้เป็นถูกต้องเสมอ เช่น เมื่อโหลดหน้าที่ระบุก็จะ update ข้อมูล email address ให้ถูกต้อง โดยใช้การ delete tag และ add tag
var OneSignal = window.OneSignal || [];
OneSignal.push(function() {
OneSignal.init({appId: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",});
OneSignal.deleteTag("email");
OneSignal.sendTag("email", "support@netway.co.th");
});
อ้างอิงตากการทำ notification ที่ zendesk แนะนำให้ใช้ slack จะเห็นว่า slack นั้นไม่ต้องระบุ authentication ก็สามารถที่จะ push data ไปที่ slack ได้ แต่ระบบของ onesignal นั้นจำเป็นต้องมีการ authen เราจึงต้องเตรียม api ไว้รองรับก่อนส่งไปอีกที
ระบบ zendesk รองรับการส่งค่าไปยังระบบอื่นที่หลากหลาย ในที่นี้เราเลือกใช้ HTTP Target เพื่อส่ง data ไปยัง api ของเรา
ตัว zendesk เราสามารถดักจับ event ที่เกิดขึ้นบนระบบ support แล้วตั้งเงื่อนไขว่าถ้าเหตุการณ์เป็นไปตามที่กำหนดจะให้ทำอะไร เช่น เราเลือกว่าถ้า ticket มีการ re-assign ให้แจ้งเตือนเจ้าหน้าที่ว่ามี ticket ถูก assign ถึงคุณ และส่งค่าไปยัง api พร้อมทั้ง json data ในรูปแบบที่ระบบ onesignal ต้องการ
อ่านเอกสารอ้างอิงได้ที่ https://documentation.onesignal.com/reference#section-example-code-create-notification
ตามที่กล่าวมาระบบ one signal ต้องการทำ authentication เราจึงต้องจัดทำ api ตัวกลางขึ้นมาเพื่อเตรียมข้อมูลในการส่งไปอีกที
$text = $request['text'];
$url = $request['url'];
$filters = $request['filters'];
$content = array('en' => $text);
$fields = array(
'app_id' => 'xxxxxxxxxxxxxxxxxxxxxxxx',
'filters' => $filters,
'data' => array('foo' => 'bar'),
'url' => $url,
'contents' => $content
);
$fields = json_encode($fields);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://onesignal.com/api/v1/notifications');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8',
'Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$data = curl_exec($ch);
curl_close($ch);
?>
ที่ระบบ zendesk เราสามารถทดสอบ extension HTTP Target ที่พึ่งสร้างไปโดยการจองลอง json data ที่ยัง api ที่เตรียมไว้ได้เพื่อดูว่าระบบเราทำงานได้ใหม

ระบบของ Netway ใช้วิธีการว่าถ้าเจ้าหน้าที่ login เป็น staff อยู่จะขึ้นแจ้งเตือนให้เปิด Notification เพื่อรับการแจ้งเตือน เราก็แจ้งไปยังเจ้าหน้าที่ให้ Allow

จากที่เราได้ทดลองใช้งาน OneSignal เราพบว่าเจ้าหน้าที่กด Allow Notification แล้วแต่ไม่มี Notification แจ้งเตือน
ทาง OneSingal ได้แนะนำแนวทางในการแก้ไขปัญหา และข้อจำกัดในการใช้งาน สามารถเข้าไปดูได้ที่ Troubleshooting Web Push


Admin Istrator