ข้อมูลทั่วไป

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

การทำงานของบอทจะขึ้นอยู่กับการทำงานของฟังก์ชันตามลำดับ: การรับข้อมูลเพื่อแสดงให้ลูกค้าเห็น จากนั้นส่งข้อมูลนี้ต่อไปเพื่อเรียกใช้ฟังก์ชันใหม่และรับผลลัพธ์ใหม่

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

ด้วยความสามารถในการดึงข้อมูลระดับกลาง (เช่น ตำแหน่งพนักงานและหมวดหมู่บริการ) และส่งต่อเพื่อกรองพนักงานและบริการ คุณจึงสามารถกำหนดค่าฟันเนลได้อย่างยืดหยุ่นและให้ลูกค้าควบคุมขั้นตอนการดำเนินการได้

วิธีการทั้งหมดที่อธิบายในบทความนี้จะส่งคืนอาร์เรย์ของพจนานุกรม

เพื่อความสะดวกในการทำงานกับข้อมูลเหล่านี้ เราขอแนะนำให้ดูส่วน Arrays และ Dictionaries

นอกจากนี้ หากต้องการใช้ฟังก์ชันสำหรับสร้างการกระทำของผู้ใช้ (การเลือกบริการ วันที่ การจอง) เราขอแนะนำให้พิจารณา tools_make_button_str_checker method

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

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

การดึงข้อมูลสาขา

หากต้องการสร้างฟันเนลการจองออนไลน์และดึงข้อมูลเกี่ยวกับสาขาของโปรเจกต์ ให้ใช้ฟังก์ชัน get_companies_for_booking

ฟังก์ชันจะส่งคืนรายการที่มีข้อมูลสำหรับแต่ละสาขา (ฟันเนล) ที่เปิดใช้งาน "การจองออนไลน์" ในการตั้งค่า

ข้อมูลจะถูกส่งเป็นคู่คีย์-ค่า และรวมถึงตัวระบุสาขา (id) ชื่อ (name) และที่อยู่ (address)

ฟังก์ชันนี้ไม่รับพารามิเตอร์ใดๆ

ตัวอย่างการใช้งาน:

การเรียกใช้ฟังก์ชันภายในบล็อก:

ตัวอย่างข้อมูลที่ส่งคืน:

การดึงข้อมูลเกี่ยวกับตำแหน่งหรือหมวดหมู่บริการ

ฟังก์ชัน get_categories_for_booking(company_id) ช่วยให้คุณสามารถดึงรายการประเภทผู้เชี่ยวชาญหรือหมวดหมู่บริการทั้งหมดสำหรับสาขาได้

แต่ละรายการในรายการที่ส่งคืนประกอบด้วยตัวระบุ (id) ชื่อ (name) และคำอธิบาย (description) ของตำแหน่งหรือหมวดหมู่บริการ ข้อมูลจะแสดงเป็นคู่ "คีย์-ค่า":

พารามิเตอร์:

ตัวอย่างการใช้งาน:

ตัวอย่างการเรียกใช้ฟังก์ชันในบล็อกโค้ด:

การดึงข้อมูลเกี่ยวกับพนักงาน

หากคุณต้องการให้ข้อมูลเกี่ยวกับพนักงานของสาขา ให้ใช้ฟังก์ชัน get_employees_for_booking

การเรียกใช้จะส่งคืนรายการข้อมูลที่มีตัวระบุพนักงาน (id) ชื่อ (name) ข้อมูล (information) และตำแหน่งงาน (job_title)

คุณยังสามารถกรองพนักงานตามรายการบริการ ตำแหน่งงาน หรือหมวดหมู่บริการได้ โดยส่งพารามิเตอร์เพิ่มเติมในการเรียกใช้ฟังก์ชัน: service_ids, job_title_id หรือ service_category_id

ลำดับพารามิเตอร์:

company_id -> service_ids -> job_title_id -> service_category_id

พารามิเตอร์:

หมายเหตุ:

