Make Triggers
The Watch Events module is an instant trigger. When you turn a scenario on, it registers a webhook subscription with Tenreply for the event you select; when you turn it off, the subscription is removed. Use one Watch Events module per event — add more modules (in separate scenarios) to react to different events.
Events
| Event | Fires when |
|---|---|
message.received | A customer sends a new message |
message.sent | An agent or automation sends a message |
message.delivered | A sent message is delivered |
message.read | A customer reads a message |
message.failed | A message fails to send |
conversation.created | A new conversation starts |
conversation.status_changed | A conversation is opened, closed, or set to pending |
contact.created | A new contact is added |
contact.updated | A contact record is updated |
broadcast.completed | A broadcast finishes sending |
conversation.assigned | A conversation is assigned or unassigned |
contact.tagged | Tags are added to or removed from a contact |
sequence.enrolled | A contact is enrolled in a sequence |
sequence.completed | A contact finishes a sequence |
social_post.published | A social post goes live |
social_post.failed | A social post fails to publish |
comment.received | Someone comments on an Instagram or Facebook post |
deal.created | A deal is added to a pipeline |
deal.stage_changed | A deal moves to another stage |
deal.status_changed | A deal is marked won, lost, or reopened |
Payload examples for every event are in the webhook event catalog and the n8n triggers reference.
Event payloads
message.received
{ "id": "msg_abc123", "conversationId": "conv_xyz", "contactId": "contact_def", "type": "text", "content": { "text": "Hello, I need help!" }, "status": "delivered", "waMessageId": "wamid.abc", "timestamp": "2026-06-01T10:00:00.000Z"}conversation.created / conversation.status_changed
{ "id": "conv_xyz", "status": "open", "channel": "whatsapp", "contactId": "contact_def", "assignedAgentId": null, "createdAt": "2026-06-01T10:00:00.000Z"}contact.created / contact.updated
{ "id": "contact_def", "phoneNumber": "+1234567890", "name": "Jane Doe", "email": "jane@example.com", "tags": ["vip"], "createdAt": "2026-06-01T10:00:00.000Z"}message.sent / message.delivered / message.read / message.failed
Same schema as message.received with the updated status field.
broadcast.completed
{ "broadcastId": "bcast_123", "name": "June promo", "sent": 842, "failed": 3, "completedAt": "2026-06-01T11:00:00.000Z"}Signature verification
Each delivery includes the header X-Tenreply-Signature: sha256=<hmac-hex>, computed with
HMAC-SHA256 over the raw request body using the secret returned when the subscription was
created. Add a verification step in your scenario if you need to enforce it.