DEV Community

Cover image for Inspect an unsent notification payload before connecting Slack or Teams
Tim Zinin
Tim Zinin

Posted on

Inspect an unsent notification payload before connecting Slack or Teams

Notification code combines two decisions that are easier to review separately: what a message should contain and whether it should be sent. Start with the content. A preview can expose missing attribution, excessive length, and confusing formatting before credentials or recipients enter the workflow. The useful artifact is an explicit unsent payload plus the information a sender will need to inspect.

I maintain the us-brand-signal-webhook-payload-builder Actor. This walkthrough describes its published build 0.2.2, inspected on 16 October 2026. The example below is synthetic and reviewed against that contract; it was not executed for this article. AI-assisted drafting was followed by a separate factual and editorial review.

The Payload Builder accepts one supplied normalized signal, 1–3 evidence references, a target shape, and seven explicit presentation settings. Targets are slack, teams, or generic; styles are compact or standard. There is no endpoint field. The synthetic example includes only the headline in the content and uses the minimum permitted content limit of 120 Unicode code points.

{
  "schemaVersion": "1.1",
  "signal": {
    "signalId": "sig-1",
    "signalType": "other",
    "headline": "Synthetic review notice",
    "summary": "Synthetic buyer observation.",
    "severity": "low",
    "occurredAt": "2026-10-01T08:00:00Z",
    "evidence": [
      {
        "url": "https://example.com/e1",
        "title": "Synthetic reference",
        "capturedAt": "2026-10-01T08:01:00Z"
      }
    ]
  },
  "target": "generic",
  "presentation": {
    "includeHeadline": true,
    "includeSummary": false,
    "includeSeverity": false,
    "includeSource": false,
    "includeOccurredAt": false,
    "maxContentChars": 120,
    "style": "compact"
  }
}
Enter fullscreen mode Exit fullscreen mode

Inspect content and payload along with the unsent and delivery fields. The result is a preview; it does not establish delivery to Slack, Teams, or any generic webhook. A buyer-defined target name selects a representation, not an authenticated account. No destination credentials are needed to review the generated JSON.

Length handling is especially relevant before adding a sender. maxContentChars accepts integers from 120 to 1200. Truncation slices by Unicode code points and adds no ellipsis. It can cut a line or a link in the composed content. The report preserves separate full sourceAttribution, but that does not mean a downstream destination will automatically display those references. Decide explicitly how the sender and final interface should present them.

Compare truncation.originalChars, finalChars, maxChars, and applied. A short result may be valid while still needing an editorial change. The example's headline-only configuration should be read as a deliberate presentation choice, not as permission to discard evidence from an eventual notification. If the useful context does not fit, reduce the content deliberately or include a separate reviewed reference.

The closed input contract limits headline, summary, evidence title, URL shape, and overall packet size. URLs must have the supported HTTPS form and satisfy restrictions needed for the allowed formats. These are syntax checks over supplied references. They do not fetch pages, verify source rights, prove freshness, or test how the final destination renders every link.

Give the preview to the person responsible for the eventual communication. Have them inspect the exact final text, attribution, and truncation warnings. A later sender needs separate authority, destination validation, delivery handling, and actual response receipts. Keep those receipts attached to that sending step; a successful preview is not a sent message and must not be reported as one.

For reproducibility, preserve the input schema, selected target, presentation settings, and result digest. Evidence is sorted by URL, title, and capture time for canonical processing. There is no current-clock lookup or blanket normalization promise for arbitrary text. Version 1.1 adds a decision envelope, changing the report representation. The 48 KiB input/report and 60 KiB receipt limits bound this to a small preview rather than a general template engine or notification service.

On the observed FREE pricing tier, one result-found event costs $0.01 for the complete useful report or plan, rather than each input row. FREE is the tier name, not a promise of free execution. Automatic Actor-start pricing is also present at $0.005 per GB, with a minimum of one event. Check the Actor page and your account tier before running; this is not a fixed total invoice, and a failed or repeated run may still incur applicable charges.

To try this deliberately, open the Actor page, select build 0.2.2, and submit the JSON as input. Set an explicit spending ceiling appropriate to your account; for example, $0.05 is a ceiling, not a quoted run price or a guarantee of a delivered report. Save the returned run ID and verify its immutable build ID. A local timeout does not cancel the remote run: inspect that same run before considering another attempt. Read the completed run's Dataset report and its separate OUTPUT receipt together; structural output is not independent source verification.

Top comments (0)