Skip to content
Gaurav TiwariDocs

Team Alerts on Telegram, Pushover, Discord, Slack or a Webhook

Updated October 30, 2026

A new ticket doesn’t help anyone while it sits unread in wp-admin. If your team only checks the help desk a few times a day, customers wait hours for a first reply that could have taken minutes. An email notification gets buried with everything else.

Core Support can email your team about each new ticket, and send a short alert to the apps your team already watches: Telegram, Pushover, Discord, Slack or any webhook. Each one names the ticket and the customer and links straight to the ticket. You set both up under Core Support → Settings → Team alerts.

Email the Team

The Team emails card comes first on the Team alerts tab. It works without any app, through the same email setup that sends replies to customers:

  • Email the team about new tickets: on by default.
  • Send ticket emails to: one address per line, up to 20. It starts with the site admin address, and left blank it goes back to that address.
  • Email the team about roadmap suggestions: off by default. Shown while the Roadmaps module is on.
  • Send suggestion emails to: the same kind of list, for suggestions.

Each address gets its own email, so teammates never see each other’s addresses. A ticket email carries the subject, the customer and a link to the ticket, plus the first message when Include a message preview is on. A suggestion email carries its title, its roadmap and a link to the board.

Team emails go out a moment after the ticket arrives, never while the customer waits. Nothing goes out in demo mode, or while Mail delivery is set to Capture only. The card warns you about the second one.

Team emails card with new ticket and roadmap suggestion emails

An email suits a small team or a solo help desk well. For a phone that buzzes the moment a ticket lands, the app alerts below are quicker.

Choose When Alerts Go Out

The Team alerts card decides which events send an alert to the apps below:

  • Alert on new tickets: on by default. Sent to every channel that is set up and switched on.
  • Alert on customer replies: off by default. Sends an alert when a customer answers on an existing ticket.
  • Include a message preview: off by default. Without it, alerts carry only the subject, the customer and a link.

Choose Save settings on that card after changing it.

I’d leave the preview off unless the channel is private to your support team. Every channel here is a third-party service, and customer messages can hold order details or personal information.

Team alerts settings in Core Support with the Telegram channel

What an Alert Contains

Every channel gets the same alert:

  • Title: “New ticket #42: (subject)” or “Customer replied on #42: (subject)”.
  • Details: “From” the customer’s name and email, plus “via” the source when the ticket came from a form, a connected site or chat.
  • Preview: with Include a message preview on, the first 280 characters of the message.
  • Link: the ticket in the agent workspace.

Set Up Each Channel

Each channel has its own card with its own Save button, so saving one never touches the others. Every card has a Send alerts to (channel) switch, on by default. Turn it off to pause the channel and keep its settings.

The badge on each card shows where the channel stands:

  • Not set up: a required setting is missing.
  • Paused: the channel is set up but switched off.
  • Ready: set up, with nothing sent yet.
  • Working: the last alert was delivered.
  • Retrying: the last alert failed and another try is scheduled.
  • Failed: the last alert didn’t arrive and no retry is left.

Once a channel is set up and switched on, Send a test alert sends “Core Support test alert” to that channel only.

Telegram

Alerts come from your own bot and can go to a private chat, a group, a topic in a group or a channel.

  1. In Telegram, message @BotFather, send /newbot and follow the steps.
  2. Paste the token into Bot token and choose Save. Core Support checks the token with Telegram and refuses one that Telegram rejects.
  3. Message your bot, or add it to a group and post there.
  4. Choose Find my chat. The card lists the chats your bot has seen.
  5. Choose Use this chat next to the right one.

The 3 Telegram settings are:

  • Bot token: the token from @BotFather, such as 123456789:AA….
  • Chat ID: filled in by Use this chat, or typed in as a number such as -1001234567890 or a public @channelname.
  • Topic ID: optional. For a group with topics, the topic that gets the alerts.

If Find my chat shows “Your bot has no chats yet”, message the bot again and retry. Telegram keeps those messages for 24 hours. A bot that already sends its updates to a webhook somewhere else can’t list chats, so type the chat ID yourself.

Telegram alerts show the title in bold and the ticket link as an Open ticket button when your site uses HTTPS. Link previews are off. If a group is upgraded and its ID changes, the card tells you the new chat ID to enter.

Pushover

Pushover sends push notifications to iPhone, Android and desktop.

  • Pushover user key: your user or group key from pushover.net.
  • Pushover API token: create an application at pushover.net/apps and paste its API token.

Each notification has an Open ticket link.

Discord

  • Discord webhook URL: in the Discord channel, go to Channel settings → Integrations → Webhooks → New Webhook → Copy Webhook URL.

Mentions are turned off in every alert, so customer text can’t ping @everyone or a role.

Slack

  • Slack webhook URL: an incoming webhook URL that starts with https://hooks.slack.com/.

Webhooks

The Webhooks card sends each alert as JSON to FlowMattic, Zapier, Make, n8n or your own endpoint. It takes up to 10 webhooks, and each one gets every alert.

  • Webhook URL: any https:// address. It receives a JSON POST for each alert.
  • Webhook signing secret: optional. With a secret, every request is signed.

Choose Add a webhook for another row, with a Label, a Webhook URL and its own Signing secret. A saved row keeps its address and secret while those fields are blank, and Remove this webhook drops it. Each webhook has its own retries, and the card names the one that failed.

Webhook Payload and Signature

