Chameleon

Datafly Signal sends product-adoption events to Chameleon through its Events incoming webhook, for Experience targeting (Tours, Microsurveys, Launchers, Tooltips) and goals.

Why route Chameleon through Datafly Signal

  • Events arrive when the browser cannot send them. Server-side delivery is not stopped by ad blockers, tracking prevention or a page unload.
  • No personal data. Events are keyed on your user id only.

Prerequisites

  • A Chameleon Secret API key (app.chameleon.io/settings/tokens).
  • The Chameleon snippet identifying users with the same user id Signal sees as user_id.

Configuration

FieldRequiredDescription
account_secretYesYour Chameleon Secret API key, generated at app.chameleon.io/settings/tokens. Sent as the X-Account-Secret header. Use the Secret API key, not the public account token (the account token returns 401 once identity verification is enabled). Tokens can only be downloaded once.

Configure in Signal

Add the integration

Go to Integrations > Add Integration > Chameleon.

Choose a preset

SaaS.

Enter the configuration

Fill in the fields in the table above.

Choose the categories that gate product analytics for your product.

Save

Signal delivers the next matching event.

API Endpoint

POST https://api.chameleon.io/v3/observe/hooks/events
X-Account-Secret: ACCOUNT_SECRET
Content-Type: application/json

Flat body: uid, name and the event’s properties. Chameleon normalises names to snake_case and silently drops reserved keys (source, action, created_at and others), which the preset avoids.

Identity Signals

SignalSent asNotes
User iduidThe Signal user_id. Required: Chameleon can only create a profile from a uid, so anonymous events are not sent.

Event Mapping

SaaS preset (saas)

Product-adoption events for Chameleon targeting (Tours, Microsurveys, Launchers, Tooltips) and goal tracking: sign-up, login, onboarding, feature use, trial, subscription and order events with flat properties (Chameleon normalises names to snake_case). The profile is addressed by uid, the Signal user_id, which must be the User ID the Chameleon snippet identifies with; events without one are not sent, because Chameleon can only create a profile from a uid. No email or other personal data is sent: uid is enough to match, and property names Chameleon reserves (source, action, created_at, user_id and others) are avoided.

Signal eventSent asEnabled
pagePage ViewedOff by default
sign_upSigned UpYes
loginLogged InYes
onboarding_completedOnboarding CompletedYes
feature_usedFeature UsedYes
trial_startedTrial StartedYes
trial_convertedTrial ConvertedYes
subscription_startedSubscription StartedYes
subscription_cancelledSubscription CancelledYes
purchaseOrder CompletedYes

To customise, edit the integration’s Field Mappings in the Management UI.

Example: a subscription start

What Signal sends (rendered from the preset):

POST https://api.chameleon.io/v3/observe/hooks/events
{
  "billing_cycle": "monthly",
  "currency": "GBP",
  "name": "Subscription Started",
  "plan_id": "pro",
  "plan_name": "Pro",
  "revenue": 49,
  "uid": "crm-user-7"
}

Testing

Send a test event

Trigger the event on your site, or replay one from Signal’s event debugger.

Check the response

Confirm a 2xx response, then look for the event on the user’s profile in Chameleon.

Troubleshooting

ProblemSolution
401Use the Secret API key, not the public account token.
Event on the wrong profileThe uid must be the id the snippet identifies with.

Limitations

  • Page views are off by default: the snippet sees them.
  • Chameleon stamps events with the time it receives them; there is no event timestamp field.