แทนที่จะให้ผู้ใช้พิมพ์คำสั่งเอง เราสามารถสร้าง "ปุ่ม" ให้กดได้ ทำให้บอทใช้งานง่ายและดูโปรขึ้นมาก บทความนี้จะสอนสร้างปุ่มทั้ง 2 แบบ พร้อมวิธีจับการกดปุ่ม ═══════════════════════════════════════ 📌 1. ปุ่มใน Telegram มี 2 แบบ ═══════════════════════════════════════ • Inline Keyboard → ปุ่มติดอยู่ "ใต้ข้อความ" กดแล้วส่งค่าซ่อน (callback) เหมาะกับเมนู ตัวเลือก ยืนยัน/ยกเลิก • Reply Keyboard → ปุ่มแทน "แป้นพิมพ์" ด้านล่าง กดแล้วส่งเป็นข้อความ เหมาะกับเมนูหลักที่ใช้บ่อย ═══════════════════════════════════════ 🔘 2. สร้าง Inline Keyboard ═══════════════════════════════════════ ใส่ reply_markup พร้อม inline_keyboard ตอนส่งข้อความ ```javascript function sendMenu(chatId) { var token = "วาง_BOT_TOKEN"; var url = "https://api.telegram.org/bot" + token + "/sendMessage"; var keyboard = { "inline_keyboard": [ [ { "text": "✅ ยืนยัน", "callback_data": "confirm" }, { "text": "❌ ยกเลิก", "callback_data": "cancel" } ], [ { "text": "🌐 เปิดเว็บไซต์", "url": "https://example.com" } ] ] }; UrlFetchApp.fetch(url, { "method": "post", "contentType": "application/json", "payload": JSON.stringify({ "chat_id": chatId, "text": "กรุณาเลือกรายการ:", "reply_markup": keyboard }) }); } ``` โครงสร้าง: • inline_keyboard = array ของแถว, แต่ละแถวเป็น array ของปุ่ม • text → ข้อความบนปุ่ม • callback_data → ค่าที่ส่งกลับเมื่อกด (ซ่อนจากผู้ใช้) • url → เปิดลิงก์แทน (ปุ่มลิงก์) ═══════════════════════════════════════ 👆 3. จับการกดปุ่ม (Callback Query) ═══════════════════════════════════════ เมื่อผู้ใช้กดปุ่ม inline Telegram จะส่ง callback_query มาที่ webhook ```javascript function doPost(e) { var update = JSON.parse(e.postData.contents); // ตรวจว่าเป็นการกดปุ่มหรือไม่ if (update.callback_query) { var chatId = update.callback_query.message.chat.id; var data = update.callback_query.data; // ค่า callback_data ที่ตั้งไว้ var reply = ""; if (data == "confirm") { reply = "คุณกดยืนยันแล้ว ✅"; } else if (data == "cancel") { reply = "ยกเลิกเรียบร้อย ❌"; } sendTelegram(chatId, reply); } return ContentService.createTextOutput("ok"); } ``` ═══════════════════════════════════════ ⌨️ 4. สร้าง Reply Keyboard (เมนูแทนแป้นพิมพ์) ═══════════════════════════════════════ ```javascript function sendReplyKeyboard(chatId) { var token = "วาง_BOT_TOKEN"; var url = "https://api.telegram.org/bot" + token + "/sendMessage"; var keyboard = { "keyboard": [ [{ "text": "📋 ดูรายการ" }, { "text": "➕ เพิ่มข้อมูล" }], [{ "text": "ℹ️ ช่วยเหลือ" }] ], "resize_keyboard": true, // ปรับขนาดปุ่มพอดี "one_time_keyboard": false // แสดงค้างไว้ }; UrlFetchApp.fetch(url, { "method": "post", "contentType": "application/json", "payload": JSON.stringify({ "chat_id": chatId, "text": "เลือกเมนู:", "reply_markup": keyboard }) }); } ``` *** Reply Keyboard กดแล้วส่งเป็น "ข้อความ" ธรรมดา (เช่น "📋 ดูรายการ") จับได้ที่ update.message.text เหมือนการพิมพ์ปกติ *** ═══════════════════════════════════════ 🗑️ 5. ซ่อนปุ่ม Reply Keyboard ═══════════════════════════════════════ ```javascript // ส่ง remove_keyboard เพื่อซ่อนแป้นเมนู var payload = { "chat_id": chatId, "text": "ซ่อนเมนูแล้ว", "reply_markup": JSON.stringify({ "remove_keyboard": true }) }; ``` ═══════════════════════════════════════ ✅ 6. สรุป ═══════════════════════════════════════ • Inline Keyboard → ปุ่มใต้ข้อความ ส่ง callback_data (ซ่อน) จับที่ callback_query • Reply Keyboard → ปุ่มแทนแป้นพิมพ์ ส่งเป็นข้อความ จับที่ message.text • ใส่ผ่าน reply_markup ตอนส่งข้อความ • ปุ่มแบบ url เปิดลิงก์เว็บได้ทันที จำไว้: ปุ่มเมนูทำให้บอทใช้ง่ายขึ้นมาก ผู้ใช้ไม่ต้องจำคำสั่ง แค่กด 👆