Skip to main content

Connect an AI Agent or Bot to Your Zoom & AStream Webinar Chat

Send your Zoom or AStream webinar chat to a webhook and let your AI agent or bot reply live, works with Zoom webinars, Zoom meetings, and AStream events.

AEvent can connect your live webinar chat to your own systems in both directions, so you can plug an AI agent, chatbot, or automation into the conversation as it happens. Incoming chat messages can be forwarded to a webhook URL you control, and your own system can post messages straight back into the live chat. This works on Zoom webinars, Zoom meetings, and AStream events.

Starter kit. If you would rather not build the plumbing from scratch, we have two downloadable starter files linked at the bottom of this article: a ready-to-import n8n workflow and a paste-ready spec you can drop into an AI agent or bot. Grab them from the "Wire it together" section below.

Part 1: Receive chat messages (chat to your bot)

This half forwards every registrant chat message to a webhook URL you host, so your AI agent, bot, or n8n workflow can read what attendees are typing in real time.

Before you start: you need a connected Webhook integration on the campaign. If you have not set one up yet, follow the Outbound Webhook article first to create one and point it at your endpoint.

Turn on chat forwarding

Open your campaign, go to the Webhook integration's settings, and switch on Send webhook on chat message. Once it shows as Active, chat messages will start firing to your webhook URL.

Webhook Settings with Send webhook on chat message set to Active

What triggers a send: every chat message typed by an attendee or registrant fires a separate HTTP POST to your webhook URL. This is live-only, so the webinar has to be in progress (before its scheduled end time). Replies posted by a host or by support are not forwarded, so your bot only ever sees inbound audience messages and never echoes of your own.

What your endpoint receives

Each message arrives as an application/json POST with the same fixed set of seven keys shown below. Your endpoint should return any 2xx status to acknowledge it.

registrantChatMessage payload example

{
"message": "Chat message sent by a registrant.",
"name": "Hawke Flynn",
"registrantID": "5lmLq5MnbITCggP_9g2VMQ",
"email": "[email protected]",
"sent_at": 1779817697,
"webinarID": "86080090632",
"id": "My17NGMzMTIxZTktZWQxNy00ZmE5LWE4YjYtNzUxYTRlMzRjY2YxfQ=="
}

A few things worth knowing about the payload:

sent_at is a UNIX timestamp in seconds, not milliseconds.

This is always the exact shape that gets sent for chat forwards. Any custom payload template you may have configured on the Webhook integration does not apply here.

id identifies the specific chat message, which you can use later to reply to that exact message (see Part 2).

Securing your endpoint

AEvent does not add a signature header to these requests, so you should secure your endpoint yourself. The simplest options are a secret embedded in the webhook URL or a custom header that carries a shared secret. See the "Custom headers (and authentication)" section of the Outbound Webhook article for how to add one.

Part 2: Send messages into the chat (your bot to chat)

This half lets your own system, agent, or workflow post a message straight into the live webinar chat using a secure token.

Step 1: Create a chat.write token

In the AEvent app, go to Settings, then Developer, and open Generate Tokens. Give the token a name, check the chat.write scope, and click Create. Copy the token straight away and store it somewhere safe, since it is what authorizes your system to post into the chat.

Settings, Developer, Generate Tokens with the chat.write scope checked

Step 2: Post a message

Send a POST request to https://app-api.aevent.com/api/messages with your token in the Authorization header as a Bearer token, and Content-Type: application/json. The request body accepts these fields:

message (string, required): the text to post into the chat.

webinarID (string, required): the webinar the message belongs to.

registrantID or email (optional): target a specific registrant.

inReplyTo (optional): a message id to reply to a specific message. If you leave it out, the reply attaches to that registrant's most recent message.

Here is a simple example using curl:

curl -X POST https://app-api.aevent.com/api/messages \
-H "Authorization: Bearer YOUR_CHAT_WRITE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"message":"Thanks for your question, someone will help shortly.","webinarID":"86080090632","email":"[email protected]"}'

Targeting: pass registrantID or email to aim a reply at one registrant, and add inReplyTo when you want to reply to one specific message rather than their latest.

What you get back: a successful post returns an empty 200. A 422 means the request failed validation, and a 401 or 403 means the token is missing, invalid, or lacks the chat.write scope.

Loop-safe: messages you post through this endpoint do not re-trigger the inbound chat webhook from Part 1, so your bot will not see its own replies come back around.

Part 3: Wire it together

Put both halves together and you have a full two-way loop between your live chat and your automation.

The complete flow looks like this:

1. An attendee sends a chat message in your live Zoom or AStream event.

2. AEvent POSTs that message to your webhook URL (Part 1).

3. Your bot or agent reads it and decides whether and how to reply.

4. Your bot calls POST https://app-api.aevent.com/api/messages with its chat.write token (Part 2).

5. The reply appears in the live chat for the attendee to see.

To skip the boilerplate, start from our two downloadable files. The n8n workflow gives you a webhook trigger, a placeholder step where you plug in your AI or agent logic, and a pre-built request back to the messages endpoint. The agent spec is a paste-ready brief you can drop into an AI agent or bot config so it knows exactly what it receives and what to send back.

Good to know

Both directions are live-only, so the webinar must be in progress (before its scheduled end time). A connected Webhook integration is required for Part 1. Host and support replies are not forwarded to your webhook. There is no signature header on the inbound webhook, so add your own secret in the URL or a custom header. The outbound messages endpoint returns an empty 200 on success. This works on Zoom webinars, Zoom meetings, and AStream events.

Slack (a done-for-you two-way chat bridge if you would rather not build your own endpoint)

OpenAI and Claude (no-code AI-reply alternatives)

Did this answer your question?