ส่ง LINE Notify รับการแจ้งเตือนแบบตัวต่อตัว

wave
มานพ กองอุ่น 19 ก.ค. 2019 23:47:56 42,486

 เราสามารถสร้างการแจ้งเตือนจากเว็บไซต์เราเข้า LINE ของลูกค้าได้ผ่าน LINE Notify แบบ 1-1-Chat 

หลักการทำงาน

ขั้นแรก ลูกค้าร้องข้อเชื่อมต่อกับ Service ของเราผ่านเว็บไซต์เราเพื่อทำ Authorize โดยเข้าระบบแล้วอนุญาตการเชื่อมต่อกับ Service เรา

ขั้นที่สอง หลังจากลูกค้าอนุญาตแล้วระบบจะกลับมาที่หน้า callback ที่ได้ตั้งค่าไว้ โดยจะส่ง token กลับมา อันนี้ล่ะ เอาไปเก็บไว้ใน Database เพื่อนำไปใช้ในการส่งให้ลูกค้าครั้งต่อๆ ไป

ขั้นที่สาม เอา token มาส่ง Notify หรือข้อความ รูปภาพ สติ๊กเกอร์ ให้ลูกค้าได้

 

การเปิดใช้งาน Service

เข้า URL : https://notify-bot.line.me/en/ จากนั้นเข้าระบบให้เรียบร้อย แล้วเลื่อนมาด้านล่าง คลิกที่ ลงทะเบียนบริการ 

จากนั้นจะปรากฏหน้าสำหรับกรอกข้อมูลบริการของเรา

ทำการกรอกข้อมูลให้เรียบร้อย

  • โลโก้ เลือกรูปในเครื่องเราได้เลย
  • ชื่อบริการ เช่น แม่ค้า
  • คำอธิบาย เช่น แม่ค้าออนไลน์
  • URL ในที่นี้ใช้ URL localhost ในการทดสอบ เช่น http://loalhost/yii2-maekha/web
  • บริษัท/ผู้ประกอบการ ใช้ บริษัท หนุมานไอที จำกัด
  • ประเทศ/ภูมิภาค ใช้ Thailand
  • ผู้รับผิดชอบ เช่น ผู้ดูแลระบบ
  • อีเมล์ เช่น your@email.com
  • Callback URL อันนี้สำคัญใส่ URL ตอบกลับ เช่น http://localhost/yii2-maekha/web/index.php?r=site/callback

จากนั้นกดบันทึกข้อมูล เราจะได้ Client ID และ Client Secret เป็นอันเสร็จเรียบร้อยในขั้นตอนนี้

เขียนโปรแกรม

ในที่นี้จะใช้ Yii Framework 2 Basic ในการเขียนโปรแกรมซึ่งมี 3 Action ด้วยกันคือ

  • Action site/index สร้างปุ่มสำหรับกดเชื่อมต่อ
  • Actiion site/callback หลังเข้าระบบ Authorize แล้วกลับมาหน้านี้
  • Action site/notify การส่งข้อความไปยังผู้รับ

เขียนโปรแกรม action site/index

เปิด controllers/SiteController.php จากนั้นแก้ actionIndex() ดังนี้

public function actionIndex()
    {
        $client_id = 'ZtAdgYvwFsgwhx4BCa7HyOUZ';
        $api_url = 'https://notify-bot.line.me/oauth/authorize?';
        $callback_url = 'http://localhost/yii2-maekha/web/index.php?r=site/callback';

        $query = [
            'response_type' => 'code',
            'client_id' => $client_id,
            'redirect_uri' => $callback_url,
            'scope' => 'notify',
            'state' => 'mylinenotify'
        ];
        
        $result = $api_url . http_build_query($query);

        return $this->render('index',[
            'result' => $result
        ]);
    }

ใน  views/site/index.php สร้างปุ่มลักษณะดังนี้

<?php

/* @var $this yii\web\View */
use yii\helpers\Html;

$this->title = 'Line Notify';
?>

<?=Html::a('ลงทะเบียน', $result, ['class' => 'btn btn-success'])?>

ทดลอง run จะพบหน้าจอลักษณะนี้

 

เขียนโปรแกรม action site/callback

ในขั้นตอนนี้สิ่งที่เราต้องการคือ access_token เพื่อใช้สำหรับการส่ง Notify ไปยังผู้รับได้ถูกต้อง ดังนั้นสามารถเขียนเพิ่มเติมให้บันทึกในฐานข้อมูลได้

