這個是續上一篇做的,用Notify還是比較不方便,一定要將Notify加入群組,對使用者讓說很麻煩,所以弄了個Push的
可以讓非Line Developer,其他使用者對LineBot下指令設定排程,讓LineBot指定時間回答指定訊息
透過LineBot跟Synology Nas的Mariadb 10實現
下面LineBot的reply.php的部份內容
下面是在Synology每分鐘要呼叫的php,當然資料庫跟token是您的Synology NAS連線跟您LineBot的Token
<?php
// 執行查詢
$sql = "SELECT sendId, sendtime, memo FROM pushme WHERE send = 'N'";
$result = $conn->query($sql);
// 檢查是否有結果
if ($result->num_rows > 0) {
// 取得資料
while ($row = $result->fetch_assoc()) {
notifyAndMarkAsSent($conn, $row, $AccessToken);
}
} else {
echo "NO data";
}
// 關閉資料庫連接
$conn->close();
function notifyAndMarkAsSent($conn, $row, $AccessToken) {
// 將datetime轉換為UNIX時間戳
$notificationTime = strtotime($row['sendtime']);
// 取得當前時間
$currentTimestamp = time();
// 判斷是否大於或等於通知時間
if ($currentTimestamp >= $notificationTime) {
// LINE 使用者 ID
$token = $AccessToken;
$payload = [
'to' => $row['sendId'],
'messages' => [
[
'type' => 'text',
'text' => $row['memo']
]
]
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.line.me/v2/bot/message/push');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer ' . $token
]);
$result = curl_exec($ch);
$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// 檢查 LINE 推送的結果,根據需要進行錯誤處理
if ($http_status != 200) {
echo "LINE Push failed with HTTP status code: " . $http_status;
// 可以根據實際情況進行錯誤處理
}
// LINE Push Memo 通知結束
$updateSql = "UPDATE pushme SET send = 'Y' WHERE sendtime = ? AND send = 'N' AND memo = ? AND sendId = ?";
$stmt = $conn->prepare($updateSql);
$stmt->bind_param("sss", $row['sendtime'], $row['memo'], $row['sendId']);
$stmt->execute();
$stmt->close();
} else {
echo "尚未到達通知時間";
}
}
?>
下面是在Synology的任務排程器設定每分鐘執行。
下面是實際結果
目前LineBot免費Push訊息僅能使用200則,經過實際測試,若用在群組很不划算,若一個群組包含LineBot有7人的話,則發一次訊息會計算6次(扣除LineBot自已)
所以建議在個人對LineBot才能下這個指令比較划算。
另外實測,若群組有LineNotify,他也要算一次的訊息費用。