Google ปฏิทินถูกจัดการผ่านฟังก์ชันเครื่องคิดเลข: แชทบอทสื่อสารกับ Google API โดยใช้บัญชีบริการของคุณ ไม่จำเป็นต้องกำหนดค่าคำขอ HTTP แยกต่างหาก
ข้อกำหนด
- โปรเจกต์ Google Cloud ที่เปิดใช้งาน Google Calendar API
- บัญชีบริการสำหรับโปรเจกต์นี้และคีย์ในรูปแบบ JSON
- ปฏิทินที่บัญชีบริการมีสิทธิ์แก้ไขเหตุการณ์
วิธีสร้างบัญชีบริการและรับคีย์
- ไปที่ Google Cloud Console และสร้างโปรเจกต์ใหม่

- ไปที่ APIs & Services → Library ค้นหา Google Calendar API แล้วคลิก Enable หากไม่มีขั้นตอนนี้ คำขอทั้งหมดจะส่งคืนข้อผิดพลาด



- ไปที่ IAM & Admin → Service Accounts สร้างบัญชีบริการและกำหนดบทบาท Owner ให้



- เปิดบัญชีบริการที่คุณสร้าง → แท็บ Keys → Add key → Create new key → เลือก JSON



ไฟล์คีย์จะถูกดาวน์โหลดไปยังคอมพิวเตอร์ของคุณ

- บันทึกที่อยู่บัญชีบริการ — ฟิลด์
client_emailในไฟล์ที่ดาวน์โหลด เช่น[email protected]คุณจะต้องใช้เพื่อให้สิทธิ์บัญชีบริการเข้าถึงปฏิทิน

จะเก็บคีย์ไว้ที่ไหน: ตัวแปร calendar_json_keys
- อัปโหลดไฟล์ JSON ที่ดาวน์โหลดไปยังที่เก็บไฟล์ของโปรเจกต์ที่คุณทำงานกับ Google ปฏิทิน จากนั้นคลิกขวาที่ไฟล์และคัดลอกลิงก์

- ใน Project Constants เพิ่มตัวแปรชื่อ
calendar_json_keysและตั้งค่าเป็นอาร์เรย์ของคีย์:
กล่าวอีกนัยหนึ่ง ให้วางลิงก์ที่คุณคัดลอกสำหรับไฟล์คีย์ที่อัปโหลดไปยังโปรเจกต์ของคุณ
["https://files.mavibot.ai/uploads/file_item/file/your_project_id/your_file_name.json"]

คุณสามารถระบุหลายคีย์ได้ เช่น หากคุณใช้โปรเจกต์ที่แตกต่างกัน สำหรับแต่ละคำขอ ตัวสร้างจะใช้หนึ่งในนั้น:
[
"https://files.mavibot.ai/uploads/file_item/file/your_project_id/your_file_name.json",
"https://files.mavibot.ai/uploads/file_item/file/your_project_id/your_file_name.json"
]
แทนที่จะใช้ลิงก์ คุณสามารถระบุคีย์ทั้งหมดโดยตรงจากไฟล์ที่อัปโหลด:
[
{
"type": "service_account",
"project_id": "my-project",
"private_key": "-----BEGIN PRIVATE KEY-----...",
"client_email": "[email protected]",
"..."
}
]
วิธีให้สิทธิ์บัญชีบริการเข้าถึงปฏิทิน
เปิดการตั้งค่าของปฏิทินที่ต้องการ → Share with people or groups → Add people and groups → ป้อน client_email ของบัญชีบริการและให้สิทธิ์ Make changes to events

หากไม่มีสิทธิ์นี้ Google จะส่งคืน
Not Foundแม้ว่าปฏิทินจะมีอยู่ก็ตาม
ปฏิทินที่สร้างด้วย gcal_create_calendar จะพร้อมใช้งานสำหรับบัญชีบริการทันที ดังนั้นคุณไม่จำเป็นต้องแชร์แยกต่างหาก
วิธีค้นหา ID ปฏิทิน
เปิดการตั้งค่าปฏิทิน → Integrate calendar → Calendar ID

