Receiving Chat Messages
Platform Support
Platform | Supported | Notes | Limitations |
|---|---|---|---|
Zoom | ✅ | Chat messages are captured and relayed to your Real-Time Endpoints from the global chat, direct messages to the bot, as well as replies to messages sent to the bot. | |
Google Meet | ✅ | ||
Microsoft Teams | ✅ | Chat messages that are formatted will return the entire HTML formatting. Edited chat messages will show up as new chat messages |
|
Cisco Webex | ❌ | ||
Slack Huddles | ❌ |
Receive chat messages in real-time
To receive chat message webhooks, set a Real-Time Webhook Endpoint with the participant_events.chat_message event when calling Create Bot:
curl --request POST \
--url https://us-west-2.recall.ai/api/v1/bot/ \
--header "Authorization: $RECALLAI_API_KEY" \
--header "accept: application/json" \
--header "content-type: application/json" \
--data '
{
"meeting_url": "https://meet.google.com/hzj-adhd-inu",
"recording_config": {
"realtime_endpoints": [
{
"type": "webhook",
"url": "https://my-app.com/api/webhook/recall",
"events": ["participant_events.chat_message"]
}
]
}
}
'Event Payload
Whenever a message readable by the bot is received in the chat, your endpoint will receive a webhook event with the following payload:
{
"event": "participant_events.chat_message", // participant_events.join, participant_events.leave, participant_events.speech_on, participant_events.speech_off (& more)
"data": {
"data": {
"participant": {
"id": number,
"name": string | null,
"is_host": boolean,
"platform": string | null,
"extra_data": object,
"email": string | null
},
"timestamp": {
"absolute": string,
"relative": float
},
"data":
{
"text": string,
"to": string
} // populated for `participant_events.chat_message` event
| null
},
// The real-time endpoint configured to receive data
"realtime_endpoint": {
"id": string,
"metadata": object,
},
// The associated ParticipantEvents Resource encapsulating this data
"participant_events": {
"id": string,
"metadata": object
},
"recording": {
"id": string,
"metadata": object
},
// The related bot, if the recording is produced by a bot
"bot": {
"id": string,
"metadata": object
}
}
}Fetch chat messages after the call
After the call has ended, you can also download all the chat messages that were sent during the meeting via the Retrieve Bot endpoint. In the response from this endpoint, you should access the array of recordings to find the bot's recording. From there, you can download all participant events, including chat messages, by accessing media_shortcuts.participant_events.data.participant_events_download_url.
{
"id": "f8e9d7c6-b5a4-4321-9876-543210fedcba",
"media_shortcuts": {
"participant_events": {
"id": "a3b2c1d0-e9f8-4567-8901-234567890abc",
"created_at": "2025-08-15T14:22:17.123456Z",
"status": {
"code": "done",
"sub_code": null,
"updated_at": "2025-08-15T14:28:33.987654Z"
},
"metadata": {},
"data": {
"participant_events_download_url": "...",
...
}
}
},
"metadata": {}
}
Using chat messages to remove the bot from the call
You may want to build functionality into your app that allows users to remove the bot via a chat message, so that they're able to kick the bot at any time without leaving the meeting UI.
To do this, you can subscribe to chat message webhooks from the bot, and monitor their contents as they're being received on your server. If the content of the message is a keyword, e.g. "remove", you can then call the Remove Bot From Call endpoint to kick the bot from the call. This will enable your users to kick the bot using a chat message.
Updated 4 days ago