返回部落格
策略

一個下晝整起一個客戶嘅預約 App

May 18, 2026 8 分鐘閱讀 FavCRM 團隊
一個下晝整起一個客戶嘅預約 App

客戶要一個預約網站。以前報價係兩個禮拜:一個日曆、一個 database、一個 availability 引擎、收款、一張客戶表。

而家 AI agent 負責砌 frontend,FavCRM 做headless backend,真正要做嘅嘢得返一個下晝。下面係成單嘢,由頭到尾。

個情境

一間細診所。三項服務、一個醫師、網上預約要俾訂金。你係 agency;你個 editor 入面有個 AI agent,仲有個 terminal。

計劃:

  1. 註冊診所嘅 FavCRM workspace
  2. 設定服務同可用時間
  3. 寫一條 server route 同 FavCRM 對話
  4. 等 agent 對住條 route 砌預約 UI
  5. 由頭到尾測試一次真實預約

第一步 —— 註冊 workspace(約 5 分鐘)

favcrm CLI 會註冊一個 workspace 並發出 API key。冇 dashboard。

favcrm signup request --email [email protected] \
  --organisation-name "Bright Smile Clinic"
favcrm signup verify --request-id <id> --code <6-digit-code>

Verify 嗰步會印出一條 fav_mcp_* key。放喺你個 build 讀得到嘅地方 —— 千祈唔好放入 repo:

export FAVCRM_API_KEY=fav_mcp_...

第二步 —— 設定服務同可用時間(約 30 分鐘)

將個 brief 交畀你個 agent,等佢去 call 啲 tool。先查睇 schema:

favcrm tool describe create_service

然後逐項建立服務:

favcrm tool call create_service '{
  "name": "New Patient Exam",
  "durationMinutes": 45,
  "price": "80.00"
}'
favcrm tool call create_service '{
  "name": "Cleaning",
  "durationMinutes": 30,
  "price": "60.00"
}'

設定醫師幾時返工,令可用時間係真實嘅:

favcrm tool call set_staff_availability '{
  "weekday": "mon",
  "start": "09:00",
  "end": "17:00"
}'

逐日重複。去到呢度,backend 已經做好 —— 服務、工作時間、一個識得處理衝突嘅 availability 引擎。你冇寫過任何 schema。

第三步 —— 一條 server route(約 30 分鐘)

瀏覽器絕對唔可以攞住條 API key。將佢放喺一條 server route 入面,由佢代理兩個操作:讀時段、建立預約。FavCRM 個 MCP endpoint 用 JSON-RPC over HTTP,所以一條 route handler 可以直接 call 佢。

// app/api/booking/route.js  (Next.js route handler)
const MCP = 'https://api.favcrm.io/mcp';

async function callTool(name, args) {
  const res = await fetch(MCP, {
    method: 'POST',
    headers: {
      'content-type': 'application/json',
      authorization: `Bearer ${process.env.FAVCRM_API_KEY}`,
    },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: 1,
      method: 'tools/call',
      params: { name, arguments: args },
    }),
  });
  if (!res.ok) throw new Error(`FavCRM ${res.status}`);
  return res.json();
}

export async function GET(req) {
  const { searchParams } = new URL(req.url);
  const slots = await callTool('get_available_slots', {
    serviceId: searchParams.get('serviceId'),
    date: searchParams.get('date'),
  });
  return Response.json(slots);
}

export async function POST(req) {
  const body = await req.json();
  const booking = await callTool('create_booking', {
    serviceId: body.serviceId,
    start: body.start,
    customer: { name: body.name, email: body.email },
  });
  return Response.json(booking);
}

呢條就係你要寫嘅成個 backend —— 一個 proxy。create_booking 會做衝突檢查、寫入該行資料、亦會 upsert 客戶。你條 route 唔做任何業務邏輯。

第四步 —— 預約 UI(約 1–2 小時)

呢度就係 agent 發揮價值嘅地方。咁樣 prompt 佢:

Build a booking page. Fetch services, let the visitor pick one and a date,
GET /api/booking for open slots, POST /api/booking to confirm.
Show a success state with the booking time.

Agent 會整出 React。佢 call 緊你條 route,你條 route call 緊 FavCRM。個 UI 係你嘅,你照診所嘅品牌去設計 —— 而最煩、最容易出錯嗰啲(可用時間、持久化、衝突)唔係你嘅 code。

第五步 —— 測試一次真實預約

喺瀏覽器跑一次成個 flow,然後確認佢落咗地:

favcrm tool call list_bookings '{}'

預約喺度。病人都喺度 —— create_booking 已經 upsert 咗一個 crm_accounts 記錄,連同佢嘅資料同歷史。佢下次再預約,就會接返同一個記錄。

要收訂金,再加多一個被代理嘅 call:

favcrm tool describe create_invoice

出咗咩貨,又慳返咗咩

診所有咗一個有品牌嘅預約網站、真實預約、一張會自己填嘅病人名單,仲有 Stripe 訂金。

你慳返咗:個 database、啲 migration、availability 演算法、嗰個你本來會喺第二個禮拜先 ship 出去再 fix 嘅重複預約 bug、客戶表、Stripe webhook 對帳。

你寫咗:一份服務設定、一條 proxy route、同一個 UI。

呢個就係 headless CRM 嘅用途。免費方案足夠完整跑完呢類 build —— 將你個 agent 指向佢,自己跑一個下晝睇吓。

啱啱接觸呢個類別?由 咩係 agentic CRM 開始。

今日開始用
AI 店長 CRM

在同一個服務業 workspace 啟動預約、客戶記錄、收款、WhatsApp 跟進、審批 gates 和 AI-agent workflows。

開始 US$49 方案 → CRM · modules · MCP-ready