invy/backend/test_header_variants.py

169 lines
5.3 KiB
Python

#!/usr/bin/env python3
"""
Test different header parameter formats to find the correct structure.
"""
import os
import httpx
import json
from dotenv import load_dotenv
load_dotenv()
ACCESS_TOKEN = os.getenv("WHATSAPP_ACCESS_TOKEN")
PHONE_NUMBER_ID = os.getenv("WHATSAPP_PHONE_NUMBER_ID")
API_VERSION = "v20.0"
PHONE = "+972504370045"
test_cases = [
{
"name": "Variant 1: Header param as object, Body with 6 params",
"components": [
{
"type": "header",
"parameters": [
{"type": "text", "text": "דביר"}
]
},
{
"type": "body",
"parameters": [
{"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"}
]
}
]
},
{
"name": "Variant 2: Header with text string directly, Body with 6 params",
"components": [
{
"type": "header",
"parameters": ["דביר"]
},
{
"type": "body",
"parameters": [
{"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"}
]
}
]
},
{
"name": "Variant 3: No header, Body with 7 params",
"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"}
]
}
]
},
{
"name": "Variant 4: Header with 2 params, Body with 5 params",
"components": [
{
"type": "header",
"parameters": [
{"type": "text", "text": "דביר"},
{"type": "text", "text": "כללי"}
]
},
{
"type": "body",
"parameters": [
{"type": "text", "text": "שרה"},
{"type": "text", "text": "אולם בן-גוריון"},
{"type": "text", "text": "15/06"},
{"type": "text", "text": "18:30"},
{"type": "text", "text": "https://invy.dvirlabs.com/guest"}
]
}
]
}
]
def test_variant(variant):
"""Test a single variant"""
print(f"\n{'='*80}")
print(f"Testing: {variant['name']}")
print(f"{'='*80}")
payload = {
"messaging_product": "whatsapp",
"to": PHONE,
"type": "template",
"template": {
"name": "wedding_invitation",
"language": {"code": "he"},
"components": variant['components']
}
}
# Count params
total_params = 0
for comp in variant['components']:
if 'parameters' in comp:
total_params += len(comp['parameters'])
print(f"Total parameters: {total_params}")
print(f"Component structure:")
for comp in variant['components']:
print(f" - {comp['type']}: {len(comp.get('parameters', []))} params")
print("\nPayload:")
print(json.dumps(payload, indent=2, ensure_ascii=False))
url = f"https://graph.instagram.com/{API_VERSION}/{PHONE_NUMBER_ID}/messages"
headers = {
"Authorization": f"Bearer {ACCESS_TOKEN}",
"Content-Type": "application/json"
}
try:
response = httpx.post(url, json=payload, headers=headers, timeout=10)
if response.status_code == 200:
data = response.json()
print(f"\n✅ SUCCESS!")
print(f"Message ID: {data.get('messages', [{}])[0].get('id', 'N/A')}")
return True
else:
print(f"\n❌ FAILED (HTTP {response.status_code})")
print(f"Error: {response.text}")
return False
except Exception as e:
print(f"\n❌ Exception: {str(e)}")
return False
if __name__ == "__main__":
print("Testing WhatsApp Template Header Variants")
print("="*80)
results = []
for variant in test_cases:
success = test_variant(variant)
results.append((variant['name'], success))
print(f"\n\n{'='*80}")
print("SUMMARY")
print(f"{'='*80}")
for name, success in results:
status = "✅ SUCCESS" if success else "❌ FAILED"
print(f"{status}: {name}")