Skip to content
Wozena
ProductSolutionsPricingDocs
Log inGet started
Docs home
Get started
  • How Wozena works
  • Quickstart checklist
  • Create your agency
Products & services
  • Sell an agent as a service
Voice agents
  • Connect Retell
  • Phone numbers
  • Build an agent
  • Knowledge bases
  • Test and publish
  • Share an agent
White-label
  • Branding
  • Custom domains
  • Email and sending domain
  • The client portal
Clients & team
  • Clients
  • Team, roles and invites
Sell & bill
  • Connect Stripe
  • Client plans
  • Plan links and storefront
  • Billing clients
  • Your Wozena plan
Integrations & automation
  • CRMs and calendars
  • In-call tools
  • Post-call automations
  • Webhooks
Outbound & operations
  • Contacts and campaigns
  • Calls and reports
  • Security and access
  • Troubleshooting
Docs / Integrations & automation

CRMs and calendars

Connect HubSpot, GoHighLevel, Cal.com and Calendly per client.

Integrations connect your clients’ CRMs, calendars, help desks, texting, email and spreadsheets to Wozena. Once connected, their agents can book appointments, look up callers, check tickets and text links during a call, and automations can write every call back afterwards.

Plan: Requires a plan that includes integrations — by default Agency and Agency Pro.

Before you start
  • An agency owner, agency admin or client admin account. Client members can’t connect or change integrations.
  • Access to the client’s account at the provider (HubSpot, GoHighLevel, Cal.com or Calendly) so you can create a token.
  • The client’s “Use integrations” access control turned on. See Clients.

How connections work#

Every connection uses an API key or access token that you create in the provider’s own settings and paste into Wozena. There is no “Sign in with HubSpot” style (OAuth) flow.

  • We validate the credential with the provider before saving it. A token that the provider rejects is never stored.
  • Credentials are encrypted. After you save, only the last four characters are ever shown.
  • Each workspace holds one connection per provider. To change a saved credential, rotate it (see Rotate or disconnect).

Connections live on Integrations in the sidebar. Everything you’ve connected sits in a strip at the top, with anything that needs attention first. Below it is the catalog: filter by “CRM”, “Calendars & booking” or “Automation & webhooks”, or search. Click a connected tile (or its chip in the strip) to open its details.

Connect in the right workspace#

Agents only use connections from their own workspace

An agent can only use a connection that belongs to the same workspace as the agent, and the same goes for automations. A connection made for the agency (“Agency-wide”) is separate: a client’s agents can’t use it.

So connect a client’s own CRM or calendar for that client. When you connect from the agency-wide view, the dialog asks which “Workspace” it’s for.

Every connection shows where it lives: “Agency-wide” or the client’s name. A provider can be connected once per workspace, so you can have HubSpot for the agency and a different HubSpot account for each client.

If you’re viewing as a client (the “Viewing as …” banner), or you’re a client user, connections are always made for that workspace and the dialog says so.

Connect a provider#

  1. Open Integrations
    Go to Integrations and click “Connect” on the provider’s tile.
  2. Choose the workspace
    From the agency-wide view, pick “Agency-wide” or “Specific client” and choose the client. Only active clients are listed.
  3. Paste the credential
    The dialog shows the fields for that provider and where to find them (“How to get your token”). The provider sections below say exactly where to find each value.
  4. Connect
    Click “Connect”. The button shows “Verifying” while we check the credential with the provider. On success you see “HubSpot connected” (or the provider’s name) and it appears in the connected strip.

Next, give agents the new tools (In-call tools) or send calls to the CRM after they end (Post-call automations).

HubSpot#

HubSpot connects with a private app access token.

FieldWhere to get it
“Private App access token”In HubSpot: Settings › Integrations › Private Apps › your app › Auth. HubSpot explains private apps in its developer docs.

Recommended permissions

Wozena doesn’t enforce a fixed list of HubSpot scopes. Based on what the integration reads and writes, make sure the private app’s token can:

  • Read and write contacts (search, create and update).
  • Read contact properties.
  • Read and write deals, including deal pipelines.
  • Create call records.
  • Read lists and list memberships (needed for contact import).
  • Read and write associations between records.

If a feature fails with a permission error, add the missing permission to the private app, then use “Retest” on the connection card.

GoHighLevel#

GoHighLevel connects with a private integration token scoped to one sub-account (location).

FieldWhere to get it
“Private Integration Token”In HighLevel: Settings › Private Integrations. Create a token scoped to the client’s sub-account.
“Location ID”Required. The id of the sub-account (location) the token is scoped to.

Wozena uses HighLevel’s current (v2) API. Older v1 location API keys no longer work, so always create a private integration token.

Recommended permissions

Make sure the token can:

  • Read the location, including its custom fields and tags.
  • Read and write contacts, including notes, tags and workflow enrolment.
  • Read and write opportunities, including pipelines.

Cal.com#

FieldWhere to get it
“API key”In Cal.com: Settings › Developer › API keys.

Cal.com supports every calendar tool: checking availability, booking, finding, rescheduling and cancelling appointments.

Calendly#

