Pular para o conteúdo

Eventos de calendário

Um evento de calendário enviado pelo número (Enviar evento de calendário) gera eventos de webhook quando um convidado responde e quando o evento é editado ou cancelado. Eles chegam à mesma URL de webhook e no mesmo polling dos demais eventos: veja Webhook: configuração e envelope para a assinatura e o formato do envelope.

Tabela

EventoQuando
message.calendar_respondedUm convidado respondeu ao evento (vai, não vai ou talvez) ou trocou a resposta
message.editedO evento foi editado ou cancelado, pela API ou pelo aplicativo do WhatsApp. Traz content_type: "calendar"
message.edit.failedA edição de um evento pela API não foi feita

message.calendar_responded

Campos de data

CampoTipoDescrição
idstringIdentificador público do evento respondido (msg_{hex32}), o mesmo que o envio devolveu.
fromobjectO convidado que respondeu: {contact_id?, name?, number}. Quando a resposta foi dada no celular do seu próprio número (direction: "outbound"), é a sua linha: {contact_id?, name?, alias, number}.
toobjectO seu número que recebeu a resposta, ou o grupo em que o evento foi enviado ({group_id, name?}). Em uma resposta outbound, é a outra pessoa da conversa ({contact_id?, name?, number}) ou o grupo.
responsestringgoing (vai), not_going (não vai) ou maybe (talvez).
extra_guestsintegerQuantos convidados extras a pessoa leva. Omitido quando ela não leva nenhum.
directionstring"inbound" quando a resposta vem de um convidado. "outbound" quando a resposta foi dada pelo próprio celular conectado, como acontece com uma reação.
channelstringSempre "whatsapp".
originstringSempre "native": a resposta é dada no aplicativo do WhatsApp.
atstringISO 8601 em UTC com sufixo Z: momento em que a resposta foi dada no WhatsApp.

Cada resposta de um convidado é um evento novo. Quem muda de ideia gera outro message.calendar_responded com a resposta nova; use o at para saber qual é a mais recente. Para ver só a última resposta de cada convidado, com os totais, leia Consultar respostas de um evento.

As respostas dadas antes de este evento existir não estão disponíveis.

Exemplo: resposta em conversa 1:1

message.calendar_responded (convidado vai e leva 1 pessoa)
{
"id": "evt_5e0b7a3c9d1f4e28a6c4b2d9e8f70a13",
"type": "message.calendar_responded",
"organization_id": "org_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
"number_alias": "main",
"number_id": "num_0a1b2c3d4e5f60718293a4b5c6d7e8f9",
"created_at": "2026-11-03T12:00:02Z",
"data": {
"id": "msg_01993c5a1b24d3e9f01a2b3c4d5e6f70",
"from": {
"contact_id": "ct_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
"name": "Ana Souza",
"number": "5511999990002"
},
"to": { "name": "Turbo Notify", "alias": "main", "number": "5511999990001" },
"response": "going",
"extra_guests": 1,
"direction": "inbound",
"channel": "whatsapp",
"origin": "native",
"at": "2026-11-03T12:00:00Z"
}
}

Exemplo: resposta em grupo

message.calendar_responded (talvez, em grupo)
{
"id": "evt_9a8b7c6d5e4f43a2b1c0d9e8f7a6b5c4",
"type": "message.calendar_responded",
"organization_id": "org_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
"number_alias": "main",
"number_id": "num_0a1b2c3d4e5f60718293a4b5c6d7e8f9",
"created_at": "2026-11-03T12:10:02Z",
"data": {
"id": "msg_01993c5a1b24d3e9f01a2b3c4d5e6f70",
"from": { "name": "Carlos Lima", "number": "5511999990003" },
"to": { "group_id": "grp_e442553a56b14e2695f6acfd7d651b1a", "name": "Equipe" },
"response": "maybe",
"direction": "inbound",
"channel": "whatsapp",
"origin": "native",
"at": "2026-11-03T12:10:00Z"
}
}

message.edited de um evento de calendário

É o mesmo evento de edição de mensagem, com estas diferenças:

  • content_type é "calendar".
  • preview é o nome do evento.
  • canceled: true aparece só quando o evento foi cancelado. Em um evento que não está cancelado o campo não existe.
  • origin é "tn" quando a edição veio da API e "native" quando quem criou o evento o editou no aplicativo do WhatsApp.
message.edited (evento alterado pela API)
{
"id": "evt_4d3c2b1a0f9e48d7c6b5a4f3e2d1c0b9",
"type": "message.edited",
"organization_id": "org_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
"number_alias": "main",
"number_id": "num_0a1b2c3d4e5f60718293a4b5c6d7e8f9",
"created_at": "2026-11-02T14:05:01Z",
"data": {
"id": "msg_01993c5a1b24d3e9f01a2b3c4d5e6f70",
"from": { "name": "Turbo Notify", "alias": "main", "number": "5511999990001" },
"to": { "name": "Ana Souza", "number": "5511999990002" },
"preview": "Sprint Planning",
"content_type": "calendar",
"direction": "outbound",
"channel": "whatsapp",
"origin": "tn",
"at": "2026-11-02T14:05:00Z"
}
}
message.edited (evento cancelado pela API)
{
"id": "evt_0f1e2d3c4b5a49687766554433221100",
"type": "message.edited",
"organization_id": "org_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
"number_alias": "main",
"number_id": "num_0a1b2c3d4e5f60718293a4b5c6d7e8f9",
"created_at": "2026-11-02T15:00:01Z",
"data": {
"id": "msg_01993c5a1b24d3e9f01a2b3c4d5e6f70",
"from": { "name": "Turbo Notify", "alias": "main", "number": "5511999990001" },
"to": { "name": "Ana Souza", "number": "5511999990002" },
"preview": "Sprint Planning",
"content_type": "calendar",
"direction": "outbound",
"channel": "whatsapp",
"origin": "tn",
"canceled": true,
"at": "2026-11-02T15:00:00Z"
}
}

Para ler o evento depois da edição, use GET /v1/numbers/{ref}/messages/{id} com o data.id.

Quem já respondeu continua com a resposta depois de uma edição. A entrada que o convidado criou na agenda com o botão “Adicionar ao calendário” não muda nem é marcada como cancelada: veja O que acontece com os convidados, inclusive quando editar e quando cancelar e enviar um novo evento.

message.edit.failed de um evento

Tem a mesma forma de message.edit.failed. Quando error.code é message_secret_unavailable, este número não pode mais alterar o evento, por exemplo porque foi vinculado de novo depois do envio. O error.hint orienta a enviar um novo evento. Quando é calendar_edit_unavailable, a plataforma não consegue alterar nem cancelar eventos no momento, e a orientação é a mesma. Se o WhatsApp recusar a edição depois de algum tempo, o desfecho também é um message.edit.failed.

Veja também: Editar ou cancelar um evento de calendário · Consultar respostas de um evento · Códigos de erro.