Retrieves all chat messages that were sent during the meeting. This includes messages from all participants.
Method Signature
bot.listChatMessages(params: ListChatMessagesParams): Promise<ChatMessagesResponse>
Parameters
The unique identifier of the bot
Pagination cursor for retrieving the next page of results
Sort order for messages. Use "created_at" for ascending or "-created_at" for descending.
Response
Returns a paginated response with chat messages:
Array of chat message objectsUnique identifier for the chat message
Name of the message sender
Content of the chat message
ISO 8601 timestamp when the message was sent
Timestamp in seconds from the start of the recording
URL or cursor for the next page of results, or null if no more pages
URL or cursor for the previous page of results, or null if on first page
Example
import { Recall } from '@recall.ai/sdk';
const client = new Recall({
apiKey: 'your-api-key',
region: 'us-west-2'
});
// Get chat messages
const chatMessages = await client.bot.listChatMessages({
id: 'bot_1234567890'
});
console.log(`Total messages: ${chatMessages.results.length}`);
for (const message of chatMessages.results) {
console.log(`[${message.timestamp}s] ${message.sender}: ${message.message}`);
}
Example: With Ordering
// Get messages in reverse chronological order (newest first)
const recentMessages = await client.bot.listChatMessages({
id: 'bot_1234567890',
ordering: '-created_at'
});
console.log('Recent messages:');
for (const message of recentMessages.results.slice(0, 5)) {
console.log(`${message.sender}: ${message.message}`);
}
async function getAllChatMessages(botId: string) {
const allMessages = [];
let cursor: string | undefined;
while (true) {
const response = await client.bot.listChatMessages({
id: botId,
cursor
});
allMessages.push(...response.results);
if (!response.next) {
break;
}
// Extract cursor from next URL or use it directly
cursor = response.next;
}
console.log(`Retrieved ${allMessages.length} total messages`);
return allMessages;
}
const allMessages = await getAllChatMessages('bot_1234567890');
Example: Search Chat Messages
async function searchChatMessages(botId: string, searchTerm: string) {
const chatMessages = await client.bot.listChatMessages({ id: botId });
const matches = chatMessages.results.filter(msg =>
msg.message.toLowerCase().includes(searchTerm.toLowerCase())
);
console.log(`Found ${matches.length} messages containing "${searchTerm}"`);
for (const match of matches) {
console.log(`[${match.timestamp}s] ${match.sender}: ${match.message}`);
}
return matches;
}
await searchChatMessages('bot_1234567890', 'link');
Example: Export Chat to File
import { writeFile } from 'fs/promises';
async function exportChatToFile(botId: string, filename: string) {
const chatMessages = await client.bot.listChatMessages({ id: botId });
let content = 'Meeting Chat Export\n';
content += '='.repeat(50) + '\n\n';
for (const message of chatMessages.results) {
const time = new Date(message.created_at).toLocaleString();
content += `[${time}] ${message.sender}:\n${message.message}\n\n`;
}
await writeFile(filename, content);
console.log(`Chat exported to ${filename}`);
}
await exportChatToFile('bot_1234567890', 'meeting-chat.txt');
Example: Get Messages by Sender
async function getMessagesBySender(botId: string, senderName: string) {
const chatMessages = await client.bot.listChatMessages({ id: botId });
const messages = chatMessages.results.filter(msg =>
msg.sender.toLowerCase().includes(senderName.toLowerCase())
);
console.log(`Messages from ${senderName}: ${messages.length}`);
for (const message of messages) {
console.log(`[${message.timestamp}s] ${message.message}`);
}
return messages;
}
await getMessagesBySender('bot_1234567890', 'John Smith');
Notes
- Chat messages are available after the meeting ends and the bot status reaches
done
- Not all meeting platforms support chat message capture
- The
timestamp field indicates when the message was sent relative to the recording start
- Messages are returned in chronological order by default