Documentation Index
Fetch the complete documentation index at: https://messages.dev/docs/llms.txt
Use this file to discover all available pages before exploring further.
Typing indicators show the ”…” bubble in the recipient’s iMessage conversation.
You can send them to signal that your bot or integration is composing a response,
and receive them via webhooks when someone is typing to you.
Send a typing indicator
import { createClient } from "@messages-dev/sdk";
const client = createClient();
await client.startTyping({
from: "+15551234567",
to: "+15559876543",
});
The indicator appears for a few seconds. To stop it before it expires naturally:
await client.stopTyping({
from: "+15551234567",
to: "+15559876543",
});
Common pattern: type while processing
Show a typing indicator while your bot generates a response, then send the message:
const client = createClient();
await client.startTyping({
from: "+15551234567",
to: "+15559876543",
});
const reply = await generateReply(incomingMessage);
await client.sendMessage({
from: "+15551234567",
to: "+15559876543",
text: reply,
});
Receive typing indicators via webhooks
Subscribe to typing.started and typing.stopped events:
import { verifyWebhook } from "@messages-dev/sdk";
app.post("/webhooks", async (req, res) => {
const event = await verifyWebhook(
req.body,
req.headers["x-webhook-signature"],
"your_webhook_secret",
);
if (event.event === "typing.started") {
console.log(`${event.data.handle} is typing...`);
}
if (event.event === "typing.stopped") {
console.log(`${event.data.handle} stopped typing`);
}
res.sendStatus(200);
});
Get current typing status
Check who is currently typing in a chat:
const indicators = await client.listTypingIndicators({
from: "+15551234567",
to: "+15559876543",
});
for (const ind of indicators.data) {
if (ind.isTyping) {
console.log(`${ind.handle} is typing`);
}
}