diff --git a/docs/content/docs/reference/API-ENDPOINTS.md b/docs/content/docs/reference/API-ENDPOINTS.md index 3b4ae51..2def64e 100644 --- a/docs/content/docs/reference/API-ENDPOINTS.md +++ b/docs/content/docs/reference/API-ENDPOINTS.md @@ -338,6 +338,19 @@ Configures the clock display. ### POST /speaker ✅ **Implemented** Plays TTS messages or URL content for notifications (ST-10 Series only). +> **Requires DNS interception.** Before playing a `play_info` notification the +> speaker validates the `app_key` by calling `GET /v1/auth` against a hardcoded +> Bose host (`audionotification.api.bosecm.com`, on some firmware the +> `...dev...` variant). After the cloud shutdown that host no longer exists, so +> unless the speaker resolves Bose hostnames through AfterTouch (DNS server + +> the `/etc/resolv.conf` hook, so `*.api.bosecm.com` points at AfterTouch, which +> answers `/v1/auth`), the request hangs and returns +> `ALLEGROWEBSERVER_TIMEOUT` (error `1046`) after ~60s. If you cannot use DNS +> interception, play the clip via the `LOCAL_INTERNET_RADIO` path instead (the +> "radio" method used by the web player's TTS): it needs no `app_key` and no DNS +> redirection, but it replaces the current source rather than ducking and +> resuming it. + **TTS Request XML:** ```xml diff --git a/pkg/service/health/checks_dns_speaker_usage.go b/pkg/service/health/checks_dns_speaker_usage.go index 99cf544..a8eaf9b 100644 --- a/pkg/service/health/checks_dns_speaker_usage.go +++ b/pkg/service/health/checks_dns_speaker_usage.go @@ -100,7 +100,10 @@ func runDNSSpeakerUsageCheck( "Bose hostnames. It may simply not have played a TuneIn stream since the " + "last restart, or it may be using a different DNS resolver. " + "Click 'Test DNS path' to run an active probe that sends a silent " + - "notification and waits for the speaker to call back through AfterTouch's DNS.", + "notification and waits for the speaker to call back through AfterTouch's DNS. " + + "The same DNS path is required for TTS / `/speaker` `play_info` notifications: " + + "the speaker validates the app_key against a hardcoded Bose host, so without " + + "DNS interception those requests time out with ALLEGROWEBSERVER_TIMEOUT (1046).", QuickFixes: []QuickFix{probeDNSPathQuickFix}, }) }