{% extends "layouts/workspace_settings.html" %} {% load common_extras %} {% comment %} Channels, as cards rather than as a table. Three things the redesign changed, in order of how much they matter. **Health is a sentence.** "Needs reauth" in a status column beside a separate "2 days ago" cell made a reader assemble the meaning themselves. It now reads "Needs reconnecting · nothing received for 2 days" — the two facts already joined, with a dot carrying the colour. Webhook health is genuinely two facts (a bot pointed at the wrong URL looks exactly like a bot nobody has messaged), which is why both are in the line. **A broken channel gets a banner.** It is the most consequential thing this page can say, and it used to be one word in a cell halfway down a table. **The webhook URL and the platform account id are gone from the list.** They are machine strings a person needs once, during setup, and printing them on every row made the page look like a configuration dump. They live on the connection's own page now, which is where somebody pasting one into a console is already standing. (The redesign's fifth principle: no ids in the UI.) {% endcomment %} {% block title %}Channels · DemandTrail Messaging{% endblock %} {% block content_wrap %}{% endblock %} {% block content %}
{% for row in broken %} {% endfor %}
{% for row in rows %}
{% include "partials/_platform_icon.html" with platform=row.connection.platform size="md" %} {% if row.settings_url %} {% include "partials/_nav_icon.html" with name="settings" icon_size=16 %} {% endif %}
{{ row.health.text }}
{% if not row.adapter_ready %}

Guided setup for {{ row.label }} is still on the way. The connection holds its webhook URL and secret, and starts working when the adapter ships.

{% endif %}
{% csrf_token %} {% if row.connection.status == "disabled" %} {% else %} {% endif %}
{% comment %} Disconnecting cannot be undone — the connection, its webhook secret and its link to every conversation go — so it is a red text link, at the far end of the row from Turn off, and it asks first (HANDOFF §2.4). Alpine's @submit rather than an onsubmit attribute: the CSP blocks inline handlers. {% endcomment %}
{% csrf_token %}
{% empty %}

No channels connected yet

Connect the first one and messages start arriving in your inbox.

Connect a channel
{% endfor %} {% if rows %} Add another channel WhatsApp, Messenger or email {% endif %}

Available to connect

Each one takes a few minutes and we walk you through it.

{% for platform in platforms %}
{% include "partials/_platform_icon.html" with platform=platform.value size="sm" %} {{ platform.label }} {% if platform.connect_hint %} {{ platform.connect_hint }} {% endif %} {% if platform.connect_url %} Set up {% else %} Soon {% endif %}
{% endfor %}
{% comment %} A platform's own settings pages — WhatsApp's message templates and cost estimates, today. Below the grid rather than in it: they are not channels to connect, and rendering them as cards alongside Telegram and SMS made the grid claim there were eight platforms. {% endcomment %} {% for platform in platforms %}{% if platform.extra_links %}
{{ platform.label }}: {% for link in platform.extra_links %} {{ link.label }} {% endfor %}
{% endif %}{% endfor %}
{% endblock %}