27 lines
1.0 KiB
Python
27 lines
1.0 KiB
Python
"""Outbound prerecorded announcement calls."""
|
|
import requests
|
|
from django.conf import settings
|
|
|
|
|
|
class AnnouncementRejected(ValueError):
|
|
"""The provider explicitly refused the requested announcement."""
|
|
|
|
|
|
def place_announcement_call(configuration, *, mobile, idempotency_key):
|
|
headers = {"Idempotency-Key": idempotency_key}
|
|
if configuration.announcement_api_key:
|
|
headers["X-API-Key"] = configuration.announcement_api_key
|
|
response = requests.post(
|
|
configuration.announcement_url,
|
|
json={"customer_number": mobile, "announcement_id": configuration.announcement_id},
|
|
headers=headers,
|
|
timeout=settings.INTEGRATION_HTTP_TIMEOUT_SECONDS,
|
|
)
|
|
response.raise_for_status()
|
|
if response.content:
|
|
payload = response.json()
|
|
if not isinstance(payload, dict):
|
|
raise ValueError("Invalid announcement provider response")
|
|
if payload.get("success") is False:
|
|
raise AnnouncementRejected("Announcement provider rejected the request")
|