Skip to content
Sendora Cloud
Create account
Engage

In-App Messages

Modal + banner + tooltip surfaces rendered in-app from a server-side rule engine. Trigger on event + segment + screen.

Features

  • **4 message types** — `banner` / `modal` / `slideout` / `tooltip`. Content fields: title (optional), body, ctaText, ctaUrl, imageUrl, dismissible.
  • **Trigger config** — fire by event type, audience membership, URL match, or fixed delay (0-300s). Mix as needed.
  • **Audience targeting** — pick a Customers audience; real-time membership.
  • **Appearance** — position (top / bottom / center), theme (light / dark / auto), optional background + text colour overrides.
  • **Schedule window** — `startsAt` + `endsAt` for time-boxed campaigns. Inactive flag for soft-pause.
  • **Priority** — 0-100; higher wins when multiple messages match the same render slot.
  • **Impression tracking** — every render writes to `in_app_message_impressions`. Stats endpoint returns total / active / impressions.
  • **SDK helpers** — Web `sendora.messages.*`; RN 0.18.6+ ships `messages.fetchActive()` + `recordImpression()`. Mobile + web parity.
  • **Ship without app-store re-submit** — content + targeting + appearance all server-side.

Common use cases

  • Audience-targeted modals ("active 14d + free plan → upgrade prompt") without writing custom rendering logic.
  • Empty-state nudges + onboarding tooltips driven by Analytics-built audiences.
  • Time-boxed announcements (launch banner, scheduled maintenance notice) via `startsAt` / `endsAt`.

In-app messaging

Fetch in-app messages

FREE

Returns active messages targeted to the current user. Targeting evaluated server-side against the user's profile + audience memberships.

const { messages } = await sendora.inApp.fetch();
messages.forEach(m => console.log(m.title, m.body, m.cta));

Track impression / click

FREE

Fires `in_app.impression` and `in_app.clicked` events into the analytics stream. Used for conversion + frequency-cap evaluation.

await sendora.inApp.trackImpression(messageId);
await sendora.inApp.trackClick(messageId);

Author a message (dashboard)

STARTER+

Visual editor in the dashboard: title, body, optional CTA url, audience targeting, schedule + frequency cap. No SDK call — created server-side.

# Author in dashboard → In-app messaging → New message.
# Or POST https://api.sendoracloud.com/api/v1/orgs/<ORG_UUID>/in-app-messages with the same payload.

Related