When to Use
- Brand character moments: A consumer brand uses a branded sticker pack to send a congratulatory sticker when a customer completes a loyalty milestone, reinforcing brand identity in a playful way.
- Conversational acknowledgements: A chatbot workflow sends a thumbs-up or wave sticker at the end of a successful support resolution to provide a warm, humanised closing of the conversation.
- Seasonal engagement: A retail workflow sends a holiday sticker to opted-in customers as part of a seasonal campaign, paired with a template message containing a discount code.
- Emoji-rich product launches: A product marketing workflow sends a branded sticker for a new product launch to VIP customers as a teaser before the official announcement.
- Children's services: An educational platform sends age-appropriate fun stickers to keep young learners engaged between lesson completion messages.
Media ID required: Stickers must be sent using a pre-uploaded mediaId. You cannot send a sticker by URL. Always upload your sticker file first via media/upload with MIME type image/webp, then use the returned mediaId here. Store the mediaId in your workflow configuration for reuse.
Configuration
Connection
| Field | Required | Description |
accessToken | Required | Permanent System User access token. Store in BizFirst Credentials Manager. |
phoneNumberId | Required | Numeric string ID of the sending WhatsApp Business phone number. |
apiVersion | Optional | Meta Graph API version. Defaults to v18.0. |
Operation
| Field | Required | Description |
to | Required | Recipient's phone number with country code, no + prefix (e.g. 14155552671). |
mediaId | Required | ID of the uploaded WebP sticker from media/upload. Sticker must be WebP format, static or animated. Maximum size: 100 KB for static, 500 KB for animated. Recommended dimensions: 512 x 512 px. |
Sticker Requirements
| Property | Requirement |
| Format | WebP only (MIME type image/webp). |
| Dimensions | 512 x 512 pixels. Non-square stickers may not display correctly. |
| Static max size | 100 KB |
| Animated max size | 500 KB |
| Background | Transparent background recommended for best visual result. |
| Source | Must be uploaded via media/upload first. URL-based stickers are not supported. |
Sample Configuration
{
"resource": "message",
"operation": "sendSticker",
"accessToken": "{{ $credentials.whatsAppToken }}",
"phoneNumberId": "123456789012345",
"to": "{{ $input.customerPhone }}",
"mediaId": "{{ $config.celebrationStickerMediaId }}"
}
Validation Errors
| Error | Cause |
accessToken is required | The accessToken field is empty. |
phoneNumberId is required | The phoneNumberId field is empty. |
to is required | The to field is empty. |
mediaId is required | Stickers require a mediaId. You cannot send a sticker by URL. |
131052 (Meta) | The media type is not WebP, or the sticker exceeds the size limit. |
131047 (Meta) | 24-hour customer service window expired. |
Output
Success Port
| Field | Type | Description |
messageId | string | Unique WhatsApp message ID (wamid). |
phoneNumberId | string | The sending phone number ID. |
to | string | The recipient phone number. |
status | string | "sent" on success. |
errorCode | string | Empty on success. |
errorMessage | string | Empty on success. |
rawResponse | string | Full raw JSON from the Meta API. |
Error Port
| Field | Type | Description |
status | string | "failed" or "error". |
errorCode | string | Meta error code or BizFirst validation code. |
errorMessage | string | Human-readable error description. |
rawResponse | string | Raw API error response. |
Sample Output
{
"messageId": "wamid.HBgLMTQxNTU1NTI2NzEVAgARGBIxQzM4NjhGQTExMjQ3RDMAA",
"phoneNumberId": "123456789012345",
"to": "14155552671",
"status": "sent",
"errorCode": null,
"errorMessage": null,
"rawResponse": "{\"messaging_product\":\"whatsapp\",\"contacts\":[{\"input\":\"14155552671\",\"wa_id\":\"14155552671\"}],\"messages\":[{\"id\":\"wamid.HBgLMTQxNTU1NTI2NzEVAgARGBIxQzM4NjhGQTExMjQ3RDMAA\"}]}"
}
Expression Reference
| Value | Expression | Notes |
| Message ID | {{ $output.sendSticker.messageId }} | Retain for audit trail. Rarely needed for downstream operations. |
| Recipient | {{ $output.sendSticker.to }} | For delivery confirmation logging. |
| Status | {{ $output.sendSticker.status }} | Branch on outcome in IfCondition. |
Node Policies & GuardRails
| Policy Area | Recommendation |
| Credential storage | Store the access token in BizFirst Credentials Manager. Never inline in configuration. |
| Sticker pre-upload pattern | Upload all stickers via media/upload during a one-time setup workflow, not inside a per-message workflow. Store the resulting mediaId values in workflow configuration or a database. Sticker mediaIds are persistent and do not expire. |
| WebP format only | Convert PNG or GIF stickers to WebP format before uploading. Use a Function node with a library like Squoosh or a server-side conversion endpoint if your source stickers are not WebP. |
| File size compliance | Validate sticker file size before uploading: max 100 KB for static, 500 KB for animated. Oversized stickers are rejected at upload time with a 131052 error. |
| Professional tone | Reserve stickers for consumer-facing, informal workflows. Stickers may not align with the expected communication tone for B2B, financial services, healthcare, or legal workflows. |
| 24-hour window | Stickers are free-form messages and subject to the 24-hour customer service window. They cannot be sent via templates. |
Examples
Milestone Celebration Sticker
{
"resource": "message",
"operation": "sendSticker",
"accessToken": "{{ $credentials.whatsAppToken }}",
"phoneNumberId": "123456789012345",
"to": "{{ $input.customerPhone }}",
"mediaId": "{{ $config.goldStarStickerMediaId }}"
}
A loyalty program workflow sends a branded gold star sticker when a customer reaches a new tier. The sticker mediaId is stored in workflow configuration. A follow-up message/sendText node sends the formal congratulations and tier benefits.
Session Close Farewell
{
"resource": "message",
"operation": "sendSticker",
"accessToken": "{{ $credentials.whatsAppToken }}",
"phoneNumberId": "123456789012345",
"to": "{{ $input.customerPhone }}",
"mediaId": "{{ $config.wavingStickerMediaId }}"
}
At the end of a successful support session resolution, the chatbot sends a branded waving character sticker before closing the conversation. The sticker creates a warm, humanised ending that increases customer satisfaction scores compared to a plain "Thank you for contacting us" text message.