Synaplan
開源 AI 平台,供企業使用:自行託管的 AI 代理、符合 GDPR 的聊天機器人小工具、RAG 知識庫、WhatsApp 與 Outlook AI、MCP、多模型路由。Docker、Kubernetes 或託管於 Germ
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗AI customer support and booking agent for WhatsApp. Business owners describe their business (services, prices, hours, FAQs, booking policy); the agent answers customers on WhatsApp with Claude, detects what they want, and captures bookings that the owner confirms from a dashboard.
Stack: Next.js 16 (App Router) · TypeScript · Tailwind CSS 4 · shadcn/ui ·
Supabase (Postgres, Auth, Realtime, RLS) · Claude (claude-opus-5-5) ·
WhatsApp Cloud API (Meta) · Vercel.
| Where | What |
|---|---|
/signup, /login | Email + password accounts. Each owner gets their own business (multi-tenant). |
/dashboard | Setup checklist, active conversations, leads, upcoming/pending bookings, recent chats. Updates live. |
/dashboard/knowledge | Business details, services & prices, opening hours, FAQs, booking policy, WhatsApp connection, preview of what the AI knows. |
/dashboard/chat-test | Chat as a customer against the real engine (separate "test" channel). |
/dashboard/bookings | Upcoming / pending / past bookings; confirm, cancel, complete (the customer gets a WhatsApp message); add bookings by hand. |
/dashboard/conversations/[id] | Full chat history with intents. |
/api/whatsapp/webhook | Meta webhook: verification (GET) and incoming messages (POST). |
/api/whatsapp/webhook. The X-Hub-Signature-256 HMAC is
checked on the raw body; the route answers 200 immediately and continues
in after().{ reply, intent, customer_name, booking }.lang).
Links like /fr/dashboard switch the language. Text lives in
lib/i18n/messages/*.ts; TypeScript fails the build if a language misses a key./privacy policy page (6 languages; set the optional
NEXT_PUBLIC_CONTACT_EMAIL to show your contact address). In Settings
owners download all their data (JSON) and can delete their account
permanently. A customer's conversation (messages + bookings) can be erased
from its page. Only necessary cookies (session, language): no cookie banner needed.NEXT_PUBLIC_CONTACT_WHATSAPP).
The customer pays you (Mobile Money, Waafi, bank…), and you press +1 month,
+1 year, Pause or change the plan on the Admin page.vercel.json) confirmed
bookings in the next day get a WhatsApp reminder: free text in the customer's
language inside WhatsApp's 24-hour window, otherwise the business's approved
Meta template (appointment_reminder by default, body
"Hi {{1}}, a reminder of your {{2}} appointment at {{3}} on {{4}}…").supabase/migrations/20261010100000_schema.sql, then
supabase/migrations/20261011100000_global.sql (currency, 12h/24h time,
customer language, sign-up time zone), then
supabase/migrations/20261012100000_twilio.sql (Twilio number, provider), then
supabase/migrations/20261013100000_billing.sql (plans, access, admin flag), then
supabase/migrations/20261014100000_reminders.sql (appointment reminders).
Optional checks: supabase/tests/schema_test.sql, global_test.sql,
twilio_test.sql and billing_test.sql → "Success. No rows returned".
Make yourself the operator:
update public.profiles set is_platform_admin = true where email = '[email protected]';https://<your-app>/auth/confirm to Redirect URLs.See .env.example. Mark every secret as Sensitive:
| Variable | Secret? |
|---|---|
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY | public |
SUPABASE_SERVICE_ROLE_KEY | secret (server-only) |
ANTHROPIC_API_KEY | secret |
WHATSAPP_VERIFY_TOKEN, WHATSAPP_APP_SECRET, WHATSAPP_ACCESS_TOKEN | secret (Meta) |
TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN | secret (Twilio, optional) |
CRON_SECRET | secret (daily reminder job; any long random string) |
RESEND_API_KEY | secret, optional (emails you when someone signs up; Resend key with sending access) |
NOTIFY_EMAIL | optional (where signup emails go; defaults to NEXT_PUBLIC_CONTACT_EMAIL) |
NEXT_PUBLIC_CONTACT_EMAIL, NEXT_PUBLIC_CONTACT_WHATSAPP | public, optional (contact links on home + privacy page) |
Redeploy after changing them.
https://<your-app>/api/whatsapp/webhook, Verify token = your
WHATSAPP_VERIFY_TOKEN. Subscribe to messages.TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN (Twilio Console → Account
Info) in Vercel and redeploy.https://<your-app>/api/whatsapp/twilio
(HTTP POST). Requests are verified with X-Twilio-Signature.+14155238886) in Knowledge
base → WhatsApp connection. Replies and booking confirmations go back
through the provider the customer wrote in on.npm install
cp .env.example .env.local # fill in
npm run dev
| Command | What |
|---|---|
npm run dev | Development server |
npm run build | Production build |
npm run lint / npm run typecheck | ESLint / TypeScript |
npm test | Unit tests (time zones, booking rules) |
lib/supabase/admin.ts imports server-only).lib/security/headers.ts.