ID มีลักษณะประมาณนี้:
[email protected]
คุณยังสามารถรับ ID ของปฏิทินทั้งหมดที่มีได้โดยใช้:
gcal_calendars_list()
วิธีเรียกใช้ฟังก์ชัน รูปแบบวันที่ และเขตเวลา
ฟังก์ชัน รวมถึงฟังก์ชันทั้งหมดที่ระบุด้านล่าง จะถูกป้อนในเครื่องคิดเลขในตัวสร้างแชทบอท

สะดวกในการบันทึกผลลัพธ์ลงในตัวแปรโดยตรง:
event = gcal_add_event("[email protected]", "Consultation", "20.08.2026 14:00", "20.08.2026 15:00")
แต่ละฟังก์ชันส่งคืนการตอบสนองของ Google API ในรูปแบบ JSON หากเกิดข้อผิดพลาด การตอบสนองจะมีลักษณะดังนี้:
{"status": false, "err": "error description"}
คุณสามารถดึงข้อมูลเฉพาะจากฟิลด์การตอบสนองได้โดยใช้ฟังก์ชัน get
ตัวอย่างเช่น:
get(event, 'id')
รูปแบบค่า
| ค่า | รูปแบบ | ตัวอย่าง |
|---|---|---|
| วันที่และเวลา | dd.mm.yyyy HH:MM |
20.08.2026 14:00 |
| วันที่ (เหตุการณ์ทั้งวัน) | dd.mm.yyyy |
20.08.2026 |
| เขตเวลา | ตัวระบุ IANA |
Europe/Moscow, Europe/Istanbul
|
หากไม่ระบุเขตเวลา จะใช้เขตเวลาที่กำหนดค่าไว้ในการตั้งค่าโปรเจกต์
ปฏิทิน
วิธีสร้างปฏิทิน
ใช้ฟังก์ชันต่อไปนี้:
gcal_create_calendar(name, description=null, time_zone=null, location=null, owner_email=null)
พารามิเตอร์:
-
name— ชื่อปฏิทิน; -
description— คำอธิบายปฏิทิน; -
time_zone— เขตเวลา; -
location— สถานที่; -
owner_email— ที่อยู่อีเมลของบัญชี Google ที่จะได้รับสิทธิ์เจ้าของ บัญชีบริการจะยังคงเข้าถึงปฏิทินได้
ตัวอย่าง:
calendar = gcal_create_calendar("Consultation Bookings", "Bot calendar", "Europe/Moscow", "", "[email protected]")
ฟังก์ชันส่งคืนข้อมูลปฏิทินที่สร้างขึ้น:
{
"kind": "calendar#calendar",
"id": "[email protected]",
"summary": "Consultation Bookings",
"timeZone": "Europe/Moscow"
}
บันทึก ID จากฟิลด์ id ลงในตัวแปรโปรเจกต์ — จำเป็นสำหรับฟังก์ชันอื่นๆ ทั้งหมด
วิธีรับข้อมูลปฏิทิน
gcal_get_calendar(calendar_id)
ฟังก์ชันส่งคืนชื่อปฏิทิน คำอธิบาย เขตเวลา และที่อยู่
วิธีรับรายการปฏิทินของบัญชีบริการ
gcal_calendars_list()
ฟังก์ชันส่งคืนปฏิทินทั้งหมดที่บัญชีบริการเข้าถึงได้ พร้อมด้วย ID
วิธีลบปฏิทิน
gcal_remove_calendar(calendar_id)
หากลบปฏิทินสำเร็จ ฟังก์ชันจะส่งคืน:
{"status": true}
เหตุการณ์
วิธีเพิ่มเหตุการณ์อย่างรวดเร็ว
ใช้ฟังก์ชันต่อไปนี้:
gcal_quick_add_event(calendar_id, event_name)
Google จะแยกวันที่และเวลาจากข้อความโดยอัตโนมัติ
ตัวอย่าง:
event = gcal_quick_add_event("[email protected]", "Meeting with John tomorrow at 15:00")
วิธีเพิ่มเหตุการณ์
ใช้ฟังก์ชันต่อไปนี้:
gcal_add_event(calendar_id, event_name, start_datetime=null, end_datetime=null, event_description=null, location=null, time_zone=null, extra_params=null)
พารามิเตอร์:
-
calendar_id— ID ปฏิทิน; -
event_name— ชื่อเหตุการณ์; -
start_datetime— วันที่และเวลาเริ่มต้นของเหตุการณ์; -
end_datetime— วันที่และเวลาสิ้นสุดของเหตุการณ์; -
event_description— คำอธิบายเหตุการณ์; -
location— สถานที่จัดเหตุการณ์; -
time_zone— เขตเวลา; -
extra_params— พารามิเตอร์เพิ่มเติมของเหตุการณ์ในรูปแบบ JSON
ตัวอย่าง:
event = gcal_add_event("[email protected]", "Consultation #{name}", "20.08.2026 14:00", "20.08.2026 15:00", "Client phone: #{phone}", "Zoom", "Europe/Moscow", '{"popup_minutes": 30, "email_minutes": 60}')
พารามิเตอร์เพิ่มเติม extra_params
extra_params เป็นออบเจกต์ JSON ที่มีพารามิเตอร์เสริม:
| พารามิเตอร์ | คำอธิบาย |
|---|---|
email_minutes |
ส่งการแจ้งเตือนทางอีเมลตามจำนวนนาทีที่ระบุก่อนเหตุการณ์ |
popup_minutes |
แสดงการแจ้งเตือนแบบป๊อปอัปตามจำนวนนาทีที่ระบุก่อนเหตุการณ์ |
start_date |
วันที่เริ่มต้นสำหรับเหตุการณ์ทั้งวัน |
end_date |
วันที่สิ้นสุดสำหรับเหตุการณ์ทั้งวัน |
transparency |
opaque — เวลาถูกทำเครื่องหมายว่าไม่ว่าง; transparent — เวลายังคงว่าง |
recurrence_days |
วันในสัปดาห์สำหรับการเกิดซ้ำรายสัปดาห์: MO, TU, WE, TH, FR, SA, SU คั่นด้วยเครื่องหมายจุลภาค |
recurrence_until |
วันที่จนกว่าเหตุการณ์จะเกิดซ้ำ เช่น 20261231T000000Z
|
recurrence_count |
จำนวนครั้งที่เกิดซ้ำแทนวันที่สิ้นสุด |
ค่าเริ่มต้นคือ:
transparency = opaque
ซึ่งหมายความว่าเวลาของเหตุการณ์ถือว่าไม่ว่าง
เพื่อให้เวลาของเหตุการณ์ยังคงว่าง:
{"transparency": "transparent"}
เหตุการณ์ทั้งวัน
สำหรับเหตุการณ์ทั้งวัน ให้ส่ง start_date และ end_date ผ่าน extra_params แทน start_datetime และ end_datetime
ตัวอย่างเหตุการณ์ทั้งวันที่เกิดซ้ำทุกวันจันทร์และพุธ 10 ครั้ง:
event = gcal_add_event("[email protected]", "Webinar", null, null, "Weekly webinar", "", null, '{"start_date": "01.09.2026", "end_date": "02.09.2026", "recurrence_days": "MO,WE", "recurrence_count": 10}')
สำหรับเหตุการณ์ทั้งวัน Google ถือว่าวันที่สิ้นสุดเป็นแบบไม่รวม ในการสร้างเหตุการณ์ที่ครอบคลุมเฉพาะ
01.09.2026ให้ระบุ02.09.2026เป็นend_date
การตอบสนองเมื่อสร้างเหตุการณ์
ฟังก์ชันส่งคืนเหตุการณ์ที่สร้างขึ้น:
{
"kind": "calendar#event",
"id": "7b1k2m3n4o5p",
"status": "confirmed",
"htmlLink": "https://www.google.com/calendar/event?eid=..."
}
บันทึก id ของเหตุการณ์ลงในตัวแปรไคลเอนต์
ตัวอย่างเช่น:
event_id = get(event, 'id')
คุณจะต้องใช้ ID ในภายหลังเพื่ออัปเดต ย้าย หรือลบเหตุการณ์
วิธีอัปเดตเหตุการณ์
ใช้ฟังก์ชันต่อไปนี้:
gcal_update_event(calendar_id, event_id, event_name=null, start_datetime=null, end_datetime=null, event_description=null, location=null, time_zone=null, extra_params=null)
ส่งเฉพาะฟิลด์ที่คุณต้องการเปลี่ยนแปลง ฟิลด์อื่นๆ ทั้งหมดจะยังคงไม่เปลี่ยนแปลง
ตัวอย่างเช่น หากต้องการเลื่อนเหตุการณ์ที่มีอยู่ไปเป็น 21.08.2026 ตั้งแต่ 16:00 ถึง 17:00:
event = gcal_update_event("[email protected]", "#{event_id}", null, "21.08.2026 16:00", "21.08.2026 17:00")
โครงสร้างของ extra_params เหมือนกับ gcal_add_event
การแจ้งเตือนจะถูกอัปเดตตามประเภท
ตัวอย่างเช่น หากคุณส่งเพียง:
{"popup_minutes": 30}
การแจ้งเตือนแบบป๊อปอัปจะถูกแทนที่ ในขณะที่การแจ้งเตือนทางอีเมลที่มีอยู่จะยังคงไม่เปลี่ยนแปลง
วิธีรับรายการเหตุการณ์
ใช้ฟังก์ชันต่อไปนี้:
gcal_get_event_list(calendar_id, start_date=null, end_date=null)
พารามิเตอร์:
-
calendar_id— ID ปฏิทิน; -
start_date— จุดเริ่มต้นของช่วงเวลาในรูปแบบdd.mm.yyyy; -
end_date— จุดสิ้นสุดของช่วงเวลาในรูปแบบdd.mm.yyyy
ตัวอย่าง:
events = gcal_get_event_list("[email protected]", "20.08.2026", "27.08.2026")
หากไม่ระบุวันที่ ฟังก์ชันจะส่งคืนเหตุการณ์สำหรับวันปัจจุบัน:
events = gcal_get_event_list("[email protected]")
อีเวนต์จะถูกส่งกลับโดยเรียงตามเวลาเริ่มต้น
อีเวนต์ที่เกิดซ้ำจะถูกส่งกลับเป็นรายการแยกกัน
วิธีรับข้อมูลอีเวนต์
ใช้ฟังก์ชันต่อไปนี้:
gcal_get_event(calendar_id, event_id)
ฟังก์ชันนี้จะส่งคืนข้อมูลอีเวนต์ทั้งหมด รวมถึง:
- ชื่อ;
- คำอธิบาย;
- วันที่และเวลา;
- สถานที่;
- ผู้เข้าร่วม;
- การแจ้งเตือน;
- พารามิเตอร์อื่นๆ ของอีเวนต์
ตัวอย่าง:
event = gcal_get_event("[email protected]", "#{event_id}")
วิธีย้ายอีเวนต์ไปยังปฏิทินอื่น
ใช้ฟังก์ชันต่อไปนี้:
gcal_move_event(calendar_id, event_id, destination_calendar_id)
โดยที่:
-
calendar_id— ID ของปฏิทินปัจจุบัน; -
event_id— ID ของอีเวนต์; -
destination_calendar_id— ID ของปฏิทินปลายทางที่ต้องการย้ายอีเวนต์ไป
ตัวอย่าง:
event = gcal_move_event("[email protected]", "#{event_id}", "[email protected]")
วิธีลบอีเวนต์
ใช้ฟังก์ชันต่อไปนี้:
gcal_remove_event(calendar_id, event_id)
ตัวอย่าง:
result = gcal_remove_event("[email protected]", "#{event_id}")
หากลบอีเวนต์สำเร็จ ฟังก์ชันจะส่งกลับ:
{"status": true}
ผู้เข้าร่วมอีเวนต์
วิธีเพิ่มผู้เข้าร่วม
ใช้ฟังก์ชันต่อไปนี้:
gcal_add_client(calendar_id, event_id, client_email, name=null, comment=null)
พารามิเตอร์:
-
calendar_id— ID ของปฏิทิน; -
event_id— ID ของอีเวนต์; -
client_email— ที่อยู่อีเมลของผู้เข้าร่วม; -
name— ชื่อที่จะแสดงในปฏิทิน; -
comment— หมายเหตุสำหรับผู้เข้าร่วม
ตัวอย่าง:
event = gcal_add_client("[email protected]", "#{event_id}", "#{email}", "#{name}", "จองผ่านบอท")
หากผู้เข้าร่วมนี้ถูกเพิ่มในอีเวนต์แล้ว ฟังก์ชันจะส่งกลับข้อผิดพลาด:
{"status": false, "err": "attendee already exists"}
วิธีลบผู้เข้าร่วม
ใช้ฟังก์ชันต่อไปนี้:
gcal_remove_client(calendar_id, event_id, client_email)
พารามิเตอร์:
-
calendar_id— ID ของปฏิทิน; -
event_id— ID ของอีเวนต์; -
client_email— ที่อยู่อีเมลของผู้เข้าร่วมที่ต้องการลบ
ตัวอย่าง:
event = gcal_remove_client("[email protected]", "#{event_id}", "#{email}")
หากผู้เข้าร่วมที่ระบุไม่อยู่ในอีเวนต์ ฟังก์ชันจะส่งกลับ:
{"status": false, "err": "attendee not found"}
ข้อผิดพลาดที่อาจเกิดขึ้น
หากเกิดข้อผิดพลาด ฟังก์ชันจะส่งกลับออบเจกต์ในรูปแบบต่อไปนี้:
{
"status": false,
"err": "คำอธิบายข้อผิดพลาด"
}
ข้อผิดพลาดทั่วไป:
| การตอบสนอง | สาเหตุ |
|---|---|
Not Found |
ปฏิทินไม่ได้ถูกแชร์กับบัญชีบริการ หรือระบุ calendar_id ไม่ถูกต้อง |
Google Calendar API has not been used in project ... or it is disabled |
เปิดใช้ Google Calendar API ไม่ได้ในโปรเจกต์ Google Cloud |
The key to access the calendar was not found in the passed link |
ลิงก์ใน calendar_json_keys ไม่ส่งคืนไฟล์คีย์ |
wrong datetime "...", expected format is dd.mm.yyyy HH:MM |
ระบุวันที่และเวลาในรูปแบบที่ไม่ถูกต้อง |
wrong date "...", expected format is dd.mm.yyyy |
ระบุวันที่ในรูปแบบที่ไม่ถูกต้อง |
Работает только на тарифах Бизнес и Инфобиз |
โปรเจกต์ไม่มีสมาชิกที่ใช้งานอยู่ซึ่งรวมการเข้าถึงฟีเจอร์นี้ |
ข้อผิดพลาด Not Found
หาก Google ส่งกลับ:
Not Found
ให้ตรวจสอบสิ่งต่อไปนี้:
- ตรวจสอบว่า
calendar_idถูกต้อง - ตรวจสอบว่า
client_emailของบัญชีบริการถูกเพิ่มในการตั้งค่าปฏิทินแล้ว - ตรวจสอบว่าบัญชีบริการมีสิทธิ์ Make changes to events
แม้ว่าปฏิทินจะมีอยู่ Google อาจส่งกลับ Not Found หากบัญชีบริการไม่มีการเข้าถึง
Google Calendar API ไม่ได้เปิดใช้
ข้อผิดพลาดมีลักษณะประมาณนี้:
Google Calendar API has not been used in project ... or it is disabled
เปิดโปรเจกต์ของคุณใน Google Cloud และเปิดใช้:
APIs & Services → Library → Google Calendar API → Enable
หลังจากเปิดใช้ API แล้ว ให้ลองส่งคำขออีกครั้ง
ไม่พบคีย์บัญชีบริการ
ข้อผิดพลาด:
The key to access the calendar was not found in the passed link
ตรวจสอบค่าของ:
calendar_json_keys
หากคุณใช้ลิงก์ไฟล์ ลิงก์นั้นต้องส่งคืนไฟล์ JSON ที่มีคีย์ของบัญชีบริการโดยตรง
ตัวอย่าง:
["https://files.salebot.pro/xxxxxxxx/key.json"]
คุณยังสามารถระบุคีย์โดยตรงใน calendar_json_keys เป็นออบเจกต์ JSON ได้
รูปแบบวันที่และเวลาไม่ถูกต้อง
ข้อผิดพลาด:
wrong datetime "...", expected format is dd.mm.yyyy HH:MM
รูปแบบที่ถูกต้อง:
dd.mm.yyyy HH:MM
ตัวอย่าง:
20.08.2026 14:00
ตัวอย่างที่ไม่ถูกต้อง:
2026-08-20 14:00
20/08/2026 14:00
20.08.2026
หากฟังก์ชันคาดหวังทั้งวันที่และเวลา คุณต้องระบุวันที่พร้อมกับชั่วโมงและนาที
รูปแบบวันที่ไม่ถูกต้อง
ข้อผิดพลาด:
wrong date "...", expected format is dd.mm.yyyy
รูปแบบที่ถูกต้อง:
dd.mm.yyyy
ตัวอย่าง:
20.08.2026
ไม่มีแผนการสมัครสมาชิกที่เหมาะสม
ข้อผิดพลาด:
Работает только на тарифах Бизнес и Инфобиз
หมายความว่าโปรเจกต์ไม่มีสมาชิกที่ใช้งานอยู่ซึ่งอนุญาตให้ใช้ฟังก์ชัน Google Calendar
ตัวอย่างอย่างรวดเร็ว
สร้างอีเวนต์และบันทึก ID:
event = gcal_add_event("[email protected]", "การปรึกษา #{name}", "20.08.2026 14:00", "20.08.2026 15:00", "โทรศัพท์ลูกค้า: #{phone}", "Zoom", "Europe/Moscow")
event_id = get(event, 'id')
เพิ่มลูกค้าในอีเวนต์ที่สร้าง:
event = gcal_add_client("[email protected]", "#{event_id}", "#{email}", "#{name}", "จองผ่านบอท")
หากลูกค้าต้องการเลื่อนเวลา:
event = gcal_update_event("[email protected]", "#{event_id}", null, "21.08.2026 16:00", "21.08.2026 17:00")
หากลูกค้ายกเลิกการจอง:
result = gcal_remove_event("[email protected]", "#{event_id}")
ข้อผิดพลาดของ Google API จะถูกส่งกลับตามเดิมในฟิลด์ err ข้อความข้อผิดพลาดช่วยระบุสิ่งที่ขาดหายไป: การเข้าถึงปฏิทิน, การเปิดใช้ API, คีย์ที่ถูกต้อง, รูปแบบวันที่ที่ถูกต้อง หรืออีเวนต์ที่มีอยู่