public function actionCallback()
    {
        $client_id = 'ZtAdgYvewFgwh4BCda7HyOUZ';
        $client_secret = 'Cr6zqdWdWRPm6CgfU7bnas7IWp2gxouoUfbiROHwXQHZDk7';

        $api_url = 'https://notify-bot.line.me/oauth/token';
        $callback_url = 'http://localhost/yii2-maekha/web/index.php?r=site/callback';

        parse_str($_SERVER['QUERY_STRING'], $queries);

        //var_dump($queries);
        $fields = [
            'grant_type' => 'authorization_code',
            'code' => $queries['code'],
            'redirect_uri' => $callback_url,
            'client_id' => $client_id,
            'client_secret' => $client_secret
        ];
        
        try {
            $ch = curl_init();
        
            curl_setopt($ch, CURLOPT_URL, $api_url);
            curl_setopt($ch, CURLOPT_POST, count($fields));
            curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        
            $res = curl_exec($ch);
            curl_close($ch);
        
            if ($res == false)
                throw new Exception(curl_error($ch), curl_errno($ch));
        
            $json = json_decode($res);
        
            //var_dump($json);
        } catch(Exception $e) {
            throw new Exception($e->getMessage());
            //var_dump($e);
        }

        return $this->render('callback', [
            'json' => $json
        ]);
    }

ใน views/site/callback

<?php
use yii\helpers\Html;

//var_dump($json);
?>
<?=Html::a('ส่งข้อความ', ['notify', 'token' => $json->access_token])?>

 

เขียนโปรแกรม action site/notify

เมื่อกดลิ้งค์จากหน้า callback จะมี token ส่งมาด้วย ซึ่งจะใช้สำหรับส่งให้ผู้ใช้งาน (ในความเป็นจริงต้องให้ระบบส่งเองนะครับ ดังนั้นต้องเก็บ access_token ลูกค้าให้ดี เช่น เก็บใน database)

ในขั้นตอนนี้สร้าง Model มารับค่าก่อนใน models/Notify.php ดังนี้

<?php
namespace app\models;
use yii\base\Model;

class Notify extends Model {
    public $name;

    public function rules() {
        return [
            [['name'], 'required']
        ];
    }

    public function attributeLabels()
    {
        return [
            'name' => 'ข้อความ'
        ];
    }
}

จากนั้นแก้ controllers/SiteController.php เพิ่ม action notify ดังนี้ 

public function actionNotify($token)
    {
        $api_url = 'https://notify-api.line.me/api/notify';

        $model = new Notify();
        $json = null;
        if($model->load(Yii::$app->request->post())){
            $headers = [
                'Authorization: Bearer ' . $token
            ];
            $fields = [
                'message' => 'ทดสอบการส่งข้อความไปยังผู้ใช้งาน '. $model->name
            ];
            
            try {
                $ch = curl_init();
            
                curl_setopt($ch, CURLOPT_URL, $api_url);
                curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
                curl_setopt($ch, CURLOPT_POST, count($fields));
                curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            
                $res = curl_exec($ch);
                curl_close($ch);
            
                if ($res == false)
                    throw new Exception(curl_error($ch), curl_errno($ch));
            
                $json = json_decode($res);
                //$status = $json->status;
            
                //var_dump($status);
            } catch (Exception $e) {
                throw new Exception($e->getMessage);
            }
        }
        return $this->render('notify', [
            'model' => $model,
            'json' => $json
        ]);
    }

หน้า views/site/notify.php

<?php
use yii\widgets\ActiveForm;
use yii\helpers\Html;

?>

<?php $form = ActiveForm::begin()?>
<?=$form->field($model, 'name')?>

<?=Html::submitButton('ส่งข้อความ', ['class' => 'btn btn-warning'])?>
<?php ActiveForm::end()?>

<?php var_dump($json)?>

 

ทดลองส่งข้อความ

ทดลองส่งข้อความ โดยเปิด URL : http://localhost/yii2-maekha/web จะปรากฏหน้าเว็บดังนี้

จากนั้นคลิกปุ่ม ลงทะเบียน ระบบจะส่งข้อมูลไปหน้า LINE เพื่อ เชื่อมต่อและ Authorize

 

 

เลือกบริการ แล้วกดปุ่ม เห็นด้วยและเชื่อมต่อ จากนั้นระบบจะกลับมาหน้าที่ callback

กดลิ้ง ส่งข้อความ จากนั้นจะไปหน้า notify กรอกข้อความทดสอบ จากนั้นกดปุ่ม ส่งข้อความ หากส่งสำเร็จจะปรากฏ status 200 message ok ดังนี้

เมื่อเปิดดูใน LINE จะปรากฏข้อความขึ้นดังนี้

 


ความคิดเห็น

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

เขียนบทเรียนรู้ของคุณ

รายละเอียด
  • ดู 42,486
  • รักเลย 0
  • หมวดหมู่ Yii Framework 2 (Yii2)
  • เขียนเมื่อ
  • แก้ไขเมื่อ
  • Tags line notify
ข้อมูลผู้เขียน
มานพ กองอุ่น

มานพ กองอุ่น

เป็นสมาชิกเมื่อ: 18 ธ.ค. 2009

เนื้อหาที่เกี่ยวข้อง