Skip to main content

Telephony

Connected providers​

All four routes are admin only.

List providers​

GET /api/integrations/telephony

{
"providers": [
{ "provider": "plivo", "is_connected": false, "implemented": true, "connected_at": null },
{ "provider": "exotel", "is_connected": false, "implemented": true, "connected_at": null },
{ "provider": "twilio", "is_connected": false, "implemented": false, "connected_at": null }
]
}

Every supported provider is listed whether or not it is connected, so a UI can render the full set. implemented reports whether this build supports the provider.

Get one provider​

GET /api/integrations/telephony/{provider}

Connect a provider​

PUT /api/integrations/telephony/{provider}

{
"auth_id": "MAXXXXXXXXXXXXXXXXXX",
"auth_token": "your-provider-token",
"phone_number": "+915550010000"
}

Disconnect​

DELETE /api/integrations/telephony/{provider}

Credentials are encrypted at rest​

nextneural_assist encrypts stored provider credentials with SETTINGS_ENCRYPTION_KEY before writing them. Two consequences worth planning for:

  • The key is required to connect a provider, and to read credentials back when placing a call.
  • Rotating or losing the key makes existing credentials undecryptable. There is no recovery path — reconnect each provider with fresh credentials.

Secrets are never returned by the API, only whether a provider is connected.

Model routing​

GET /api/settings/model-routing — any member

PATCH /api/settings/model-routing — superadmin only

{
"stt_model": "sarvam",
"diarization": { "enabled": false, "url": null },
"embedding": { "enabled": false, "url": null },
"vllm": { "enabled": false, "url": null }
}

stt_model accepts gpu or sarvam. Each stage is { "enabled": bool, "url": string|null } — note the key is url, not vllm_endpoint.

FieldPurpose
stt_modelSpeech recognition model
diarizationSeparating who spoke when
embeddingVectors for knowledge base search
vllmSelf-hosted inference endpoint
The shape differs from nextneural_intel

nextneural_intel uses diarization_url, translation, and custom_analysis, with each stage shaped {enabled, provider, vllm_endpoint}. nextneural_assist uses diarization, embedding, and vllm, each shaped {enabled, url}. Only stt_model is common to both.

Superadmin-gated for the same reason as everywhere else: a misrouted model breaks every organization on the deployment, not just the one that changed it.

Exotel sample rate​

EXOTEL_SAMPLE_RATE must match the rate in the stream URL Exotel is given. They disagree silently — audio plays at the wrong speed and transcription returns nonsense, rather than failing outright.