Skip to main content

Sympana Connector Build Report — July 2026

A reference handoff for the provider expansion, picker rebuild, documentation pass, Mission Control alignment, and SSO guard.

At a glance

Provider model

Every provider follows the same connector spine:
  1. Service class — validates keys, lists agents, places calls, and runs chat where the vendor supports it.
  2. Backend wiring — routes, dispatch, webhook handling, hosted tools, branding, and messaging orchestration.
  3. Database migration — provider type constraints and persistence fields accept the new key.
  4. Frontend page set — picker card, provider dashboard, add/edit connection pages, conversations pages, and switcher navigation.
The shared rule is that API-key validation must hit a vendor endpoint that is confirmed to exist. Grok uses the xAI models endpoint for auth validation. Bland uses Bland’s account endpoint and handles Bland’s raw authorization-header format.

Platform deliverables

1. Starred provider favorites

Users can star multiple providers and the provider switcher only shows the starred set plus the current page. The minimum-one rule prevents the switcher from becoming empty, and preferences persist locally plus server-side in ui_preferences.starred_providers. Key files:
  • frontend/src/lib/providerPreference.ts
  • backend/connections/api.py
  • backend/migrations/071_ui_preferences_starred.sql

2. Grok (xAI)

Grok was added as a voice provider with key validation, provider routing, and a full frontend page set. Public xAI surfaces are used where confirmed; any final outbound path that needs a real key is left explicit rather than guessed. Key files:
  • backend/voice_providers/grok/service.py
  • frontend/src/app/grok/*
  • backend/migrations/072_allow_grok_provider_type.sql

3. Bland AI voice

Bland was added as a voice provider with API-key validation, pathways, phone numbers, outbound call wiring, inbound routing hooks, and an official logo treatment. Key files:
  • backend/voice_providers/bland/service.py
  • frontend/src/app/bland/*
  • frontend/public/bland-logo.svg
  • backend/migrations/073_allow_bland_provider_type.sql

4. Bland AI messaging

Bland pathway chat is wired into the messaging orchestrator with chat creation, message turns, session persistence, stale-session retry, and frontend messaging pages. Key files:
  • backend/voice_providers/bland/service.py
  • backend/messaging/orchestrator.py
  • frontend/src/app/bland/add-messaging/*
  • frontend/src/app/bland/edit-messaging/*
  • frontend/src/app/bland/conversations/*

5. AnyReach messaging and picker coverage

AnyReach appears as a first-class voice and messaging provider in the console and build output, including add-messaging, edit-messaging, and conversations routes. Key files:
  • backend/voice_providers/anyreach/service.py
  • backend/tests/test_anyreach_messaging_service.py
  • frontend/src/app/anyreach/add-messaging/*
  • frontend/src/app/anyreach/edit-messaging/*
  • frontend/src/app/anyreach/conversations/*

Picker and navigation polish

The provider picker now has:
  • centered two-card leftover rows when the platform count is uneven;
  • normal-width single search results;
  • a clear search button;
  • starred provider favorites;
  • a persistent back button on provider pages that preserves sub_account_id and returns to ?choose=platforms.
Main files:
  • frontend/src/app/page.tsx
  • frontend/src/components/ProviderPageShell.tsx
  • provider page folders under frontend/src/app/*
Public docs and API-key surfaces use visible branded link labels for provider signup flows:
  • Retell: Use this Retell link. Sign up through this link. RetellAI.com
  • Vapi: Use this Vapi link. Sign up through this link. Vapi.ai
The rendered pages show the clean branded labels instead of exposing query parameters in the main text.

Mission Control alignment

The admin console uses a canonical provider catalog so the analytics pages represent the full provider set even when a provider has zero traffic in the selected window. Canonical providers:
  • Retell AI
  • Vapi
  • AnyReach
  • Smallest.ai
  • SigmaMind
  • ElevenLabs
  • Grok (xAI)
  • Bland AI
Updated Mission Control surfaces:
  • Calls by provider
  • Messaging by provider
  • Function catalog grouping
  • Calls daily classification
  • Trigger success/failure/billing breakdown
  • Messaging received/sent charts
Main files:
  • backend/admin_portal/api.py
  • frontend/src/app/admin/components/ScaffoldSections.tsx
  • frontend/src/app/admin/hooks/useAdminStore.ts
  • frontend/src/app/admin/lib/types.ts
  • backend/tests/test_mission_trigger_denials.py

SSO guard

The client-facing provider and connection APIs now have an SSO access guard in monitor mode. It validates the signed GoHighLevel SSO payload, compares the token location to the requested location, logs verdicts, and can be switched to enforcement after telemetry proves real traffic is clean. Main files:
  • backend/auth/sso_guard.py
  • frontend/src/lib/apiAuth.ts
  • backend/app.py
  • frontend/src/lib/ghlSSO.ts
Open decision: flip SSO_GUARD_ENFORCE=true only after monitor telemetry shows legitimate iframe traffic is sending valid tokens with no location mismatches.

Current verification gates

The latest local verification covered:
  • Backend syntax compile for backend/admin_portal/api.py.
  • Targeted Mission Control tests: backend/tests/test_mission_trigger_denials.py.
  • Frontend typecheck: npm exec tsc -- --noEmit.
  • Frontend production build: npm run build.

Operator follow-up checklist

  1. Watch /api/auth/health/sso-guard before enabling enforcement.
  2. Rotate any provider key that was ever pasted into chat or a non-secret channel.
  3. Re-test Bland and Grok outbound calling with real provider keys where the vendor API requires live-account confirmation.
  4. Keep the Mission Control provider catalog in sync whenever a ninth provider is added.
  5. Keep public docs split cleanly: deep setup guides for providers with full walkthroughs, plus a platform roster page for all provider tiles.