diff --git a/homeassistant/components/voip/assist_satellite.py b/homeassistant/components/voip/assist_satellite.py
index a0aeaaf38d3f4999703dfe923e366640b333c927..6d18d8254f2f9501412e9a87dd7f79f66850a658 100644
--- a/homeassistant/components/voip/assist_satellite.py
+++ b/homeassistant/components/voip/assist_satellite.py
@@ -28,6 +28,7 @@ from homeassistant.components.assist_satellite import (
 from homeassistant.components.network import async_get_source_ip
 from homeassistant.config_entries import ConfigEntry
 from homeassistant.core import Context, HomeAssistant, callback
+from homeassistant.exceptions import HomeAssistantError
 from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
 
 from .const import (
@@ -193,6 +194,12 @@ class VoipAssistSatellite(VoIPEntity, AssistSatelliteEntity, RtpDatagramProtocol
 
         Optionally run a voice pipeline after the announcement has finished.
         """
+        if announcement.media_id_source != "tts":
+            raise HomeAssistantError(
+                translation_domain=DOMAIN,
+                translation_key="non_tts_announcement",
+            )
+
         self._announcement_future = asyncio.Future()
         self._run_pipeline_after_announce = run_pipeline_after
 
diff --git a/homeassistant/components/voip/strings.json b/homeassistant/components/voip/strings.json
index 96c902bf39a1591a703258e7705598f83422148d..4f37ad1d6f723b2f7fb729e126ce5094ca1a33bc 100644
--- a/homeassistant/components/voip/strings.json
+++ b/homeassistant/components/voip/strings.json
@@ -58,5 +58,10 @@
         }
       }
     }
+  },
+  "exceptions": {
+    "non_tts_announcement": {
+      "message": "VoIP does not currently support non-TTS announcements"
+    }
   }
 }
diff --git a/tests/components/voip/test_voip.py b/tests/components/voip/test_voip.py
index 3e3e5337417d57b75e2f9344a78724b075b90f54..d971591c79aa6bbda8dfa8fe1ce70f4b9a8881fd 100644
--- a/tests/components/voip/test_voip.py
+++ b/tests/components/voip/test_voip.py
@@ -22,6 +22,7 @@ from homeassistant.components.voip.devices import VoIPDevice, VoIPDevices
 from homeassistant.components.voip.voip import PreRecordMessageProtocol, make_protocol
 from homeassistant.const import STATE_OFF, STATE_ON, Platform
 from homeassistant.core import Context, HomeAssistant
+from homeassistant.exceptions import HomeAssistantError
 from homeassistant.helpers import entity_registry as er
 from homeassistant.helpers.entity_component import EntityComponent
 from homeassistant.setup import async_setup_component
@@ -862,6 +863,19 @@ async def test_announce(
         & assist_satellite.AssistSatelliteEntityFeature.ANNOUNCE
     )
 
+    with pytest.raises(HomeAssistantError) as err:
+        await hass.services.async_call(
+            "assist_satellite",
+            "announce",
+            service_data={"media_id": "http://example.com"},
+            blocking=True,
+            target={
+                "entity_id": satellite.entity_id,
+            },
+        )
+    assert err.value.translation_domain == "voip"
+    assert err.value.translation_key == "non_tts_announcement"
+
     announcement = assist_satellite.AssistSatelliteAnnouncement(
         message="test announcement",
         media_id=_MEDIA_ID,