Documentazione / Completo
Messaggi modificati ed eliminati
Programmi con l'IA? Collegala al tuo account via MCP: controlla la tua configurazione, crea webhook e modelli con la tua conferma e scrive il codice. Scopri come →
Quando un contatto modifica un messaggio (per esempio, per correggere un importo), ti arriva message.edited; quando lo elimina, message.revoked. Entrambi portano originalMessageId: il wamid del messaggio originale, lo stesso data.message.id che ti è arrivato nel suo message.received. Con quello aggiorni la riga che hai già salvato.
Cosa arriva dipende dal tipo di numero (lo decide Meta):
Numero in coesistenza (app + API). Modifica → message.edited con textAvailable: true e data.message = la versione finale (testo, o foto/video con la nuova didascalia), con la stessa forma di message.received. Eliminazione → message.revoked.
Numero solo Cloud API. Modifica → message.edited con textAvailable: false, message: null e reason: "META_EDIT_TEXT_NOT_PROVIDED": Meta segnala la modifica ma non invia il nuovo testo. Eliminazione → Meta non la segnala.
WhatsApp permette di modificare solo entro 15 minuti dall'invio (e di eliminare, fino a 2 giorni). Una modifica senza testo è un limite di Meta: non c'è modo di chiedere il testo dopo.
Il testo precedente non lo conserviamo (WAIA Connect non salva il contenuto dei messaggi): se ti serve, è nel tuo database, sotto originalMessageId.
# Nothing to call: WAIA Connect POSTs message.edited / message.revoked to your webhook.
# Read a saved body: the final text (or null when Meta did not send it) and the original id.
jq -r 'if .type == "message.edited"
then "\(.data.originalMessageId) edited -> " + (if .data.textAvailable then (.data.message.text.body // .data.message.image.caption // .data.message.video.caption // "") else "(text not provided by Meta)" end)
else "\(.data.originalMessageId) deleted" end' body.jsonUn webhook creato prima di questi eventi con «tutti gli eventi» non li riceve da solo: scegli di nuovo «tutti» (PATCH con events: null, o il pulsante della sua riga nel pannello) o aggiungili all'elenco. newEventsAvailable dice quali mancano.
Un endpoint che riceve message.edited/message.revoked non riceve più quella modifica o eliminazione grezza come message.received (type: "edit", "revoke" o "unsupported"). Uno che non li riceve resta come prima.
originalConnectMessageId è il nostro msg_… quando hai inviato l'originale tramite l'API; per un messaggio del contatto è null.
Deduplica come qualsiasi evento: per l'id della busta (evt_…).