รับจองห้องพักผ่าน LINE ด้วย AI แล้วให้ลงปฏิทินเองในแชตเดียว

ที่พักขนาดเล็กเสียการจองไปกับช่องว่างระหว่างแชตกับปฏิทินมากกว่าที่คิด ลูกค้าทักตอนสี่ทุ่ม คนตอบตอนเช้า ห้องเต็มไปแล้ว บทความนี้ประกอบระบบที่ให้ AI บน LINE รับข้อมูลการจอง ตรวจห้องว่างจาก Google Calendar และสร้างรายการให้เสร็จในบทสนทนาเดียว โดยยังเหลือจุดที่คนต้องยืนยัน

n8nLINEGoogle Calendar
บทสนทนาจองห้องพักเชื่อมรายการที่ยืนยันแล้วเข้าปฏิทิน
ภาพประกอบแนวคิดโดย Room64

การจองที่หายไประหว่างแชตกับปฏิทิน

ที่พักที่รับจองผ่าน LINE มักเจอปัญหาเดียวกันสามข้อ ข้อแรกคือลูกค้าทักนอกเวลาทำการแล้วต้องรอข้ามคืน ข้อสองคือข้อมูลการจองกระจายอยู่ในบทสนทนา ต้องเลื่อนขึ้นไปหาว่าตกลงกันว่าอะไร และข้อสามคือมีคนลืมลงปฏิทิน จนรับจองซ้ำห้องเดียวกัน

ทั้งสามข้อมีต้นเหตุเดียวกัน คือข้อมูลการจองไม่เคยกลายเป็นข้อมูลที่มีโครงสร้าง มันอยู่ในรูปประโยคภาษาคนไปตลอดทาง จนกว่าจะมีคนมานั่งแปลงมันด้วยมือ

ระบบที่เราจะประกอบจึงมีหน้าที่เดียว คือแปลงประโยคให้เป็นข้อมูลให้เร็วที่สุด แล้วให้ทุกขั้นหลังจากนั้นทำงานกับข้อมูล ไม่ใช่กับข้อความ

ต่อ LINE เข้ากับ n8n

ฝั่งการเชื่อมต่อไม่ซับซ้อนอย่างที่คิด LINE ส่งเหตุการณ์มาที่ webhook ของคุณ และคุณตอบกลับด้วย reply token ที่แนบมาในเหตุการณ์นั้น

  1. สร้าง Messaging API channel ใน LINE Developers Console แล้วเก็บ channel access token กับ channel secret ไว้ใน credential ของ n8n ไม่ใช่ในตัวเวิร์กโฟลว์
  2. สร้างโหนด Webhook ใน n8n ตั้งเป็น POST แล้วนำ URL ที่ได้ไปใส่เป็น Webhook URL ในคอนโซลของ LINE
  3. ตรวจลายเซ็น x-line-signature ของทุกคำขอด้วย channel secret ก่อนประมวลผล เพื่อไม่ให้ใครยิงคำขอปลอมเข้ามาได้
  4. ตอบกลับ webhook ด้วยสถานะ 200 ทันที แล้วค่อยทำงานที่เหลือต่อ เพื่อไม่ให้ LINE ตัดการเชื่อมต่อเพราะรอนาน
  5. ส่งข้อความกลับผ่าน reply token ภายในเวลาที่กำหนด หากเกินแล้วให้เปลี่ยนไปใช้ push message แทน
หน้าตั้งค่า Webhook ของ n8n แสดงแท็บ Test URL และ Production URL และปุ่ม Listen For Test Event
ภาพหน้าจอจากคู่มือ n8n: เลือก Test URL สำหรับทดสอบ และ Production URL สำหรับรับเหตุการณ์จริงจาก LINE ภาพตัวอย่างในคู่มือแสดงเมธอด GET ส่วน LINE ต้องตั้งเป็น POST ที่มา: n8n Docs — Webhook

คู่มืออ้างอิง: LINE Messaging API — Receiving messages

ให้ AI อ่านประโยคจองแล้วดึงออกมาเป็นข้อมูล

ลูกค้าไม่ได้พิมพ์ตามฟอร์ม เขาพิมพ์ว่าขอห้องคู่คืนวันศุกร์นี้สองคืน หน้าที่ของโมเดลคือแปลงประโยคแบบนั้นให้เป็นฟิลด์ที่ระบบใช้ต่อได้ โดยอ้างอิงวันที่ปัจจุบันที่เราส่งเข้าไปในพรอมต์ด้วยเสมอ

  • วันเข้าพักและวันออก แปลงเป็นรูปแบบวันที่มาตรฐานพร้อมเขตเวลา
  • จำนวนผู้เข้าพักและประเภทห้องที่ต้องการ
  • ชื่อผู้จองและเบอร์ติดต่อ ถ้ามีอยู่ในบทสนทนาแล้ว
  • คำขอพิเศษ เช่น เตียงเสริม เช็กอินดึก หรือที่จอดรถ
  • ระดับความมั่นใจของโมเดล และรายการฟิลด์ที่ยังขาด
