692 lines
17 KiB
Markdown
692 lines
17 KiB
Markdown
|
|
# WhatsApp Master Account Setup Guide
|
|||
|
|
|
|||
|
|
**Quick Setup Guide for Platform Admin**
|
|||
|
|
|
|||
|
|
This guide walks you through setting up the Master WhatsApp Business Account for the bakery-ia pilot program.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Prerequisites
|
|||
|
|
|
|||
|
|
- [ ] Meta/Facebook Business account
|
|||
|
|
- [ ] Business verification documents (tax ID, business registration)
|
|||
|
|
- [ ] 10 phone numbers for pilot bakeries
|
|||
|
|
- [ ] Credit card for WhatsApp Business API billing
|
|||
|
|
|
|||
|
|
**Time Required:** 2-3 hours (including verification wait time)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Step 1: Create Meta Business Account
|
|||
|
|
|
|||
|
|
### 1.1 Create Business Manager
|
|||
|
|
|
|||
|
|
1. Go to [Meta Business Suite](https://business.facebook.com)
|
|||
|
|
2. Click **Create Account**
|
|||
|
|
3. Enter business details:
|
|||
|
|
- Business Name: "Bakery Platform" (or your company name)
|
|||
|
|
- Your Name
|
|||
|
|
- Business Email
|
|||
|
|
4. Click **Submit**
|
|||
|
|
|
|||
|
|
### 1.2 Verify Your Business
|
|||
|
|
|
|||
|
|
Meta requires business verification for WhatsApp API access:
|
|||
|
|
|
|||
|
|
1. In Business Settings → **Security Center**
|
|||
|
|
2. Click **Start Verification**
|
|||
|
|
3. Choose verification method:
|
|||
|
|
- **Business Documents** (Recommended)
|
|||
|
|
- Upload tax registration document
|
|||
|
|
- Upload business license or registration
|
|||
|
|
- **Domain Verification**
|
|||
|
|
- Add DNS TXT record to your domain
|
|||
|
|
- **Phone Verification**
|
|||
|
|
- Receive call/SMS to business phone
|
|||
|
|
|
|||
|
|
4. Wait for verification (typically 1-3 business days)
|
|||
|
|
|
|||
|
|
**Status Check:**
|
|||
|
|
```
|
|||
|
|
Business Settings → Security Center → Verification Status
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Step 2: Add WhatsApp Product
|
|||
|
|
|
|||
|
|
### 2.1 Enable WhatsApp
|
|||
|
|
|
|||
|
|
1. In Business Manager, go to **Settings**
|
|||
|
|
2. Click **Accounts** → **WhatsApp Accounts**
|
|||
|
|
3. Click **Add** → **Create a new WhatsApp Business Account**
|
|||
|
|
4. Fill in details:
|
|||
|
|
- Display Name: "Bakery Platform"
|
|||
|
|
- Category: Food & Beverage
|
|||
|
|
- Description: "Bakery management notifications"
|
|||
|
|
5. Click **Create**
|
|||
|
|
|
|||
|
|
### 2.2 Configure WhatsApp Business Account
|
|||
|
|
|
|||
|
|
1. After creation, note your **WhatsApp Business Account ID (WABA ID)**
|
|||
|
|
- Found in: WhatsApp Manager → Settings → Business Info
|
|||
|
|
- Format: `987654321098765` (15 digits)
|
|||
|
|
- **Save this:** You'll need it for environment variables
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Step 3: Add Phone Numbers
|
|||
|
|
|
|||
|
|
### 3.1 Add Your First Phone Number
|
|||
|
|
|
|||
|
|
**Option A: Use Your Own Phone Number** (Recommended for testing)
|
|||
|
|
|
|||
|
|
1. In WhatsApp Manager → **Phone Numbers**
|
|||
|
|
2. Click **Add Phone Number**
|
|||
|
|
3. Enter phone number in E.164 format: `+34612345678`
|
|||
|
|
4. Choose verification method:
|
|||
|
|
- **SMS** (easiest)
|
|||
|
|
- **Voice call**
|
|||
|
|
5. Enter verification code
|
|||
|
|
6. Note the **Phone Number ID**:
|
|||
|
|
- Format: `123456789012345` (15 digits)
|
|||
|
|
- **Save this:** Default phone number for environment variables
|
|||
|
|
|
|||
|
|
**Option B: Use Meta-Provided Free Number**
|
|||
|
|
|
|||
|
|
1. In WhatsApp Manager → **Phone Numbers**
|
|||
|
|
2. Click **Get a free phone number**
|
|||
|
|
3. Choose country: Spain (+34)
|
|||
|
|
4. Meta assigns a number in format: `+1555XXXXXXX`
|
|||
|
|
5. Note: Free numbers have limitations:
|
|||
|
|
- Can't be ported to other accounts
|
|||
|
|
- Limited to 1,000 conversations/day
|
|||
|
|
- Good for pilot, not production
|
|||
|
|
|
|||
|
|
### 3.2 Add Additional Phone Numbers (For Pilot Bakeries)
|
|||
|
|
|
|||
|
|
Repeat the process to add 10 phone numbers total (one per bakery).
|
|||
|
|
|
|||
|
|
**Tips:**
|
|||
|
|
- Use virtual phone number services (Twilio, Plivo, etc.)
|
|||
|
|
- Cost: ~€5-10/month per number
|
|||
|
|
- Alternative: Request Meta phone numbers (via support ticket)
|
|||
|
|
|
|||
|
|
**Request Phone Number Limit Increase:**
|
|||
|
|
|
|||
|
|
If you need more than 2 phone numbers:
|
|||
|
|
|
|||
|
|
1. Open support ticket at [WhatsApp Business Support](https://business.whatsapp.com/support)
|
|||
|
|
2. Request: "Increase phone number limit to 10 for pilot program"
|
|||
|
|
3. Provide business justification
|
|||
|
|
4. Wait 1-2 days for approval
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Step 4: Create System User & Access Token
|
|||
|
|
|
|||
|
|
### 4.1 Create System User
|
|||
|
|
|
|||
|
|
**Why:** System Users provide permanent access tokens (don't expire every 60 days).
|
|||
|
|
|
|||
|
|
1. In Business Settings → **Users** → **System Users**
|
|||
|
|
2. Click **Add**
|
|||
|
|
3. Enter details:
|
|||
|
|
- Name: "WhatsApp API Service"
|
|||
|
|
- Role: **Admin**
|
|||
|
|
4. Click **Create System User**
|
|||
|
|
|
|||
|
|
### 4.2 Generate Access Token
|
|||
|
|
|
|||
|
|
1. Select the system user you just created
|
|||
|
|
2. Click **Add Assets**
|
|||
|
|
3. Choose **WhatsApp Accounts**
|
|||
|
|
4. Select your WhatsApp Business Account
|
|||
|
|
5. Grant permissions:
|
|||
|
|
- ✅ Manage WhatsApp Business Account
|
|||
|
|
- ✅ Manage WhatsApp Business Messaging
|
|||
|
|
- ✅ Read WhatsApp Business Insights
|
|||
|
|
6. Click **Generate New Token**
|
|||
|
|
7. Select token permissions:
|
|||
|
|
- ✅ `whatsapp_business_management`
|
|||
|
|
- ✅ `whatsapp_business_messaging`
|
|||
|
|
8. Click **Generate Token**
|
|||
|
|
9. **IMPORTANT:** Copy the token immediately
|
|||
|
|
- Format: `EAAxxxxxxxxxxxxxxxxxxxxxxxx` (long string)
|
|||
|
|
- **Save this securely:** You can't view it again!
|
|||
|
|
|
|||
|
|
**Token Security:**
|
|||
|
|
```bash
|
|||
|
|
# Good: Use environment variable
|
|||
|
|
WHATSAPP_ACCESS_TOKEN=EAAxxxxxxxxxxxxx
|
|||
|
|
|
|||
|
|
# Bad: Hardcode in source code
|
|||
|
|
# token = "EAAxxxxxxxxxxxxx" # DON'T DO THIS!
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Step 5: Create Message Templates
|
|||
|
|
|
|||
|
|
WhatsApp requires pre-approved templates for business-initiated messages.
|
|||
|
|
|
|||
|
|
### 5.1 Create PO Notification Template
|
|||
|
|
|
|||
|
|
1. In WhatsApp Manager → **Message Templates**
|
|||
|
|
2. Click **Create Template**
|
|||
|
|
3. Fill in template details:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Template Name: po_notification
|
|||
|
|
Category: UTILITY
|
|||
|
|
Languages: Spanish (es)
|
|||
|
|
|
|||
|
|
Message Body:
|
|||
|
|
Hola {{1}}, has recibido una nueva orden de compra {{2}} por un total de {{3}}.
|
|||
|
|
|
|||
|
|
Parameters:
|
|||
|
|
1. Supplier Name (text)
|
|||
|
|
2. PO Number (text)
|
|||
|
|
3. Total Amount (text)
|
|||
|
|
|
|||
|
|
Example:
|
|||
|
|
Hola Juan García, has recibido una nueva orden de compra PO-12345 por un total de €250.50.
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
4. Click **Submit for Approval**
|
|||
|
|
|
|||
|
|
**Approval Time:**
|
|||
|
|
- Typical: 15 minutes to 2 hours
|
|||
|
|
- Complex templates: Up to 24 hours
|
|||
|
|
- If rejected: Review feedback and resubmit
|
|||
|
|
|
|||
|
|
### 5.2 Check Template Status
|
|||
|
|
|
|||
|
|
**Via UI:**
|
|||
|
|
```
|
|||
|
|
WhatsApp Manager → Message Templates → Filter by Status
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Via API:**
|
|||
|
|
```bash
|
|||
|
|
curl "https://graph.facebook.com/v18.0/{WABA_ID}/message_templates?fields=name,status,language" \
|
|||
|
|
-H "Authorization: Bearer {ACCESS_TOKEN}" | jq
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Template Statuses:**
|
|||
|
|
- `PENDING` - Under review
|
|||
|
|
- `APPROVED` - Ready to use
|
|||
|
|
- `REJECTED` - Review feedback and fix
|
|||
|
|
- `DISABLED` - Paused due to quality issues
|
|||
|
|
|
|||
|
|
### 5.3 Create Additional Templates (Optional)
|
|||
|
|
|
|||
|
|
For inventory alerts, production alerts, etc.:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Template Name: low_stock_alert
|
|||
|
|
Category: UTILITY
|
|||
|
|
Language: Spanish (es)
|
|||
|
|
Message:
|
|||
|
|
⚠️ Alerta: El ingrediente {{1}} tiene stock bajo.
|
|||
|
|
Cantidad actual: {{2}} {{3}}.
|
|||
|
|
Punto de reorden: {{4}} {{5}}.
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Step 6: Configure Webhooks (For Status Updates)
|
|||
|
|
|
|||
|
|
### 6.1 Create Webhook Endpoint
|
|||
|
|
|
|||
|
|
Webhooks notify you of message delivery status, read receipts, etc.
|
|||
|
|
|
|||
|
|
**Your webhook endpoint:**
|
|||
|
|
```
|
|||
|
|
https://your-domain.com/api/v1/whatsapp/webhook
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Implemented in:** `services/notification/app/api/whatsapp_webhooks.py`
|
|||
|
|
|
|||
|
|
### 6.2 Register Webhook with Meta
|
|||
|
|
|
|||
|
|
1. In WhatsApp Manager → **Configuration**
|
|||
|
|
2. Click **Edit** next to Webhook
|
|||
|
|
3. Enter details:
|
|||
|
|
```
|
|||
|
|
Callback URL: https://your-domain.com/api/v1/whatsapp/webhook
|
|||
|
|
Verify Token: random-secret-token-here
|
|||
|
|
```
|
|||
|
|
4. Click **Verify and Save**
|
|||
|
|
|
|||
|
|
**Meta will send GET request to verify:**
|
|||
|
|
```
|
|||
|
|
GET /api/v1/whatsapp/webhook?hub.verify_token=YOUR_TOKEN&hub.challenge=XXXXX
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Your endpoint must respond with:** `hub.challenge` value
|
|||
|
|
|
|||
|
|
### 6.3 Subscribe to Webhook Events
|
|||
|
|
|
|||
|
|
Select events to receive:
|
|||
|
|
|
|||
|
|
- ✅ `messages` - Incoming messages (for replies)
|
|||
|
|
- ✅ `message_status` - Delivery, read receipts
|
|||
|
|
- ✅ `message_echoes` - Sent message confirmations
|
|||
|
|
|
|||
|
|
**Environment Variable:**
|
|||
|
|
```bash
|
|||
|
|
WHATSAPP_WEBHOOK_VERIFY_TOKEN=random-secret-token-here
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Step 7: Configure Environment Variables
|
|||
|
|
|
|||
|
|
### 7.1 Collect All Credentials
|
|||
|
|
|
|||
|
|
You should now have:
|
|||
|
|
|
|||
|
|
1. ✅ **WhatsApp Business Account ID (WABA ID)**
|
|||
|
|
- Example: `987654321098765`
|
|||
|
|
- Where: WhatsApp Manager → Settings → Business Info
|
|||
|
|
|
|||
|
|
2. ✅ **Access Token**
|
|||
|
|
- Example: `EAAxxxxxxxxxxxxxxxxxxxxxxxx`
|
|||
|
|
- Where: System User token you generated
|
|||
|
|
|
|||
|
|
3. ✅ **Phone Number ID** (default/fallback)
|
|||
|
|
- Example: `123456789012345`
|
|||
|
|
- Where: WhatsApp Manager → Phone Numbers
|
|||
|
|
|
|||
|
|
4. ✅ **Webhook Verify Token** (you chose this)
|
|||
|
|
- Example: `my-secret-webhook-token-12345`
|
|||
|
|
|
|||
|
|
### 7.2 Update Notification Service Environment
|
|||
|
|
|
|||
|
|
**File:** `services/notification/.env`
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# ================================================================
|
|||
|
|
# WhatsApp Business Cloud API Configuration
|
|||
|
|
# ================================================================
|
|||
|
|
|
|||
|
|
# Master WhatsApp Business Account ID (15 digits)
|
|||
|
|
WHATSAPP_BUSINESS_ACCOUNT_ID=987654321098765
|
|||
|
|
|
|||
|
|
# System User Access Token (starts with EAA)
|
|||
|
|
WHATSAPP_ACCESS_TOKEN=EAAxxxxxxxxxxxxxxxxxxxxxxxx
|
|||
|
|
|
|||
|
|
# Default Phone Number ID (15 digits) - fallback if tenant has none assigned
|
|||
|
|
WHATSAPP_PHONE_NUMBER_ID=123456789012345
|
|||
|
|
|
|||
|
|
# WhatsApp Cloud API Version
|
|||
|
|
WHATSAPP_API_VERSION=v18.0
|
|||
|
|
|
|||
|
|
# Enable/disable WhatsApp notifications globally
|
|||
|
|
ENABLE_WHATSAPP_NOTIFICATIONS=true
|
|||
|
|
|
|||
|
|
# Webhook verification token (random secret you chose)
|
|||
|
|
WHATSAPP_WEBHOOK_VERIFY_TOKEN=my-secret-webhook-token-12345
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 7.3 Restart Services
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Docker Compose
|
|||
|
|
docker-compose restart notification-service
|
|||
|
|
|
|||
|
|
# Kubernetes
|
|||
|
|
kubectl rollout restart deployment/notification-service
|
|||
|
|
|
|||
|
|
# Or rebuild
|
|||
|
|
docker-compose up -d --build notification-service
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Step 8: Verify Setup
|
|||
|
|
|
|||
|
|
### 8.1 Test API Connectivity
|
|||
|
|
|
|||
|
|
**Check if credentials work:**
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X GET "https://graph.facebook.com/v18.0/{PHONE_NUMBER_ID}" \
|
|||
|
|
-H "Authorization: Bearer {ACCESS_TOKEN}" \
|
|||
|
|
| jq
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Expected Response:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"verified_name": "Bakery Platform",
|
|||
|
|
"display_phone_number": "+34 612 345 678",
|
|||
|
|
"quality_rating": "GREEN",
|
|||
|
|
"id": "123456789012345"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**If error:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"error": {
|
|||
|
|
"message": "Invalid OAuth access token",
|
|||
|
|
"type": "OAuthException",
|
|||
|
|
"code": 190
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
→ Check your access token
|
|||
|
|
|
|||
|
|
### 8.2 Test Sending a Message
|
|||
|
|
|
|||
|
|
**Via API:**
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST "https://graph.facebook.com/v18.0/{PHONE_NUMBER_ID}/messages" \
|
|||
|
|
-H "Authorization: Bearer {ACCESS_TOKEN}" \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{
|
|||
|
|
"messaging_product": "whatsapp",
|
|||
|
|
"to": "+34612345678",
|
|||
|
|
"type": "template",
|
|||
|
|
"template": {
|
|||
|
|
"name": "po_notification",
|
|||
|
|
"language": {
|
|||
|
|
"code": "es"
|
|||
|
|
},
|
|||
|
|
"components": [
|
|||
|
|
{
|
|||
|
|
"type": "body",
|
|||
|
|
"parameters": [
|
|||
|
|
{"type": "text", "text": "Juan García"},
|
|||
|
|
{"type": "text", "text": "PO-12345"},
|
|||
|
|
{"type": "text", "text": "€250.50"}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Expected Response:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"messaging_product": "whatsapp",
|
|||
|
|
"contacts": [
|
|||
|
|
{
|
|||
|
|
"input": "+34612345678",
|
|||
|
|
"wa_id": "34612345678"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"messages": [
|
|||
|
|
{
|
|||
|
|
"id": "wamid.XXXxxxXXXxxxXXX"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Check WhatsApp on recipient's phone!**
|
|||
|
|
|
|||
|
|
### 8.3 Test via Notification Service
|
|||
|
|
|
|||
|
|
**Trigger PO notification:**
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST http://localhost:8002/api/v1/whatsapp/send \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{
|
|||
|
|
"tenant_id": "uuid-here",
|
|||
|
|
"recipient_phone": "+34612345678",
|
|||
|
|
"recipient_name": "Juan García",
|
|||
|
|
"message_type": "template",
|
|||
|
|
"template": {
|
|||
|
|
"template_name": "po_notification",
|
|||
|
|
"language": "es",
|
|||
|
|
"components": [
|
|||
|
|
{
|
|||
|
|
"type": "body",
|
|||
|
|
"parameters": [
|
|||
|
|
{"type": "text", "text": "Juan García"},
|
|||
|
|
{"type": "text", "text": "PO-TEST-001"},
|
|||
|
|
{"type": "text", "text": "€150.00"}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Check logs:**
|
|||
|
|
```bash
|
|||
|
|
docker logs -f notification-service | grep whatsapp
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Expected log output:**
|
|||
|
|
```
|
|||
|
|
[INFO] Using shared WhatsApp account tenant_id=xxx phone_number_id=123456789012345
|
|||
|
|
[INFO] WhatsApp template message sent successfully message_id=xxx whatsapp_message_id=wamid.XXX
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Step 9: Assign Phone Numbers to Tenants
|
|||
|
|
|
|||
|
|
Now that the master account is configured, assign phone numbers to each bakery.
|
|||
|
|
|
|||
|
|
### 9.1 Access Admin Interface
|
|||
|
|
|
|||
|
|
1. Open: `http://localhost:5173/app/admin/whatsapp`
|
|||
|
|
2. You should see:
|
|||
|
|
- **Available Phone Numbers:** List of your 10 numbers
|
|||
|
|
- **Bakery Tenants:** List of all bakeries
|
|||
|
|
|
|||
|
|
### 9.2 Assign Each Bakery
|
|||
|
|
|
|||
|
|
For each of the 10 pilot bakeries:
|
|||
|
|
|
|||
|
|
1. Find tenant in the list
|
|||
|
|
2. Click dropdown: **Assign phone number...**
|
|||
|
|
3. Select a phone number
|
|||
|
|
4. Verify green checkmark appears
|
|||
|
|
|
|||
|
|
**Example:**
|
|||
|
|
```
|
|||
|
|
Panadería San Juan → +34 612 345 678
|
|||
|
|
Panadería Goiko → +34 612 345 679
|
|||
|
|
Bakery Artesano → +34 612 345 680
|
|||
|
|
... (7 more)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 9.3 Verify Assignments
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Check all assignments
|
|||
|
|
curl http://localhost:8001/api/v1/admin/whatsapp/tenants | jq
|
|||
|
|
|
|||
|
|
# Should show each tenant with assigned phone
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Step 10: Monitor & Maintain
|
|||
|
|
|
|||
|
|
### 10.1 Monitor Quality Rating
|
|||
|
|
|
|||
|
|
WhatsApp penalizes low-quality messaging. Check your quality rating weekly:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X GET "https://graph.facebook.com/v18.0/{PHONE_NUMBER_ID}" \
|
|||
|
|
-H "Authorization: Bearer {ACCESS_TOKEN}" \
|
|||
|
|
| jq '.quality_rating'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Quality Ratings:**
|
|||
|
|
- **GREEN** ✅ - All good, no restrictions
|
|||
|
|
- **YELLOW** ⚠️ - Warning, review messaging patterns
|
|||
|
|
- **RED** ❌ - Restricted, fix issues immediately
|
|||
|
|
|
|||
|
|
**Common Issues Leading to Low Quality:**
|
|||
|
|
- High block rate (users blocking your number)
|
|||
|
|
- Sending to invalid phone numbers
|
|||
|
|
- Template violations (sending promotional content in UTILITY templates)
|
|||
|
|
- User reports (spam complaints)
|
|||
|
|
|
|||
|
|
### 10.2 Check Message Costs
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# View billing in Meta Business Manager
|
|||
|
|
Business Settings → Payments → WhatsApp Business API
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Cost per Conversation (Spain):**
|
|||
|
|
- Business-initiated: €0.0319 - €0.0699
|
|||
|
|
- User-initiated: Free (24hr window)
|
|||
|
|
|
|||
|
|
**Monthly Estimate (10 Bakeries):**
|
|||
|
|
- 5 POs per day per bakery = 50 messages/day
|
|||
|
|
- 50 × 30 days = 1,500 messages/month
|
|||
|
|
- 1,500 × €0.05 = **~€75/month**
|
|||
|
|
|
|||
|
|
### 10.3 Rotate Access Token (Every 60 Days)
|
|||
|
|
|
|||
|
|
Even though system user tokens are "permanent," rotate for security:
|
|||
|
|
|
|||
|
|
1. Generate new token (Step 4.2)
|
|||
|
|
2. Update environment variable
|
|||
|
|
3. Restart notification service
|
|||
|
|
4. Revoke old token
|
|||
|
|
|
|||
|
|
**Set reminder:** Calendar alert every 60 days
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Troubleshooting
|
|||
|
|
|
|||
|
|
### Issue: Business verification stuck
|
|||
|
|
|
|||
|
|
**Solution:**
|
|||
|
|
- Check Business Manager → Security Center
|
|||
|
|
- Common reasons:
|
|||
|
|
- Documents unclear/incomplete
|
|||
|
|
- Business name mismatch with documents
|
|||
|
|
- Banned domain/business
|
|||
|
|
- Contact Meta Business Support if > 5 days
|
|||
|
|
|
|||
|
|
### Issue: Phone number verification fails
|
|||
|
|
|
|||
|
|
**Error:** "This phone number is already registered with WhatsApp"
|
|||
|
|
|
|||
|
|
**Solution:**
|
|||
|
|
- Number is used for personal WhatsApp
|
|||
|
|
- You must use a different number OR
|
|||
|
|
- Delete personal WhatsApp account (this is permanent!)
|
|||
|
|
|
|||
|
|
### Issue: Template rejected
|
|||
|
|
|
|||
|
|
**Common Rejection Reasons:**
|
|||
|
|
1. **Contains promotional content in UTILITY template**
|
|||
|
|
- Fix: Remove words like "offer," "sale," "discount"
|
|||
|
|
- Use MARKETING category instead
|
|||
|
|
|
|||
|
|
2. **Missing variable indicators**
|
|||
|
|
- Fix: Ensure {{1}}, {{2}}, {{3}} are clearly marked
|
|||
|
|
- Provide good example values
|
|||
|
|
|
|||
|
|
3. **Unclear purpose**
|
|||
|
|
- Fix: Add context in template description
|
|||
|
|
- Explain use case clearly
|
|||
|
|
|
|||
|
|
**Resubmit:** Edit template and click "Submit for Review" again
|
|||
|
|
|
|||
|
|
### Issue: "Invalid OAuth access token"
|
|||
|
|
|
|||
|
|
**Solutions:**
|
|||
|
|
1. Token expired → Generate new one (Step 4.2)
|
|||
|
|
2. Wrong token → Copy correct token from System User
|
|||
|
|
3. Token doesn't have permissions → Regenerate with correct scopes
|
|||
|
|
|
|||
|
|
### Issue: Webhook verification fails
|
|||
|
|
|
|||
|
|
**Error:** "The URL couldn't be validated. Callback verification failed"
|
|||
|
|
|
|||
|
|
**Checklist:**
|
|||
|
|
- [ ] Endpoint is publicly accessible (not localhost)
|
|||
|
|
- [ ] Returns `200 OK` status
|
|||
|
|
- [ ] Returns the `hub.challenge` value exactly
|
|||
|
|
- [ ] HTTPS enabled (not HTTP)
|
|||
|
|
- [ ] Verify token matches environment variable
|
|||
|
|
|
|||
|
|
**Test webhook manually:**
|
|||
|
|
```bash
|
|||
|
|
curl "https://your-domain.com/api/v1/whatsapp/webhook?hub.verify_token=YOUR_TOKEN&hub.challenge=12345"
|
|||
|
|
# Should return: 12345
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Checklist: You're Done When...
|
|||
|
|
|
|||
|
|
- [ ] Meta Business Account created and verified
|
|||
|
|
- [ ] WhatsApp Business Account created (WABA ID saved)
|
|||
|
|
- [ ] 10 phone numbers added and verified
|
|||
|
|
- [ ] System User created
|
|||
|
|
- [ ] Access Token generated and saved securely
|
|||
|
|
- [ ] Message template `po_notification` approved
|
|||
|
|
- [ ] Webhook configured and verified
|
|||
|
|
- [ ] Environment variables set in `.env`
|
|||
|
|
- [ ] Notification service restarted
|
|||
|
|
- [ ] Test message sent successfully
|
|||
|
|
- [ ] All 10 bakeries assigned phone numbers
|
|||
|
|
- [ ] Quality rating is GREEN
|
|||
|
|
- [ ] Billing configured in Meta Business Manager
|
|||
|
|
|
|||
|
|
**Estimated Total Time:** 2-3 hours (plus 1-3 days for business verification)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Next Steps
|
|||
|
|
|
|||
|
|
1. **Inform Bakeries:**
|
|||
|
|
- Send email: "WhatsApp notifications are now available"
|
|||
|
|
- Instruct them to toggle WhatsApp ON in settings
|
|||
|
|
- No configuration needed on their end!
|
|||
|
|
|
|||
|
|
2. **Monitor First Week:**
|
|||
|
|
- Check quality rating daily
|
|||
|
|
- Review message logs for errors
|
|||
|
|
- Gather bakery feedback
|
|||
|
|
|
|||
|
|
3. **Scale Beyond Pilot:**
|
|||
|
|
- Request phone number limit increase (up to 120)
|
|||
|
|
- Consider WhatsApp Embedded Signup for self-service
|
|||
|
|
- Evaluate tiered pricing (Standard vs. Enterprise)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Support Resources
|
|||
|
|
|
|||
|
|
**Meta Documentation:**
|
|||
|
|
- WhatsApp Cloud API: https://developers.facebook.com/docs/whatsapp/cloud-api
|
|||
|
|
- Getting Started Guide: https://developers.facebook.com/docs/whatsapp/cloud-api/get-started
|
|||
|
|
- Template Guidelines: https://developers.facebook.com/docs/whatsapp/message-templates/guidelines
|
|||
|
|
|
|||
|
|
**Meta Support:**
|
|||
|
|
- Business Support: https://business.whatsapp.com/support
|
|||
|
|
- Developer Community: https://developers.facebook.com/community/
|
|||
|
|
|
|||
|
|
**Internal:**
|
|||
|
|
- Full Implementation Guide: `WHATSAPP_SHARED_ACCOUNT_GUIDE.md`
|
|||
|
|
- Admin Interface: `http://localhost:5173/app/admin/whatsapp`
|
|||
|
|
- API Documentation: `http://localhost:8001/docs#/whatsapp-admin`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**Document Version:** 1.0
|
|||
|
|
**Last Updated:** 2025-01-17
|
|||
|
|
**Author:** Platform Engineering Team
|
|||
|
|
**Estimated Setup Time:** 2-3 hours
|
|||
|
|
**Difficulty:** Intermediate
|