Campaign Interaction Runtime

Web dialogs that deploy from config, not code

WebDialog is the edge runtime between CRM clicks and websites. Define once as JSON, render anywhere, and route to the right destination.

Configuration
{
  "type": "dialog",
  "format": "authoring-v1",
  "presets": {
    "dialog": "gift_personalization_hero_v1",
    "connector": "gift_personalization_internal_v1",
    "routing": "gift_personalization_branching_v1"
  },
  "content": {
    "logoLink": "/",
    "fields": [
      { "preset": "hidden_subscriber_id_v1" },
      { "preset": "hidden_campaign_id_v1" },
      { "preset": "hidden_first_name_v1" },
      { "preset": "hidden_last_name_v1" },
      { "preset": "full_name_prefilled_heading_v1" },
      { "name": "gift_signals",
        "type": "multiselect",
        "label": "Gift styles",
        "required": true,
        "maxSelect": 3,
        "showSelectionOrderBadges": true,
        "options": [
          { "label": "Experiences", "value": "experiences" },
          { "label": "Practical upgrades", "value": "practical_upgrades" },
          { "label": "Sentimental keepsakes", "value": "sentimental_keepsakes" },
          { "label": "Last-minute wins", "value": "last_minute_wins" },
          { "label": "Luxury moments", "value": "luxury_moments" },
          { "label": "Everyday essentials", "value": "everyday_essentials" }
        ]
      }
    ]
  }
}
{
  "type": "dialog",
  "format": "authoring-v1",
  "presets": {
    "dialog": "gift_personalization_hero_v1",
    "connector": "gift_personalization_internal_v1",
    "routing": "gift_personalization_branching_v1"
  },
  "content": {
    "logoLink": "/",
    "fields": [
      { "preset": "hidden_subscriber_id_v1" },
      { "preset": "hidden_campaign_id_v1" },
      { "preset": "hidden_first_name_v1" },
      { "preset": "hidden_last_name_v1" },
      { "preset": "full_name_prefilled_heading_v1" },
      {
        "name": "gift_signals",
        "type": "multiselect",
        "label": "Gift styles",
        "required": true,
        "minSelect": 1,
        "maxSelect": 3,
        "defaultValue": "experiences,practical_upgrades,sentimental_keepsakes",
        "showSelectionOrderBadges": true,
        "options": [
          { "label": "Experiences", "value": "experiences" },
          { "label": "Practical upgrades", "value": "practical_upgrades" },
          { "label": "Sentimental keepsakes", "value": "sentimental_keepsakes" },
          { "label": "Last-minute wins", "value": "last_minute_wins" },
          { "label": "Luxury moments", "value": "luxury_moments" },
          { "label": "Everyday essentials", "value": "everyday_essentials" }
        ]
      }
    ]
  }
}
Rendered dialog

Microsites are projects. Dialogs are records.

Every CRM campaign that needs a web touchpoint becomes a project: a repo, a build pipeline, a deploy, a domain, stakeholder reviews. WebDialog eliminates that friction. A dialog is a JSON record — no code, no deploys, no web team bottleneck.

The old way
Build a microsite
Every campaign is a mini web project.
  • New repo for each campaign
  • Dev team dependency
  • Build and deploy pipeline
  • Domain setup and SSL
  • Weeks of lead time
With WebDialog
Write a config
Every campaign is a JSON record.
  • One shared engine
  • No code required
  • Instant deploy via API
  • Hosted on your domain
  • Live in minutes

How it works

Three steps from campaign brief to live dialog.

1

Define your dialog

Write a JSON config that describes your dialog: form fields, copy, submission endpoint, CRM parameters. No design or development needed.

2

Choose a delivery mode

Standalone hosted page, overlay modal on your existing site, or embedded inline. Same dialog, three ways to reach your audience.

3

Connect to your CRM

Form submissions go directly to your CRM endpoint. URL parameters and server-resolved API variables carry responder context while runtime credentials stay server-side.

Three ways to deliver

The same dialog renders identically across all modes. Only the shell changes.

Standalone

A clean, hosted page with zero integration. Drop the URL into any CRM email, SMS, or push notification.

Zero integration Try standalone →

Overlay

A lightweight loader script opens the dialog as a modal overlay on your existing site. One script tag, that's it.

One script tag Try overlay →

Embed

Render the dialog inline within your page. Auto-resizes to fit its content. No iframe scroll or fixed height.

Inline rendering See embed below →

Live embed preview

Built for CRM teams

