บทความก่อนหน้าเราส่งข้อความ "ออก" จากบอทได้แล้ว บทความนี้จะสอนให้บอท "รับ" ข้อความจากผู้ใช้และตอบกลับอัตโนมัติ ด้วยเทคนิค Webhook ซึ่งเป็นหัวใจของการทำบอทโต้ตอบ
═══════════════════════════════════════
📌 1. Webhook คืออะไร (เทียบกับ getUpdates)
═══════════════════════════════════════
มี 2 วิธีให้บอทรับข้อความจากผู้ใช้:
• getUpdates (Polling) → เราคอยถาม Telegram เรื่อย ๆ ว่ามีข้อความใหม่ไหม
ข้อเสีย: ต้องรันวนตลอด เปลืองทรัพยากร
• Webhook → Telegram "ส่งข้อความมาหาเรา" ทันทีที่มีคนทัก
ข้อดี: เรียลไทม์ ไม่ต้องคอยถาม (แนะนำ)
Webhook ทำงานแบบนี้:
ผู้ใช้พิมพ์หาบอท → Telegram ส่งข้อมูล (POST) มาที่ URL ของเรา
→ โค้ดเราประมวลผลและตอบกลับ
═══════════════════════════════════════
🔧 2. ตั้งค่า Webhook (setWebhook)
═══════════════════════════════════════
บอก Telegram ว่าให้ส่งข้อความมาที่ URL ไหน (ต้องเป็น HTTPS)
เปิดลิงก์นี้ในเบราว์เซอร์ครั้งเดียว:
https://api.telegram.org/bot<TOKEN>/setWebhook?url=<URL_ของเรา>
• <URL_ของเรา> = ที่อยู่สคริปต์ที่จะรับข้อมูล
เช่น URL ของ Web App จาก Google Apps Script หรือไฟล์ PHP บนโฮสต์ HTTPS
ตรวจสอบสถานะ webhook:
https://api.telegram.org/bot<TOKEN>/getWebhookInfo
ยกเลิก webhook (กลับไปใช้ getUpdates):
https://api.telegram.org/bot<TOKEN>/deleteWebhook
═══════════════════════════════════════
📥 3. รับข้อความด้วย Google Apps Script
═══════════════════════════════════════
เมื่อตั้ง webhook เป็น URL ของ GAS Web App แล้ว Telegram จะเรียก doPost
function doPost(e) {
// แปลงข้อมูลที่ Telegram ส่งมาเป็น object
var update = JSON.parse(e.postData.contents);
var chatId = update.message.chat.id;
var text = update.message.text;
// ตอบกลับข้อความ
sendTelegram(chatId, "คุณพิมพ์ว่า: " + text);
return ContentService.createTextOutput("ok");
}
function sendTelegram(chatId, text) {
var token = "วาง_BOT_TOKEN";
var url = "https://api.telegram.org/bot" + token + "/sendMessage";
UrlFetchApp.fetch(url, {
"method": "post",
"payload": { "chat_id": chatId, "text": text }
});
}
*** หลังแก้โค้ด ต้อง Deploy ใหม่ และตั้ง setWebhook เป็น URL เวอร์ชันล่าสุด ***
═══════════════════════════════════════
🐘 4. รับข้อความด้วย PHP
═══════════════════════════════════════
<?php
$token = "วาง_BOT_TOKEN";
// รับข้อมูลที่ Telegram ส่งมา
$update = json_decode(file_get_contents("php://input"), true);
$chatId = $update["message"]["chat"]["id"];
$text = $update["message"]["text"];
// ตอบกลับ
$reply = "คุณพิมพ์ว่า: " . $text;
file_get_contents("https://api.telegram.org/bot$token/sendMessage?chat_id=$chatId&text=" . urlencode($reply));
?>
═══════════════════════════════════════
🤖 5. ตอบกลับตามคำสั่ง (Command)
═══════════════════════════════════════
ทำให้บอทตอบต่างกันตามข้อความที่ได้รับ
function doPost(e) {
var update = JSON.parse(e.postData.contents);
var chatId = update.message.chat.id;
var text = update.message.text;
var reply = "";
if (text == "/start") {
reply = "ยินดีต้อนรับ! พิมพ์ /help เพื่อดูคำสั่ง";
} else if (text == "/help") {
reply = "คำสั่งที่มี:\n/start เริ่มต้น\n/time ดูเวลา";
} else if (text == "/time") {
reply = "ตอนนี้เวลา: " + new Date().toLocaleString();
} else {
reply = "ไม่เข้าใจคำสั่ง ลอง /help";
}
sendTelegram(chatId, reply);
return ContentService.createTextOutput("ok");
}
═══════════════════════════════════════
📦 6. โครงสร้างข้อมูลที่ Telegram ส่งมา
═══════════════════════════════════════
ตัวอย่าง JSON ที่บอทได้รับเมื่อมีคนพิมพ์
{
"update_id": 100001,
"message": {
"message_id": 5,
"from": { "id": 987654321, "first_name": "สมชาย" },
"chat": { "id": 987654321, "type": "private" },
"text": "/start"
}
}
ข้อมูลสำคัญ:
• message.chat.id → ใช้ตอบกลับ
• message.text → ข้อความที่ผู้ใช้พิมพ์
• message.from → ข้อมูลผู้ส่ง
═══════════════════════════════════════
✅ 7. สรุป
═══════════════════════════════════════
• Webhook ทำให้บอทรับข้อความเรียลไทม์ (ดีกว่า polling)
• ตั้งด้วย setWebhook ชี้ไป URL ของเรา (ต้อง HTTPS)
• GAS ใช้ doPost, PHP ใช้ php://input รับข้อมูล
• อ่าน chat.id และ text แล้วตอบกลับด้วย sendMessage
• แยกตอบตามคำสั่ง /start /help ได้
จำไว้: เมื่อบอทรับและตอบได้ ก็ทำระบบโต้ตอบอัตโนมัติได้ทุกรูปแบบ 🤖