ส่งข้อความส่วนตัวไปยังผู้รับด้วย Line Api
เกริ่นนำกันก่อน Messaging API ของไลน์เอาไว้สำหรับส่งข้อความไปยังผู้รับทั้งแบบรายบุคคลและแบบกลุ่ม โดยมีบริการหลักอยู่ 2 บริการ
- Replies เป็นบริการรับข้อความการติดต่อผ่านเว็บไซต์โดยสามารถตอบกลับไปยังข้อความนี้ได้โดยอัตโนมัติ (สามารถทำได้ทั้งการตอบกลับแบบอัตโนมัติ และการตอบกลับที่กำหนดเอง) ยกตัวอย่างการใช้งานเช่น Bot
- Push messages เป็นบริการส่งข้อความไปยังผู้รับ ผ่าน userID ซึ่ง userID นี้ไม่ใช่ ID ไลน์นะครับเป็นคนละอันกันเราจะต้องอ่านค่า userID ออกมาจากไลน์ก่อนถึงจะสามารถส่งข้อความไปยังผู้ใช้ผ่าน userID นี้ได้
ก่อนเริ่มใช้งานเราต้องไปลงทะเบียนบริการกันก่อน โดยที่เราต้องมีบัญชีไลน์อยู่แล้วโดยเข้าไปที่ https://developers.line.biz/console/ กดที่ Messaging API (กรอบสีแดง) เลยครับ จะมีคำแนะนำเกี่ยวกับบริการนี้แสดงขึ้นมาโดยบอคร่าวๆว่าทำอะไรได้บ้าง ใครอยากอ่านละเอียดก็กดดูที่ Documenttation
หากเราต้องการลงทะเบียนบริการ กดปุ่ม Start Now เลยครับ ขั้นตอนถัดจากนี้จะเป็นการเข้าระบบด้วยบัญชี Line ที่เรามีอยู่ ให้ทำการเข้าระบบให้เรียบร้อย หรือหากเข้าระบบอยู่แล้วมันจะพาเรามาที่หน้า Create a channel หน้านี้จะเป็นเริ่มต้นสร้างบริการ Messaging API ให้กรอกทุกอันที่เขียนว่า Don't leave this empty เลยครับ เป็นการตั้งชื่อบริการ (สามารถแก้ไขได้ภายหลัง)
หลังจากที่เพิ่มบริการสำเร็จระบบจะพาไปยังหน้ารายละเอียดของบริการตามรูป ให้กดที่แท็บ Messaging API เลยครับเราต้องใช้ข้อมูลที่หน้านี้ ในแท็บ Messaging API มีสิ่งที่เราต้องสนใจอยู่ 3 อย่าง
- Bot basic ID อันนี้คือ ID Line ของ Bot เราต้องแอดไลน์เข้าไปที่ Bot นี้เพื่อรับ-ส่งข้อความ ระหว่าง Bot และเรา
- Channel access token (long-lived) อันนี้คือ Access Token ทีเราต้องใช้เพื่อเขียนโปรแกรมเชื่อมต่อกับบริการ ซึ่งในกรณีที่เราต้องการสร้าง Bot เฉยๆเพื่อให้ Line ตอบกลับอัตโนมัติ อาจไม่ต้องดำเนินการอะไรตรงนี้ก็ได้ เริ่มต้นค่านี้จะเป็นค่าว่างก่อน หากต้องการสร้างให้กด Issue และเราสามารถเปลี่ยนแปลงค่านี้ได้ภายหลังโดยกดปุ่ม Reissue ในขั้นตอนนี้เราจะได้ Access Token สำหรับนำไปเขียนโปรแกรมเพื่อใช้งานกันแล้ว
- Webhook URL อันนี้เราจะต้องกรอก URL ของเว็บไซต์ (ต้องเป็น https เท่านั้น) เพื่อใช้รับค่าต่างๆที่มีการส่งมาจาก Line Bot ตอนที่มีข้อความเข้ามา ซึ่งหากกำหนดค่านี้ไว้ จะมีการเรียกไปยัง URL นี้พร้อมกับส่งข้อมูลต่างๆไปยัง URL นี้ ซึ่งเราสามารถเขียนคำสั่งเพื่อตอบกลับด้วยตัวเองแทนการใช้ Bot ของไลน์ได้ หรือ ไม่ต้องกรอกหากไม่ต้องการใช้บริการอื่นๆนอกจาก Replies ที่ต้องการให้ Line ตอบกลับอัตโนมัติ
ต่อไปเราจะมาเขียนโค้ด PHP เพื่อใช้งาน Messaging API กัน
ทำความเข้าใจกันก่อน หลักในการส่งข้อความผ่าน Messaging API ไปยังผู้รับโดยตรง จะอาศัยการส่งข้อมูลผ่าน userID ของไลน์ และอย่างที่ผมเกริ่นไปในตอนแรกว่าค่านี้ไม่ใช่บัญชีไลน์ ดังนั้น เราจำเป็นต้องอ่านค่านี้ของ User ออกมาก่อน ซึ่งค่านี้จะส่งมากับข้อมูลของบริการ Replies (หรือ Line Bot) ดังนั้นในการเชื่อมต่อ เราจะต้องให้ User ติดต่อเราผ่านทาง Line Bot มาก่อน ซึ่งเราจะทำการอ่านข้อมูล userID จากข้อมูลที่ส่งมาจาก Line Bot เก็บไว้ จากนั้นเราถึงจะสามารถส่งข้อความไปยังผู้รับด้วยบริการ Push messages ไปยังผู้รับได้
ขั้นตอนแรก สร้างไฟล์เพื่อรับค่าจาก Bot ก่อน เพื่อจะส่ง URL นี้กำหนดให้กับ Webhook URL ตัวอย่างนี้จะเป็นการรับค่าต่างๆมาจาก Line Bot และทำการตอบกลับด้วยข้อความที่ส่งมานะครับ ตัวอย่าง https://domain.tld/webhook.php ซึ่งเราต้องเอา URL ไปกรอกให้กับช่อง Webhook URL (เมื่อกรอกแล้วอย่าลืมกด Verify ด้วย)
<?php
// Access Token
$access_token = 'กรอกข้อมูลจาก Channel access token (long-lived)';
// รับค่าที่ส่งมา
$content = file_get_contents('php://input');
// แปลงเป็น JSON
$events = json_decode($content, true);
if (!empty($events['events'])) {
foreach ($events['events'] as $event) {
if ($event['type'] == 'message' && $event['message']['type'] == 'text') {
// ข้อความที่ส่งกลับ มาจาก ข้อความที่ส่งมา
// ร่วมกับ USER ID ของไลน์ที่เราต้องการใช้ในการตอบกลับ
$messages = array(
'type' => 'text',
'text' => 'Reply message : '.$event['message']['text']."\nUser ID : ".$event['source']['userId'],
);
$post = json_encode(array(
'replyToken' => $event['replyToken'],
'messages' => array($messages),
));
// URL ของบริการ Replies สำหรับการตอบกลับด้วยข้อความอัตโนมัติ
$url = 'https://api.line.me/v2/bot/message/reply';
$headers = array('Content-Type: application/json', 'Authorization: Bearer '.$access_token);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
}
}
}
จากตัวอย่างนี้
- ข้อความที่ส่งมาคือ $event['message']['text']
- User ID ที่เราต้องการอยู่ที่ $event['source']['userId'] ค่านี้ไม่ได้ใช้ในกรณีของ Bot แต่เราสามารถเก็บค่านี้เพื่อไว้ใช้ในภายหลังได้ เราจะจดค่านี้ไว้เพื่อนำไปกรอกให้กับส่วนที่ 2
- $event['replyToken'] อันนี้เป็น Token สำหรับการตอบกลับข้อความที่ส่งมา ซึ่งเป็น Token ชั่วคราวใช้ได้ในช่วงเวลาสั้นๆ ถ้าเราต้องการตอบกลับอัตโนมัติเราจะตอบกลับโดยใช้ข้อมูลนี้
โค้ดส่วนที่ 2 เป็นการส่งข้อความไปยังไลน์ โดยใช้ User ID ที่เก็บได้มาจาก Bot
<?php
// Access Token
$access_token = 'กรอกข้อมูลจาก Channel access token (long-lived)';
// User ID
$userId = 'U49e03c8adb9113...........';
// ข้อความที่ต้องการส่ง
$messages = array(
'type' => 'text',
'text' => 'ทดสอบการส่งข้อความ',
);
$post = json_encode(array(
'to' => array($userId),
'messages' => array($messages),
));
// URL ของบริการ Replies สำหรับการตอบกลับด้วยข้อความอัตโนมัติ
$url = 'https://api.line.me/v2/bot/message/multicast';
$headers = array('Content-Type: application/json', 'Authorization: Bearer '.$access_token);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result = curl_exec($ch);
echo $result;
คงไม่ต้องอธิบายมากนะครับ เราสามารถใช้ userID ที่จัดเก็บไว้ในฐานข้อมูลเพื่อส่งข้อความเมื่อไรก็ได้ ส่วนความสามารถอื่นๆแนะนำให้ศึกษาจาก Documenttation เลยครับ