Everything you need to run dialog-based campaigns at scale.

Edge-hosted

Dialogs load from the nearest Cloudflare edge node. Sub-100ms TTFB globally.

Style isolation

Shadow DOM encapsulation means your dialog styles never leak into — or get affected by — the host page.

Themeable

Override any design token via CSS custom properties or config. Match your client's brand in seconds.

Platform-agnostic

Plain HTTPS URLs with query parameters. Every CRM can construct them with personalization tokens.

Validation built-in

Required fields, email format, regex patterns, consent checkboxes. All configured, never coded.

Trust boundary controls

Role-scoped control plane access, Authenticated control-plane writes, destination allowlists for proxy traffic, and Origin-verified postMessage handling by default.

Authenticated forms mode

Enable per-dialog token-gated access for protected flows; unauthorized requests are blocked before render while public campaign dialogs remain open.

Environment publish flow

Draft, staging, and production snapshots plus Versioned publish and rollback keep runtime behavior predictable through every release.

Integration policy controls

Policy-driven destination limits plus Delivery logs and replay workflows let each workspace scale fan-out safely without hardcoded provider caps.

Server-side API variables

Resolve API variables with timeout + fallback policy and credentialRef-backed auth, then apply them to routing and payload context.

Dynamic picklists and question groups

Picklist options can hydrate from runtime API variables, and grouped field sections keep multi-step style forms readable across mobile breakpoints.

Rich signal capture (not just lead forms)

Use ranking + multiselect inputs alongside email identity, consent, and hidden campaign context to collect routing-grade responder signals in one pass.

CRM/email flow continuity

Carry subscriber and campaign parameters from message links, merge server-side API variables, and route follow-up paths without rebuilding or cloning forms per campaign.

Schema guardrails

Dialog config writes are schema-validated and return path-level validation issues before state is persisted. Publish actions now run provider preflight checks for live-mode destinations.

Delivery observability

Track attempts, latency, status, and error class per destination with summary counters and threshold alert signals.

Queue-backed delivery + DLQ

At-least-once queue delivery with retry backoff, idempotency markers, and DLQ requeue workflows for safe operations.

Signed webhook dispatch

HMAC SHA-256 signatures with server-side credentialRef secret resolution keep webhook signing out of client-readable config.

Per-destination timeout policy

Configure deliveryPolicy.timeoutMs for test-send, synchronous dispatch, and queue-consumer execution.

Returning responder resume

Identity strategies support query, token, cookie, and uuid with resumable savepoint restore behavior.

Field classification map

pii, sensitive, and non_sensitive labels flow as classificationMap for downstream payload-policy enforcement.

Segment, Rudderstack, and Amplitude adapters

Track events with configurable event names plus identity mode options: responder_id, anonymous_id, or email. Privacy toggles include hideIp and hidePageContext.

Zapier relay recipes

Webhook-native Zapier destinations now support preview and live test-send, with built-in catch hook/catch raw templates and host allowlist guidance.

GTM/GA4 dataLayer bridge

Loader hooks can emit canonical flow_loaded, flow_savepoint, flow_abandoned, and flow_finalized events into dataLayer with optional payload forwarding.

FullStory replay correlation

Optional FullStory bridge tags sessions with responder UUID metadata, applies PII guardrails, and can be gated by environment allowlists.

Warehouse live + prototype modes

BigQuery now supports live insertAll transport with credentialRef secrets, while Postgres/Redshift support credentialRef + gatewayEndpoint delivery. All three keep schema-versioned prototype envelopes and compatibilityReport templates for safe rollout.

Stripe checkout transport

Stripe now supports credentialRef-backed Checkout Session requests with amount-field mapping and payment_status routing hooks, plus prototype checkout_session_preview envelopes for dry-run workflows.

CRM upsert transport

HubSpot and Salesforce now support credentialRef-backed upsert transport with fieldMappings, externalIdField resolution, and knownProperties/knownFields mapping checks.

S3/GCS signer transport

Storage flows now support credentialRef-backed signer requests (signerEndpoint) for live presign orchestration, with prototype presign_upload plans still available for dry-run and payload-shape validation, plus CORS and upload policy validation helper endpoints for setup checks.

Consent & compliance

Optional consent checkboxes, TrustedForm/Jornaya system-variable capture, and USPS-style pre-submit address validation keep compliance metadata and validation feedback in payload and routing context.

Stop building microsites.
Start delivering dialogs.

WebDialog is in early access. Get in touch to see how it fits your CRM workflow.