หากคุณต้องการดึงข้อมูลพนักงานทั้งหมดของสาขา ให้ปล่อยค่า service_ids, job_title_id และ service_category_id ว่างไว้

  • ตัวอย่างการเรียกใช้: get_employees_for_booking(14275391)

หากต้องการกรองพนักงานตามรายการรหัสบริการ ให้ส่งรายการเป็นพารามิเตอร์ที่สองและปล่อย job_title_id และ service_category_id ว่างไว้

  • ตัวอย่างการเรียกใช้: get_employees_for_booking(14275391, [844, 845])

หากต้องการกรองพนักงานตามตำแหน่งงาน ให้ส่งรหัสไปยังพารามิเตอร์ job_title_id และปล่อย service_ids และ service_category_id ว่างไว้

  • ตัวอย่างการเรียกใช้: get_employees_for_booking(14275391, “”, 1021)

หากต้องการรับพนักงานที่ให้บริการในหมวดหมู่เฉพาะ ให้ปล่อย service_ids และ job_title_id เป็นสตริงว่าง และส่งรหัสหมวดหมู่ที่เลือกไปยัง service_category_id

  • ตัวอย่างการเรียกใช้: get_employees_for_booking(14275391, “”, “”, 1019)

ตัวอย่างการใช้งาน:

การเรียกใช้ฟังก์ชันในบล็อกโค้ด:

ตัวอย่างข้อมูลที่ส่งคืน:

การรับข้อมูลเกี่ยวกับบริการ

หากต้องการรับข้อมูลเกี่ยวกับบริการที่สาขาให้บริการ ให้ใช้ฟังก์ชัน get_services_for_booking

ผลลัพธ์จากการเรียกใช้ บอทจะส่งคืนรายการที่มีข้อมูลบริการ แต่ละรายการบริการประกอบด้วยตัวระบุ (id) ชื่อ (title) คำอธิบาย (description) ราคา (price) และระยะเวลาบริการเป็นนาที (duration)

คุณสามารถกรองรายการผลลัพธ์ตามหมวดหมู่บริการ ตามพนักงาน หรือทั้งหมวดหมู่บริการและพนักงานพร้อมกัน โดยส่งพารามิเตอร์เพิ่มเติม service_category_id และ/หรือ employee_id เมื่อเรียกใช้ฟังก์ชัน

ลำดับพารามิเตอร์:

company_id -> service_category_id -> employee_id

พารามิเตอร์:

หมายเหตุถึงส่วน "พารามิเตอร์":

หากคุณต้องการดึงข้อมูลบริการทั้งหมดของสาขา ให้ปล่อยค่า service_category_id และ employee_id ว่างไว้

  • ตัวอย่างการเรียกใช้: get_services_for_booking(14275391)

หากคุณต้องการกรองบริการตามหมวดหมู่และ/หรือพนักงาน ให้ส่งตัวระบุที่เกี่ยวข้องไปยังพารามิเตอร์ service_category_id และ employee_id หากต้องการกรองตามพารามิเตอร์เดียวเท่านั้น ให้ระบุสตริงว่างสำหรับพารามิเตอร์อื่น

ตัวอย่างการเรียกใช้:

  • get_services_for_booking(14275391, 1018) - กรองตามหมวดหมู่บริการ
  • get_services_for_booking(14275391, “”, 512978) - กรองตามพนักงาน
  • get_services_for_booking(14275391, 1018, 463665) - กรองตามทั้งสองพารามิเตอร์

ตัวอย่างการใช้งาน:

การเรียกใช้ฟังก์ชันภายในบล็อก:

ตัวอย่างข้อมูลที่ส่งคืน:

การรับวันที่จองว่าง

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

หากต้องการสร้างรายการนี้ ให้ใช้ฟังก์ชัน get_dates_for_booking

ฟังก์ชันจะตรวจสอบช่วงเวลาที่ว่างและส่งคืนรายการวันที่ที่เหมาะสมในรูปแบบ "วัน.เดือน.ปี"

ลำดับพารามิเตอร์มีดังนี้:

