ส่ง Notification ผ่าน Line Notify ด้วย PHP

Monday, January 16, 2017 12:25 AM 32 Comments , ,

วันนี้จะมาแนะนำการส่ง Notification ผ่าน Line Notify ด้วยภาษา PHP กันครับ

โดย Line Notify นั้นมีความสามารถดังนี้
- ส่ง Notification มายังตัวเราเอง
- ส่ง Notification ไปยัง Line Group ที่เราอยู่ (เราต้องเพิ่ม Line Notify เข้ามาใน Line Group นั้นด้วย)
- ส่ง ข้อความ Text, รูปภาพ และ Sticker ได้

Add Line Notify เป็นเพื่อนเราก่อน

ก่อนอื่นเราต้องแอด Line Notify มาเป็นเพื่อนเราก่อน โดยค้นหาคำว่า Line Notify แล้วแอดเป็นเพื่อนดังภาพ



สร้าง Token สำหรับการ Notify

- ให้เรา Login เข้าในเวป https://notify-bot.line.me

- เมื่อ Login เสร็จเรียบร้อย ให้เข้า https://notify-bot.line.me/my/

- เลื่อนลงมาด้านล่างคลิกที่ Generate Token

คลิก Generate token

- ให้เราตั้งชื่อ Notify  (ชื่อนี้จะไปแสดงตอนส่งข้อความ)

เลือกตัวเราเองหรือ Line Group ที่ต้องการ

1-on-1 chat with LINE Notify คือจะส่งข้อความมาหาตัวเราเอง

นอกนั้นจะเป็น List ของ Line Group ที่เราอยู่ หากต้องการให้ส่งเข้า Line Group เราต้อง Invite Line Notify เข้าไปใน Line Group นั้นด้วย

- คลิก Generate token เราก็จะได้ Token เอาไว้ในการส่ง Notify ให้เราเซฟไว้ให้ดี เพราะเราจะเห็น Token อันนี้เพียงครั้งเดียว

Token จะแสดงใน Popup นี้เพียงครั้งเดียวเท่านั้น

ส่ง Notification ด้วย PHP

ในที่นี้เราจะใช้ PHP ในการส่ง Notification กันนะครับ หากต้องการส่งด้วยภาษาอื่นสามารถดู API ได้ที่เอกสารนี้ https://notify-bot.line.me/doc/en/

โดยผมได้สร้าง PHP Library ง่ายๆ สำหรับที่ใช้ในการส่ง Line Notify ไว้ที่ https://github.com/kittinan/php-line-notify โดยมี Requirement ดังนี้

 - PHP 5.5+

เริ่มกันเลย

- โหลด Library ผ่าน composer

composer require kittinan/php-line-notify
- ทดสอบส่ง Text Message ตาม Code ด้านล่าง


- ข้อความก็จะถูกส่งไปยังตัวเราหรือ Line Group ที่เรา Generate Token มา



- ทดลองส่งรูปภาพ ตาม Code ด้านล่าง


- รูปภาพก็จะถูกส่งไปยังตัวเราหรือ Line Group ที่เรา Generate Token มา


จบแล้วค้าบบ

ปล. ไว้มีเวลาจะอัพเดท Library ให้สามารถส่ง Sticker ได้นะครับ
ปล. API Line Notify มี Rate Limit อยู่นะครับ โดย Rate Limit จะอยู่ที่ 1,000 ต่อชั่วโมง

