Notifications

View as Markdown

A Call to Action, a guardrail and an Automation all act inside the conversation, on the visitor. A notification works outside it, reaching you instead. Something happens on the Agent, and you find out about it in Slack, your inbox, or a URL of your own.

You might want to be notified when:

  • A visitor flagged an answer. You want to read it today rather than find it in the chat logs next week. Response Flag puts the prompt and the reply the Agent gave straight in front of you.
  • A guardrail is firing more often than you expected. You want to judge whether the rule is too tight or the traffic has changed. Guardrail Trigger tells you which guardrail caught what.
  • Someone accepted a handoff. That usually means a person is now waiting on a person. Send Call to Action Click to the Slack channel your team actually watches rather than to an inbox nobody checks on the weekend.
  • Another system needs to know. A webhook posts the whole event as JSON, so your own tooling can file it, count it or page someone without anybody reading a message first.

Nothing a notification does is visible to the visitor. It cannot change an answer, pause a conversation or set a flag. It only reports.

When you set up a notification you choose three things: the event that starts it, where it goes and what it says when it gets there, and who it fires for.

Purpose

Turn on Notifications, pick an event to watch, choose how it reaches you, and narrow it to the visitors and triggers you care about.

Prerequisites

  • An Agent visitors can reach. See Standalone Web UI.
  • Notifications on your team’s plan. The capability is otherwise disabled with an Upgrade to Unlock link beside it.
  • Somewhere for it to go. A URL that accepts a POST for a webhook, a Slack incoming webhook URL, or one or more email addresses.
  • Permission to edit Agents for your team.
  • To narrow a notification to particular triggers, those triggers have to exist first. See Calls to Action, Custom Guardrails and Automations.

Turn On Notifications

Select Agents in the left-hand navigation, open your Agent, then choose General and select the Capabilities tab.

Under Orchestration, turn on Notifications and select Save Changes. The page reloads, and a Notifications panel joins the row of panels at the foot of General.

The Orchestration group on the Capabilities tab of the Seeker Agent's General page in Console, with Notifications turned on and every other capability in the group turned off.

Turning the capability back off stops delivery immediately, and leaves every notification you have written in place. It is the fastest way to silence an Agent without unpicking anything.

Create a Notification

On the Notifications panel, select Add Notification. The form opens in a dialog with its settings split across tabs, and you can move between them before saving.

On Summary, give it a Name and choose the Event that starts it. The name is yours alone, so name it for what you want to hear about rather than for the event it uses. The name also becomes the subject line of the Slack message or email you receive, so make sure it reads well on its own.

The Add Notification dialog in Console on its Summary tab, with the Name filled in as Guardrail alerts, the Active toggle on, and the Event set to Guardrail Trigger.

Save with Add Notification at the foot of the dialog, or with Add and Add Another when you have several to write in one sitting.

Active is off when the form opens. A notification saved without turning it on is stored, listed, and never delivered, so turn it on before you save.

Choose the Event

The Event list is grouped by what part of the Agent the event comes from. One notification watches one event, so watching two things means two notifications.

GroupEvents
Prompt LifecyclePrompt Submit, Response Start, Response Complete
Response EngagementResponse Like, Response Flag, Response Feedback, Source Referral Click
Message EvaluatorsCall to Action Trigger, Call to Action Click, Guardrail Trigger, Automation Trigger, Automations End
Agent EngagementAttribution Click, Footer Click
Reach & UsageNew User, New Device, New Session, New Conversation

What each one means:

EventFires when
Prompt SubmitA visitor sends a prompt, before the Agent has answered
Response StartThe Agent begins its answer
Response CompleteThe Agent finishes its answer
Response LikeA visitor likes an answer
Response FlagA visitor flags an answer as a problem
Response FeedbackA visitor leaves written feedback on an answer
Source Referral ClickA visitor selects a Source link in an answer
Call to Action TriggerA Call to Action is shown to a visitor
Call to Action ClickA visitor selects a Call to Action
Guardrail TriggerA guardrail catches a prompt or an answer
Automation TriggerOne Automation matches a prompt and acts on it
Automations EndThe whole automation pass finishes for one prompt
Attribution ClickA visitor selects the attribution link
Footer ClickA visitor selects a footer link
New UserThe Agent sees a user identifier for the first time
New DeviceThe Agent sees a device for the first time
New SessionA visitor starts a session
New ConversationA visitor starts a conversation