company_id -> service_ids -> employee_id -> days_limit

พารามิเตอร์:

ตัวอย่างการใช้งาน:

การเรียกใช้ฟังก์ชันภายในบล็อก:

ตัวอย่างข้อมูลที่ส่งคืน:

การรับช่วงเวลาจองว่าง

หากต้องการรับรายการช่วงเวลาจองว่าง ให้ใช้ฟังก์ชัน get_slots_for_booking

ฟังก์ชันจะตรวจสอบเวลาที่ว่างในวันที่เลือกและส่งคืนรายการช่วงเวลาว่างในรูปแบบ "ชั่วโมง:นาที" เช่น ["09:00", "11:00", "14:30", "16:00"]

ลำดับพารามิเตอร์มีดังนี้:

company_id -> service_ids -> employee_id -> slot_interval

พารามิเตอร์:

ตัวอย่างการใช้งาน:

การเรียกใช้ฟังก์ชันในบล็อก:

ตัวอย่างข้อมูลที่ส่งคืน:

การสร้างการจอง

หากต้องการสร้างการจองออนไลน์ ให้ใช้ฟังก์ชัน create_booking

หากการจองสำเร็จ ฟังก์ชันจะส่งคืนข้อมูลเกี่ยวกับสถานะการดำเนินการ (status) ด้วยค่า True และรายละเอียดการจอง (booking) ในรูปแบบ "คีย์: ค่า"

ข้อมูลการจองใหม่ประกอบด้วย:

  • ตัวระบุ (id),
  • วันที่ (booking_date),
  • เวลา (booking_time),
  • ชื่อบริการ (services),
  • ระยะเวลาการจอง (service_duration),
  • ต้นทุนรวม (total_cost),
  • ชื่อพนักงานที่ได้รับมอบหมาย (employee_name) และตำแหน่งงานของเขา (job_title),
  • ชื่อสาขา (company_name) และที่อยู่สาขา (company_address)

ในรูปแบบ "คีย์: ค่า"

ลำดับพารามิเตอร์:

company_id -> service_ids -> booking_date -> booking_time -> employee_id

พารามิเตอร์:

ตัวอย่างการใช้งาน:

การเรียกใช้ฟังก์ชันในบล็อก:

ตัวอย่างการตอบกลับการจองที่สำเร็จ:

เมื่อสร้างการจองและขอช่วงเวลาว่างอีกครั้ง คุณจะสังเกตเห็นว่ารายการสั้นลง ตัวอย่างเช่น ในวันที่ 05.02.2024 ช่วงเวลา 18:00 ไม่ว่างอีกต่อไป (ว่างเฉพาะในตารางของ Victoria เท่านั้น) และสำหรับ Paul Thompson การจองตัดผมชายและจัดแต่งทรงหนวดสามารถทำได้ตั้งแต่ 9:00 ถึง 14:00 เนื่องจากระยะเวลารวมของบริการคือ 1 ชั่วโมง 45 นาที และ Pavel มีการจองอื่นอยู่แล้วในเวลา 16:00

การรับข้อมูลเกี่ยวกับการจองที่กำลังจะมาถึงของลูกค้า

คุณสามารถดูการจองปัจจุบันของลูกค้าได้โดยเรียกใช้ฟังก์ชัน get_bookings_info

การตอบกลับจะส่งคืนรายการการจองที่ใช้งานอยู่ พร้อมข้อมูลโดยละเอียดสำหรับการจองแต่ละรายการ

ข้อมูลการจองจะแสดงในรูปแบบ "คีย์: ค่า" และรวมถึง:

  • ตัวระบุการจอง (booking_id),
  • วันที่ (booking_date),
  • เวลา (booking_time),
  • ตัวระบุ (service_ids) และชื่อ (service_names) ของบริการที่เลือก,
  • ระยะเวลาการจอง (booking_duration),
  • ต้นทุนรวมของบริการ (total_cost),
  • ตัวระบุ (employee_id) และชื่อ (employee_name) ของพนักงานที่ได้รับมอบหมาย และตำแหน่งของเขา (job_title),
  • ตัวระบุสาขา (company_id)
  • ชื่อสาขา (company_name) และที่อยู่ (company_address)

