Synaplan
기업을 위한 오픈소스 AI 플랫폼
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗AI-powered voice assistant for Utah's largest real estate investor association. Routes investors to the right vendors, educators, and resources through live voice calls, readiness surveys, and investor profile matching.
| Resource | URL |
|---|---|
| Voice Agent Page | https://utahreia.org/voice-agent-ai-page |
| Vercel Deployment | https://voice-agent-ai-nu.vercel.app |
| Property Listings | https://utahreia.org/property-listing |
Caller → index.html (GHL Funnel)
├── /api/context — loads liveContext (vendors, educators, events, tools)
├── /api/member-lookup — checks if returning member, injects profile + last call
└── Vapi Web SDK (ESM from CDN: @vapi-ai/[email protected])
│
▼
Vapi Assistant (claude-haiku-4-5)
│
┌──────────┼──────────┐
│ │ │
/api/intake /api/vendors /api/education
/api/caller-history
│
▼
/api/ghl-sync (post-call)
┌──────────┼──────────┐
│ │ │
Supabase GHL Webhook GHL v2 API
voice_agent (workflow) (custom fields)
_calls
Voice-Agent-AI/
├── api/
│ ├── context.js # Pre-call liveContext loader — queries ghl_upcoming_events for strategy-matched events
│ ├── member-lookup.js # Returning member recognition by phone — returns profile + last_call data
│ ├── intake.js # Map 1 routing — stage/strategy/blocker classification
│ ├── vendors.js # Map 2 vendor matching with haversine zip code filtering
│ ├── education.js # Map 3 education track matching
│ ├── caller-history.js # Past call history for returning callers (mid-call tool)
│ ├── ghl-sync.js # Post-call pipeline — Supabase + GHL sync + vendor notification payload
│ ├── member-history.js # Deep history lookup (tools, events, profile)
│ ├── member-profile.js # Mid-call member lookup tool (fallback if phone not entered pre-call)
│ ├── sync-ghl-objects.js # Dual handler: POST = GHL webhook receiver, GET = nightly event sync
│ ├── sync-educator.js # Educator sync to ghl_educators_mentors
│ ├── supabase.js # Supabase client helper
├── .github/
│ └── workflows/
│ └── sync-ghl-objects.yml # GitHub Actions backup sync (runs nightly at 9:15 PM MDT)
├── public/
│ ├── index.html # Voice agent widget (live agent)
│ ├── index-new.html # Voice agent widget (V2 agent)
│ └── dashboard.html # Chris metrics dashboard
├── index.html # Voice agent widget page
├── vercel.json # Vercel deployment config
├── package.json # Must include "type": "module" for ESM support on Vercel
└── README.md
| Resource | Value |
|---|---|
| Supabase Project ID | kttzxjddtkgsitzehiid |
| Supabase URL | https://kttzxjddtkgsitzehiid.supabase.co |
| GHL Location ID | DNirEjy0ejVwbHsaBYrn |
| Vapi Assistant ID | 92018c4f-f382-41b9-80e0-c46e8f2b505a |
| Vapi Voice | ElevenLabs Xi53u0N6awPQcGCxrwD3 (Harmonie Borden clone) |
| Vapi Server URL | https://voice-agent-ai-nu.vercel.app/api/ghl-sync |
| Vapi End Call Message | Mahalo. |
Model: claude-haiku-4-5-20251001 | Max Tokens: 150
Tools (all synchronous — async OFF):
| Tool | Endpoint | Purpose |
|---|---|---|
getIntakeRouting | /api/intake | Map 1 — classifies investor, returns routing action |
getVendorMatch | /api/vendors | Map 2 — matches vendors by need + zip distance |
getEducationMatch | /api/education | Map 3 — matches education track + educator |
getCallerHistory | /api/caller-history | Returns past call history for returning callers |
endCall | Built-in | Ends the call. End Call Message set to "Mahalo." |
Structured Outputs (22 fields):
callerName, callerEmail, callerPhone, profileType, investorStage, strategies, blocker, goals, summary, recommendedNextStep, tier, vendorMatches, toolMatches, educatorMatch, bookingRequired, alreadyTried, handoffChannel, stackSummary, commercialAssetTypes, wantsMentorConnection, wantsProfessionalConnections, wantsOffMarketDeals
/api/context loads liveContext (vendors, educators, courses, tools, events with strategy tags, property listing URL)/api/member-lookup checks if the number matches a contact in SupabasefirstMessage is set dynamically:
@vapi-ai/[email protected]), with fallbacksMeaningful call filter (member-lookup.js):
Skips calls with stack_summary containing: "no recommendations", "intake was in progress", "ended before", "call ended", "not delivered", "unable to", "no result", "did not complete", "incomplete". Only picks calls with a clean summary > 30 chars, matched educator, or matched vendors.
All routing uses live Supabase tables — no hardcoded logic in JS files.
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