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.