Integrations & Webhooks

Connect Voquii to your existing tools. Use direct OAuth integrations for calendars and CRMs, or webhooks to push events to any platform.

Direct Integrations (OAuth)

Google Calendar

One-click OAuth connect from Settings → Integrations.

Setup

1
Go to Settings → Integrations
2
Find Google Calendar and click Connect
3
Sign in with your Google account and approve permissions

Permissions Requested

  • calendar.events — Read/write calendar events
  • userinfo.email — See your email address

What It Does

  • Appointments booked by the bot auto-create Google Calendar events
  • Cancellations and updates sync automatically

Microsoft 365 / Outlook

OAuth connect from Settings → Integrations.

Setup

1
Go to Settings → Integrations
2
Find Microsoft and click Connect
3
Sign in with your Microsoft account and approve permissions

Permissions Requested

  • User.Read — Read your profile
  • Calendars.ReadWrite — Read and write calendar events

What It Does

  • Same auto-sync as Google Calendar — events created, updated, and cancelled automatically

HubSpot CRM

OAuth connect from Settings → Integrations.

Setup

1
Go to Settings → Integrations
2
Find HubSpot and click Connect
3
Sign in with your HubSpot account and approve permissions

Permissions Requested

  • crm.objects.contacts.read/write — Read and create contacts
  • crm.objects.companies.read — Read company data
  • crm.objects.deals.read/write — Read and create deals

What It Does

  • Leads captured by the bot can sync to HubSpot contacts

Webhook Integrations

Voquii sends HTTP POST requests to your URL when events happen — new conversations, messages, leads, appointments, and more. Connect to any platform that accepts webhooks.

Setting Up a Webhook

Go to Settings → Integrations → Add Integration

1
Choose integration type: Zapier, Make.com, GoHighLevel, HubSpot, Custom Webhook, or Custom API
2
Enter your webhook URL
3
Select which events to subscribe to
4
Optionally add custom headers (for authentication)
5
Set a signing secret for payload verification
6
Test the connection, then save

Available Events

EventDescription
conversation.startedNew conversation opened
message.receivedCustomer sent a message
bot.responseAI sent a response
lead.createdNew lead captured
lead.updatedLead info updated
appointment.requestedCustomer asked to book
appointment.createdAppointment confirmed
appointment.updatedAppointment modified
appointment.cancelledAppointment cancelled

Payload Format

Every webhook delivery is a JSON POST with the event type, timestamp, a unique delivery ID, and event-specific data.

{
  "specVersion": "voquii.integration.v1",
  "eventId": "evt_7f3a2e0c2c1a4d6a",
  "eventType": "lead.created",
  "occurredAt": "2026-01-26T23:45:10.120Z",
  "tenantId": "tnt_abc123",
  "botId": "bot_xyz789",
  "environment": "production",
  "idempotencyKey": "lead.created:lead_10293:2026-01-26T23:45:10.120Z",
  "data": {
    "lead": {
      "leadId": "lead_10293",
      "name": "Jordan Smith",
      "email": "jordan@example.com",
      "phone": "+15551234567"
    },
    "conversation": {
      "conversationId": "conv_88aa10",
      "channel": "widget"
    }
  }
}

Signature Verification

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

Header: X-Voquii-Signature
Format: sha256=<hex>
Input: HMAC-SHA256(secret, "${timestamp}.${rawBody}")

Node.js verification example
const crypto = require('crypto');

function verifyWebhook(secret, req) {
  const timestamp = req.headers['x-voquii-timestamp'];
  const signature = req.headers['x-voquii-signature'];
  const rawBody   = JSON.stringify(req.body);

  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(timestamp + '.' + rawBody)
    .digest('hex');

  // Use timing-safe comparison to prevent timing attacks
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signature)
  );
}

app.post('/webhook', (req, res) => {
  if (!verifyWebhook(process.env.WEBHOOK_SECRET, req)) {
    return res.status(401).send('Invalid signature');
  }

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

Delivery Logs

View all webhook deliveries in Settings → Integrations. Each delivery shows the event type, status code, response time, and any error messages.

  • Retry failed deliveries with one click
  • View request payload and response body
  • Filter by event type or status
Automatic Retries: Failed deliveries are retried automatically at 1 minute, 5 minutes, and 30 minutes after the initial failure. If all retries fail, the delivery is marked as failed and you can manually retry from the logs.

Platform Guides

Zapier

Use the "Webhooks by Zapier" trigger to receive Voquii events in any Zap.

1
In Zapier, create a new Zap with trigger Webhooks by Zapier → Catch Hook
2
Copy the webhook URL Zapier gives you
3
In Voquii, go to Settings → Integrations → Add Integration and paste the URL
4
Select your events, save, and test the connection

Make.com

Create a scenario with the Custom Webhook module to receive Voquii events.

1
In Make, create a new scenario and add a Custom Webhook module
2
Copy the webhook URL Make gives you
3
In Voquii, go to Settings → Integrations → Add Integration and paste the URL
4
Select your events, save, and run the Make scenario once to learn the data structure

GoHighLevel

Use an Inbound Webhook trigger in GoHighLevel Workflows to receive Voquii events.

1
In GoHighLevel, go to Automation → Workflows and create a workflow with an Inbound Webhook trigger
2
Copy the webhook URL
3
In Voquii, go to Settings → Integrations → Add Integration and paste the URL
4
Map webhook fields to GoHighLevel contact fields (e.g. data.lead.name, data.lead.email)

Next Steps