DormBix · สำหรับนักพัฒนา
ต่อ DormBix ผ่าน MCP & OAuth
DormBix เปิดให้เข้าถึงระบบบริหารหอพักแบบ programmatic ผ่าน Model Context Protocol (MCP) — endpoint เดียว, ยืนยันตัวตนด้วย OAuth 2.1, ทุก tool จำกัดด้วย scope และแยกข้อมูลรายหอ งานที่แก้ข้อมูลเดินผ่าน plan → approve → execute เสมอ หน้านี้อธิบายทุกส่วนตามจริง
ถ้าคุณเป็นเจ้าของหอและแค่อยากต่อแอป AI (Claude/ChatGPT) แบบคลิก ๆ ดูที่ เอกสารการเชื่อมต่อ AI แทน — หน้านี้เป็นเชิงเทคนิค
ภาพรวม
| Base URL | https://www.dormbix.com |
| MCP endpoint | https://www.dormbix.com/api/mcp |
| Protocol | Model Context Protocol over HTTP (JSON-RPC 2.0) |
| Auth | OAuth 2.1 (authorization code + PKCE S256, public client) |
| Isolation | 1 token = 1 หอ · ข้ามหอไม่ได้ |
| ทิศทางหลัก | บริหารหอสำหรับเจ้าของ (อ่าน/วิเคราะห์/สั่งงาน) |
MCP endpoint
DormBix เป็น MCP server แบบ HTTP (JSON-RPC 2.0) — ประกาศเฉพาะ tools (ไม่มี resources/prompts/sampling) method ที่รองรับ: initialize, tools/list, tools/call, ping
Protocol version ที่รองรับ (ใหม่→เก่า):
2025-06-18 2025-03-26 2024-11-05
ต่อจาก Claude Code / Claude Desktop:
claude mcp add --transport http dormbix \ https://www.dormbix.com/api/mcp \ --header "Authorization: Bearer <TOKEN>"
เรียกตรงด้วย initialize:
curl -s https://www.dormbix.com/api/mcp \
-H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize",
"params":{"protocolVersion":"2025-06-18"}}'tools/list คืนเฉพาะ tool ที่ scope ของ token นั้นเรียกได้จริง — เมื่อ DormBix เพิ่ม tool ใหม่ ให้ลบแล้วเพิ่ม connector ใหม่เพื่อดึงรายการล่าสุด
การยืนยันตัวตน (OAuth 2.1)
ยิงไม่มี token → /api/mcp ตอบ 401 พร้อม header WWW-Authenticate ที่ชี้ไป resource metadata client อ่าน metadata แล้วเดิน OAuth ต่อ
Discovery endpoint:
GET /.well-known/oauth-protected-resource (RFC 9728) GET /.well-known/oauth-authorization-server (RFC 8414)
| authorization_endpoint | /api/oauth/authorize |
| token_endpoint | /api/oauth/token |
| registration_endpoint | /api/oauth/register (Dynamic Client Registration) |
| grant_types | authorization_code |
| PKCE | บังคับ code_challenge_method = S256 |
| client auth | none (public client — ไม่มี client_secret) |
| อายุ token | 30 วัน · เพิกถอนได้ทุกเมื่อ |
| ส่ง token | header: Authorization: Bearer <TOKEN> |
กรณีล็อกอิน DormBix คนละเบราว์เซอร์ (เช่นผ่าน LINE) แอป AI จะโชว์รหัส 6 หลัก — เจ้าของหอเปิด /connect บนเครื่องที่ล็อกอินอยู่แล้วกรอกรหัสเพื่ออนุมัติ
ขอบเขตสิทธิ์ (scopes)
ผู้ใช้ติ๊กเลือก scope ตอน consent (ค่าเริ่มต้น = ดูอย่างเดียว) DormBix บังคับ สองชั้น: scope ต้องอยู่ใน token และ role ของบัญชีต้องมีสิทธิ์นั้นจริง — ติ๊ก scope เกินสิทธิ์ role ก็ยังทำไม่ได้
ตารางนี้คือคำศัพท์ scope ทั้งหมด — จะขอสิทธิ์ได้จริงเฉพาะ scope ที่มี tool รองรับแล้ว (write.tenants / write.payment / send.line ยังไม่เปิดให้ AI ทำ — งานแตะเงิน/ข้อความหาผู้เช่า ตั้งใจกันไว้ให้ทำในระบบเอง) ตารางนี้สร้างจาก registry ของจริง รายการสด ๆ ดูที่ /.well-known/agent-card.json หรือ get_capabilities
| scope | ทำอะไรได้ | tool |
|---|---|---|
| read.rooms | ดูข้อมูลห้องพัก | 11 ตัว |
| read.tenants | ดูข้อมูลผู้เช่า | 3 ตัว |
| read.finance | ดูข้อมูลการเงินและบิล | 11 ตัว |
| read.meters | ดูมิเตอร์น้ำ-ไฟ | 4 ตัว |
| read.expense | ดูรายจ่าย | 3 ตัว |
| read.maint | ดูงานแจ้งซ่อม | 2 ตัว |
| write.rooms | เพิ่ม-แก้ห้องพัก | 2 ตัว |
| write.settings | แก้การตั้งค่าหอพัก | 4 ตัว |
| write.tenants | เพิ่ม-แก้ข้อมูลผู้เช่า | ยังไม่เปิด |
| write.meter | จดมิเตอร์ | 2 ตัว |
| write.billing | ออกบิล / ยกเลิกบิล | 2 ตัว |
| write.payment | บันทึกการชำระเงิน | ยังไม่เปิด |
| write.expense | บันทึกรายจ่าย | 3 ตัว |
| write.maint | จัดการงานซ่อม | 1 ตัว |
| send.line | ส่งข้อความเข้า LINE ของผู้เช่า | ยังไม่เปิด |
รายการ tool
56 tool แบ่งเป็น ดู · วิเคราะห์ · สั่งงาน — ตารางนี้สร้างจาก registry ของจริง จึงตรงกับที่เซิร์ฟเวอร์ประกาศเสมอ · ที่มีป้าย ต้องยืนยัน ต้องผ่าน plan→execute (ดูหัวข้อถัดไป) รายการที่ token ของคุณเรียกได้จริงดูสด ๆ ที่ get_capabilities
ดูข้อมูล (read-only)
| list_rooms | รายการห้องทั้งหมดread.rooms |
| get_vacant_rooms | ห้องว่างread.rooms |
| get_long_vacancies | ห้องที่ว่างนาน + จำนวนวันที่ว่างread.rooms |
| get_room | รายละเอียดห้องเดียวread.rooms |
| search_tenants | ค้นหาผู้เช่าread.tenants |
| get_tenant | รายละเอียดผู้เช่า (ไม่รวมข้อมูลอ่อนไหว)read.tenants |
| get_expiring_leases | สัญญาใกล้หมด/ใครกำลังย้ายออกread.tenants |
| get_unpaid_invoices | บิลค้างชำระและยอดรวมread.finance |
| get_invoice | รายละเอียดบิลread.finance |
| get_meter_readings | เลขมิเตอร์น้ำ–ไฟread.meters |
| get_meter_reading_status | ห้องที่ยังไม่ได้จดมิเตอร์ประจำเดือนรอบนี้read.meters |
| get_meter_baselines | ค่ามิเตอร์ตั้งต้นที่ยังขาดread.meters |
| list_maintenance_tickets | ใบแจ้งซ่อมและสถานะread.maint |
| get_room_inspection | ใบตรวจสภาพห้องวันย้ายเข้า — อะไรปกติ/ชำรุด/ยังไม่ตรวจ (ส่งจำนวนรูป ไม่ส่งตัวรูปหรือลายเซ็น)read.rooms |
| list_moveouts | รายการย้ายออก + ติดอยู่ขั้นไหน + เงินที่ยังค้างในกระบวนการread.rooms |
| get_dorm_overview | ภาพรวมหอ (ห้อง รายได้ ยอดค้าง)read.finance |
| get_action_items | สรุปงานที่ต้องจัดการวันนี้ (บิลค้าง/สัญญาใกล้หมด/มิเตอร์/ซ่อม)read.finance |
| get_setup_checklist | สิ่งที่ยังตั้งค่าไม่ครบก่อนออกบิล/ลงประกาศread.rooms |
| get_dorm_profile | โปรไฟล์หอสำหรับหน้าประกาศสาธารณะread.rooms |
| get_contract_template | แบบฟอร์มสัญญาเช่าของหอ — ข้อความรายข้อ (ไม่มีข้อมูลผู้เช่า)read.rooms |
| get_room_types | ประเภทห้องและราคาread.rooms |
| get_tenant_import_template | เทมเพลตนำเข้าผู้เช่าread.rooms |
| get_capabilities | ความสามารถและสิทธิ์ของ token นี้ (เรียกก่อนเสมอ) |
| get_pending_approvals | รายการที่รอเจ้าของหอตัดสิน และผลที่เพิ่งตัดสินไป |
| get_whats_new | เกิดอะไรขึ้นบ้างตั้งแต่ครั้งก่อน — ให้ AI มาเช็คเองตอนเริ่มงาน |
| get_help | คู่มือวิธีใช้งาน DormBix |
| send_feedback | ส่งฟีดแบ็กถึงทีม DormBix |
วิเคราะห์ (read-only)
| get_monthly_revenue | รายได้รายเดือนread.finance |
| get_revenue_trend | แนวโน้มรายได้ย้อนหลัง แยกค่าเช่า/ไฟ/น้ำread.finance |
| get_collection_risk | ห้องเสี่ยงเก็บเงินไม่ได้ (จัดระดับ)read.finance |
| get_billing_readiness | ออกบิลรอบนี้ได้หรือยัง — บอกทุกเหตุผลที่ยังไม่ได้ในครั้งเดียวread.finance |
| get_billing_run_status | รอบออกบิลที่สั่งไปจบหรือยัง และบิลลงจริงกี่ใบ (งานเข้าคิว ≠ ออกบิลแล้ว)read.finance |
| find_abnormal_meters | มิเตอร์ที่ค่าพุ่งผิดปกติread.meters |
| get_maintenance_summary | สรุปงานซ่อมตามหมวด + ห้องที่แจ้งซ้ำread.maint |
| get_moveout_settlement | ที่มาของยอดปิดบัญชีย้ายออกรายห้อง — ค่าห้องตามวันอยู่จริง/ค่าน้ำไฟ/บิลเก่าที่รวมเข้ามา/ค่าเสียหาย แล้วหักเงินประกันread.finance |
| get_expense_summary | สรุปค่าใช้จ่ายของหอread.expense |
| list_expenses | รายการรายจ่ายรายตัว (มี expense_id)read.expense |
| list_expense_categories | หมวดรายจ่ายที่ใช้ได้read.expense |
| get_occupancy_trend | แนวโน้มอัตราการเข้าพักread.finance |
สั่งงาน
| plan_generate_billing_cycle | เตรียมแผนออกบิลรอบเดือน — พรีวิวยอดจริงรายห้องจากเครื่องยนต์ตัวเดียวกับที่ออกบิล ต้องยืนยันเจ้าของหอต้องอนุมัติเสมอwrite.billing |
| plan_void_invoice | เตรียมแผนยกเลิกบิล (ใบที่มีเงินเข้าแล้วทำไม่ได้) ต้องยืนยันเจ้าของหอต้องอนุมัติเสมอwrite.billing |
| plan_set_meter_baselines | เตรียมแผนตั้งค่ามิเตอร์ตั้งต้น ต้องยืนยันwrite.meter |
| plan_record_meter_readings | เตรียมแผนจดเลขมิเตอร์น้ำ-ไฟประจำเดือน ต้องยืนยันwrite.meter |
| plan_update_maintenance_ticket | เตรียมแผนอัปเดตสถานะงานซ่อม ต้องยืนยันwrite.maint |
| plan_add_expense | เตรียมแผนบันทึกค่าใช้จ่าย ต้องยืนยันwrite.expense |
| plan_void_expense | เตรียมแผนยกเลิกรายจ่าย ต้องยืนยันwrite.expense |
| plan_add_expense_category | เตรียมแผนสร้างหมวดรายจ่าย ต้องยืนยันwrite.expense |
| plan_update_dorm_settings | เตรียมแผนแก้ตั้งค่าหอ ต้องยืนยันwrite.settings |
| plan_update_contract_template | เตรียมแผนแก้แบบฟอร์มสัญญาเช่า — เกลาถ้อยคำ เพิ่ม/ลบ/สลับข้อ (เลขข้อนับใหม่ให้เอง · ย้อนได้) ต้องยืนยันเจ้าของหอต้องอนุมัติเสมอwrite.settings |
| plan_create_room_types | เตรียมแผนสร้างประเภทห้อง ต้องยืนยันwrite.settings |
| plan_update_room_type | เตรียมแผนแก้ประเภทห้อง ต้องยืนยันwrite.settings |
| plan_create_rooms | เตรียมแผนสร้างห้อง ต้องยืนยันwrite.rooms |
| plan_update_rooms | เตรียมแผนแก้ห้อง ต้องยืนยันwrite.rooms |
| execute_plan | ยืนยันลงมือตาม plan_id |
| plan_undo | เตรียมแผนย้อนรายการที่ทำไปแล้ว (ออกบิล/จดมิเตอร์/รายจ่าย ภายใน 7 วัน) ต้องยืนยันเจ้าของหอต้องอนุมัติเสมอ |
| cancel_plan | ยกเลิกแผนที่ยังไม่ execute |
plan → approve → execute
tool ชื่อ plan_* ไม่แก้ข้อมูล — มันคืน พรีวิว: plan_id, จำนวนที่กระทบ, ยอดรวม, คำเตือน และเวลาหมดอายุ ต้องเอาสรุปให้ผู้ใช้ยืนยันก่อน แล้วจึงเรียก execute_plan พร้อม plan_id นั้น
คุณสั่ง → plan_* → พรีวิว (plan_id, กระทบกี่รายการ, คำเตือน)
→ ผู้ใช้ยืนยัน → execute_plan(plan_id) → บันทึกจริง + log- แผน หมดอายุได้ — execute หลังหมดอายุจะถูกปฏิเสธ
- execute ครั้งเดียว: ต่อให้ยิงซ้อนกัน มีแค่คำขอเดียวที่ได้ผล (plan_id เป็น idempotency key ในตัว)
- งานเขียนหนัก (เช่นออกบิลทั้งหอ) เข้าคิวแบบ idempotent — ไม่ทำซ้ำแม้ retry
- ยกเลิกก่อนลงมือได้ด้วย cancel_plan
error
แยก 2 แบบ: protocol พัง → คืน JSON-RPC error (LLM แก้ไม่ได้) ส่วน tool ทำงานแล้วไม่สำเร็จ (เช่น input ผิด) → คืน result ที่มี isError: true พร้อมข้อความไทย + hint เพื่อให้ LLM ปรับ input แล้วลองใหม่ได้
| code | ความหมาย |
|---|---|
| -32700 | Parse error — payload ไม่ใช่ JSON ที่ถูกต้อง |
| -32600 | Invalid request — ไม่ใช่ JSON-RPC 2.0 ที่ถูกต้อง |
| -32601 | Method not found — เรียก method ที่ไม่รองรับ |
| -32602 | Invalid params — พารามิเตอร์ไม่ครบ/ผิด (เช่นไม่มีชื่อ tool) |
| -32603 | Internal error — ข้อผิดพลาดฝั่งเซิร์ฟเวอร์ |
rate limit
จำกัดต่อ token ต่อวัน (รีเซ็ตเที่ยงคืน) — เกินแล้วตอบว่าเต็มโควตาพร้อมเวลารีเซ็ต:
| ชนิด | ต่อวัน | ครอบคลุม |
|---|---|---|
| อ่าน | 1000 | การเรียกดู/วิเคราะห์ |
| เขียน | 100 | การสั่งงานที่แก้ข้อมูล |
| ส่งออก | 300 | การส่งข้อความ LINE |
ความปลอดภัย
- 1 token ผูก 1 หอ ทุกคิวรีตั้ง app.dorm_id — ข้ามไปหออื่นไม่ได้
- ไม่ส่งข้อมูลอ่อนไหวออก: เลขบัตรประชาชน รูปบัตร ที่อยู่ วันเกิด เลขบัญชีธนาคาร
- ทุก action ลง audit log ของหอ (ใคร ผ่าน AI ตัวไหน ทำอะไร เมื่อไหร่)
- Kill switch หลายระดับ: ทั้งแพลตฟอร์ม, รายหอ (opt-in ค่าเริ่มต้นปิด), รายโทเคน
- เพิกถอน token ได้ทุกเมื่อ — งานที่แก้ข้อมูลต้องผ่านการยืนยันเสมอ
หมายเหตุ: ตอนนี้ ยังไม่มี webhooks สาธารณะ สำหรับให้ agent รับ event — การเข้าถึงเป็นแบบ request/response ผ่าน MCP เท่านั้น
API ค้นหาสาธารณะ (secondary)
นอกจากฝั่งบริหาร DormBix มี API ค้นหาหอพักสาธารณะสำหรับผู้เช่า — อ่านอย่างเดียว ไม่ต้องยืนยันตัวตน เป็นคนละ surface กับ MCP:
GET /openapi.json (OpenAPI 3.1 spec) GET /api/public/ai/search ค้นหาหอ (จังหวัด/แลนด์มาร์ก/คีย์เวิร์ด) GET /api/public/ai/availability เช็กห้องว่างแบบเรียลไทม์
ติดต่อ
คำถามเชิงเทคนิค: [email protected] · ภาพรวมสำหรับ AI: /ai · คู่มือต่อแอป AI: /docs/ai-connector