The two automation events answer different questions. Automation Trigger fires once for each Automation that matches, and names it, so two matches on one prompt send two notifications and a prompt nothing matched sends none. Automations End fires exactly once per prompt, after every Automation has had its turn, whether any of them matched or not, and names none of them. Watch the first to hear which Automation acted, the second to hear that the pass is over.

Choose How It Reaches You

On Channel, pick one of three destinations. What you fill in afterwards depends on which you pick.

ChannelWhat you provideWhat arrives
WebhookA URL, and optionally a secretThe event as JSON, posted to your URL
SlackA Slack incoming webhook URLA message in the channel, with the JSON attached
EmailOne or more addressesAn email per event
The Channel tab of the Add Notification dialog in Console, with the Webhook card selected and the Webhook Request URL, Webhook Secret and Sign Webhook Request fields shown below it.

Webhook and Slack both post to a URL and both must be https. The difference is the shape of what arrives: a webhook receives the raw event, while Slack receives a readable message with the raw event attached beneath it.

Choosing Email replaces those fields with a list of recipients. You can add one or more email addresses and each recipient gets their own copy.

The Channel tab of the Add Notification dialog in Console, with the Email card selected, one recipient filled in under Email Addresses, and a Custom Message tab in the strip above.

The channel determines which tabs appear, not just which fields show. Email and Slack include a Custom Message tab since you can write text, while Webhook skips it because it always sends the raw event data.

Sign the Webhook

A webhook URL is a public address, so anything that finds it can post to it. Webhook Secret is how your endpoint tells your Agent’s calls apart from everyone else’s.

Enter a secret and it is sent with every request, in an X-Webhook-Secret header, for your endpoint to compare against its own copy.

Sign Webhook Request is the stronger version and stays unavailable until a secret is entered. Turn it on and the secret is never sent. Each request is instead signed with it, and two headers arrive in its place:

HeaderValue
X-Webhook-TimestampWhen the request was signed, in seconds
X-Webhook-Signaturesha256= followed by an HMAC-SHA256 of the timestamp, a full stop, and the exact body

Your endpoint recomputes that signature with its copy of the secret and rejects anything that does not match. Because the timestamp is part of what was signed, you can also reject a request that is too old to be genuine.

Sign the exact bytes you received, rather than the result of parsing the body and serializing it again. Reformatting the JSON changes the signature.

Narrow Who It Fires For

By default a notification fires every time its event happens, for everyone. Advanced Targeting narrows it. Every filter left empty means “all”, and filters combine, so a notification with two filled in fires only when both match.

FilterApplies toNarrows to
Calls to ActionThe two Call to Action eventsParticular Calls to Action
GuardrailsGuardrail TriggerParticular guardrails
AutomationsAutomation TriggerParticular Automations
User IDsEvery eventParticular users your integration identified
Device IDsEvery eventParticular devices
The Advanced Targeting tab of the Add Notification dialog in Console, with the Guardrails picker open listing this Agent's two guardrails, Keep It Civil and Kind Answers, beside the User IDs and Device IDs fields.

Calls to Action, Guardrails and Automations appear only on the events they apply to, and never more than one at a time, so a notification on Prompt Submit shows none of the three. Each lists what this Agent already has. The two guardrails in the picture, Keep It Civil and Kind Answers, are the ones built in Custom Guardrails, and yours will be your own. Choose Automation Trigger as the event and the same place lists your Automations instead.

User IDs and Device IDs are offered on every event, and they search what your Agent has actually seen, so an identifier that has never reached the Agent is not in the list.

Automations End cannot be narrowed to particular Automations. It reports the whole pass rather than any one rule, so there is nothing to name. Narrow Automation Trigger instead when you only want to hear about certain Automations.

Write a Custom Message

Custom Message decides what a Slack message or an email says, so the tab is there only when one of those two is your channel.

Leave it empty and you get a readable summary of everything in the event, laid out as a list with a heading per section. That is a sound default and worth trying before writing anything.

Fill it in and you get exactly what you wrote, with merge tags replaced by their values.

The Custom Message tab of the Add Notification dialog in Console, with a three-line message written in the field using the agent name, completion prompt and completion id merge tags.

This field has no merge-tag picker. Type tags by hand, braces included, exactly as they appear in Merge Tags below. Console prints its own long reference beneath the field, listing every tag the chosen event accepts, so you can write without leaving the dialog.

Merge Tags

A merge tag is a name in single braces that is replaced with a real value when the message is sent. A tag whose value is not available resolves to an empty string rather than staying on screen, so write around a tag rather than depending on it.

These tags belong to notification messages only. The tags used in Agent replies are different and are not interchangeable with these. See Message Merge Tags.

