{% extends "layouts/workspace_settings.html" %} {% block title %}Webhook secret · DemandTrail Messaging{% endblock %} {% block page_header %}

{% if created %}{{ connection.display_name }} is connected{% else %}New webhook secret{% endif %}

{% endblock %} {% block content %} {% comment %} The one and only render of this value. It is not in the session, not in a message, and not fetchable again — losing it means rotating, which is the trade the encrypted column exists to make (SECURITY-BASELINE §5). See the docstring on apps/channels/views.py for why this page is not a redirect. {% endcomment %}

Copy this secret now. It is not shown again.

{{ secret }}

Where it goes

{% comment %} Three different answers, because the operator's next step differs. A platform that holds its own secret over an API (Telegram's setWebhook) has already been told; one that does not needs the value pasted into its console; and a push that failed leaves the channel down until it is rotated again. {% endcomment %} {% if pushed %}

{{ label }} has already been given this secret, and is delivering to:
{{ webhook_url }}

There is nothing else to do. The copy above is for your records.

{% elif pushed is False %}

{{ label }} could not be given the new secret. This channel will reject every delivery until it is.

Rotate again to retry. If it keeps failing, disconnect and reconnect the channel.

{% else %}

Configure the platform to deliver events to:
{{ webhook_url }}

{% endif %}

Deliveries that do not carry a valid signature for this secret are rejected, and a source that keeps failing is temporarily blocked.

{% if not adapter_ready %}

The {{ label }} adapter ships with {{ connect_flow_issue }}. Until then this channel holds its configuration but does not send or receive.

{% endif %}

Done

{% endblock %}