In this section, you'll implement a utility function that sends messages from your chatbot to Chat using the Chatbot API. This function constructs a message body, retrieves a chatbot access token, and sends a POST request to Zoom's /im/chat/messages endpoint.
By the end of this section, you’ll have:
- A reusable function to send messages to Chat
- Support for replying to messages using message threading
- Console logging for debugging message payloads and errors
Implement message sending logic
Create a utility function to send a chat message using the Chatbot API. The function accepts the recipient JID, message content, and an optional message ID for threaded replies.
File Path
utils/zoom-api.js
Code Snippet
/**
* Send a message to Zoom Team Chat
* @param {string} toJid - Recipient JID (user or channel)
* @param {string} message - Message content
* @param {string} [replyTo] - Optional message ID to reply to
* @returns {Promise<Object>} API response
*/
export async function sendChatMessage(toJid, message, replyTo = null) {
try {
const accessToken = await getChatbotToken();
const body = {
account_id: "5YQGYK-FSc-0M0DgZTCzkQ",
"content": {
"head": {
"text": "Hello World"
},
"body": [
{
"type": "message",
"text": message
}
]
},
robot_jid: "v1nhrah1hrqhuexexb5nn5-a@xmpp.zoom.us",
to_jid: toJid,
};
if (replyTo) {
body.reply_to = replyTo;
}
console.log('Preparing to send message to Chat:', body);
const response = await fetch(`${ZOOM_API_BASE_URL}/im/chat/messages`, {
method: 'POST',
headers: {
Authorization: `Bearer ${accessToken}`,
'Content-Type': 'application/json',
},
body: JSON.stringify(body),
});
if (!response.ok) {
const error = await response.json();
throw new Error(`Failed to send message: ${error.message || response.statusText}`);
}
return response.json();
} catch (error) {
console.error('Error sending chat message:', error);
throw error;
}
}