Always Available

TagResolves to
{notification.id}This notification’s id
{notification.name}This notification’s name
{event.key}The event’s machine name, such as prompt_submit
{event.label}The event’s readable name
{event.occurred_at}When the event happened
{agent.id}The Agent’s id
{agent.name}The Agent’s name

The Conversation

Available whenever the event belongs to a prompt, which is every event except Attribution Click and Footer Click.

TagResolves to
{completion.prompt}What the visitor asked
{completion.response}What the Agent answered
{completion.id}The prompt’s id, which is what identifies it in your chat logs
{completion.language}The language the exchange was in
{completion.translated_prompt}, {completion.translated_response}The translated forms, when translation applies
{completion.reasoning}The Agent’s reasoning, when it produced any
{completion.feedback}, {completion.notes}Written feedback and notes on the answer
{completion.liked}, {completion.flagged}, {completion.favorited}What the visitor did with the answer
{completion.cached}Whether the answer came from cache
{completion.has_persisted_sources}Whether the answer’s Sources were kept
{completion.client}Which client the prompt came from
{completion.user_id}, {completion.device_id}Who and what it came from
{completion.session_id}, {completion.conversation_id}Which session and conversation it belongs to
{completion.bible_id}The translation in use, where that applies
{completion.agent_token_id}The API key used, when it arrived through the API
{completion.prompted_at}When the prompt was sent
{completion.response_started_at}, {completion.response_completed_at}When the answer began and ended
{completion.response_duration}How long the answer took, in seconds

{channel.id}, {channel.name}, {platform.id} and {platform.name} are also available, but only when the conversation arrived through a channel. They resolve to nothing for traffic that came in any other way, including the web. The reference panel in Console lists them among the always-available tags, which is misleading.

Calls to Action

Added for Call to Action Trigger and Call to Action Click.

TagResolves to
{cta.id}The Call to Action’s id
{cta.name}Its name
{cta.content}The content shown to the visitor

Guardrails

Added for Guardrail Trigger.

TagResolves to
{guardrail.id}The guardrail’s id
{guardrail.name}Its name
{guardrail.type}Whether it checks the prompt or the answer
{guardrail.action}What it did
{guardrail.action_message}The Message to Display the visitor was shown
{guardrail.warning_message}The Warning Message to Display a warned visitor was shown
{guardrail.redirect_url}Where it sent the visitor, when it redirects

Automations

Added for Automation Trigger, and not for Automations End, which names no Automation.

TagResolves to
{automation.id}The Automation’s id
{automation.name}Its name

Evaluators

Added for Call to Action Trigger, Call to Action Click, Guardrail Trigger and Automation Trigger. Each of those events is a decision about what the visitor wrote, and an Evaluator is what usually made it.

TagResolves to
{evaluator.id}, {evaluator.name}Which Evaluator judged it
{evaluation.content}The text that was judged
{evaluation.score}The score it gave
{evaluation.passed}Whether it passed
{evaluation.reasoning}Why it decided that
{evaluation.started_at}, {evaluation.completed_at}When it ran
{evaluation.duration}How long it took, in seconds

On Automation Trigger these depend on how the Automation was built. One with an Evaluator resolves both sets. One built on Tags instead judges the prompt without an Evaluator, so the {evaluation.*} tags resolve and {evaluator.id} and {evaluator.name} come out empty. See Automations.

The Webhook Payload

A webhook receives the whole event as JSON. Slack and email are built from the same object, which is why the merge tags above read like paths into it.

{
"notification": { "id": 2, "name": "Flagged answers" },
"event": {
"key": "response_flag",
"label": "Response Flag",
"occurred_at": "2026-09-09T14:02:11.482Z"
},
"agent": { "id": 2, "name": "Seeker" },
"trace": {
"trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"span_id": "00f067aa0ba902b7"
},
"completion": {
"id": "8f2c…",
"prompt": "What does the term parable mean in the Bible?",
"response": "A parable is a short story…",
"response_duration": 3.114
}
}

Which blocks are present depends on the event.

BlockPresent when
notification, event, agentAlways
traceThe event ran inside an instrumented API request
completionThe event belongs to a prompt
channel, platformThe conversation arrived through a channel
ctaA Call to Action event
guardrailGuardrail Trigger
automationAutomation Trigger
evaluator, evaluationA Call to Action, guardrail or Automation event that ran an evaluation

A block that is absent is left out rather than sent as null, so read defensively and do not assume a key exists.