พารามิเตอร์:

ตัวอย่างการใช้งาน:

การเรียกใช้ฟังก์ชันในบล็อก:

ตัวอย่างข้อมูลที่ส่งคืน:

การเปลี่ยนวันที่และเวลาจอง

ลูกค้าสามารถเปลี่ยนวันที่และเวลาจองได้ด้วยตนเอง โดยต้องเข้าถึงบล็อกฟันเนลที่มีการเรียกใช้ฟังก์ชัน modify_booking_time

หากการดำเนินการสำเร็จ ฟังก์ชันจะส่งคืนสถานะการดำเนินการ (status) ด้วยค่า True และข้อความ (message) "Booking time modified" ในรูปแบบ "คีย์: ค่า"

ลำดับพารามิเตอร์:

order_id -> new_date -> new_time

พารามิเตอร์:

ตัวอย่างการใช้งาน:

การเรียกใช้ฟังก์ชันในบล็อก:

การตอบกลับของบอทสำหรับการดำเนินการที่สำเร็จ:

ช่วงเวลา 16:00 ที่ถูกจองไว้ก่อนหน้านี้ตอนนี้ว่างสำหรับการจอง และการสร้างการจองใหม่สำหรับบริการเดียวกันสามารถทำได้ตั้งแต่ 11:00 เท่านั้น

ในข้อมูลการจองของลูกค้า คุณจะเห็นเวลาจองที่อัปเดต:

การยกเลิกการจอง

ลูกค้าสามารถยกเลิกการจองที่มีอยู่ได้ด้วยตนเอง โดยต้องเข้าถึงบล็อกที่มีการเรียกใช้ฟังก์ชัน cancel_booking

การยกเลิกที่สำเร็จจะส่งคืนสถานะการดำเนินการ (status) ด้วยค่า True และข้อความ (message) "Booking deleted" ในรูปแบบ "คีย์: ค่า"

ลำดับพารามิเตอร์:

pipeline_id -> order_id

พารามิเตอร์:

ตัวอย่างการใช้งาน:

การเรียกใช้ฟังก์ชันในบล็อก:

การตอบกลับของบอทสำหรับการยกเลิกที่สำเร็จ:

หลังจากยกเลิก ช่วงเวลา "09:00" และ "10:00" จะว่างสำหรับการจองอีกครั้ง:

ตัวอย่างการใช้งานบอท

การตั้งค่าแชทบอท

บล็อกที่ 1 เริ่มต้น ไม่จำเป็นต้องดำเนินการพิเศษ

บล็อกที่ 2 ในบล็อกนี้ เราจะดึงข้อมูลที่จะแสดงให้ลูกค้า

คำอธิบายเนื้อหาเครื่องคิดเลข:

  • comp_id - ตัวระบุบล็อกบริการ ซึ่งสามารถพบได้ในส่วน "บริการ"
  • data - ข้อมูลเกี่ยวกับบริการที่ให้
  • res - พจนานุกรมที่มีข้อมูลที่จำเป็นสำหรับการสร้างปุ่มและการตั้งเงื่อนไข
  • numbered_list - อาจมีประโยชน์หากรายการบริการจำเป็นต้องทำซ้ำในรูปแบบข้อความ
  • buttons - อาร์เรย์ของปุ่มที่สร้างจากข้อมูลบริการ
  • checker - อาร์เรย์ของชื่อบริการ ใช้สำหรับตั้งเงื่อนไขในการย้ายไปยังบล็อกถัดไป

บล็อกที่ 3 ดึงและแสดงข้อมูลเกี่ยวกับบริการที่เลือก

title - ในอาร์เรย์ของพจนานุกรม data ให้ค้นหาพจนานุกรมที่คีย์ title เท่ากับ question จากพจนานุกรมนั้น รับค่าสำหรับคีย์เดียวกัน title

