用telegram的bot寫了點小工具,
用Webhook的話記得php那邊要這樣接資料
// Takes raw data from the request
$json = file_get_contents('php://input');
// Converts it into a PHP object
$lastMsg = json_decode($json, true);
測試的時候用getUpdates
getUpdate version
$url = "https://api.telegram.org/bot.../getUpdates";
$s = json_decode(file_get_contents($url), true);
$msgList = [];
foreach ($s['result'] as $v) {
$msgList[] = $v;
}
$lastMsg = $msgList[count($msgList) - 1];
#用webhook就不能用getUpdates
看Webhook有沒有異常,pending_updates不是0的話表示有異常訊息
https://api.telegram.org/bot.../getWebhookInfo
清空pending_updates
https://api.telegram.org/bot.../setWebhook?url=webhook_url&drop_pending_updates=true
啟動webhook
https://api.telegram.org/bot.../setWebhook?url=webhook_url
關閉 webhook
https://api.telegram.org/bot.../setWebhook?url=
希望bot是自己私人用的,就在webhook的php那邊加上判斷來源id的部分
$allowID = [
"ID_1",
"ID_2"
];
if(!in_array($lastMsg['message']['from']['id'],$allowID)) return false;
因為webhook不太好看有沒有記錄傳進來,所以我用了個資料表專門記錄傳進來的資料
因為telegram的伺服器會有時差,連db的設定檔可以多這句
$GLOBALS['pdo']->prepare("SET time_zone = 'Asia/Taipei'");
程式內若有用到DateTime(),也可以靠這句改時區
$dt = new DateTime('now', new DateTimeZone('Asia/Taipei'));