Freshdesk
Creates Freshdesk contacts server-side through the Freshdesk REST API v2, so support agents see new customers before their first ticket.
Why route Freshdesk through Datafly Signal
- Profiles are updated from the server, not the browser. Events reach Freshdesk even when a tracker blocker or a failed page unload would have dropped a client-side call, so the profile reflects what actually happened.
- One consent decision governs every destination. Freshdesk is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.
Prerequisites
Find your API key
In Freshdesk, open your profile settings; the key inherits your agent role, so use an agent allowed to create contacts.
Note your subdomain
The part before .freshdesk.com in your portal URL.
Configuration
| Field | Type | Required | Description |
|---|---|---|---|
domain | text | Yes | Your Freshdesk subdomain: the part before .freshdesk.com in your portal URL (e.g. for yourcompany.freshdesk.com enter ‘yourcompany’). |
api_key | secret | Yes | Found under Profile Settings in your Freshdesk agent portal (right-hand side). The key inherits the agent’s role permissions, so use a key belonging to an agent allowed to create and update contacts. |
Signal setup
- Navigate to Integrations in the sidebar and open the Integration Library tab.
- Find Freshdesk, click Install and fill in the fields above.
- Pick the preset for your use, then review the mappings in the blueprint editor.
API endpoint
POST https://{domain}.freshdesk.com/api/v2/contacts
Authorization: Basic base64({api_key}:X)Example request:
{"name": "Jane Doe", "email": "jane.doe@example.com", "phone": "+447700900123", "job_title": "CTO",
"unique_external_id": "crm-user-7"}The presets turn on the strict output contract: only the fields the blueprint maps are sent.
Event mapping
Default preset (default)
Create a Freshdesk contact when a visitor signs up or submits a lead: name (else the email, else the phone), email, phone (E.164), job title and the Signal user ID as unique_external_id. Sent in plain text because Freshdesk agents work from the contact record. Freshdesk’s API creates but does not upsert: a repeat email is a 409, recorded as a failed delivery, so identify is mapped but disabled. Events with neither an email nor a phone are not sent.
| Signal event | Sent to the vendor as | Enabled |
|---|---|---|
sign_up | create_contact | yes |
generate_lead | create_contact | yes |
identify | create_contact | no (mapped, disabled) |
Identity and personal data
name (mandatory in Freshdesk) is the name trait, else first and last name, else the email, else the phone. Email (trimmed, lower-cased), phone (E.164), job title and the Signal user ID as unique_external_id complete the contact. These are sent in plain text because agents work from the contact record. Events with neither an email nor a phone are not sent.
Consent
Map the integration to the consent category your organisation uses for CRM or sales data. Signal does not write cookie consent into the CRM: no subscription status, do-not-disturb flag, list or tag is set from it, because a cookie banner choice is not a permission to email or call someone.
Known limitations
- Freshdesk creates contacts but does not upsert them: a repeat email or external ID is a
409, recorded as a failed delivery. Theidentifyevent is therefore mapped but disabled. - Custom fields must exist in Freshdesk before they can be mapped.
Troubleshooting
| Symptom | Cause and fix |
|---|---|
409 Conflict | The contact already exists; expected for a returning visitor. |
400 on custom_fields | The custom field is not defined in Freshdesk. |