Portal Community
Message retrieval via Graph API: The WhatsApp Cloud API primarily delivers message status updates via webhooks (delivered, read, failed events). The message/get operation queries the Graph API directly for message metadata when you need a synchronous lookup rather than relying on webhook delivery. This is useful for status verification workflows and audit checks.

When to Use

Configuration

Connection

FieldRequiredDescription
accessTokenRequiredPermanent System User access token. Store in BizFirst Credentials Manager.
phoneNumberIdRequiredNumeric string ID of the sending WhatsApp Business phone number.
apiVersionOptionalMeta Graph API version. Defaults to v18.0.

Operation

FieldRequiredDescription
messageIdRequiredThe WhatsApp message ID (wamid) to retrieve (e.g. wamid.HBgLMTQx...).

Sample Configuration

{
  "resource": "message",
  "operation": "get",
  "accessToken": "{{ $credentials.whatsAppToken }}",
  "phoneNumberId": "123456789012345",
  "messageId": "{{ $input.messageId }}"
}

Validation Errors

ErrorCause
accessToken is requiredThe accessToken field is empty.
phoneNumberId is requiredThe phoneNumberId field is empty.
messageId is requiredThe messageId field is empty.
100 (Meta)Invalid message ID format — the wamid is malformed.
803 (Meta)Message not found — the wamid does not exist or does not belong to this phone number.

Output

Success Port

FieldTypeDescription
messageIdstringThe queried message ID.
statusstringMessage delivery status: sent, delivered, read, or failed.
typestringMessage type: text, image, video, audio, document, location, contacts, interactive, template, reaction, sticker.
timestampstringUnix timestamp (seconds) when the message was sent.
tostringRecipient phone number.
conversationIdstringWhatsApp conversation ID for this message.
rawResponsestringFull raw JSON from the Meta API including all available metadata fields.

Error Port

FieldTypeDescription
messageIdstringThe queried message ID (echoed from input).
statusstring"failed" or "error".
errorCodestringMeta error code or BizFirst validation code.
errorMessagestringHuman-readable error description.

Sample Output

{
  "messageId": "wamid.HBgLMTQxNTU1NTI2NzEVAgARGBI2QzM4NjhGQTExMjQ3RDMAA",
  "status": "delivered",
  "type": "text",
  "timestamp": "1716700412",
  "to": "14155552671",
  "conversationId": "conv_abc123def456",
  "rawResponse": "{\"id\":\"wamid.HBgLMTQxNTU1NTI2NzEVAgARGBI2QzM4NjhGQTExMjQ3RDMAA\",\"type\":\"text\",\"timestamp\":\"1716700412\",\"to\":\"14155552671\",\"status\":\"delivered\"}"
}

Expression Reference

ValueExpressionNotes
Delivery status{{ $output.getMsg.status }}Compare to "delivered" or "read" in an IfCondition node for SLA checks.
Message type{{ $output.getMsg.type }}Use to determine how to process the message content in downstream nodes.
Send timestamp{{ $output.getMsg.timestamp }}Unix seconds. Convert to human-readable with a Function node for display or deletion window check.
Conversation ID{{ $output.getMsg.conversationId }}Use for conversation-level tracking and correlation across messages.
Full response{{ $output.getMsg.rawResponse }}Parse for additional fields like error details on failed messages.

Node Policies & GuardRails

Policy AreaRecommendation
Credential storageStore the access token in BizFirst Credentials Manager. Never inline in configuration.
Prefer webhooks for statusFor real-time status updates, use the WhatsApp webhook (status events: sent, delivered, read, failed). Only use this polling operation when a synchronous lookup is specifically needed — avoid polling loops that call this operation repeatedly.
Rate limitingDo not call this operation in a tight loop. Meta imposes read rate limits on the Graph API. For bulk status checks, use message/getMany or process status webhooks instead.
Data retentionMeta does not guarantee that message metadata is retained indefinitely. For compliance purposes, store message status updates from webhooks into your own database rather than relying on on-demand lookups.
Error portConnect the error port. A 803 "message not found" error is common for wamids that have been purged from Meta's records or belong to a different phone number.

Examples

SLA Delivery Check — 5 Minutes After Send

{
  "resource": "message",
  "operation": "get",
  "accessToken": "{{ $credentials.whatsAppToken }}",
  "phoneNumberId": "123456789012345",
  "messageId": "{{ $input.criticalMessageId }}"
}

A Delay node waits 5 minutes after a critical notification is sent. This node then queries the message status. An IfCondition node checks {{ $output.getMsg.status }} — if it is not "delivered" or "read", a fallback SMS is sent via the Twilio node and an alert is raised in the monitoring system.

Pre-Deletion Window Validation

{
  "resource": "message",
  "operation": "get",
  "accessToken": "{{ $credentials.whatsAppToken }}",
  "phoneNumberId": "123456789012345",
  "messageId": "{{ $input.messageToRetract }}"
}

Before calling message/delete, this node fetches the message timestamp. A Function node computes whether the send timestamp is within 60 minutes of the current time. If inside the window, message/delete is called; if outside, the workflow logs a "deletion window expired" event and notifies the compliance team instead.