หน้าตั้งค่า NASA node ของ n8n แสดง Expression ของ Start Date ใช้ $today.minus และผลลัพธ์ DateTime
ภาพหน้าจอจากคู่มือ n8n: ใช้ Expression คำนวณวันที่โดยอ้างอิงวันปัจจุบัน และตรวจผลลัพธ์ DateTime ก่อนนำวันเข้าพักและวันออกไปใช้ต่อ ที่มา: n8n Docs — Build your first workflow

ถามย้อนเมื่อข้อมูลไม่ครบ อย่าเดา

ข้อผิดพลาดที่เจอบ่อยที่สุดในระบบแบบนี้คือโมเดลเติมข้อมูลที่ลูกค้าไม่ได้บอก เช่น เดาว่าเป็นห้องคู่ทั้งที่ไม่ได้ระบุ แล้วระบบก็สร้างการจองผิดไปเลย

ทางแก้คือให้โมเดลคืนรายการฟิลด์ที่ยังขาดมาด้วยทุกครั้ง แล้วให้เวิร์กโฟลว์ตรวจก่อนว่าครบหรือยัง ถ้ายังไม่ครบก็ถามกลับเฉพาะสิ่งที่ขาด ไม่ใช่ถามใหม่ทั้งชุด และเก็บสิ่งที่รู้แล้วไว้ในสถานะของบทสนทนานั้น

ให้สรุปสิ่งที่เข้าใจกลับไปให้ลูกค้ายืนยันก่อนเสมอ หนึ่งข้อความสั้น ๆ ที่บอกวันเข้า วันออก ประเภทห้อง และจำนวนคน ช่วยตัดปัญหาปลายทางได้เกือบทั้งหมด

ตรวจห้องว่างและเขียนลง Google Calendar

วิธีที่ตรงไปตรงมาที่สุดสำหรับที่พักขนาดเล็กคือให้หนึ่งห้องเท่ากับหนึ่งปฏิทิน แล้วใช้ปฏิทินนั้นเป็นแหล่งความจริงเรื่องห้องว่าง ไม่ต้องมีฐานข้อมูลแยก

  1. เรียก freebusy ของปฏิทินห้องที่ตรงประเภทที่ลูกค้าขอ ตามช่วงวันที่ต้องการ
  2. ถ้าว่างมากกว่าหนึ่งห้อง เลือกตามกติกาที่ตั้งไว้ เช่น เลือกห้องที่ทำให้ช่วงว่างที่เหลือเป็นก้อนใหญ่ที่สุด
  3. สร้างเหตุการณ์ด้วย insert โดยใส่ชื่อผู้จอง เบอร์ติดต่อ และรหัสอ้างอิงลงในรายละเอียด
  4. ส่งรหัสอ้างอิงกลับไปให้ลูกค้าใน LINE พร้อมสรุปการจองและเงื่อนไขการยกเลิก
  5. ถ้าไม่ว่าง ให้เสนอวันใกล้เคียงที่ว่างจริงจากปฏิทินเดียวกัน แทนการตอบว่าเต็มเฉย ๆ

คู่มืออ้างอิง: Google Calendar API — Freebusy: query

กันจองชน และจุดที่ต้องให้คนยืนยัน

ระหว่างที่ระบบตรวจว่าว่างกับตอนที่เขียนลงปฏิทิน มีช่องเวลาสั้น ๆ ที่อีกคนอาจจองห้องเดียวกันเข้ามาพอดี วิธีป้องกันที่ใช้ได้จริงคือสร้างรายการจองแบบชั่วคราวไว้ก่อน แล้วตรวจซ้ำอีกครั้งก่อนยืนยัน และให้ทุกคำขอมีรหัสประจำตัว เพื่อไม่ให้ข้อความที่ส่งซ้ำกลายเป็นการจองสองรายการ

และไม่ใช่ทุกการจองที่ควรจบเองได้ กรณีที่ควรส่งต่อให้คนตัดสินใจคือการจองหมู่คณะ การขอราคาพิเศษ การเข้าพักระยะยาว และทุกกรณีที่เกี่ยวกับการชำระเงินหรือการคืนเงิน

สิ่งที่เหลือให้คนทำจึงไม่ใช่การพิมพ์ตอบซ้ำ ๆ แต่คือการตัดสินใจในเรื่องที่ต้องใช้วิจารณญาณจริง ซึ่งเป็นการแบ่งงานที่ควรเป็นแบบนี้ตั้งแต่แรก

ดูบทความทั้งหมด

มีงานที่อยากให้ Software, AI หรือ Automation ช่วยอยู่ไหม?

เล่า workflow หรือปัญหาที่ทีมกำลังเจอ เราช่วยดูได้ว่าควรใช้ระบบสำเร็จรูป เชื่อมเครื่องมือเดิม หรือพัฒนาเพิ่มเฉพาะส่วนไหน

คุยกับเราทาง LINEhello@room64.net