mirror of
https://github.com/dograh-hq/dograh.git
synced 2026-06-28 08:49:42 +02:00
* feat(twilio): add Answering Machine Detection (AMD) support via telephony config Closes #339 * chore: regenerate OpenAPI spec to fix drift-check The openapi.json snapshot had drifted from the FastAPI app definition because main gained new organization endpoints (billing, credits, context) after this branch was created. Regenerate it with 'python -m scripts.dump_docs_openapi' to bring it back in sync. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add provider-level AMD hooks * fix: handle db error while persisting amd result --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Sabiha Khan <sabihak89@gmail.com> Co-authored-by: Sabiha Khan <87858386+chewwbaka@users.noreply.github.com>
35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
"""Twilio telephony configuration schemas."""
|
|
|
|
from typing import List, Literal
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class TwilioConfigurationRequest(BaseModel):
|
|
"""Request schema for Twilio configuration."""
|
|
|
|
provider: Literal["twilio"] = Field(default="twilio")
|
|
account_sid: str = Field(..., description="Twilio Account SID")
|
|
auth_token: str = Field(..., description="Twilio Auth Token")
|
|
# Phone numbers are managed via the dedicated phone-numbers endpoints; the
|
|
# legacy /telephony-config POST shim still accepts them inline.
|
|
from_numbers: List[str] = Field(
|
|
default_factory=list, description="List of Twilio phone numbers"
|
|
)
|
|
amd_enabled: bool = Field(
|
|
default=False,
|
|
description=(
|
|
"Detect whether outbound calls are answered by a person or machine. "
|
|
"Twilio may bill AMD as an additional per-call feature."
|
|
),
|
|
)
|
|
|
|
|
|
class TwilioConfigurationResponse(BaseModel):
|
|
"""Response schema for Twilio configuration with masked sensitive fields."""
|
|
|
|
provider: Literal["twilio"] = Field(default="twilio")
|
|
account_sid: str # Masked (e.g., "****************def0")
|
|
auth_token: str # Masked (e.g., "****************abc1")
|
|
from_numbers: List[str]
|
|
amd_enabled: bool = False
|