This n8n workflow helps Shopify store owners and teams automatically confirm orders via WhatsApp. It checks if the customer's number is valid using Rapiwa API, sends a personalized message, and logs every attempt in Google Sheets—saving time and reducing manual work.
Whether you're a solo entrepreneur or managing a small team, this solution gives you a low-cost alternative to the official WhatsApp Business API, without losing control or personalization.
status and validityTriggered by a Shopify webhook or by reading rows from a Google Sheet.
Normalizes and cleans the order payload.
Extracts details like customer name, phone, items, shipping, and payment info.
Cleans phone numbers (removes special characters).
Verifies if the number is registered on WhatsApp via Rapiwa API.
If valid:
validity = verified and status = sent.If invalid:
validity = unverified and status = not sent.Adds wait/delay between sends to prevent rate limits.
Keeps an audit trail in the connected Google Sheet.
Set up a Shopify webhook for new orders (or connect a Google Sheet).
Create a Google Sheet with columns:
name, number, order id, item name, total price, validity, statusCreate and configure a Rapiwa Bearer token in n8n.
Add Google Sheets OAuth2 credential in n8n.
Import the workflow in n8n and configure these nodes:
order id in your Google Sheet to prevent mismatches.verify-whatsapp endpoint.send-message endpoint.Use an HTTP Request node:
https://app.rapiwa.com/api/verify-whatsappPOSThttpBearerAuth using your Rapiwa token{ "number": "cleaned_number" }Use an If node:
{{ $json.data.exists }} == true (or "true" if string)https://app.rapiwa.com/api/send-messagePOSTHi *{{ $json.customer_full_name }}*,
Thank you for shopping with *SpaGreen Creative*! We're happy to confirm that your order has been successfully placed.
🧾 Order Details
• Product: {{ $json.line_item.title }}
• SKU: {{ $json.line_item.sku }}
• Quantity: {{ $json.line_item.quantity }}
• Vendor: {{ $json.line_item.vendor }}
• Order ID: {{ $json.name }}
• Product ID: {{ $json.line_item.product_id }}
📦 Shipping Information
{{ $json.shipping_address.address1 }} {{ $json.shipping_address.address2 }}
{{ $json.shipping_address.city }}, {{ $json.shipping_address.country }} - {{ $json.shipping_address.zip }}
💳 Payment Summary
• Subtotal: {{ $json.subtotal_price }} BDT
• Tax (VAT): {{ $json.total_tax_amount }} BDT
• Shipping: {{ $json.total_shipping_amount }} BDT
• Discount: {{ $json.total_discount_amount }} BDT
• Total Paid: {{ $json.total_price }} BDT
Order Date: {{ $json.created_date }}
Warm wishes,
*Team SpaGreen Creative*
| name | number | order id | item name | total price | validity | status |
|---|---|---|---|---|---|---|
| Abdul Mannan | 8801322827799 | 8986469695806 | Iphone 10 | 1150 | verified | sent |
| Abdul Mannan | 8801322827799 | 8986469695806 | S25 UltraXXXXeen Android Phone | 23000 | verified | sent |
replace(/\D/g, '')true vs "true").row_number for sheet updates, or unique order id for better targeting.row_number.shopify-app-auth is the credential name used in the export—make sure it's your Rapiwa token.message_type: media.