Chat & webhook notifications
Ascent can post notifications to a shared Slack or Microsoft Teams channel, or to a generic HTTPS webhook of your own, in addition to the existing in‑app bell and email — so your team can watch activity (new tickets, replies, invoices paid, SLA alerts, and more) without leaving chat, and your own automations can react to events.
Delivery uses a webhook URL you paste into Ascent: for Slack/Teams it's the incoming‑webhook URL you create in the chat tool; for the generic webhook it's any HTTPS endpoint you control. Because a webhook posts to one shared destination (rather than to individual people), routing is configured per organization: an admin chooses which notification types post to it. The webhook URL is a secret, so Ascent stores it encrypted and never shows it again.
Connecting, testing, and disconnecting a channel requires the integrations · manage permission (Owner and Admin by default). Anyone with integrations · read can see whether a channel is connected.
Connect a channel
- Create the webhook in your chat tool.
- Slack: create an Incoming Webhook
for the channel you want to post to and copy its URL
(
https://hooks.slack.com/services/…). - Microsoft Teams: add an Incoming Webhook connector to the channel and copy its URL.
- Generic webhook: no setup in a chat tool — just have an HTTPS endpoint ready that can receive a JSON POST (a custom service, or an automation platform such as n8n, Make, or Zapier's Catch Hook).
- Slack: create an Incoming Webhook
for the channel you want to post to and copy its URL
(
- In Ascent, go to Settings → Integrations and open the Chat & Webhooks card (under the Communication section).
- Paste the webhook URL, optionally add a label (e.g.
#alerts) to remind yourself where it posts, and leave Enabled on. - Choose the notification types that should post to the channel. Use Select all / Clear all per category to move quickly. Each selected type posts once to the channel when it occurs (no matter how many people were notified in‑app).
- Click Connect (or Save changes).
Send a test message
After a channel is connected, click Send test. Ascent posts a test message to the channel and records the result. If it fails, the card shows the error (for example, an expired or revoked webhook) so you can fix it.
Update or disconnect
- Change routed types or the label: edit and click Save changes. You don't need to re‑enter the webhook URL — leave that field blank to keep the stored one.
- Replace the webhook URL: paste a new URL and save. This resets any prior error state.
- Pause delivery: turn Enabled off — nothing posts while it's off, but your settings (and the stored webhook) are kept.
- Disconnect: click Disconnect to remove the channel and its stored webhook entirely.
How delivery works
- A notification is posted to a channel only when (a) the channel is enabled and (b) the notification's type is in the channel's routed list.
- Channel delivery rides along with Ascent's existing in‑app/email delivery and is best‑effort: if a webhook post fails, the failure is recorded on the channel (visible as an Error badge with the last error) but it never blocks the action that triggered the notification.
- The message includes a deep link back to the relevant item in Ascent when one is available.
Generic webhook payload
The generic Webhook channel POSTs a small, stable JSON document (content type
application/json) for each routed notification. Slack and Teams receive their
own vendor‑specific message formats instead; this contract applies only to the
generic webhook channel.
{
"source": "ascent",
"title": "Ticket #1234 assigned to you",
"body": "Server offline",
"type": "TICKET_ASSIGNED",
"url": "https://app.yourdomain.com/tickets/abc123",
"entityType": "TICKET",
"entityId": "abc123"
}
| Field | Notes |
|---|---|
source | Always "ascent" — lets a shared endpoint identify the sender. |
title | Human‑readable headline. Always present. |
body | Optional detail line. Omitted when there is none. |
type | The notification type (e.g. TICKET_ASSIGNED, INVOICE_PAID) so you can route programmatically. |
url | Absolute deep link back into Ascent, or null when the event has no specific page. |
entityType / entityId | The related record (e.g. TICKET / its id), or null. |
The contract is additive: new optional fields may appear over time, but existing keys won't change meaning — write your receiver to ignore unknown fields.
This is a notification delivery channel — it mirrors a notification to your endpoint when its type is routed. If you instead need granular, signed, retried event subscriptions (with delivery history), see Outbound webhooks, which is a separate integration.
Security
- The webhook URL is treated as a secret: it is stored encrypted at rest with your organization's key and is never returned by the API or shown in the UI after you save it.
- The URL must be a public
http(s)endpoint. To prevent server-side request forgery (SSRF), Ascent rejects loopback, link‑local, private‑range, and cloud‑metadata addresses (and.internal/.localhostnames) when you save a channel — so a generic webhook must point at an internet‑reachable service, not something on your internal network. This is the same restriction applied to outbound webhooks. - All connect / update / test / disconnect actions are audit‑logged (without the secret).
Notes & limitations
- This is the incoming‑webhook tier: notifications post to a single shared channel, with routing chosen per organization. Per‑user direct messages (via a Slack/Teams bot) are a planned future enhancement and are not part of this tier.
- Microsoft Teams uses the classic Incoming Webhook connector (MessageCard) payload.