Skip to main content

Integrations Overview

Audience: All teams (sales, management, QA, support, engineering) · Where in app: Settings → Integrations (and Settings → Webhooks / Settings → Notifications) · Plan availability: All plans (some integrations are higher-tier — see each page and the matrix below)

Knock Knock connects to the common business tools a customer already runs — their CRM, their calendar, their store, their chat tool, and their automation platform. Each integration lives under Settings → Integrations and is connected with one click (OAuth) or a pasted API key. Once connected, leads, conversations, bookings, and product data flow between Knock Knock and the other tool automatically, so the customer never has to copy data by hand and the AI agent always has up-to-date context.

For sales and management: integrations are a core part of the pitch — "it plugs into your existing stack." The two CRMs (GoHighLevel and HubSpot) are the deepest; calendars (Google Calendar, Calendly) drive bookings; Shopify/WooCommerce make the AI product-aware; Slack/Zapier/webhooks push events out to wherever the customer wants them.

What it does

  • Pushes new leads and conversation summaries out to the customer's CRM.
  • Pulls CRM state (lifecycle stage, deals/opportunities, tags, notes) back in to enrich the identity graph so the AI knows who a returning visitor is.
  • Verifies returning visitors instantly from CRM tracking cookies / campaign links (hubspotutk for HubSpot, ?contact_id= for GHL).
  • Lets visitors book meetings straight from the widget against a real calendar.
  • Syncs the customer's product catalog into the RAG store so the AI can recommend products mid-conversation.
  • Fires events (new visitor, hot lead, booking, chat ended, …) to Slack, Zapier, and any custom webhook endpoint.

How it works

Shared auth model

Every integration uses one of four connection methods:

MethodUsed byHow it's stored
OAuthHubSpot, GoHighLevel, Calendly, Google Calendar, Slack, ShopifyTokens on companies.<integration> (backend) or on an integrations row (ms-ai, for Shopify/WooCommerce/Google Calendar). access_token + refresh_token (+ expires_at, scopes). Refresh is automatic.
API key / secretWooCommerce (consumer key + secret), and internal/admin providers (Stripe, Twilio, ElevenLabs, Ultravox, ScrapingBee)Pasted by the admin, stored on the integration record.
Webhook URLZapier, native custom webhooksCustomer-supplied destination URL + a signing secret.
EmbedCalendly inline scheduler, GHL calendar embed, GHL/HubSpot forms in the widgetNo token for the embed itself; the booking/form is rendered inside the widget.

Tokens are refreshed automatically by the owning service layer. Connection state is per-integration: either a companies.<name>.is_connected flag or the presence of a non-expired access_token. The dashboard Settings → Integrations screen shows live status per integration.

Data sync direction

  • Outbound (Knock Knock → tool): CrmSyncQueueService pushes new contacts and conversation summaries to the CRM; calendar services create events; e-commerce services don't push (read-only).
  • Inbound (tool → Knock Knock): CrmEnrichmentQueueService pulls CRM state back and caches it on PersonProfile.crm_enrichment; calendar/Calendly webhooks land bookings; Shopify/WooCommerce webhooks update the product RAG store.

Both CRM queues are Redis-backed, async, with retry/backoff — a slow or failing CRM never blocks request handling, and work is retried rather than dropped. Failures surface in the admin API Request Logs.

Events that trigger sync

EventWhat syncs
Chat endedContact info → CRM Contact, transcript summary → CRM note
Call endedSame
Booking createdCalendar event / CRM event (where supported) + booking landed on the Person timeline
Lead score crossed hotCRM property / tag update; Slack + webhook alerts
Form submittedCRM Contact creation + identity capture

Integration matrix

IntegrationCategoryAuthDirectionPlanOwning service
HubSpotCRMOAuthBi-directionalAll (verify)backend
GoHighLevelCRMOAuth (v2 app) / self-accountBi-directionalAll (verify)backend + ms-ai
Google CalendarCalendarOAuthOutbound (create events)All (verify)ms-ai
CalendlyCalendarOAuth + webhookInbound (bookings) + embedAll (verify)backend
SlackCommunicationOAuthOutbound (notifications)All (verify)backend + ms-communication
ZapierAutomationWebhook URL + secretOutbound (events)All (verify)backend
ShopifyE-commerceOAuthInbound (product sync)Pro (verify)ms-ai
WooCommerceE-commerceAPI key + secretInbound (product sync)Pro (verify)ms-ai
WebhooksCustomWebhook URL + HMAC secretOutbound (events)All (verify)backend
ManyReachCold emailAPI keyOutbound (prospect push)Agent K betabackend

