Messaging platform approval required: The Instagram Messaging API requires your Meta app to have the instagram_manage_messages permission, which requires App Review approval from Meta. You cannot send messages to users who have not previously messaged your account (outside the 24-hour standard messaging window or without additional approvals).
When to Use
- Customer support response: When a user sends a DM enquiring about a product or service, trigger an automated workflow to send an acknowledgement message and a link to your support portal.
- Order confirmation DM: After a customer completes a purchase that originated from Instagram (tracked via UTM or link-in-bio), send a personalised order confirmation DM as additional confirmation and brand engagement.
- Lead nurturing follow-up: When a user messages your account expressing buying intent, send a follow-up DM with a personalised offer link or product recommendation after a set delay.
- Giveaway winner notification: Send winner notification messages to selected accounts who entered the giveaway by messaging your account.
- Appointment reminders: For service businesses, send reminder DMs to customers who booked via Instagram messaging, 24 hours before their appointment.
Configuration
Connection
| Field | Required | Description |
accessToken | Required | Long-lived Instagram access token stored in BizFirst Credentials Manager. |
igUserId | Required | Your Instagram Business/Creator account ID (the sender account). |
Operation
| Field | Required | Description |
resource | Required | Must be messaging. |
operation | Required | Must be send. |
recipientId | Required | The Page-Scoped ID (PSID) of the recipient. Obtained from the webhook event when the user messages your account. |
message | Required | Text message body to send. Plain text only. Maximum ~2000 characters. |
Sample Configuration JSON
{
"resource": "messaging",
"operation": "send",
"accessToken": "{{ $credential.instagram.accessToken }}",
"igUserId": "17841400000000000",
"recipientId": "{{ $trigger.body.value.senderId }}",
"message": "Thanks for reaching out! Our team will respond within 2 hours. In the meantime, check our FAQ at https://yourbrand.com/faq"
}
Validation Errors
| Error | Cause |
accessToken is required | accessToken field is missing or empty. |
igUserId is required | igUserId field is missing or empty. |
recipientId is required | recipientId field is missing or empty. |
message is required | message field is missing or empty. |
| Graph API error 10 | Outside 24-hour messaging window or missing platform approval. |
| Graph API error 551 | Recipient has blocked messaging from your account. |
Output
Success Port
| Field | Type | Description |
status | string | "success" |
messageId | string | ID of the sent message. |
recipientId | string | PSID of the recipient — same as input recipientId. |
payload | string | Raw JSON response from the Graph API. |
Error Port
| Field | Type | Description |
status | string | "error" |
recipientId | string | The intended recipient ID, for error logging. |
errorCode | string | Graph API error code. |
errorMessage | string | Error description. |
payload | string | Raw error response. |
Sample Output JSON
{
"status": "success",
"messageId": "aWdfZAG9waW50ZAXJlY29yZABhc3NldABuYW1lAA==",
"recipientId": "17858893300000001",
"payload": "{\"recipient_id\":\"17858893300000001\",\"message_id\":\"aWdfZA...\"}"
}
Expression Reference
| Expression | Value |
{{ $output.instagram.messageId }} | Sent message ID |
{{ $output.instagram.recipientId }} | Recipient's PSID |
Node Policies & GuardRails
- 24-hour messaging window: Instagram only permits responses within 24 hours of the user's last message (standard window). Outside this window, you need Meta's approval for specific use cases (e.g. appointment reminders require ACCOUNT_UPDATE tag).
- GDPR: Message content and recipient IDs are personal data. Do not log full message content to persistent storage beyond what is operationally necessary. Honour user deletion requests by purging message records.
- Anti-spam: Sending unsolicited bulk messages violates Meta's Messaging Policy and will result in the account being flagged or banned. Only message users who have initiated contact.
- Rate limit: Subject to Messenger Platform rate limits in addition to the standard 200 calls/hour. High-volume messaging may require Messenger API tier upgrades.
Examples
Auto-acknowledgement on incoming message
{
"resource": "messaging",
"operation": "send",
"accessToken": "{{ $credential.instagram.accessToken }}",
"igUserId": "{{ $env.IG_USER_ID }}",
"recipientId": "{{ $trigger.body.value.senderId }}",
"message": "Hi! Thanks for your message. We'll get back to you within 2 business hours. Our store hours are Mon–Fri 9am–6pm GMT."
}
Triggered by a trigger/webhook node on messages events. Immediately sends an auto-acknowledgement to the user while the CRM ticket is being created in parallel.
Order confirmation follow-up DM
{
"resource": "messaging",
"operation": "send",
"accessToken": "{{ $credential.instagram.accessToken }}",
"igUserId": "17841400000000000",
"recipientId": "{{ $db.customers.where(orderId=$input.orderId).instagramPsid }}",
"message": "Your order #{{ $input.orderId }} is confirmed! Expected delivery: {{ $input.deliveryDate }}. Track at https://yourbrand.com/track/{{ $input.orderId }}"
}