Removed helpers to make routes self contained.

This commit is contained in:
edschuy95 2025-07-15 23:49:54 -04:00
parent 01b2299472
commit e7786593e1
4 changed files with 94 additions and 103 deletions

View file

@ -1,10 +1,11 @@
# routes/voipms.py
import json
import hmac, hashlib
import phonenumbers
from datetime import datetime
from flask import Blueprint, request, jsonify
from config import YEASTAR_WEBHOOK_URL, YEASTAR_SECRET, ENDPOINT_OBSCURITY
from routes.helpers import to_e164, create_yeastar_payload, generate_signature
import requests
import logging
import uuid
@ -84,3 +85,43 @@ def voipms_inbound():
except Exception as e:
logging.error(f"[{request_id}] Error in voipms_inbound: {e}", exc_info=True)
return jsonify({"error": "internal server error"}), 500
def generate_signature(body: str) -> str:
signature = hmac.new(YEASTAR_SECRET.encode(), body.encode(), hashlib.sha256).hexdigest()
return f"sha256={signature}"
def to_e164(number):
try:
parsed = phonenumbers.parse(number, "US")
return phonenumbers.format_number(parsed, phonenumbers.PhoneNumberFormat.E164)
except Exception as e:
logging.warning(f"Failed to normalize phone number {number}: {e}")
return number
def create_yeastar_payload(data):
now_iso = datetime.now().astimezone().isoformat()
message_id = str(int(datetime.utcnow().timestamp()))
payload = {
"data": {
"event_type": "message.received",
"payload": {
"id": message_id,
"from": {
"phone_number": data["from"]
},
"to": [
{"phone_number": num} for num in data["to"]
],
"text": data["text"],
"record_type": "message",
"received_at": now_iso
}
}
}
media_urls = data.get("media_urls", [])
if media_urls:
payload["data"]["payload"].pop("text", None)
payload["data"]["payload"]["media"] = [{"url": url} for url in media_urls]
return payload