GoHighLevel also provides a calendar (booking embed inside the widget) and automation event mirroring — covered on the GHL page.

Naming: all user-facing UI copy now says LeadConnector where it used to say GoHighLevel (frontend rename); code, config keys, and routes remain go_high_level/ghl.

Configuration & options

  • Connect: Settings → Integrations → pick the tool → authorize (OAuth) or paste credentials (API key). E-commerce and CRM integrations show a sync/connection status after connecting.
  • Permissions: the web owner and team members granted settings.integrations can manage all integrations (was owner-only 403s) — GeneralHelper check in backend.
  • Toggles: Slack alerts are toggled in Settings → Notifications (slack_new_visitor, slack_hot_lead); webhook/Zapier subscriptions are managed in Settings → Webhooks; calendar booking_enabled and event-type selection live on the integration record.
  • Field mappings: CRM custom-field syncing requires explicit per-company mapping (notably GHL custom fields).

Behaviors & edge cases

  • Disconnect removes the tokens and stops future sync. Historical data already synced stays put (contacts already in the CRM, transcripts already posted, bookings already on the timeline). Cached crm_enrichment IDs remain for reference but stop refreshing. GHL disconnect additionally uninstalls the app GHL-side (location/company/agency installs) — see the GHL page.
  • Enrichment-guessed contact push is off: LeadContactSyncJob — the cron pushing enrichment-guessed (Clearbit/Apollo) contacts into GHL/HubSpot — is disabled globally (commented out of SchedulerService). Event-driven sync of real captured leads is unaffected.
  • OAuth refresh failures (e.g. a user revokes access at the provider) silently degrade — the integration's status flips and admins should reconnect. Monitor connection status.
  • Rate limits: high-volume tenants can hit CRM/Slack rate limits. Sync queues back off gracefully but don't drop; Slack/Zapier may drop under extreme volume — prefer hot-lead-only alerts.
  • Dead webhook deliveries: a native/Zapier webhook that fails 3 consecutive times is auto-marked inactive and the admin is notified; it must be re-enabled.

Plan & limits

  • All integrations appear under Settings → Integrations on every plan screen, but availability per tier is plan-gated — Shopify/WooCommerce are marked Pro in the knowledge base; CRM/calendar/Slack/webhooks are "all plans." Treat exact tier gating as verify against the current package config.
  • E-commerce re-embedding consumes AI credits; large catalog syncs take time.

Technical implementation

  • CRM hub: backendCrmSyncQueueService (outbound), CrmEnrichmentQueueService (inbound), GoHighLevelService.js, HubspotService.js / PublicHubspotService.js, SlackService.js, WebhookController.js + WebhookModel/WebhookEventModel/WebhookLogModel.
  • E-commerce + calendar: ms-aisrc/integrations/ (Shopify/WooCommerce RAG sync, Google Calendar actions, integration entity with sync_status).
  • Nox CRM tools: knox-crm (CRM queries), knox-automation-activity (GHL automation events), knox-action-feed, knox-recent-bookings, knox-visitor-bookings.
  • Subsystem deep dive: CRM & External Integration and Identity Graph.

Simpro (trade/field-service — no dedicated page here, covered in CRM & External Integration). Recent changes: job creation applies an AI-picked trade tag — ms-ai POST /agents/pick-job-tags picks one best tag from the build's tag catalogue, and the Tapi extractor accepts the tag vocabulary (an "AI-Booked" marker exists but is disabled); ms-ai POST /elevenlabs/sync-simpro-tool keeps the voice agent's job-booking tool config synced.

What Nox can tell you

  • Which integrations are connected, last sync time, and sync status per integration.
  • Sync failures (recent webhook events / API request logs).
  • Whether a specific contact is in the CRM (knox-crm), and which leads have CRM IDs.