用LineBot備份Line的檔案到Synology Nas(二)

好多人敲碗要一個詳細版,我這次把明細都說一下,但是申請LineBot的這段要麻煩各位自已去找了

基本設定:先確認與Line的Message API跟Synology的Web網站連線有沒有問題

主要透過Webstation下的目錄

要去LINE的Messaging API確認呼叫的網址對不對

好了,正文開始

<?php
   $channelAccessToken=您自已LineBot的AccessToken;
   $bodyMsg = file_get_contents('php://input'); //LINEBOT收到的回傳JSON,LINE會將JSON資料傳到您的Webhook URL,就是你上面NAS的Web網址
   $obj = json_decode($bodyMsg, true); //將json解碼成php的obj物件
   foreach ($obj['events'] as &$event) {
          $type     = $event['message']['type']; //LINE的TYPE類型,有分; text、image、video、file....等
          //這個範例只針對file做分析
	  if($type=="file"){
             $fileId   = $event['message']['id']; //回傳過來的json裡面的message id
	     $fileName = $event['message']['fileName']; //回傳過來的json裡面的filename
	     $fileurl ='https://api-data.line.me/v2/bot/message/'.$fileId.'/content'; //LINE Message API官方所說curl下載檔案方式
             //CURL下載檔案方式----------
	     $ch4 = curl_init();
             curl_setopt($ch4, CURLOPT_URL, $fileurl);
             curl_setopt($ch4, CURLOPT_POST, true);
             curl_setopt($ch4, CURLOPT_CUSTOMREQUEST, 'GET');
             curl_setopt($ch4, CURLOPT_RETURNTRANSFER, true);
             curl_setopt($ch4, CURLOPT_HTTPHEADER, [
             'Authorization: Bearer ' . $channelAccessToken //注意$channelAccessToken為您自已的LINEBOT AccessToken 
             ]
           );
	 //選擇您要放檔案的路徑,$fileName為原本上傳檔案的原檔案名稱
	 $filepath ="file/$fileName";
	 file_put_contents($filepath , curl_exec($ch4)); //下載檔案到指定路徑
         curl_close($ch4); //下載完成,關閉CURL
	  }
   }

   //檔案上傳完成後發送訊息
   $message = "檔案上傳成功";
   $payload = [
     'replyToken' => $event['replyToken'],
     'messages' => [
        [
         'type' => 'text',
         'text' => $message
        ]
      ]
    ];						

   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, 'https://api.line.me/v2/bot/message/reply');
   curl_setopt($ch, CURLOPT_POST, true);
   curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
   curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
   curl_setopt($ch, CURLOPT_HTTPHEADER, [
       'Content-Type: application/json',
       'Authorization: Bearer ' . $channelAccessToken
   ]);
   $result = curl_exec($ch);
   curl_close($ch);
?>

執行結果如下

以上,這樣的說明如果還是不清楚,在麻煩在下方留言!

在〈用LineBot備份Line的檔案到Synology Nas(二)〉中有 5 則留言

    1. 但是我算一個只會玩 docker的小白,我遇到以下幾點問題還望版主幫忙解答。
      我已會搭建 Line Bot和 Messaging API。
      1. 確認與Line的Message API跟Synology的Web網站連線這部分我有點不理解要如何實踐,因為我自己找網站只有教如何將DSM的Webhook轉發給Line。
      2. 感謝您撰寫指令之餘,將說明打入指令並白話解釋各指令用途,但是我這樣是不是除了AccessToken那邊替換成自己Bot API Token以外,還需要將您的說明刪除呢?
      3. php在DSM端有指定哪個版本的運行環境嗎?

      感謝您看完小弟問題,若有機會,還請您多多教學,謝謝~

      1. 1. 確認與Line的Message API跟Synology的Web網站連線這部分我有點不理解要如何實踐,因為我自己找網站只有教如何將DSM的Webhook轉發給Line。
        =>這部份的話在Message API裡面的Webhook settings你要設定是Synology的WebStation的網站,簡單來說就是你要透過Synology建立一個網站出來,然後可以在LINEBOT那邊驗證。

        2. 感謝您撰寫指令之餘,將說明打入指令並白話解釋各指令用途,但是我這樣是不是除了AccessToken那邊替換成自己Bot API Token以外,還需要將您的說明刪除呢?
        =>這是php的註解,可以不用刪除。

        3. php在DSM端有指定哪個版本的運行環境嗎?
        =>目前在DSM7.2 PHP8 ,但這應該沒有影響,確保PHP運作正常就好了。

        1. 是否可以請教”透過Synology建立一個網站出來,然後可以在LINEBOT那邊驗證。”
          這段該怎樣運作跟確認呢?
          我直接設定webstation但webhook驗證一直都沒有過,想來是沒有成功

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *