invy/backend/test_payload_variants.py

142 lines
4.8 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Test with all potential components (header, body, buttons)
"""
import sys
import os
from dotenv import load_dotenv
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
load_dotenv()
import httpx
import json
async def test_payload():
"""Test different payload structures"""
# Get config
access_token = os.getenv("WHATSAPP_ACCESS_TOKEN")
phone_id = os.getenv("WHATSAPP_PHONE_NUMBER_ID")
if not access_token or not phone_id:
print("[ERROR] Missing credentials in .env")
return
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json"
}
url = f"https://graph.facebook.com/v20.0/{phone_id}/messages"
# Payload with ONLY body parameters (what we're sending now)
payload_1 = {
"messaging_product": "whatsapp",
"to": "+972504370045",
"type": "template",
"template": {
"name": "wedding_invitation",
"language": {"code": "he"},
"components": [
{
"type": "body",
"parameters": [
{"type": "text", "text": "דוד"},
{"type": "text", "text": "דוד"},
{"type": "text", "text": "שרה"},
{"type": "text", "text": "אולם בן-גוריון"},
{"type": "text", "text": "15/06"},
{"type": "text", "text": "18:30"},
{"type": "text", "text": "https://invy.dvirlabs.com/guest"}
]
}
]
}
}
# Payload WITH header component (if template has header)
payload_2 = {
"messaging_product": "whatsapp",
"to": "+972504370045",
"type": "template",
"template": {
"name": "wedding_invitation",
"language": {"code": "he"},
"components": [
{
"type": "header",
"parameters": [] # Empty header
},
{
"type": "body",
"parameters": [
{"type": "text", "text": "דוד"},
{"type": "text", "text": "דוד"},
{"type": "text", "text": "שרה"},
{"type": "text", "text": "אולם בן-גוריון"},
{"type": "text", "text": "15/06"},
{"type": "text", "text": "18:30"},
{"type": "text", "text": "https://invy.dvirlabs.com/guest"}
]
}
]
}
}
# Payload with header + button (if template has buttons)
payload_3 = {
"messaging_product": "whatsapp",
"to": "+972504370045",
"type": "template",
"template": {
"name": "wedding_invitation",
"language": {"code": "he"},
"components": [
{
"type": "body",
"parameters": [
{"type": "text", "text": "דוד"},
{"type": "text", "text": "דוד"},
{"type": "text", "text": "שרה"},
{"type": "text", "text": "אולם בן-גוריון"},
{"type": "text", "text": "15/06"},
{"type": "text", "text": "18:30"},
{"type": "text", "text": "https://invy.dvirlabs.com/guest"}
]
},
{
"type": "button",
"sub_type": "url",
"parameters": [] # Empty button parameters
}
]
}
}
print("Testing different payload structures...")
print("=" * 80)
for i, payload in enumerate([payload_1, payload_2, payload_3], 1):
print(f"\n[Test {i}] Components: {[c['type'] for c in payload['template']['components']]}")
try:
async with httpx.AsyncClient() as client:
response = await client.post(url, json=payload, headers=headers, timeout=10)
if response.status_code in (200, 201):
print(f" [SUCCESS] Message sent!")
data = response.json()
print(f" Message ID: {data.get('messages', [{}])[0].get('id')}")
return
else:
error = response.json().get('error', {}).get('message', 'Unknown error')
print(f" [FAILED] {response.status_code}: {error}")
except Exception as e:
print(f" [ERROR] {e}")
import asyncio
asyncio.run(test_payload())