The completion block can also carry automations and tags, listing what ran against that prompt and which tags were applied. They are not offered as merge tags, so treat them as available to a webhook receiver only. The trace block is the same: use trace.trace_id to join the event to the Agent API call. See Tracing.

Nothing is retried. A delivery that returns anything other than success is logged and dropped, and one failing notification never affects the others on the same event. If your endpoint has to be reliable, make it accept the request quickly and do its real work afterwards.

Manage Your Notifications

Everything you have written for this Agent is listed on the Notifications panel, which is where you will spend most of your time once the first one is working.

The Notifications panel on the Seeker Agent in Console, listing Flagged answers on Response Flag by email and Guardrail alerts on Guardrail Trigger by webhook, both marked Active, each with Edit and Archive actions.

Four columns, showing the name, whether it is active, the event it watches and how it is delivered. The list opens filtered to active notifications, which is why a Status: Active chip sits above it; clear that chip to see everything.

To stop one notification without losing it, Edit it and turn Active off. To stop all of them at once, turn the Notifications capability off on the Agent. Archive puts one away and keeps the record, and the Archived filter is how you find it again.

What Each Setting Does

SettingTabWhat it decides
NameSummaryWhat it is listed under, and what a Slack message or email is titled with
ActiveSummaryWhether it is delivered at all. Off when the form opens
EventSummaryWhat starts it
ChannelChannelWhether it arrives as a webhook, a Slack message or an email
Webhook Request URLChannelWhere it is posted
Webhook SecretChannelWhat your endpoint checks it against
Sign Webhook RequestChannelWhether the secret is sent, or used to sign instead
Email AddressesChannelWho receives it
Calls to Action, Guardrails, AutomationsAdvanced TargetingWhich triggers it fires for
User IDs, Device IDsAdvanced TargetingWhich visitors it fires for
Custom MessageCustom MessageWhat a Slack message or email says

Troubleshooting

  • There is no Notifications panel on the Agent. The capability is off, or your plan does not include it. A plan without it shows the toggle disabled with Upgrade to Unlock beside it.
  • Nothing is being delivered. Check Active first. It is off when the form opens and is the most common cause.
  • Still nothing, and Active is on. Confirm the Notifications capability is still on for that Agent. It is checked again at the moment of delivery, so turning it off silences everything.
  • Still nothing, and both are on. Check Advanced Targeting. A filter naming a Call to Action, guardrail, Automation, user or device that was not involved stops the notification.
  • The webhook never arrives and nothing is reported. Failures are not retried and not surfaced in Console. Check your endpoint’s own logs for the request.
  • The webhook arrives but your signature check fails. Sign the exact bytes received, not a reserialized copy, and remember the signed value is the timestamp, a full stop, then the body.
  • Sign Webhook Request cannot be turned on. It stays unavailable until a Webhook Secret is entered.
  • A merge tag came out empty. Its value was not available for that event. Tags for the Call to Action, guardrail, Automation and Evaluator blocks only resolve on the events that carry them.
  • {evaluator.name} is empty on an Automation Trigger. That Automation sorts prompts with its own Tags rather than an Evaluator, so there is no Evaluator to name. The {evaluation.*} tags still resolve.
  • {guardrail.content} or {guardrail.warning} came out empty. Those two names were retired. The guardrail’s text is on {guardrail.action_message} and {guardrail.warning_message}, which is what Console now lists beside the field.
  • {channel.name} is always empty. That conversation did not arrive through a channel. These tags are listed as always available in Console, but they are not.
  • The event label in a message reads differently from the picker. Automations End is titled Automations Complete in the delivered message. The event is the same one.
  • Emails are not arriving but webhooks are. Email is sent through a mail service configured on the Agent deployment rather than anywhere in Console, so there is nothing here for you to switch on and no error is raised when it is missing. Check the addresses on the Channel tab for a typo first, then ask whoever runs your deployment to confirm the mail service is configured. Webhooks and Slack do not depend on it.
  • No Custom Message tab. The channel is set to Webhook, which always receives the raw event. Switch to Slack or Email to write a message.
  • The dialog opened on the wrong tab. It reopens on whichever tab you used last, so a new notification can start on Channel rather than Summary. Select Summary and carry on.
  • An archived notification still reads ACTIVE. The status column only reports the Active toggle, which archiving does not change. Archived notifications are not delivered whatever the badge says.
  • A notification you archived is no longer in the list. The list opens filtered to active records. Clear the Status: Active chip, then use Restore on the row.

Next Step

Continue to Chat Logs to look up the conversations a notification reports, or to Agent Sync to copy a configured Agent elsewhere.