47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
"""Configuration for the voip.ms SMS client, loaded from environment.
|
|
|
|
Set credentials before running:
|
|
export VOIPMS_API_USERNAME=...
|
|
export VOIPMS_API_PASSWORD=...
|
|
|
|
On the voip.ms side you must also whitelist this machine's public IP under
|
|
Main Menu -> SOAP / REST API -> API Security, and the sending DID must have
|
|
SMS enabled.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Literal
|
|
|
|
from pydantic import Field
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
model_config = SettingsConfigDict(
|
|
env_prefix="voipms_",
|
|
env_file=".env",
|
|
env_file_encoding="utf-8",
|
|
extra="ignore",
|
|
)
|
|
|
|
api_username: str = Field(..., description="voip.ms API username")
|
|
api_password: str = Field(..., description="voip.ms API password (set in API Security)")
|
|
|
|
base_url: str = Field(
|
|
"https://voip.ms/api/v1/rest.php",
|
|
description="voip.ms REST endpoint. Avoid www.voip.ms (302 drops POST bodies).",
|
|
)
|
|
|
|
dialing_mode: Literal["nanpa", "e164"] = Field(
|
|
"nanpa",
|
|
description="Number format. nanpa=10 digits; e164=+1 then 10 digits.",
|
|
)
|
|
|
|
daily_limit: int = Field(
|
|
100,
|
|
description="Per-UTC-day cap on outbound sends (matches the upstream API limit).",
|
|
ge=0,
|
|
)
|
|
|
|
timeout: float = Field(30.0, description="HTTP timeout in seconds.", ge=1.0) |