Integrations Guide

Connect SiteAnswerAI to your favorite tools using webhooks. SiteAnswerAI sends events to automation platforms like Zapier and Make, which then connect to your CRM, calendar, and other apps.

No OAuth required: SiteAnswerAI uses webhooks to send events. Zapier/Make handles the OAuth connection to your destination apps (HubSpot, Google Calendar, etc.).

Quick Start

  1. 1. Go to Settings → Integrations in your dashboard
  2. 2. Click Add Integration
  3. 3. Choose a preset (e.g., "Zapier Catch Hook") or configure manually
  4. 4. Paste your webhook URL from Zapier/Make/GoHighLevel
  5. 5. Select the events you want to receive
  6. 6. Click Create Integration

ZZapier Integration

Zapier connects SiteAnswerAI to 5,000+ apps. Use the "Webhooks by Zapier" trigger to receive events.

Setup Steps

Step 1: Create a new Zap

Go to zapier.com and click "Create Zap"

Step 2: Add Webhook Trigger
  • Search for "Webhooks by Zapier"
  • Select Catch Hook as the trigger event
  • Click Continue (leave "Pick off a Child Key" empty)
  • Copy the webhook URL (looks like: https://hooks.zapier.com/hooks/catch/...)
Step 3: Add to SiteAnswerAI
  • Go to Settings → Integrations in SiteAnswerAI
  • Click "Add Integration"
  • Select preset: Zapier Catch Hook
  • Paste the webhook URL from Zapier
  • Select your desired events
  • Click "Create Integration"
Step 4: Test the connection
  • In Zapier, click "Test trigger"
  • Send a test message to your chatbot
  • Zapier should receive the event data
Step 5: Add your action
  • Add an action (e.g., Google Sheets, HubSpot, Slack, Gmail)
  • Map the fields from the webhook data to your action
  • Publish your Zap

MMake.com Integration

Make (formerly Integromat) offers powerful visual automation with complex logic and data transformations.

Setup Steps

Step 1: Create a new Scenario

Go to make.com and click "Create a new scenario"

Step 2: Add Webhook Module
  • Click the "+" button to add a module
  • Search for "Webhooks"
  • Select Custom webhook
  • Click "Add" to create a new webhook
  • Give it a name (e.g., "SiteAnswerAI Events")
  • Copy the webhook URL (looks like: https://hook.us1.make.com/...)
Step 3: Add to SiteAnswerAI
  • Go to Settings → Integrations in SiteAnswerAI
  • Click "Add Integration"
  • Select preset: Make.com Webhook
  • Paste the webhook URL from Make
  • Select your desired events
  • Click "Create Integration"
Step 4: Determine data structure
  • In Make, click "Run once" on your scenario
  • Send a test message to your chatbot
  • Make will learn the data structure automatically
Step 5: Add your modules
  • Add modules for your destination apps (Google Sheets, HubSpot, etc.)
  • Use a Router module if you need different actions per event type
  • Turn on scheduling and activate your scenario

GGoHighLevel Integration

Send leads and conversation events directly to GoHighLevel workflows using inbound webhooks.

Setup Steps

Step 1: Create a Workflow in GoHighLevel
  • Go to Automation → Workflows
  • Create a new workflow
  • Select Inbound Webhook as the trigger
Step 2: Copy the Webhook URL
  • Click on the Inbound Webhook trigger
  • Copy the webhook URL (looks like: https://services.leadconnectorhq.com/hooks/...)
Step 3: Add to SiteAnswerAI
  • Go to Settings → Integrations in SiteAnswerAI
  • Select preset: GoHighLevel Inbound Webhook
  • Paste the webhook URL
  • Select events: lead.created, bot.response, conversation.started
  • Click "Create Integration"
Step 4: Map fields in GoHighLevel
  • Add workflow actions (Create/Update Contact, Add Note, etc.)
  • Map webhook fields to contact fields:
  • data.lead.name → Contact Name
  • data.lead.email → Email
  • data.lead.phone → Phone

HHubSpot Integration (via Zapier/Make)

SiteAnswerAI connects to HubSpot through Zapier or Make. This approach requires no OAuth setup in SiteAnswerAI.

Recommended: Using Zapier/Make gives you more flexibility and doesn't require storing HubSpot credentials in SiteAnswerAI.

Option A: HubSpot via Zapier

Step 1: Create Zap with Webhook trigger
  • Create a new Zap in Zapier
  • Trigger: Webhooks by Zapier → Catch Hook
  • Copy the webhook URL
Step 2: Add to SiteAnswerAI
  • Select preset: HubSpot via Zapier
  • Paste the Zapier webhook URL
  • Select events: lead.created, bot.response
Step 3: Add HubSpot action in Zapier
  • Add action: HubSpot → Create Contact
  • Connect your HubSpot account (Zapier handles OAuth)
  • Map fields:
  • Email → data.lead.email
  • First Name → data.lead.name
  • Phone → data.lead.phone

Option B: HubSpot via Make

Step 1: Create scenario with Custom Webhook
  • Create a new scenario in Make
  • Trigger: Webhooks → Custom webhook
  • Copy the webhook URL
Step 2: Add to SiteAnswerAI
  • Select preset: HubSpot via Make
  • Paste the Make webhook URL
  • Select events: lead.created, bot.response
Step 3: Add HubSpot CRM module
  • Add module: HubSpot CRM → Create a Contact
  • Connect your HubSpot account
  • Map the fields from the webhook data

Google Calendar Integration

Automatically create Google Calendar events when appointments are booked through your chatbot. Zapier/Make handles the Google Calendar connection.

Important: To support updates and cancellations, you need to store a mapping between appointmentId and googleEventId. Zapier Storage or Make Data Stores work well for this.

Option A: Google Calendar via Zapier

Step 1: Create Zap with Webhook trigger
  • Trigger: Webhooks by Zapier → Catch Hook
  • Copy the webhook URL
Step 2: Add to SiteAnswerAI
  • Select preset: Google Calendar via Zapier (No OAuth)
  • Paste the webhook URL
  • Events are pre-selected: appointment.requested, appointment.created, appointment.updated, appointment.cancelled
Step 3: Add Filter (optional but recommended)
  • Add: Filter by Zapier
  • Only continue if eventType contains "appointment"
Step 4: Add Storage step
  • Add: Storage by Zapier → Get Value
  • Key: googleEventId:{{data__appointment__appointmentId}}
  • This retrieves the Google event ID if one exists
Step 5: Add Paths for different events
  • Add: Paths by Zapier
  • Path A (Created): eventType = appointment.created
  • Google Calendar → Create Detailed Event
  • Then: Storage by Zapier → Set Value (store the returned event ID)
  • Path B (Updated): eventType = appointment.updated
  • If Storage has value: Google Calendar → Update Event
  • Else: Create event + store ID
  • Path C (Cancelled): eventType = appointment.cancelled
  • If Storage has value: Google Calendar → Delete Event
Field Mapping
Summarydata.appointment.title
Start Date/Timedata.appointment.startAt
End Date/Timedata.appointment.endAt
Locationdata.appointment.location
Descriptiondata.appointment.notes + lead info
Attendee Emaildata.lead.email

Option B: Google Calendar via Make

Step 1: Create a Data Store
  • Go to Make → Data Stores
  • Create new store: appointment_google_event_map
  • Add key field: appointmentId (text)
  • Add value field: googleEventId (text)
Step 2: Create Scenario with Webhook
  • Trigger: Webhooks → Custom webhook
  • Copy the webhook URL
Step 3: Add to SiteAnswerAI
  • Select preset: Google Calendar via Make (No OAuth)
  • Paste the webhook URL
Step 4: Add Router with 3 routes
  • Add: Router module
  • Route 1: Filter: eventType = appointment.created
  • Google Calendar → Create an Event
  • Data Store → Add/Update record (store appointmentId → googleEventId)
  • Route 2: Filter: eventType = appointment.updated
  • Data Store → Get a record
  • If found: Google Calendar → Update an Event
  • If not: Create + Store
  • Route 3: Filter: eventType = appointment.cancelled
  • Data Store → Get a record
  • If found: Google Calendar → Delete an Event

{}Custom Webhook & API

Send events to your own server or any HTTP endpoint. Full control over the integration.

Custom Webhook

For receiving events on your own server. Events are POSTed as JSON.

Custom API Endpoint

For APIs that require custom authentication headers. You can specify your own headers including Authorization tokens, API keys, etc.

Example: Custom API with Bearer token
Headers:
{
  "Content-Type": "application/json",
  "Authorization": "Bearer your_api_key_here"
}

Event Types & Payload Schema

Available Events

EventDescription
conversation.startedA visitor opened the chat widget
message.receivedA visitor sent a message
bot.responseThe bot sent a reply
lead.createdNew lead captured (email/phone collected)
lead.updatedLead information updated
appointment.requestedUser requested a booking (not yet confirmed)
appointment.createdAppointment confirmed/scheduled
appointment.updatedAppointment time/details changed
appointment.cancelledAppointment was cancelled

HTTP Headers

HeaderDescription
Content-Typeapplication/json
X-Voquii-EventThe event type (e.g., appointment.created)
X-Voquii-TimestampUnix timestamp in milliseconds
X-Voquii-Delivery-IdUnique delivery ID for this request
X-Voquii-SignatureHMAC signature (if secret is configured)

Sample Payload (appointment.created)

{
  "specVersion": "siteanswerai.integration.v1",
  "eventId": "evt_7f3a2e0c2c1a4d6a",
  "eventType": "appointment.created",
  "occurredAt": "2026-01-26T23:45:10.120Z",
  "tenantId": "tnt_abc123",
  "botId": "bot_xyz789",
  "environment": "production",
  "idempotencyKey": "appointment.created:apt_55c1d9:2026-01-26T23:45:10.120Z",
  "data": {
    "lead": {
      "leadId": "lead_10293",
      "name": "Jordan Smith",
      "email": "jordan@example.com",
      "phone": "+15551234567"
    },
    "appointment": {
      "appointmentId": "apt_55c1d9",
      "status": "created",
      "title": "Consultation - Jordan Smith",
      "timezone": "America/New_York",
      "startAt": "2026-01-27T15:00:00.000Z",
      "endAt": "2026-01-27T15:30:00.000Z",
      "location": "Phone",
      "notes": "Requested via SiteAnswerAI chat widget.",
      "attendees": [
        { "email": "jordan@example.com", "name": "Jordan Smith" }
      ],
      "updatedAt": "2026-01-26T23:45:10.120Z"
    },
    "conversation": {
      "conversationId": "conv_88aa10",
      "channel": "widget"
    }
  }
}

Signature Verification

If you configure a signing secret, every webhook includes an HMAC-SHA256 signature so you can verify it came from SiteAnswerAI.

Signature Format

Header: X-Voquii-Signature: sha256=<hex_signature>

Signature = HMAC-SHA256(secret, "${timestamp}.${rawBody}")

Where:
- timestamp = value of X-Voquii-Timestamp header
- rawBody = the raw JSON request body (as string)

Verification Example (Node.js)

const crypto = require('crypto');

function verifySignature(secret, timestamp, rawBody, signature) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(`${timestamp}.${rawBody}`)
    .digest('hex');

  return `sha256=${expected}` === signature;
}

// In your webhook handler:
app.post('/webhook', (req, res) => {
  const timestamp = req.headers['x-voquii-timestamp'];
  const signature = req.headers['x-voquii-signature'];
  const rawBody = JSON.stringify(req.body);

  if (!verifySignature(process.env.WEBHOOK_SECRET, timestamp, rawBody, signature)) {
    return res.status(401).send('Invalid signature');
  }

  // Process the webhook...
  console.log('Event:', req.body.eventType);
  res.status(200).send('OK');
});

Need Help?