Publish to a channel
From published agent to customer chatting: the widget on your site (a script), messaging channels (WhatsApp, Telegram, Instagram) and your own application via API.
Updated on Sep 02, 2026
Creating and publishing the agent is half the battle — the other half is putting it where the customer is. There are four entry points, and they all lead to the same agent, with conversations appearing in Threads and metrics in Analytics:
| Channel | For whom | Effort |
|---|---|---|
| **Widget on your site** | Visitors to your site — support, sales, customer service. | Paste a <script>. No backend needed. |
| **Messaging** (WhatsApp, Telegram, Instagram) | Customers who already chat via messaging. | Connect the provider credentials in Integrations. |
| **Your application (API)** | Your own product, logged-in area, automations. | [POST /v1/agents/{id}/run](/en/api/agents/run) with your API key. |
| **Another agent (A2A)** | Interoperate with external agent systems. | [A2A Protocol](/en/api/agents/a2a), standard JSON-RPC. |
On the platform, open the agent → Integrations → create an embed. It gets a public identifier (emb_...) and the ready-to-use snippet:
<script src="https://agents.hinow.ai/embed.js" data-embed="emb_SEU_ID" defer></script>
<!-- opcional: abrir por um botão seu -->
<button onclick="HinowAgent.open()">Falar com o assistente</button>That's it — the loader creates the floating button (if you ask), the chat window, response streaming, file uploads, and rich components (forms, buttons) when the agent uses them.
| Attribute | Effect |
|---|---|
data-mode | float (overlay window, default) or push (pushes your site content to the side). |
data-width | Panel width on desktop, in px (default 440). |
data-launcher / data-icon / data-label / data-color | Floating button: presence, icon (image URL), text, and color — text contrast is calculated automatically. |
data-z-index-button / data-z-index-window | To fight your site's z-index when needed. |
The variables from the Start card — who the user is, what plan they have, what session — come in through three paths:
<!-- estática: qualquer data-var-* vira variável -->
<script src="https://agents.hinow.ai/embed.js" data-embed="emb_SEU_ID"
data-var-plano="pro" defer></script>
<script>
// dinâmica: depois do login do usuário
HinowAgent.setVariables({ customer_id: usuario.id });
// ou na abertura
HinowAgent.open({ variables: { customer_id: usuario.id } });
</script>This is how identity arrives without a password
Your site already knows who is logged in — send the opaque identifier as a variable and the agent queries your API for it. The full picture (and why a password is never asked in the conversation) is in Credentials and identity.
| Layer | How it works |
|---|---|
| Allowed domains | Each embed declares the site's domains (allowed_domains); outside them, the widget won't open — reinforced by CSP frame-ancestors on /widget itself. |
| Short session | The widget exchanges the emb_... for a short-lived session token; the owner's API key **never** reaches the browser. |
| Separate conversations | Public channel threads live in their own table, identified by visitor — and appear normally in the agent's **Threads** and **Statistics**. |
| Attachments | Widget uploads go to storage with a 10 MB limit. |
In Settings → Integrations → Messaging, connect the provider with its credentials and associate the agent. Received messages become agent turns; responses go back through the same channel — including media.
| Channel | What you need | Capabilities |
|---|---|---|
| **WhatsApp Business** | Access Token + Phone Number ID (Meta's WhatsApp Business API). | Send, receive, media and templates. |
| **Telegram** | Bot Token (create with @BotFather). | Send, receive and media. |
| **Instagram** | Access Token + Instagram Business ID (Meta's Messaging API). | Send, receive and media. |
Identifying who writes
On an open channel no one has logged in: the identifier is the channel's (phone number, chat id). To securely recognize customers, use the one-time code linking pattern — the ready-to-import flow.
The most direct channel: your application calls POST /v1/agents/{id}/run with the API key, streaming via SSE, thread_id to continue the conversation and variables to identify the user. It's the path of all ready-made flows — and what the examples in this documentation use.
The complete path
Build in the builder, test in the sandbox, publish and choose the channel.

