Set up tracking on your site
Two integration paths - a one-line frontend snippet, or a server-side SDK that survives ad blockers. Pick per channel.
Funnelion.ai attributes every contact a visitor makes - phone call, email reply, form submission, Telegram message - back to the campaign that brought them to your site. Each channel has its own setup, but the integration shape is consistent:
- Configure the channel in the dashboard (pool, addresses, routing rules).
- Pick an integration path: the JS snippet (fast, browser-side) or the PHP SDK (ad-blocker proof, server-side).
- Mark the elements on your site that should be swapped (
data-funnelion="<Zone Name>").
Pick a channel
Email tracking
Swap mailto: links to per-visitor tracked addresses, ingest replies back into the dashboard.
Read the guidePhone tracking
Swap tel: links to dynamic DIDs, attribute every call back to the visitor’s traffic source.
Read the guideWeb forms
Bind to your form submit, capture fields, attribute conversions to the originating session.
Read the guideTelegram
Register a bot, surface its handle on your site, ingest every incoming message as a lead event.
Read the guideTwo integration paths
Frontend snippet
One <script> tag on your site. The snippet runs in the visitor’s browser, talks to dash.funnelion.ai, swaps any element you mark with data-funnelion, and binds submit listeners to your forms. Zero backend work. The trade-off: ad blockers, content blockers, and strict CSPs can cut the snippet off before it loads, leaving the visitor with your static fallback content.
Backend SDK
Your server resolves Funnelion.ai at page-render time over a bearer-authenticated API and ships HTML with the addresses already swapped. The visitor’s browser never has to reach Funnelion.ai, so ad blockers and CSPs are not in play. Requires the funnelion/sdk Composer package (PHP) and one env var on your server.
Both paths share the same dashboard configuration - you can switch later without re-configuring. If you’re running PHP and you can afford a 0.5 s timeout on page render, the backend path is the recommended default.