description - ในทำนองเดียวกัน รับค่าสำหรับคีย์ description

price - ในทำนองเดียวกัน รับค่าสำหรับคีย์ price

serv_id - ในทำนองเดียวกัน รับค่าสำหรับคีย์ id

b - สร้างอาร์เรย์ของสตริงที่จะแสดงเป็นปุ่มใต้ข้อความ

res - จากอาร์เรย์ b สร้างอาร์เรย์ของพจนานุกรมเหมือนในบล็อกก่อนหน้า

buttons - รับอาร์เรย์สำหรับแสดงปุ่ม

ตอนนี้เรามีตัวแปรที่มีชื่อ คำอธิบาย และราคาของบริการที่ลูกค้าเลือก

บล็อกที่ 4 แสดงวันที่จองว่าง

print_dates - ใช้ฟังก์ชันเพื่อรับวันที่จองว่างสำหรับบริการที่เลือก

print_dates - เพิ่มสตริง "กลับไปยังรายการบริการ" ลงในอาร์เรย์ของวันที่ หากคุณต้องการให้ปุ่มนี้ปรากฏพร้อมกับวันที่

สำหรับลูกศรที่กลับไปยังขั้นตอนก่อนหน้า ให้ตั้งค่าลำดับความสำคัญสูงกว่าลูกศรที่มี #{checker} เนื่องจาก #{checker} มีเงื่อนไข "กลับไปยังรายการบริการ" ด้วย

Блок №5.
В блоке №5 мы сохраняем выбранную клиентом дату. Это нужно сделать в отдельном блоке потому, что на следующих этапах при возврате в Блок 6, переменная question уже не будет содержать в себе выбранную клиентом дату.

Блок №6. Выбор и отображение доступных ячеек для записи.

data - получаем доступные ячейки.

Логика такая же, как в Блоке №4 с выводом доступных дат. Также важно не забыть настроить повышенный приоритет у стрелки “Вернуться к выбору даты”

Блок №7. Сохранение выбранного времени в переменную и попытка записать клиента.

choosed_time - сохраняем время

a - попытка записать клиента

booking_result - получаем результат выполнения функции.

Получить результат необходимо, так как несколько человек могут попытаться записаться на одно время в один момент.

Блок №7.1. Записать клиента не удалось.

Этот блок нужен только для сообщения об ошибке. После отправки сообщения возвращаем клиента на выбор времени для записи

Блок №8. Запись прошла успешно.

Сообщаем клиенту, что он записан на услугу и отображаем кнопку для оплаты.

Пример настройки кнопок.

Для настройки используем переменные, которые мы получили в блоке №3:

Блок №8.1.

В этом блоке подтверждаем успешную оплату. Переход в блок настраиваем в соответствии с используемой платежной системой

Блок №8.2. Клиент не оплатил услугу. Отмена записи

Если клиент не оплатил вовремя услугу, мы можем отменить запись, если это необходимо.

or_id - получаем id заказа

cancel_status - после выполнения функции получаем ответ, успешно ли выполнена отмена.

В этом примере клиент попадет в блок отмены через 5 секунд после получения ссылки на оплату, в реальной же ситуации вы можете установить необходимое количество времени, главное не забудьте включить переключатель “Отменить, если покинул блок”.

Полная схема:

Демонстрация

Callback о записи

В диалог с клиентом после записи будет приходить колбек — уведомление о записи — следующего вида:

new_order_in_calendar - не изменяемая часть колбека

[489046159] - order_id идентификатор заявки

Добавлена запись даты_и_время_записи

на 30 минут - длительность услуги

Объекту: Тест 30 - какому именно объекту добавлена запись

Вид самого колбека:

new_order_in_calendar: [489046159] Добавлена запись с 2025-06-01 14:00 до 2025-06-01 14:30 на 30 минут. Объекту: Тест 30

Настроить реакцию на колбек можно прописав значение в условии блока:

В блоке можно прописать необходимое обратное сообщение клиенту.