- Shipped
- November 15, 2026 at 12:59 PM UTC
- Author
- Kamo
- Commit
- 5fe32d7
- slug on every phone server / text provider (list + get + create/update), unique across both kinds in creation order; GET /api/voip/provider-slugs. - GET /api/voip/text-compliance + PUT /help-reply: the SMS_HELP_REPLY saved text seeded per org on first read or HELP (REQUIRED, names the org, says how to stop) and used by SmsKeywordService; STOP/HELP/START 30-day counts from comms_sms_inbound_receipt; Do Not Contact (texts) count; saved texts by purpose; 10DLC registration read live from Telnyx (10dlc brand/campaign/number assignment) and Twilio (A2P brands + messaging-service Usa2p), 6h cache, UNKNOWN in plain words elsewhere. Fixes the Telnyx health check's 10DLC number-assignment path (it 404ed and passed silently). - Provider Health Watch: every 10 min under the singleton lock, two failed checks in a row raise ONE PHONE_PROVIDER_UNHEALTHY to the MANAGE_VOIP_SETTINGS holders, deep link **************** state in voip_provider_health_watch, reset on recovery. - GET/PUT **************** (voip_call_recording_settings): recordCalls, announceRecording, announcementText, consentMode; per-phone-server enforcedBy KAMO/PROVIDER with where to set it. Enforced on FreePBX via the pbx-config 'recording' object (notice spoken by Kamo Speech, 8 kHz WAV, sent once per wording) and on KamoPBX (account call_recording + TTS notice in front of every number callflow; outgoing/internal not recorded when a notice is due). - Change log rows (shared OrgChange, after commit, never failing the save): numbers, saved texts, Do Not Contact / Do Not Block (personal: counts only), Do Not Contact call mode, extensions assign/unassign, HELP reply, call recording, providers (credentials secret, add/remove no undo). - KAMO_SPEECH_API_KEY env from kamo-speech-auth (optional).
