สร้าง Chatbot สำหรับธุรกิจขนาดเล็ก: กรณีศึกษาการจองคิวร้านอาหาร
ในบทความนี้ เราจะนำความรู้ที่ได้จากบทก่อนหน้าเกี่ยวกับการเชื่อมต่อ Chatbot กับ API มาประยุกต์ใช้สร้าง Chatbot สำหรับธุรกิจขนาดเล็ก นั่นคือ ร้านอาหาร โดย Chatbot นี้จะทำหน้าที่หลักในการรับจองคิว และแจ้งเตือนลูกค้าเมื่อใกล้ถึงคิวของตนเอง
การมี Chatbot ช่วยจองคิวมีประโยชน์หลายอย่างสำหรับร้านอาหาร เช่น ลดภาระของพนักงานในการรับโทรศัพท์, ให้บริการลูกค้าได้ตลอด 24 ชั่วโมง, และเก็บข้อมูลลูกค้าเพื่อนำไปวิเคราะห์และปรับปรุงบริการ
ออกแบบ Flow การสนทนา
ก่อนที่จะเริ่มเขียนโค้ด เราจำเป็นต้องออกแบบ Flow การสนทนาของ Chatbot ก่อน เพื่อให้เข้าใจว่า Chatbot จะตอบสนองต่อผู้ใช้งานอย่างไรบ้าง
Flow การสนทนาพื้นฐานสำหรับการจองคิวร้านอาหาร อาจมีลักษณะดังนี้:
- Greeting: Chatbot ทักทายลูกค้าและแจ้งว่าสามารถช่วยจองคิวได้
- Date Selection: Chatbot ถามวันที่ลูกค้าต้องการจอง
- Time Selection: Chatbot ถามเวลาที่ลูกค้าต้องการจอง
- Party Size: Chatbot ถามจำนวนคนในกลุ่ม
- Confirmation: Chatbot สรุปข้อมูลการจองและขอให้ลูกค้ายืนยัน
- Reservation: Chatbot ทำการจองคิวผ่าน API
- Confirmation Message: Chatbot แจ้งหมายเลขคิวและเวลาโดยประมาณให้ลูกค้า
- Reminder: (Optional) Chatbot แจ้งเตือนลูกค้าเมื่อใกล้ถึงคิว
เหตุผลเชิงออกแบบ (Trade-offs):
- ความเรียบง่าย vs. ความครอบคลุม: เราเลือก Flow ที่เรียบง่ายเพื่อเน้นการใช้งานจริง แต่สามารถเพิ่มรายละเอียดได้ เช่น การถามความต้องการพิเศษของลูกค้า (เช่น อาหารที่แพ้) หรือการให้ลูกค้าเลือกประเภทอาหารที่ต้องการ
- การใช้ Button vs. Free Text: เราอาจใช้ Button สำหรับการเลือกวันที่และเวลา เพื่อให้ลูกค้าใช้งานง่าย แต่การใช้ Free Text ทำให้ลูกค้ามีความยืดหยุ่นมากขึ้น
เชื่อมต่อกับ API สำหรับจองคิว
เพื่อให้ Chatbot สามารถจองคิวได้จริง เราต้องเชื่อมต่อกับ API ที่ให้บริการจองคิว ซึ่งอาจเป็น API ที่ร้านอาหารพัฒนาขึ้นเอง หรือใช้บริการจากผู้ให้บริการภายนอก เช่น:
- API ที่ร้านอาหารพัฒนาเอง: เหมาะสำหรับร้านอาหารที่มีระบบจัดการคิวอยู่แล้ว และต้องการเชื่อมต่อ Chatbot เข้ากับระบบเดิม
- Third-party API: มีผู้ให้บริการหลายรายที่ให้บริการ API สำหรับจองคิว เช่น Quandoo, OpenTable (อาจไม่รองรับภาษาไทย), หรือบริการเฉพาะทางสำหรับร้านอาหารในประเทศไทย
ในตัวอย่างนี้ เราจะสมมติว่าเรามี API ที่ร้านอาหารพัฒนาขึ้นเอง โดยมี Endpoint สำหรับการจองคิวคือ `/reservations` และต้องการข้อมูลดังนี้:
- `date`: วันที่ที่ต้องการจอง (YYYY-MM-DD)
- `time`: เวลาที่ต้องการจอง (HH:mm)
- `party_size`: จำนวนคนในกลุ่ม
- `customer_name`: ชื่อลูกค้า
- `customer_phone`: เบอร์โทรศัพท์ลูกค้า
ตัวอย่างโค้ด Python (ใช้ Library `requests`):
import requests
import json
def reserve_table(date, time, party_size, customer_name, customer_phone):
"""
จองคิวร้านอาหารผ่าน API
Args:
date: วันที่ที่ต้องการจอง (YYYY-MM-DD)
time: เวลาที่ต้องการจอง (HH:mm)
party_size: จำนวนคนในกลุ่ม
customer_name: ชื่อลูกค้า
customer_phone: เบอร์โทรศัพท์ลูกค้า
Returns:
JSON response จาก API
"""
api_url = "https://your-restaurant-api.com/reservations" # Replace with your API endpoint
headers = {'Content-Type': 'application/json'}
data = {
"date": date,
"time": time,
"party_size": party_size,
"customer_name": customer_name,
"customer_phone": customer_phone
}
try:
response = requests.post(api_url, headers=headers, data=json.dumps(data))
response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
return response.json()
except requests.exceptions.RequestException as e:
print(f"Error connecting to API: {e}")
return {"status": "error", "message": "เกิดข้อผิดพลาดในการจอง"}
# Example usage
reservation_result = reserve_table(
date="2024-01-20",
time="19:00",
party_size=2,
customer_name="John Doe",
customer_phone="0812345678"
)
print(reservation_result)
คำอธิบายโค้ด:
- `reserve_table` ฟังก์ชันนี้รับข้อมูลการจองจาก Chatbot และส่งไปยัง API
- `requests.post` ใช้เพื่อส่งข้อมูลไปยัง API โดยใช้ HTTP POST method
- `headers` กำหนด Content-Type เป็น `application/json` เพื่อบอก API ว่าเราส่งข้อมูลในรูปแบบ JSON
- `json.dumps(data)` แปลงข้อมูล Python dictionary เป็น JSON string
- `response.raise_for_status()` ตรวจสอบว่า API ตอบกลับด้วย HTTP status code ที่ถูกต้อง (2xx) หากเกิดข้อผิดพลาด (4xx หรือ 5xx) จะ raise exception
- `try...except` ใช้เพื่อจัดการข้อผิดพลาดที่อาจเกิดขึ้นระหว่างการเชื่อมต่อกับ API
แนวปฏิบัติที่ดี:
- Error Handling: ควรมีการจัดการข้อผิดพลาดอย่างละเอียด เพื่อให้ Chatbot สามารถแจ้งเตือนลูกค้าเมื่อเกิดปัญหาในการจอง
- Input Validation: ควรตรวจสอบข้อมูลที่ลูกค้าป้อนเข้ามา เช่น รูปแบบวันที่และเวลา, จำนวนคน, และเบอร์โทรศัพท์
- Security: หาก API ต้องการ authentication ควรใช้ HTTPS และเก็บรักษา API key อย่างปลอดภัย
จัดการฐานข้อมูล
นอกจาก API สำหรับจองคิวแล้ว เรายังต้องมีฐานข้อมูลเพื่อเก็บข้อมูลการจอง และข้อมูลลูกค้า เพื่อใช้ในการแจ้งเตือนและวิเคราะห์ข้อมูล
ตัวเลือกฐานข้อมูล:
- SQLite: เหมาะสำหรับโปรเจคขนาดเล็กและไม่ต้องใช้ scalability สูง
- PostgreSQL: เหมาะสำหรับโปรเจคขนาดกลางถึงใหญ่ มี features ครบครัน และรองรับ scalability ได้ดี
- MySQL: เป็นที่นิยมและมี documentation เยอะ แต่ PostgreSQL มักถูกมองว่ามีประสิทธิภาพดีกว่าในหลายกรณี
- MongoDB: เป็น NoSQL database เหมาะสำหรับข้อมูลที่ไม่มีโครงสร้างที่แน่นอน
ตัวอย่างการใช้ SQLite:
import sqlite3
def create_table():
"""
สร้างตาราง reservations ในฐานข้อมูล SQLite
"""
conn = sqlite3.connect('reservations.db')
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS reservations (
id INTEGER PRIMARY KEY AUTOINCREMENT,
date TEXT NOT NULL,
time TEXT NOT NULL,
party_size INTEGER NOT NULL,
customer_name TEXT NOT NULL,
customer_phone TEXT NOT NULL,
reservation_id TEXT
)
""")
conn.commit()
conn.close()
def insert_reservation(date, time, party_size, customer_name, customer_phone, reservation_id):
"""
เพิ่มข้อมูลการจองลงในฐานข้อมูล
"""
conn = sqlite3.connect('reservations.db')
cursor = conn.cursor()
cursor.execute("""
INSERT INTO reservations (date, time, party_size, customer_name, customer_phone, reservation_id)
VALUES (?, ?, ?, ?, ?, ?)
""", (date, time, party_size, customer_name, customer_phone, reservation_id))
conn.commit()
conn.close()
# Create the table if it doesn't exist
create_table()
# Example usage: After successfully reserving a table via the API
# Assuming the API returns a reservation_id
reservation_id = "RES-12345"
insert_reservation(
date="2024-01-20",
time="19:00",
party_size=2,
customer_name="John Doe",
customer_phone="0812345678",
reservation_id=reservation_id
)
คำอธิบายโค้ด:
- `create_table` ฟังก์ชันนี้สร้างตาราง `reservations` ในฐานข้อมูล SQLite หากยังไม่มี
- `insert_reservation` ฟังก์ชันนี้เพิ่มข้อมูลการจองลงในตาราง `reservations`
- `reservation_id` คือ ID ที่ได้จาก API เมื่อจองคิวสำเร็จ
แนวคิดเชิงระบบ:
- Event-Driven Architecture: เราสามารถใช้ Message Queue (เช่น RabbitMQ หรือ Kafka) เพื่อแยกส่วนการจองคิวและการแจ้งเตือนออกจากกัน ทำให้ระบบมีความยืดหยุ่นและ scalability มากขึ้น
สรุป:
ในบทความนี้ เราได้เรียนรู้วิธีการสร้าง Chatbot สำหรับจองคิวร้านอาหาร โดยเริ่มจากการออกแบบ Flow การสนทนา, เชื่อมต่อกับ API สำหรับจองคิว, และจัดการฐานข้อมูล ในบทความถัดไป เราจะพูดถึงแนวทางการปรับปรุงและดูแลรักษา Chatbot ที่เชื่อมต่อกับ API เพื่อให้ Chatbot ทำงานได้อย่างมีประสิทธิภาพและตอบสนองความต้องการของผู้ใช้งานได้อย่างต่อเนื่อง