Meetings
การประชุมและนัดหมายของคุณเอง ทั้งที่พิมพ์ลงปฏิทินเอง ที่สร้างจากไฟล์เสียง/บทถอดเสียงแล้วให้ AI สรุปให้ และไฟล์เสียงที่บันทึกจาก Meet
การประชุมเป็นของแต่ละคน การประชุมเก็บอยู่ในพื้นที่ Meet ส่วนตัวของแต่ละคน ไม่ได้อยู่ในธุรกิจ และธุรกิจมองไม่เห็นการประชุมของสมาชิก Business key (หรือ account key ที่ส่ง
X-Business-Id: <business id>) จะได้รายการว่าง ("items": [],"total": 0) และได้404กับทุก meeting idถ้าจะอ่านการประชุมของตัวเอง ให้เรียกด้วย account key พร้อม
X-Business-Id: personalค่าสงวนนี้หมายถึงพื้นที่ของเจ้าของ key เสมอ จึงไม่ต้องรู้ id ของพื้นที่ (/meta/whoamiและ/businessesไม่แสดงพื้นที่นี้) สิทธิ์เป็นแบบ อ่านอย่างเดียว ถ้าส่งpersonalไป endpoint อื่นจะได้403 insufficient_scopeทุกตัว และ business key ที่ส่งpersonalจะได้403 account_key_requiredดูเพิ่มที่ เริ่มต้นใช้งาน → API key ระดับบัญชี
Scopes: view_meeting_all · view_meeting_self
Account key ที่ส่ง X-Business-Id: personal ได้ทั้งสอง scope จึงอ่านได้ทุกการประชุมในพื้นที่ของคุณ ส่วน API key ที่มีแค่ view_meeting_self จะเห็นเฉพาะการประชุมที่ตัวเองเป็นเจ้าของ (ownerUserId) ซึ่งเป็นกติกาเดียวกับที่หน้าเว็บบังคับ
businessId ของแต่ละการประชุมคือ id ของพื้นที่ของคุณ พื้นที่นี้ไม่ใช่ธุรกิจ จึงไม่อยู่ในรายการธุรกิจของคุณ
GET /meetings
ค้นหา/ไล่รายการการประชุม เรียงตาม startAt ใหม่สุดก่อน
รายการนี้ ไม่มีเนื้อสรุป มาด้วย — สรุปเก็บอยู่ใน object storage และต้องดึงแยกทีละรายการ ใช้ GET /meetings/{id} เมื่อต้องการอ่านเนื้อหาจริง
| Param | Type | Note |
|---|---|---|
limit | int | 1–200, ค่าเริ่มต้น 20 |
offset | int | ค่าเริ่มต้น 0 |
status | scheduled | confirmed | cancelled | completed | optional |
kind | appointment | recording | recording = สร้างจากไฟล์เสียง/บทถอดเสียง (กลุ่มที่มีสรุป AI) |
aiStatus | pending | processing | completed | failed | off | สถานะการวิเคราะห์ (off = ไม่ได้ขอให้ AI สรุป หรือยกเลิก / เลือกไม่สรุปตอนจบการบันทึก — ไฟล์เสียงและบทถอดเสียงที่ทำเสร็จแล้วยังอยู่ และจะคงเป็น off จนกว่าจะมีคนสั่งสรุป · ถ้ายกเลิกการสรุปใหม่ของการประชุมที่มีบทสรุปอยู่แล้ว สถานะจะกลับเป็น completed พร้อมบทสรุปเดิม) |
meetingType | string | ป้ายบนปฏิทินที่คุณตั้งเอง ("sales", "standup") ต้องตรงทุกตัวอักษร |
startFrom | date | เริ่มช่วง (รวมวันนั้น) — YYYY-MM-DD = 00:00 ตาม tz |
startTo | date | จบช่วง (รวมวันนั้น) — YYYY-MM-DD = 23:59:59.999 ตาม tz |
tz | IANA zone | เขตเวลาที่ใช้กับวันที่ที่ไม่ได้ระบุเวลา ค่าเริ่มต้น Asia/Bangkok |
hasSummary | true | false | กรองเฉพาะรายการที่มี/ไม่มีสรุป AI |
search | string | ค้นคำที่อยู่ในหัวข้อ คำอธิบาย และสถานที่ (ไม่ค้นในบทถอดเสียง) |
sortDir | asc | desc | ค่าเริ่มต้น desc |
curl "https://phone.mcloud.co.th/api/v1/meetings?hasSummary=true&limit=5" \
-H "Authorization: Bearer crk_<account key>" \
-H "X-Business-Id: personal"
ตอบกลับ { items, total, limit, offset } โดยแต่ละ item มี id, title, kind, status, startAt, endAt, durationMs, sentiment, actionItemsTotal, actionItemsDone, aiStatus, hasSummary, hasTranscript, hasAudio
GET /meetings/{id}
การประชุมรายการเดียว พร้อมสรุปที่ AI เขียนไว้
นอกจากฟิลด์เดียวกับในรายการ จะได้เพิ่ม:
| Field | Type | Note |
|---|---|---|
attendees | array | { name, email, role, responseStatus } |
summary | object | null | null เมื่อยังวิเคราะห์ไม่เสร็จ วิเคราะห์ไม่สำเร็จ หรือเป็นนัดหมายที่ไม่มีไฟล์ |
ทุกฟิลด์ใน summary เป็น optional (เพราะ AI เป็นผู้เขียน): executiveSummary, keyDecisions, actionItems ({ text, owner, dueDate, priority, done }), keyTopics, risks, openQuestions, nextSteps, sentiment, tone, language
การประชุมที่ยังไม่มีสรุปตอบ 200 ไม่ใช่ 404 — "มีอยู่จริงแต่ยังวิเคราะห์ไม่เสร็จ" เป็นคำตอบจริง ดูสาเหตุได้จาก aiStatus และ aiError
curl https://phone.mcloud.co.th/api/v1/meetings/<meeting id> \
-H "Authorization: Bearer crk_<account key>" \
-H "X-Business-Id: personal"