whatsapp::calls::reject
- call_creatorstringrequired
- call_idstringrequired
- peerstringrequired
- session_idstringrequired
- requestedbooleanrequired
The signaling stanza was sent; no remote acknowledgement is provided.
Native whatsmeow sessions and official Meta Cloud API messaging in one Go worker; no Node or browser runtime.
iii trigger compose::add worker=whatsappRun in your project with the iii engine running. Exact versions are immutable and digest-pinned.
The signaling stanza was sent; no remote acknowledgement is provided.
Keeps an original sender's namespace, including LID, for message operations.
Keeps an original sender's namespace, including LID, for message operations.
Keeps an original sender's namespace, including LID, for message operations.
Keeps an original sender's namespace, including LID, for message operations.
Keeps an original sender's namespace, including LID, for message operations.
Graph accepted the request; delivery is reported separately by webhook.
Numeric Meta media ID as a string to preserve precision; encoded as an integer in the Meta request.
Meta operation result. False with validation_errors requires correcting the Flow JSON before publishing.
Flow data API version
Data exchange endpoint URL
Flow JSON version
Flow name
Meta Flow lifecycle status
Meta operation result. False with validation_errors requires correcting the Flow JSON before publishing.
Meta operation result. False with validation_errors requires correcting the Flow JSON before publishing.
Meta operation result. False with validation_errors requires correcting the Flow JSON before publishing.
Meta operation result. False with validation_errors requires correcting the Flow JSON before publishing.
Flow data API version
Data exchange endpoint URL
Flow JSON version
Flow name
Meta Flow lifecycle status
Meta operation result. False with validation_errors requires correcting the Flow JSON before publishing.
Meta operation result. False with validation_errors requires correcting the Flow JSON before publishing.
Meta operation result. False with validation_errors requires correcting the Flow JSON before publishing.
Opaque official Cloud group ID, without group: prefix or native JID.
Opaque official Cloud group ID, without group: prefix or native JID.
Opaque official Cloud group ID, without group: prefix or native JID.
Opaque official Cloud group ID, without group: prefix or native JID.
Opaque official Cloud group ID, without group: prefix or native JID.
Opaque official Cloud group ID, without group: prefix or native JID.
Opaque official Cloud group ID, without group: prefix or native JID.
Opaque official Cloud group ID, without group: prefix or native JID.
Graph accepted the request; delivery is reported separately by webhook.
Opaque official Cloud group ID, without group: prefix or native JID.
Graph accepted the request; delivery is reported separately by webhook.
Opaque official Cloud group ID, without group: prefix or native JID.
Graph accepted the request; delivery is reported separately by webhook.
Opaque official Cloud group ID, without group: prefix or native JID.
Graph accepted the request; delivery is reported separately by webhook.
Opaque official Cloud group ID, without group: prefix or native JID.
Graph accepted the request; delivery is reported separately by webhook.
Opaque official Cloud group ID, without group: prefix or native JID.
Opaque official Cloud group ID, without group: prefix or native JID.
Opaque official Cloud group ID, without group: prefix or native JID.
Meta media ID. Never a URL, native media key or host file path.
Meta media ID. Never a URL, native media key or host file path.
Meta media ID. Never a URL, native media key or host file path.
Meta media ID. Never a URL, native media key or host file path.
SHA-256 digest as lowercase hexadecimal.
Meta media ID. Never a URL, native media key or host file path.
Meta media ID. Never a URL, native media key or host file path.
SHA-256 digest as lowercase hexadecimal.
A matching file extension, without paths or controls. Markdown is not supported.
Exact supported MIME; audio/ogg or audio/ogg; codecs=opus requires mono Opus.
Meta media ID. Never a URL, native media key or host file path.
Standard padded base64, no data URL. Decoded bytes must fit max_media_bytes (default 16 MiB; configurable to 64 MiB) and the conservative 100,000,000-byte Cloud ceiling. No automatic conversion.
Display filename with supported extension; maximum 255 UTF-8 bytes (worker policy), without paths or control characters. Markdown is not supported; choose TXT or PDF explicitly.
Official document MIME type: text/plain, application/pdf, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, or the corresponding Office Open XML MIME. Must match filename extension and content. text/markdown is rejected with an explicit alternative.
Number of decoded file bytes uploaded.
Display filename with supported extension; maximum 255 UTF-8 bytes (worker policy), without paths or control characters. Markdown is not supported; choose TXT or PDF explicitly.
Meta media ID from upload_document, valid for 30 days unless deleted. Reuse without uploading bytes again. Numeric IDs are strings; 128-character bound is worker policy.
A matching file extension, without paths or controls. Markdown is not supported.
Meta media ID. Never a URL, native media key or host file path.
Newest first. A cursor loads older locally retained messages.
Original incoming Meta message ID, without whitespace or control characters.
Graph accepted the request; delivery is reported separately by webhook.
International phone number or supported business-scoped user ID; native JIDs are not accepted.
Optional recipient identity key hash for identity-change protection.
Optional original Meta message ID to quote; no automatic retries.
Graph accepted the request; delivery is reported separately by webhook.
International phone number or business-scoped user ID; native JIDs are rejected.
Meta media ID. Never a URL, native media key or host file path.
Optional expected recipient identity key hash.
Graph accepted the request; delivery is reported separately by webhook.
International phone number or supported business-scoped user ID; native JIDs are not accepted.
Optional recipient identity key hash for identity-change protection.
Optional original Meta message ID to quote; no automatic retries.
Graph accepted the request; delivery is reported separately by webhook.
Optional card text; at most two line breaks.
International phone number or supported business-scoped user ID; native JIDs are not accepted.
Optional recipient identity key hash for identity-change protection.
Optional original Meta message ID to quote; no automatic retries.
Graph accepted the request; delivery is reported separately by webhook.
Catalog SKU/content ID; 256-character worker limit.
Graph accepted the request; delivery is reported separately by webhook.
International phone number or supported business-scoped user ID; native JIDs are not accepted.
HTTP(S) display URL; never fetched by the worker.
Optional recipient identity key hash for identity-change protection.
Optional original Meta message ID to quote; no automatic retries.
Graph accepted the request; delivery is reported separately by webhook.
International phone number or supported business-scoped user ID; native JIDs are not accepted.
Optional recipient identity key hash for identity-change protection.
Optional original Meta message ID to quote; no automatic retries.
HTTP(S) destination opened by the recipient; never fetched by the worker.
Graph accepted the request; delivery is reported separately by webhook.
International phone number or supported business-scoped user ID; native JIDs are not accepted.
Optional recipient identity key hash for identity-change protection.
Optional original Meta message ID to quote; no automatic retries.
Restricted utility-only business-named template feature.
Text body limit 4096; interactive body limit 1024.
Utility30..43200; authentication30..900; forbidden for service.
Graph accepted the request; delivery is reported separately by webhook.
Optional caption of at most 1024 Unicode characters.
International phone number or supported business-scoped user ID; native/group JIDs are not accepted.
Display filename with supported extension; maximum 255 UTF-8 bytes (worker policy), without paths or control characters. Markdown is not supported; choose TXT or PDF explicitly.
Meta media ID from upload_document, valid for 30 days unless deleted. Reuse without uploading bytes again. Numeric IDs are strings; 128-character bound is worker policy.
Optional expected recipient identity hash for Meta identity-change checks.
Optional Meta message ID to quote as a contextual reply.
Graph accepted the request; delivery is reported separately by webhook.
International phone number or supported business-scoped user ID; native JIDs are not accepted.
Optional non-empty input data for the first navigate screen, at most 16384 JSON bytes. Not accepted with data_exchange.
CTA label; worker follows Meta recommendation of at most 30 characters.
Optional business correlation token; 4096-character worker limit.
Optional recipient identity key hash for identity-change protection.
Optional original Meta message ID to quote; no automatic retries.
Required for navigate; forbidden for data_exchange. Worker limit 256 characters.
Graph accepted the request; delivery is reported separately by webhook.
International phone number or business-scoped user ID; native JIDs are rejected.
Meta media ID. Never a URL, native media key or host file path.
Optional expected recipient identity key hash.
Graph accepted the request; delivery is reported separately by webhook.
International phone number or supported business-scoped user ID; native JIDs are not accepted.
Optional recipient identity key hash for identity-change protection.
Optional original Meta message ID to quote; no automatic retries.
Graph accepted the request; delivery is reported separately by webhook.
Optional address; 1024-character worker limit.
International phone number or supported business-scoped user ID; native JIDs are not accepted.
Optional place name; 1024-character worker limit.
Optional recipient identity key hash for identity-change protection.
Optional original Meta message ID to quote; no automatic retries.
Graph accepted the request; delivery is reported separately by webhook.
Optional explicit per-message activity-sharing choice; omission preserves the WABA setting.
Defaults to STRICT. CLOUD_API_FALLBACK explicitly permits Meta routing to standard Cloud API when marketing onboarding is incomplete.
Optional expected recipient identity hash for Meta identity-change checks.
Optional Meta message ID to quote as a contextual reply.
Graph accepted the request; delivery is reported separately by webhook.
Meta catalog ID; 128-character worker limit.
Epoch-seconds string at least 300 seconds in the future.
Catalog SKU/content ID; 256-character worker limit.
Opaque PSP credential reference, never a full card number or security code.
HTTP(S) payment destination; never fetched by the worker.
Graph accepted the request; delivery is reported separately by webhook.
Graph accepted the request; delivery is reported separately by webhook.
Meta catalog ID; 128-character worker limit.
Catalog SKU/content ID; 256-character worker limit.
Graph accepted the request; delivery is reported separately by webhook.
Meta catalog ID; 128-character worker limit.
Graph accepted the request; delivery is reported separately by webhook.
Meta catalog ID; 128-character worker limit.
Graph accepted the request; delivery is reported separately by webhook.
International phone number or supported business-scoped user ID; native JIDs are not accepted.
One Unicode emoji sequence; empty string removes the reaction. Worker caps 128 UTF-8 bytes. Meta validates the exact emoji sequence.
Original incoming Meta message ID, without whitespace or control characters.
Optional recipient identity key hash for identity-change protection.
Graph accepted the request; delivery is reported separately by webhook.
International phone number or business-scoped user ID; native JIDs are rejected.
Meta media ID. Never a URL, native media key or host file path.
Optional expected recipient identity key hash.
Graph accepted the request; delivery is reported separately by webhook.
Optional expected recipient identity hash for Meta identity-change checks.
Optional Meta message ID to quote as a contextual reply.
Graph accepted the request; delivery is reported separately by webhook.
Optional expected recipient identity hash for Meta identity-change checks.
Optional Meta message ID to quote as a contextual reply.
Graph accepted the request; delivery is reported separately by webhook.
International phone number or business-scoped user ID; native JIDs are rejected.
Meta media ID. Never a URL, native media key or host file path.
Optional expected recipient identity key hash.
Graph accepted the request; delivery is reported separately by webhook.
Original incoming Meta message ID, without whitespace or control characters.
Local readiness only. Does not imply remote authentication or delivery.
Public HTTPS callback override. Uses configured cloud.verify_token, never a token argument. Omit to use app default callback.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Pass this value as `after_sequence` in the next poll.
Earlier events have fallen outside the bounded queue or a process restarted.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
An existing description version; omit to fetch the current version.
False permits admins only; true permits all members.
Omit both encryption fields only for plaintext channel media.
Audio is already encoded; the worker never invokes codecs.
Set only when revoking another member's message as a group admin.
Keeps an original sender's namespace, including LID, for message operations.
Keeps an original sender's namespace, including LID, for message operations.
Newest first. A cursor loads older locally retained messages.
Keeps an original sender's namespace, including LID, for message operations.
Empty removes this account's reaction.
Keeps an original sender's namespace, including LID, for message operations.
A complete vCard, supplied by the caller.
Keeps an original sender's namespace, including LID, for message operations.
Keeps an original sender's namespace, including LID, for message operations.
Keeps an original sender's namespace, including LID, for message operations.
Native protobuf JSON content; absent on revoked messages.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Null when the native client does not expose this value.
Filtered WhatsApp Cloud API messages, delivery statuses, and optional account/group/calling webhook events. Publishes verified events after durable deduplication; messages are also saved to the local archive. ## Register a subscription 1. Register a callback function that accepts the event object below. Replace `automation::on-whatsapp-message` with that function's ID and the example `chat_ids` with the contacts you want to monitor. 2. Call `engine::register_trigger` in the `default` namespace with the following JSON. Use an initialized caller connection in the callback function's namespace. `trigger_namespace` selects this WhatsApp provider, not the callback namespace. With the CLI, `III_NAMESPACE` sets the connection namespace; `--namespace default` routes the call to the engine function. For a newly connected Go SDK client, first wait until `engine::workers::list` shows that client in the intended namespace; `Connect` can return before its namespace is announced. ```json { "trigger_type": "whatsapp::cloud::events", "trigger_namespace": "default", "function_id": "automation::on-whatsapp-message", "config": { "chat_ids": ["+15550000009"], "message_types": ["text"] }, "metadata": {"workflow": "customer-support"} } ``` 3. Save the returned `id`. Call `engine::registered-triggers::info` with `{"id":"<returned-id>"}` and check that `status` is `active` and `function` identifies the intended callback and namespace. Active confirms the provider binding; it does not guarantee the callback exists. Registration does not replay old messages. 4. Remove the subscription with `engine::unregister_trigger` and `{"id":"<returned-id>"}`. Function-path registrations survive the calling connection closing; explicitly unregister them when finished. Callback metadata is separate from the event payload. Callback return values do not send replies to WhatsApp. ## Filter configuration Every field in `config` is optional. Always supply a JSON object; `{}` receives all incoming messages for the configured Cloud account. Unknown fields are rejected. Populated fields combine with AND; values within each list combine with OR. | Field | Values and behavior | | --- | --- | | `kinds` | List: `message.received`, `message.status`, `webhook.received`. Omitted, null or empty defaults to only `message.received`. | | `chat_ids` | Contact phone numbers such as `+15550000009`, business-scoped IDs such as `BR.ENT.Abc123`, or `group:<raw Cloud group ID>`. Use IDs from `whatsapp::cloud::chats::list`. Native JIDs are not supported. | | `sender_ids` | List of sender IDs in the same format. Applies to incoming messages. | | `message_types` | List of exact raw Meta types, such as `text`, `image`, `audio`, `interactive` or `button`. Names must start with a lowercase letter and contain 1–64 lowercase letters, digits or underscores. | | `statuses` | List: `sent`, `delivered`, `read`, `failed`. Also set `kinds` to include `message.status`. | | `fields` | Exact Meta webhook fields, such as `messages`, `message_template_status_update`, `calls`, or `group_lifecycle_update`. Administrative events require `kinds: ["webhook.received"]`. | | `events` | Exact administrative event names, such as `APPROVED`, `group_create`, or a calling event name. | | `group_ids` | Raw Cloud group IDs without the `group:` prefix. Matches group messages, receipts, and metadata events. | | `participant_ids` | Normalized participants identified by group delivery/read receipts. Also select `message.status`. | | `business_account_id` | Exact WABA ID, a numeric string of at most 32 digits. | | `phone_number_id` | Exact Phone Number ID, a numeric string of at most 32 digits. | Empty lists impose no restriction except the received-only default for `kinds`. Empty account ID strings impose no restriction. Each list allows at most 128 values; the entire filter is limited to 64 KiB. Status events have no sender or message type, so populated `sender_ids` or `message_types` exclude them. To receive read and failed receipts for one contact, replace `config` above with: ```json { "kinds": ["message.status"], "chat_ids": ["+15550000009"], "statuses": ["read", "failed"] } ``` ## Callback payload ```json { "kind": "message.received", "business_account_id": "123", "phone_number_id": "456", "message_id": "wamid.example", "chat_id": "+15550000009", "sender_id": "+15550000009", "message_type": "text", "text": "Hello", "timestamp_ms": 1700000000000, "data": { "id": "wamid.example", "from": "15550000009", "timestamp": "1700000000", "type": "text", "text": {"body": "Hello"} } } ``` `message.status` uses the same account, message, chat and timestamp fields plus `status`; sender, message type and text may be absent. `timestamp_ms` is Meta's timestamp in milliseconds. `data` contains the single original message/status object, not the whole webhook. Events are capped at 64 KiB; oversized content uses `data: {"content_omitted":true}` with a clipped preview. ## Delivery and setup Configure Cloud API credentials and the Meta webhook first; `whatsapp::cloud::status` reports local setup. This trigger does not configure Meta or subscribe to linked-device events (`whatsapp::events`). Local sends do not emit `message.received`; Meta receipts can emit `message.status`. Duplicate messages and identical status updates are suppressed within retained deduplication history. Delivery is best effort, without callback retries or replay; queue overflow, shutdown or callback failures can lose notifications. Reconcile current retained message state with `whatsapp::cloud::chats::list` and `whatsapp::cloud::messages::list`. Reconcile administrative state with its corresponding management API; the message archive does not store account-event history. ## Administrative and group subscriptions For template status changes, register a callback with this filter: ```json { "trigger_type": "whatsapp::cloud::events", "trigger_namespace": "default", "function_id": "automation::on-template-status", "config": { "kinds": ["webhook.received"], "fields": ["message_template_status_update"], "events": ["APPROVED", "REJECTED"] } } ``` `webhook.received` has `event_id` (a deterministic hash), `field`, optional `event`, and sanitized `data`. Its `message_id` and `chat_id` are empty. `phone_number_id` is empty for WABA-wide events without a phone identity; a nonempty phone filter excludes those events. `timestamp_ms` is Meta's entry or nested event timestamp, or zero when Meta provides none. No receipt time is substituted. Duplicate detection hashes the canonical event and supplied time. Group metadata and calling collections are split into individual events while retaining their nested `groups` or `calls` object inside `data`. Coexistence history/state/echo payloads can be subscribed to by field, but are not imported as ordinary inbox messages. This does not provision coexistence or initiate history synchronization. For a Cloud group, use: ```json { "kinds": ["message.received", "message.status"], "group_ids": ["Y2FwaV9ncm91cDoxMjM="] } ``` Group messages use `chat_id: "group:<id>"`, retain the participant as `sender_id`, and include raw `group_id`. Delivery/read receipts for an individual participant include `participant_id`; they are deduplicated per participant. They do not mark the entire group conversation as delivered/read. These subscriptions use the official Cloud Groups API, not linked-device group JIDs. Meta account eligibility and webhook field subscriptions are still required. See [Meta webhook fields](https://developers.facebook.com/documentation/business-messaging/whatsapp/webhooks/overview) and [group webhook contracts](https://developers.facebook.com/documentation/business-messaging/whatsapp/groups/webhooks).
Exact Meta WhatsApp Business Account ID. Omitted, empty or null means no account restriction.
Individual conversation identities or group:<raw Meta group ID>. Native JIDs are not supported.
Exact value.event names, such as APPROVED. Combined with other filters using AND.
Exact raw Meta webhook field names. For administrative notifications explicitly select kinds: [webhook.received].
Raw Cloud group IDs. Applies to group messages, statuses and group metadata events.
Event kinds to receive. Omitted, empty or null means message.received only. Select message.status explicitly for delivery receipts.
Exact raw Meta message types, such as text, image, interactive or contacts. Future type names are allowed. Status events have no message type and cannot match a nonempty message_types filter.
Group delivery/read receipt participants. Explicitly include message.status in kinds.
Exact Meta Phone Number ID, not the displayed telephone number. Omitted, empty or null means no phone restriction.
Individual sender identities (phone numbers or BSUIDs), never group IDs. Status events have no sender and cannot match a nonempty sender_ids filter.
Delivery states. Set kinds to include message.status; a status filter does not change the default kind. Incoming messages have no status and cannot match a nonempty statuses filter.
Native WhatsApp session, message, receipt and group events
Find workers, kits and executables, or jump to a page.