32 comments:

  1. ปล. API Line Notify มี Rate Limit อยู่นะครับ โดย Rate Limit จะอยู่ที่ 1,000 ต่อชั่วโมง

    คือ 1. token ใช่ได้ 1000 ชั่วโมง เหรอครับ

    หรือว่า ยังไงครับ รบกวน ช่วยอธิบาย ผมหน่อยครับ ขอบคุณครับ

    ReplyDelete
    Replies
    1. รู้สึกมันจะอัพเดท Document ใหม่แล้วครับ โดยน่าจะดู Rate Limit ได้จาก Response Header ครับ

      https://notify-bot.line.me/doc/en/

      เลื่อนลงมาด้านล่างสุด

      Delete
  2. ขึ้น error อ่ะครับ

    Warning: require_once(./vendor/autoload.php): failed to open stream: No such file or directory in C:\AppServ\www\linebot\linebot.php on line 3

    Fatal error: require_once(): Failed opening required './vendor/autoload.php' (include_path='.;C:\php\pear') in C:\AppServ\www\linebot\linebot.php on line 3

    ReplyDelete
    Replies
    1. ลง composer https://getcomposer.org/download/

      แล้ว

      composer install ครับ เพื่อลง Dependency ที่ตัว Library ใช้ครับ

      Delete
  3. Warning: require_once(./vendor/autoload.php): failed to open stream: No such file or directory in C:\AppServ\www\linebot\linebot.php on line 3

    Fatal error: require_once(): Failed opening required './vendor/autoload.php' (include_path='.;C:\php\pear') in C:\AppServ\www\linebot\linebot.php on line 3

    ติด error ครับ อ่านแล้วยังไม่ค่อยเข้าใจเท่าไหร่(มือใหม่) ขอคำแนะนำหน่อยครับ ขอบคุณครับ

    ReplyDelete
    Replies
    1. ลองศึกษาเกี่ยวกับ PHP composer ดูครับ ใช้ในการจัดการ Dependency สำหรับภาษา PHP ครับ

      https://getcomposer.org/

      Delete
  4. ขอสอบถามเพิ่มนะคะ ตามตัวอย่าง เห็นมีส่งหาตัวเอง กับ Line Group หากเราจะเขียนให้ส่งหาคนอื่นด้วยได้หรือเปล่าคะ พอดีกำลังหาวิธีให้ application ที่เขียน ส่ง notify ไปยัง line ของ user ที่ใช้ app แต่ละคนน่ะคะ

    ReplyDelete
    Replies
    1. ถ้าเป็น Line Notify ไม่ได้ครับ เพราะมันต้องใช้ Token ที่ต้องเข้าไป Generate เองของแต่ละคน

      ต้องไปใช้ Line@ Bot แทน ถ้าหาก User ไหนเป็นเพื่อนกับ Bot เรา เราสามารถส่งข้อความเฉพาะคนได้ครับ แต่มันมี Limit คือใช้ได้แค่ 50 คน

      Delete
    2. ขอบคุณมากนะคะ

      Delete
  5. อยากให้มัน save รูปในห้องสนทนา และข้อความจะทำได้ไหมครับ

    ReplyDelete
    Replies
    1. Line Notify ทำไม่ได้ครับ ต้องไปใช้ Line@ Bot แทนครับ https://developers.line.me/en/docs/messaging-api/overview/

      Delete
  6. แล้วเราจะจัดรูปแบบข้อความที่ส่งมายังไงครับ ให้ขึ้นบรรทัดใหม่ เช่น
    หัวข้อ1:ข้อความ1
    หัวข้อ2:ข้อความ2
    ...

    ReplyDelete
    Replies
    1. ใช้ \n ครับ ตัวอย่าง

      $text = "\nหัวข้อ1:ข้อความ1\nหัวข้อ2:ข้อความ2";

      Delete
    2. ได้แล้วครับ ขอบคุณครับ ตอบไวมากเลย

      Delete
    3. ยินดีครับ ลองศึกษาเรื่อง String ของ PHP เพิ่มเติมดูครับ

      http://php.net/manual/en/language.types.string.php

      Delete
  7. สอบถามนิดหนึ่งนะค่ะพี่ ถ้าเรา ทางเรามีการวิ่งผ่านเน็ตผ่าน poxy เราต้องต้องค่าอย่างไรหรือค่ะ

    ReplyDelete
    Replies
    1. โอ้วว อันนี้น่าจะต้องแก้ Library นิดนึงครับ

      ตัว Library ใช้ HTTP Client ของ Guzzle PHP ครับ ลองดูอันนี้ครับ ในการ set proxy
      http://docs.guzzlephp.org/en/stable/request-options.html#proxy

      ถ้าแก้แล้วรบกวนช่วยส่ง Pull Request มาให้ด้วยก็ดีครับ 555+ หรือไม่อย่างนั้นรอผมว่างๆแก้ Libray ให้มัน Support Proxy ให้ครับ

      Delete
  8. สอบถามหน่อยครับผม เจ้าตัวนนี้สามารถรันผ่าน xampp ได้หรือป่าวครับผม หรือจำเป็นต้องรันผ่าน Appserv อะครับ พอรันด้วย xampp เเล้วติดปัญหา err ตัสนี้ครับผม [พอดีมือใหม่ครับเเก้ไม่ได้เลย]

    Warning: require(D:\xampp\htdocs\line-send\tests/../vendor/autoload.php): failed to open stream: No such file or directory in D:\xampp\htdocs\line-send\tests\LineNotifyTest.php on line 3

    Fatal error: require(): Failed opening required 'D:\xampp\htdocs\line-send\tests/../vendor/autoload.php' (include_path='D:\xampp\php\PEAR') in D:\xampp\htdocs\line-send\tests\LineNotifyTest.php on line 3

    ReplyDelete
  9. พอจะรู้ไหมครับว่าการจัดรูปแบบขึ้นบรรทัดใหม่ของ .net ใช้อะไร ลองใส่ \n แล้วไม่ได้ผลครับ ขอบคุณครับ

    ReplyDelete
    Replies
    1. มันน่าจะใช้ \n เหมือนกันนะครับ ลองใช้เป็น "\n" double quote ยังครับ

      Delete
  10. ใส่สีตัวอักษรได้รึเปล่าครับ

    ReplyDelete
  11. ขอวิธีการดึงข้อมูลจาก database ส่งเข้าไลน์หน่อยครับ

    ReplyDelete
    Replies
    1. ก็เหมือนคิวรี่ทั่วไปนั่นแหละครับ ได้ข้อมูลมาแล้วก็มาใส่ใน message
      $message = $s_login['login_name'].' Login เมื่อวันที่ '.$s_login('datetime');
      $this->xxxxx_m->line_notify($token,$message);

      Delete
  12. ถ้า token ผิดสามารถตรวจสอบได้ยังไงหรอครับ

    ReplyDelete
  13. ผมใช้ Chome
    ขึ้น ERROR แบบนี้ ครับ
    หน้านี้ใช้ไม่ได้localhost ไม่สามารถดำเนินการกับคำขอนี้ในขณะนี้
    HTTP ERROR 500

    ผมต้องแก้ไขยังไง ครับ

    ReplyDelete
    Replies
    1. เดาว่าน่าจะมี error เกิดขึ้นครับ

      Delete
  14. รัน composer require kittinan/php-line-notify แล้ว

    ผมใช้ require_once '../../php/vendor/autoload.php';

    ลองรันโค้ดไม่พบ class ตาม error นี้ครับ
    Fatal error: Class 'KS\Line\LineNotify' not found

    จะต้องแก้ไขยังไงครับ

    ReplyDelete
    Replies
    1. ลองตรวจสอบเบื้องต้นว่า path '../../php/vendor/autoload.php' ถูกรึเปล่าครับ เพราะ folder vendor มันน่าจะอยู่ที่ root path ของ folder project ครับ

      Delete
  15. ส่งข้อความ tag ชื่อเพื่อนในกลุ่มได้มั้ยครับ

    ReplyDelete
  16. อยากสอบถามแก้ไขจาก http -> https ยังไงเนื่องจากไลน์มีการupdate

    ReplyDelete