FieldWhere to get it
“Personal Access Token”In Calendly: Integrations › API & Webhooks › Personal Access Tokens.
Note
Calendly can’t reschedule over the phone, and agents find a caller’s existing booking by the caller’s email address. See In-call tools for how the agent handles this.

Webhook#

A Webhook connection sends a signed event to a URL you choose after every completed call. The Zapier, Make and n8n tiles are the same webhook with setup steps for that tool; “Custom webhook” is for your own server. A workspace has one webhook destination, so connecting another tile replaces it.

FieldWhat it does
“Webhook URL”Required. Where we POST events. Must be a public HTTPS address.
“Signing secret”Optional, but strongly recommended. Used to sign every request so the receiver can verify it came from us.

We only check the URL’s format when you connect; nothing is sent until an automation fires. The full request format and signature check are in Webhooks.

Zendesk#

Connect a client’s Zendesk to turn calls into tickets. Use the “Zendesk subdomain” (acme for acme.zendesk.com), the email of an agent or admin, and an “API token” from Admin Center › Apps and integrations › APIs › Zendesk API (turn on token access first).

  • After calls: an automation opens a ticket with your subject and note, or adds the call to the caller’s open ticket. The note is internal, so the caller isn’t emailed the transcript. You can set priority, group and tags.
  • During calls: turn on “Support tickets” under the agent’s Functions & Tools. The agent can tell callers about their open tickets and open a new one.
  • Callers are matched to Zendesk users by phone number (or email, when given) and created when they’re new.

Twilio (text messages)#

Texts go through the client’s own Twilio account, so use the account whose texting registration is already approved (A2P 10DLC in the US). Enter the “Account SID” and “Auth token” (or an API key SID and secret) and either a “Messaging Service SID” (recommended) or a “From number” in that account.

  • After calls: an automation texts the caller or other numbers. The “Missed-call text-back” template texts inbound callers who hung up within 20 seconds, at most once every 12 hours per caller.
  • During calls: turn on “Text messages” under the agent’s Functions & Tools so the agent can text a link or address when the caller agrees (up to 3 texts per call).
  • Numbers on the do-not-call list are never texted. When someone replies STOP, Twilio blocks further texts and we add the number to the client’s do-not-call list, so campaigns won’t call them either.
  • “Quiet hours” skips automated texts between 9pm and 8am in your agency’s timezone.

Email senders#

Connect an email service to send call summaries to the client’s team or follow-ups to callers from an automation. Each recipient gets their own email, so callers never see your team’s addresses.

ServiceWhat you need
“SMTP”Server, port (587 or 465), username and password. Works with Microsoft 365, Google Workspace (an app password or SMTP relay), Amazon SES and most mail hosts. Encryption is required.
“SendGrid”An API key with Mail Send access. The From address must be a verified sender or on an authenticated domain.
“Mailgun”An API key, the sending domain and its region (US or EU).
“Postmark”The server API token. The From address needs a confirmed sender signature or verified domain.

Every sender asks for the “From address”, and optionally a From name (e.g. the business name) and a “Reply-to address”. This is separate from the branded emails Wozena sends for you (invites, weekly reports), which use your sending domain. See Email sending.

Google Sheets#

Log every call to a Google Sheet without signing in to Google. The connect dialog shows an address to share with.

  1. Share the sheet
    In Google Sheets click “Share” and add the address shown as an “Editor”.
  2. Paste its link
    Copy the sheet’s link from the browser and paste it into “Google Sheet link”.
  3. Add the automation
    In Automations, choose “Log every call to the sheet”, pick the tab and the columns.

An empty tab gets a header row. A tab that already has headers keeps its layout: matching columns fill in and new ones are added at the end. Values are written as plain text, never as formulas.

Message templates#

Emails, texts, tickets and sheet rows use {{variables}} filled in from the call. Click a variable under a field to insert it. Add a fallback after a bar for when a value is missing, e.g. Hi {{caller_name|there}} reads “Hi there” when the caller didn’t give a name.

VariableBecomes
{{caller}}The caller’s name and number, or just the number when they didn’t give a name
{{caller_name}}The caller’s name, if they gave it or they’re a known contact
{{caller_phone}}The caller’s number
{{caller_email}}The caller’s email, if the call captured one
{{summary}}The call summary
{{outcome}}The call outcome
{{date}}The date and time of the call (with {{time}}), in your agency’s timezone
{{business_name}}The client’s name
{{call_link}}A link to the call in the dashboard
{{analysis.field}}Any post-call analysis field, e.g. {{analysis.service}}

Use “Dry run against a recent call” in an automation’s Test panel to preview exactly what would be sent, without sending it.

Health checks and testing#

Open a connection to see its details:

TabWhat you see
“Overview”When it was last checked, actions it ran in the last 30 days (and contacts synced, for CRMs), what it powers, and a calendar’s event types.
“Used by”The agents with in-call tools wired to it, the automations that send to it, and any CRM lists or tags kept in sync.
“Contact sync”CRMs only: import a list or tag, sync now, and manage what’s kept in sync.
“Activity”Recent automation actions and contact syncs through this connection, with any errors.
  • “Connected” means the last check passed. “Action needed” means the provider rejected the credential or couldn’t be reached; the error is shown at the top.
  • Click “Test connection” any time. A healthy connection shows “Connection OK”; a failing one that recovers shows “Connection restored”.

