Route support escalations in Notion
Classify inbound tickets by urgency in flight and route only the ones that need a human now — so the on-call channel sees escalations, not every ticket.
01source
02pipeline · 3 steps
- 01ENRclassifyurgency: low | high | critical
- 02CTLfilter.matchurgency = critical only
- 03MUTredact.piistrip PII from body before posting
03destinations · 1
- tonotion.dbNotiondatabaseSignups
the event
You emit support.ticket.created with this shape. The TypeScript SDK keeps the call type-safe, and the event is stored whole — so every field below is available to the pipeline by name.
- ticket_idstring
- subjectstring
- bodystringfree text
- customer_tierstringfree | pro | enterprise
- channelstringemail | chat | form
emit it
From your code with the TypeScript SDK — or any language over the REST endpoint and signed webhook ingress.
import { ingest } from "@ingestlayer/sdk";
await ingest("support.ticket.created", {
ticket_id: ticket.id,
subject: ticket.subject,
body: ticket.body,
customer_tier: ticket.account.tier,
channel: ticket.channel,
}, {
idempotencyKey: ticket.id,
});route it to Notion
Append events as rows to a Notion database, or content to a page. Connect once with OAuth, pick the target per pipeline.
- 01
connect your workspace
Authorize the ingestlayer Notion integration over OAuth from the destinations page, then choose which databases and pages it may touch. We hold only that workspace's access token, in-region, in the same KMS as your other credentials.
- 02
pick a target
Per pipeline, choose a database to append a typed row to, or a page to append content to. The picker lists exactly what you shared with the integration during authorization — nothing else.
- 03
map the columns
For a database, match event fields to Notion properties — automatically by column name, or per-column with $event.* templates. The title column falls back to the event name, so a row is never blank. For a page, the rendered body is appended as blocks.
┌─ Signups · database ───────────────────┐ │ Name ada@acme.com │ │ Plan ● pro │ │ Source marketing-site │ │ Signed up 2026-06-03 │ └─────────────────────────────────────────┘
notes
- Notion grants access page by page: the integration only sees databases and pages you explicitly share during authorization. Add the target there, or the delivery dead-letters as object_not_found.
- Each column is coerced to its Notion type — number, date, select, checkbox, URL, and so on. Properties an integration can't write (people, relations, files, formulas, rollups) are skipped rather than guessed.
- Title and rich-text values cap at 2000 characters per block and are chunked beyond that; a single page append tops out at 100 blocks.
- Tokens don't expire, but revoking the integration inside Notion flips the destination to an error state — reconnect from the destinations page to resume delivery.
questions
- What model does the classify step use?
- Yours. You bring the model, prompt, and label schema; ingestlayer runs it in flight and returns a typed label the pipeline branches on.
- Does every ticket hit the model?
- Only if you want it to. classify is per-event and cached by payload hash, so identical tickets reuse one call.
- Can the same ticket go to two places?
- Yes — fan out to several destinations with different when conditions, e.g. critical to chat and everything to Postgres.
support escalations, routed elsewhere
- Route support escalations in SlackSlack
- Route support escalations in DiscordDiscord
- Route support escalations in TelegramTelegram
- Route support escalations in EmailEmail
- Route support escalations in WebhookWebhook
- Route support escalations in PostgresPostgres
more, into Notion
- Track user signups in Notiontrack
- Monitor failed payments in Notionmonitor
- Track waitlist signups in Notiontrack
- Track new subscriptions in Notiontrack
- Track canceled subscriptions in Notiontrack
- Track successful payments in Notiontrack
- Track trial conversions in Notiontrack
- Track form submissions in Notiontrack
- Track feature usage in Notiontrack
- Track file uploads in Notiontrack
- Monitor failed logins in Notionmonitor
- Monitor usage-limit hits in Notionmonitor
- Monitor error spikes in Notionmonitor
- Monitor cron-job health in Notionmonitor
- Monitor CI/CD build status in Notionmonitor
- Flag high-value leads in Notionalert
- Catch churn-risk signals in Notionalert
- everything you can pipe to Notionhub