2024-12-30

【LINE Messaging API】主動傳送訊息(推播) 給多位使用者

類似主動傳訊息給 user,不過在傳訊類型定義為 multicast。要傳訊的目標對象是多位 user,所以 UserId 要存在陣列中。


  1.  
  2. <php?
  3. date_default_timezone_set('Asia/Taipei');
  4. $sRootDir = $_SERVER['DOCUMENT_ROOT'];
  5. $channelAccessToken = '您的 channel Access Token';
  6. $bodyMsg = file_get_contents('php://input');
  7.  
  8. // LINE 不會幫我們記錄, 所以要自己寫 log
  9. // 這段不是必要, 只是方便自己除錯
  10. $sLogfile = 'log_'.date('Ymd').'.log'; // 指定 log 檔名, 一天一個檔, 檔名格式為: log_yyyymmdd.log
  11. $fp = fopen($sLogfile, "a+");
  12. fwrite($fp , print_r(date('Y-m-d H:i:s').', Recive: '.$bodyMsg."\n", true));
  13. fclose($fp);
  14.  
  15. ...
  16. ...
  17. // 取得 user id, 管道有很多, 此處不贅述
  18. $arrUserId = ['...','...', ...]; ← 要推播的目標 UserId 存入陣列
  19.  
  20. $payload = [ 'to' => $arrUserId,
  21. 'messages' => [
  22. ['type' => 'text',
  23. 'text' => '恭喜! 您中了特獎!',
  24. ]
  25. ]
  26. ];
  27. SendMsg($payload);
  28.  
  29.  
  30. // 傳送訊息給指定使用者
  31. function SendMsg($payload) {
  32. $ch = curl_init();
  33. // curl_setopt($ch, CURLOPT_URL, 'https://api.line.me/v2/bot/message/push');
  34. curl_setopt($ch, CURLOPT_URL, 'https://api.line.me/v2/bot/message/multicast'); ← 注意這裡要改成 multicast
  35. curl_setopt($ch, CURLOPT_POST, true);
  36. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
  37. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  38. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  39. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  40. curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
  41. curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json',
  42. 'Authorization: Bearer ' . $GLOBALS['channelAccessToken']
  43. ]);
  44. $result = curl_exec($ch);
  45. curl_close($ch);
  46. // 寫 log
  47. $sLogfile = 'log_'.date('Ymd').'.log';
  48. $fp = fopen($sLogfile, "a+");
  49. fwrite($fp , print_r(date('Y-m-d H:i:s').', send message result: '.$result."\n", true));
  50. fclose($fp);
  51. }
  52. ?>
  53.  



相關筆記 ----


沒有留言:

張貼留言