We also re-check every connection automatically once a day. When a connection starts failing, people in that workspace get a notification that the connection needs attention.

Rotate or disconnect#

Rotate a token

Use rotation when a token expires, is revoked, or you want to replace it. Your other settings are kept.

  1. Create a new token at the provider
    Use the same place you created the original.
  2. Click Rotate token
    Open the connection and click “Rotate token”. The dialog shows the last four characters of the current key and which workspace it belongs to. Non-secret fields such as the GoHighLevel “Location ID” are already filled in.
  3. Validate and rotate
    Paste the new token and click “Validate & rotate”. We validate it before replacing the old one, so a bad token never overwrites a working one.

Disconnect

Open the connection, click “Disconnect” and confirm. You can’t disconnect a connection that’s still in use: the button is disabled and says what’s using it, for example “In use by 2 agents, 1 automation”. The “Used by” tab lists them by name. Remove the tools from those agents, delete or move those automations, and unlink any synced lists first.

Import and sync CRM contacts#

You can pull a HubSpot list or a GoHighLevel tag into the client’s contacts, and keep it in sync. Do this inside the client’s workspace so the contacts land with that client.

  1. Open the import dialog
    Open the CRM connection, go to “Contact sync” and click “Import”.
  2. Choose the audience
    Pick a “Segment or list”. HubSpot shows your lists; GoHighLevel shows your tags.
  3. Choose whether to keep it in sync
    “Keep this segment in sync” is on by default. Leave it on to add new segment members and update existing contacts on future syncs.
  4. Import
    Click “Import”. The result shows how many contacts were imported, updated and skipped.

What the import does

  • Contacts are matched on phone number, so the same person isn’t added twice.
  • Records without a dialable phone number are skipped.
  • One import can pull up to 5,000 contacts. For a larger segment, split it into smaller lists or tags.
  • Synced segments update automatically every 10 minutes. Click “Sync now” to run one straight away.

Do-not-call from the CRM

  • GoHighLevel: a contact with DND or Call DND turned on is marked do-not-call.
  • HubSpot: the import never marks anyone do-not-call. Mark those contacts yourself in Contacts.
  • A sync can add a do-not-call block but never removes one. An opt-out you recorded stays in place.

Manage synced segments

Each synced segment appears as a card marked “CRM → Contacts” with its status and conflict policy. Use “Sync”, “Map”, “Pause” / “Resume” and “Unlink”.

SettingWhat it does
Conflict policyDecides which side’s values are kept when a contact differs: “CRM wins” (the default), the option named after your brand (your contacts win), or “Newest wins”.
“Map”Opens “Map CRM fields”. Enter one mapping per line as crm_field=contact_field. Phone and do-not-call fields can’t be remapped.
“Unlink”Stops syncing. Contacts that were already imported stay.

If a sync keeps failing, workspace users get a “CRM sync needs attention” notification. An authentication failure also marks the connection as needing attention.

Troubleshooting#

What you seeWhat to do
“The provider rejected this credential”The token is wrong, revoked or missing permissions. Create a new one at the provider and paste it again, or use Rotate token on an existing connection.
“Connection failed — check your credentials”Copy the token again, without extra spaces, and retry. Confirm you’re using the field the provider section above describes.
“location_id is required for GoHighLevel”Fill in the Location ID of the sub-account the token belongs to.
The agent says no calendar or CRM is connected for this clientThe connection was made in agency-wide context or in a different client. Switch into the agent’s client and connect there.
“Selected connection belongs to a different client”An automation must use a connection from its own client. Pick that client’s connection, or connect one in that workspace.
No “Connect” button, or “Your plan does not include this capability”Your Wozena plan doesn’t include integrations (see Your Wozena plan). If a client user can’t see it, their “Use integrations” access control is off: you can still connect it for them while viewing as the client.
“Disconnect blocked”Remove the tools from agents, remove automations, and unlink synced segments that use the connection, then disconnect.
Webhook URL rejectedSee Webhooks troubleshooting.
Stuck? Ask Ada or email support, or check Troubleshooting.
PreviousYour Wozena planNextIn-call tools
On this page
  • How connections work
  • Connect in the right workspace
  • Connect a provider
  • HubSpot
  • GoHighLevel
  • Cal.com
  • Calendly
  • Webhook
  • Zendesk
  • Twilio (text messages)
  • Email senders
  • Google Sheets
  • Message templates
  • Health checks and testing
  • Rotate or disconnect
  • Import and sync CRM contacts
  • Troubleshooting
Wozena

A white-label platform for agencies selling AI phone agents to client businesses.

A Retell AI product
ProductClient portalsAgentsCampaignsClient billingReports
ResourcesDocumentationPricingChangelogStatusSupport
CompanySolutionsPartnersTrust centerPrivacyTerms
© 2026 Wozena · Powered by Retell AI
LinkedInXYouTube