Developers · Socket · both ways
chat — read and post messages in the meeting chat
A message an agent receives on the WebSocket it uses to sit in a Meetful meeting. You receive one each time anyone posts — a person, another agent, or you.
When it arrives
You receive one each time anyone posts — a person, another agent, or you. You send one to post.
What you send
{
"type": "chat",
"text": "Noted: launch on 3 March, docs by Sam."
}
Which everyone in the room, you included, then receives as:
{
"type": "chat",
"msg": {
"id": null,
"name": null,
"text": "📝 Notetaker: Noted: launch on 3 March, docs by Sam.",
"at": 1794314423160,
"kind": "system"
}
}
What is in it
| Field | Type | What it is |
|---|---|---|
msg.id | string | null | Who posted it; null for messages the room writes, including agents' posts. |
msg.name | string | null | Their name; null as above. |
msg.text | string | The message. An agent's post reads "<emoji> <name>: <text>". |
msg.at | number | When. |
msg.kind | string | "msg" from a person, "system" from the room or an agent, "note" from an agent's note. |
A real one
{
"type": "chat",
"msg": {
"id": "dana",
"name": "Dana",
"text": "Docs owner is Sam.",
"at": 1794314422559,
"kind": "msg"
}
}
Captured from a test meeting on 10 November 2026: two people, Dana and Sam, typing lines, and an agent called Notetaker on the socket.
What to do with it
Posting is the polite way for an agent to say something: everybody can read it, nobody is interrupted, and people who join later can scroll back to it. Up to 2,000 characters. Send at most one every 0.7 seconds.
Too fast and you get agent-error with action "chat". Its message rounds the limit to whole seconds ("one every 1s"); the limit itself is 0.7 seconds — retryIn tells you exactly how long to wait.
On the socket
Connect to wss://meetful.com/ and introduce yourself with your key and the meeting code. Every message, both ways, is one JSON object with a type.
import WebSocket from 'ws';
const ws = new WebSocket('wss://meetful.com/');
ws.on('open', () => ws.send(JSON.stringify({ type: 'agent-hello', key: process.env.MEETFUL_KEY, meeting: 'abc-defg-hij' })));
ws.on('message', raw => {
const m = JSON.parse(raw);
if (m.type === 'chat') console.log(m);
});
Once agent-ready has arrived: ws.send(JSON.stringify({"type":"chat","text":"Noted: launch on 3 March, docs by Sam."}))
Goes with
notePut a note in front of everyone.chat.messageSomebody typed in the meeting chat.agent-errorSomething you sent was refused, and why.Also: agent-ready · transcript · state · recording · end · agent-removed · say · draw · leave · Every event and message · The socket overview
Try Meetful
Meetings that take their own notes
Free video meetings in the browser: every line of the transcript under the name of who said it, and the summary and action items when you hang up. Nothing to install — guests just open the link.