Each request is a POST with these headers:

  • Content-Type: application/json
  • X-Core-Support-Event: the event name
  • X-Core-Support-Signature: sha256=<hex>: only when a signing secret is saved

The body has 5 top-level fields:

  • event: ticket_created or customer_replied. A test alert sends test.
  • title: the alert title, such as “New ticket #42: Can’t activate my license”.
  • url: the ticket’s link in wp-admin.
  • ticket: the ticket details, listed below.
  • sent_at: when the alert was sent, in ISO 8601 UTC.

The ticket object has 9 fields:

  • id: the ticket number.
  • subject
  • status: such as open.
  • priority: normal, high or urgent.
  • source: the source label, such as a form or connected site name, or email when there’s no other source.
  • customer_name
  • customer_email
  • created_at: when the ticket was created, in UTC, as YYYY-MM-DD HH:MM:SS.
  • message: the message text, or an empty string when Include a message preview is off.

A new ticket alert looks like this:

{
  "event": "ticket_created",
  "title": "New ticket #42: Can't activate my license",
  "url": "https://example.com/wp-admin/admin.php?page=core-support&ticket=42",
  "ticket": {
    "id": 42,
    "subject": "Can't activate my license",
    "status": "open",
    "priority": "normal",
    "source": "email",
    "customer_name": "Jane Doe",
    "customer_email": "jane@example.com",
    "created_at": "2026-10-18 09:30:00",
    "message": ""
  },
  "sent_at": "2026-10-18T09:30:04+00:00"
}

The signature is an HMAC-SHA256 of the raw request body, keyed with your signing secret and written in hex. Check it against the body exactly as it arrived, before your tool parses or reformats the JSON.

$body = file_get_contents('php://input');
$expected = 'sha256=' . hash_hmac('sha256', $body, 'your-signing-secret');
$valid = hash_equals($expected, $_SERVER['HTTP_X_CORE_SUPPORT_SIGNATURE'] ?? '');

A test alert sends the same shape with event set to test, a ticket id of 0 and a source of test.

How Delivery and Retries Work

  • Alerts are sent from WP-Cron, never while a customer waits.
  • Each channel gets its own job, so one slow service never holds up the others.
  • Rate limits, server errors and timeouts are retried after 1, 5 and 30 minutes. A service that asks for a longer wait gets it, up to 1 hour.
  • Other rejections, such as a deleted webhook, aren’t retried. The card shows the problem straight away.
  • Requests time out after 8 seconds and don’t follow redirects, so use the final URL.
  • Like other safe WordPress requests, alerts refuse local and private network addresses. A self-hosted n8n needs a public HTTPS address.
  • Test alerts are sent once, with no retries.

WP-Cron runs when your site gets traffic. On a quiet site, a real server cron keeps alerts on time.

Saved tokens, keys and webhook URLs are encrypted in the database. They never appear in the problems a card reports.

Keep Alert Settings in wp-config.php

You can define any alert setting with the CORE_SUPPORT_ALERTS constant instead. Those values show read-only on the screen with “Set by CORE_SUPPORT_ALERTS in wp-config.php.” and are never saved to the database.

define('CORE_SUPPORT_ALERTS', [
    'telegram_token' => '123456789:AA…',
    'telegram_chat' => '-1001234567890',
    'telegram_topic' => '15',
    'discord_webhook' => 'https://discord.com/api/webhooks/…',
    'slack_enabled' => false,
]);

The keys are the setting names:

  • alert_new_ticket, alert_customer_reply and alert_preview
  • telegram_enabled, pushover_enabled, discord_enabled, slack_enabled and webhook_enabled
  • telegram_token, telegram_chat and telegram_topic
  • pushover_user and pushover_token
  • discord_webhook and slack_webhook
  • webhook_url and webhook_secret

On multisite, use a map of blog IDs to arrays. A value that fails validation is ignored, and the saved value stays in use. The other constants are listed in the wp-config constants reference.

Developers can add more channels with the core_support_alert_channels filter, described in the hooks and filters reference.

Alerts from Your AI Assistant

If you’d rather hear about support in a chat you already keep open, the Alerts from your AI assistant card on the Team alerts tab connects ChatGPT, Grok, Claude or another assistant to your site. On a schedule, it checks for new tickets, customer replies and feature requests and messages you only when something is new. It can also read a ticket for you, send a team alert and work the roadmap, always as the account you connect with. Core Support’s tools for assistants don’t reply to customers.

The connection runs through Site Agent, a free plugin:

  1. Choose Install Site Agent on the card, or Activate Site Agent if it’s already installed. Administrators can do this, and the plugin stays off until you turn it on.
  2. Open Tools → Site Agent, turn Site Agent on and switch on Core Support tools.
  3. Add your site to your assistant as a connector (an MCP server) with the address shown there, and sign in.
  4. Ask it to check Core Support for new activity every 15 minutes and tell you about each new ticket, reply and feature request.

An activity check includes message text only when Include a message preview is on. Reading a single ticket returns its latest messages and internal notes, as an agent would see them. Your assistant’s provider receives whatever it reads, so connect only an account and a service you’d trust with that.

Each assistant has its own step-by-step guide: Grok Bot, ChatGPT Dots and Claude Duet.

For a step-by-step walkthrough, see How to Get New Ticket Alerts on Your Phone.

Share

Was this helpful?

Still stuck? Open a support ticket