การจองที่หายไประหว่างแชตกับปฏิทิน
ที่พักที่รับจองผ่าน LINE มักเจอปัญหาเดียวกันสามข้อ ข้อแรกคือลูกค้าทักนอกเวลาทำการแล้วต้องรอข้ามคืน ข้อสองคือข้อมูลการจองกระจายอยู่ในบทสนทนา ต้องเลื่อนขึ้นไปหาว่าตกลงกันว่าอะไร และข้อสามคือมีคนลืมลงปฏิทิน จนรับจองซ้ำห้องเดียวกัน
ทั้งสามข้อมีต้นเหตุเดียวกัน คือข้อมูลการจองไม่เคยกลายเป็นข้อมูลที่มีโครงสร้าง มันอยู่ในรูปประโยคภาษาคนไปตลอดทาง จนกว่าจะมีคนมานั่งแปลงมันด้วยมือ
ระบบที่เราจะประกอบจึงมีหน้าที่เดียว คือแปลงประโยคให้เป็นข้อมูลให้เร็วที่สุด แล้วให้ทุกขั้นหลังจากนั้นทำงานกับข้อมูล ไม่ใช่กับข้อความ
ต่อ LINE เข้ากับ n8n
ฝั่งการเชื่อมต่อไม่ซับซ้อนอย่างที่คิด LINE ส่งเหตุการณ์มาที่ webhook ของคุณ และคุณตอบกลับด้วย reply token ที่แนบมาในเหตุการณ์นั้น
- สร้าง Messaging API channel ใน LINE Developers Console แล้วเก็บ channel access token กับ channel secret ไว้ใน credential ของ n8n ไม่ใช่ในตัวเวิร์กโฟลว์
- สร้างโหนด Webhook ใน n8n ตั้งเป็น POST แล้วนำ URL ที่ได้ไปใส่เป็น Webhook URL ในคอนโซลของ LINE
- ตรวจลายเซ็น x-line-signature ของทุกคำขอด้วย channel secret ก่อนประมวลผล เพื่อไม่ให้ใครยิงคำขอปลอมเข้ามาได้
- ตอบกลับ webhook ด้วยสถานะ 200 ทันที แล้วค่อยทำงานที่เหลือต่อ เพื่อไม่ให้ LINE ตัดการเชื่อมต่อเพราะรอนาน
- ส่งข้อความกลับผ่าน reply token ภายในเวลาที่กำหนด หากเกินแล้วให้เปลี่ยนไปใช้ push message แทน

คู่มืออ้างอิง: LINE Messaging API — Receiving messages
ให้ AI อ่านประโยคจองแล้วดึงออกมาเป็นข้อมูล
ลูกค้าไม่ได้พิมพ์ตามฟอร์ม เขาพิมพ์ว่าขอห้องคู่คืนวันศุกร์นี้สองคืน หน้าที่ของโมเดลคือแปลงประโยคแบบนั้นให้เป็นฟิลด์ที่ระบบใช้ต่อได้ โดยอ้างอิงวันที่ปัจจุบันที่เราส่งเข้าไปในพรอมต์ด้วยเสมอ
- วันเข้าพักและวันออก แปลงเป็นรูปแบบวันที่มาตรฐานพร้อมเขตเวลา
- จำนวนผู้เข้าพักและประเภทห้องที่ต้องการ
- ชื่อผู้จองและเบอร์ติดต่อ ถ้ามีอยู่ในบทสนทนาแล้ว
- คำขอพิเศษ เช่น เตียงเสริม เช็กอินดึก หรือที่จอดรถ
- ระดับความมั่นใจของโมเดล และรายการฟิลด์ที่ยังขาด

ถามย้อนเมื่อข้อมูลไม่ครบ อย่าเดา
ข้อผิดพลาดที่เจอบ่อยที่สุดในระบบแบบนี้คือโมเดลเติมข้อมูลที่ลูกค้าไม่ได้บอก เช่น เดาว่าเป็นห้องคู่ทั้งที่ไม่ได้ระบุ แล้วระบบก็สร้างการจองผิดไปเลย
ทางแก้คือให้โมเดลคืนรายการฟิลด์ที่ยังขาดมาด้วยทุกครั้ง แล้วให้เวิร์กโฟลว์ตรวจก่อนว่าครบหรือยัง ถ้ายังไม่ครบก็ถามกลับเฉพาะสิ่งที่ขาด ไม่ใช่ถามใหม่ทั้งชุด และเก็บสิ่งที่รู้แล้วไว้ในสถานะของบทสนทนานั้น
ให้สรุปสิ่งที่เข้าใจกลับไปให้ลูกค้ายืนยันก่อนเสมอ หนึ่งข้อความสั้น ๆ ที่บอกวันเข้า วันออก ประเภทห้อง และจำนวนคน ช่วยตัดปัญหาปลายทางได้เกือบทั้งหมด
ตรวจห้องว่างและเขียนลง Google Calendar
วิธีที่ตรงไปตรงมาที่สุดสำหรับที่พักขนาดเล็กคือให้หนึ่งห้องเท่ากับหนึ่งปฏิทิน แล้วใช้ปฏิทินนั้นเป็นแหล่งความจริงเรื่องห้องว่าง ไม่ต้องมีฐานข้อมูลแยก
- เรียก freebusy ของปฏิทินห้องที่ตรงประเภทที่ลูกค้าขอ ตามช่วงวันที่ต้องการ
- ถ้าว่างมากกว่าหนึ่งห้อง เลือกตามกติกาที่ตั้งไว้ เช่น เลือกห้องที่ทำให้ช่วงว่างที่เหลือเป็นก้อนใหญ่ที่สุด
- สร้างเหตุการณ์ด้วย insert โดยใส่ชื่อผู้จอง เบอร์ติดต่อ และรหัสอ้างอิงลงในรายละเอียด
- ส่งรหัสอ้างอิงกลับไปให้ลูกค้าใน LINE พร้อมสรุปการจองและเงื่อนไขการยกเลิก
- ถ้าไม่ว่าง ให้เสนอวันใกล้เคียงที่ว่างจริงจากปฏิทินเดียวกัน แทนการตอบว่าเต็มเฉย ๆ
คู่มืออ้างอิง: Google Calendar API — Freebusy: query
กันจองชน และจุดที่ต้องให้คนยืนยัน
ระหว่างที่ระบบตรวจว่าว่างกับตอนที่เขียนลงปฏิทิน มีช่องเวลาสั้น ๆ ที่อีกคนอาจจองห้องเดียวกันเข้ามาพอดี วิธีป้องกันที่ใช้ได้จริงคือสร้างรายการจองแบบชั่วคราวไว้ก่อน แล้วตรวจซ้ำอีกครั้งก่อนยืนยัน และให้ทุกคำขอมีรหัสประจำตัว เพื่อไม่ให้ข้อความที่ส่งซ้ำกลายเป็นการจองสองรายการ
และไม่ใช่ทุกการจองที่ควรจบเองได้ กรณีที่ควรส่งต่อให้คนตัดสินใจคือการจองหมู่คณะ การขอราคาพิเศษ การเข้าพักระยะยาว และทุกกรณีที่เกี่ยวกับการชำระเงินหรือการคืนเงิน
สิ่งที่เหลือให้คนทำจึงไม่ใช่การพิมพ์ตอบซ้ำ ๆ แต่คือการตัดสินใจในเรื่องที่ต้องใช้วิจารณญาณจริง ซึ่งเป็นการแบ่งงานที่ควรเป็นแบบนี้ตั้งแต่แรก


