VoIP block non-TTS announcements (#139658)

* VoIP block non-TTS announcements

* Migrate VoIP to use pipeline token
pull/139763/head
Paulus Schoutsen 2025-03-04 08:02:58 -05:00 committed by GitHub
parent d5ba55d2fc
commit 8a97c2bfca
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 26 additions and 0 deletions

View File

@ -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

View File

@ -58,5 +58,10 @@
}
}
}
},
"exceptions": {
"non_tts_announcement": {
"message": "VoIP does not currently support non-TTS announcements"
}
}
}

View File

@ -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,