สร้าง LINE Notify สำหรับ Post ลงกลุ่มใน LINE Group

คู่มือการเรียนรู้ Yii Framework 2 (Yii2)

บทเรียนดีๆ สำหรับผู้ที่ต้องการแบ่งปัน บทเรียนของคุณอาจมีค่าสำหรับอีกหลายๆ คน

beta version

สร้าง LINE Notify สำหรับ Post ลงกลุ่มใน LINE Group

มานพ กองอุ่น yii line notify 1474

บทเรียนรู้นี้เป็นการทดสอบการเขียนโปรแกรมใน Yii2 เพื่อส่งข้อมูลเข้า LINE Group โดยใช้ Notify Bot โดยเป็นการดึงข้อมูลจากฐานข้อมูลแล้วส่งข้อมูลเข้ากลุ่ม (เป็นตัวอย่างการทดสอบ) โดยมีขั้นตอนต่างๆ ดังนี้

  1. เข้า LINE Notify Login เพื่อสร้าง Token และ Bot
  2. เพิ่ม LINE Notify เข้าใน LINE Group
  3. เขียนโปรแกรมใน Yii2 เพื่อเลือกข้อมูลสำหรับส่ง Notify
  4. สร้าง Cronjob ให้สคริปทำงานตามรอบที่ต้องการ
  5. ทดสอบการใช้งาน

เข้า LINE Notify Login เพื่อสร้าง Token และ Bot

เข้าระบบที่ https://notify-bot.line.me/th/ จากนั้นไปที่ เมนูขวาบน เลือก My page

จากนั้นคลิกที่ปุ่ม Generate token

จากนั้นใส่ชื่อ Bot และเลือกกลุ่มที่ต้องการให้ Bot ทำงาน จากนั้นกดปุ่ม Generate Token

จะปรากฏ Popup รหัส Token

คัดลอกไว้ก่อนครับหรือเปิดหน้านี้ทิ้งไว้ก่อน ค่อยเอาไปใส่ใน Yii2 อีกครั้งครับ

เพิ่ม LINE Notify เข้าใน LINE Group

ก่อนที่จะให้ LINE Notify ทำงานให้ทำการ Invite LINE Notify ในกลุ่มก่อนนะครับ โดยเข้า LINE App ในโทรศัพท์แล้ว เข้าไปกลุ่มที่เราสร้างขึ้น จากนั้นคลิกลูกศรชี้ลงที่มุมขวาบนจากนั้นเลือก Invite แล้วค้นหา LINE Notify จากนั้นก็เพิ่มเข้ามาใน Group ได้เลยครับ จะปรากฏข้อความดังนี้

เขียนโปรแกรมใน Yii2 เพื่อเลือกข้อมูลสำหรับส่ง Notify

สร้างตาราง line_bot แล้ว Generate Model LineBot ให้เรียบร้อย

ทดลองสร้าง controllers ดังนี้ frontend\controllers\LineBotController แล้วเขียนโปรแกรมดังนี้

<?php

namespace frontend\controllers;

use frontend\models\LineBot;
use frontend\modules\forum\models\Thread;
use yii\helpers\Url;

class LineBotController extends \yii\web\Controller
{

    public function actionCurl()
    {
        /*
         * ส่งจาก Forum
         */
        $last_thread = LineBot::findOne(['type' => 'forum']);
        $thread = Thread::find()->orderBy(['id' => SORT_DESC])->one();
        if(!$last_thread){
            $last_thread = new LineBot();
            $last_thread->type = 'forum';
            $last_thread->last_id = $thread->id;
            $last_thread->save();
            $message = $thread->subject.' '.Url::to('https://www.programmerthailand.com/forum/view/'.$thread->id);
            $res = $this->notify_message($message);

        }else{
            if($last_thread->last_id != $thread->id){
                $message = $thread->subject.' '.Url::to('https://www.programmerthailand.com/forum/view/'.$thread->id);
                $res = $this->notify_message($message);
                $last_thread->last_id = $thread->id;
                $last_thread->save();
            }
        }


    }

    public function notify_message($message)
    {
        $line_api = 'https://notify-api.line.me/api/notify';
        $line_token = 'YOUR-TOKEN';

        $queryData = array('message' => $message);
        $queryData = http_build_query($queryData,'','&');
        $headerOptions = array(
            'http'=>array(
                'method'=>'POST',
                'header'=> "Content-Type: application/x-www-form-urlencoded\r\n"
                    ."Authorization: Bearer ".$line_token."\r\n"
                    ."Content-Length: ".strlen($queryData)."\r\n",
                'content' => $queryData
            )
        );
        $context = stream_context_create($headerOptions);
        $result = file_get_contents($line_api, FALSE, $context);
        $res = json_decode($result);
        return $res;
    }

}

เมื่อเรียก url http:://your-url/line-bot/curl ระบบก็จะทำงาน

สร้าง Cronjob ให้สคริปทำงานตามรอบที่ต้องการ

ในที่นี้ใช้ Cpanel มี Cronjob มาให้ แล้วเราก็สามารถเรียก request url ได้ โดยตั้งค่าต่างๆ ในที่นี้จะให้ทำงานทุกๆ 15 นาที ดังนี้

wget -q -O /dev/null "https://YOUR-DOMAIN/line-bot/curl" > /dev/null 2>&1

ทดสอบการใช้งาน

ทดสอบการใช้งานจะเห็นว่ามีข้อความส่งเข้า LINE Group ดังนี้

สามารถนำไปประยุกต์ใช้ต่อไปนะครับ

อ้างอิง
https://medium.com/@aofiee/notify-bot-line-me-%E0%B9%83%E0%B8%8A%E0%B9%89-line-%E0%B8%A3%E0%B8%B1%E0%B8%9A-order-%E0%B8%87%E0%B8%B2%E0%B8%99-afe56f898fc#.esm0dspcv
http://stackoverflow.com/questions/13259530/using-cron-jobs-to-visit-url

หากบทเรียนรู้มีความผิดพลาดประการใด หรือมีข้อเสนอแนะกรุณาแจ้ง contact@programmerthailand.com
กลับขึ้นบน