好多人敲碗要一個詳細版,我這次把明細都說一下,但是申請LineBot的這段要麻煩各位自已去找了
基本設定:先確認與Line的Message API跟Synology的Web網站連線有沒有問題
主要透過Webstation下的目錄
![](https://i0.wp.com/s3.dswhi.com/wordpress/2024/07/image-1.png?fit=842%2C342&ssl=1)
![](https://i0.wp.com/s3.dswhi.com/wordpress/2024/07/image-3.png?fit=865%2C498&ssl=1)
要去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);
?>
執行結果如下
![](https://i0.wp.com/s3.dswhi.com/wordpress/2024/07/image-7.png?fit=351%2C192&ssl=1)
![](https://s3.dswhi.com/wordpress/2024/07/image-6-1024x81.png)
以上,這樣的說明如果還是不清楚,在麻煩在下方留言!
太感謝您了!!!
但是我算一個只會玩 docker的小白,我遇到以下幾點問題還望版主幫忙解答。
我已會搭建 Line Bot和 Messaging API。
1. 確認與Line的Message API跟Synology的Web網站連線這部分我有點不理解要如何實踐,因為我自己找網站只有教如何將DSM的Webhook轉發給Line。
2. 感謝您撰寫指令之餘,將說明打入指令並白話解釋各指令用途,但是我這樣是不是除了AccessToken那邊替換成自己Bot API Token以外,還需要將您的說明刪除呢?
3. php在DSM端有指定哪個版本的運行環境嗎?
感謝您看完小弟問題,若有機會,還請您多多教學,謝謝~
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運作正常就好了。
是否可以請教”透過Synology建立一個網站出來,然後可以在LINEBOT那邊驗證。”
這段該怎樣運作跟確認呢?
我直接設定webstation但webhook驗證一直都沒有過,想來是沒有成功
您好,可以問一下您的php有沒有回傳json的內容? 您的網址應該是有通的吧? 正常會一片空白。