diff --git a/esphome/components/voice_assistant/voice_assistant.cpp b/esphome/components/voice_assistant/voice_assistant.cpp index cfb2e1e..9cb3ed1 100644 --- a/esphome/components/voice_assistant/voice_assistant.cpp +++ b/esphome/components/voice_assistant/voice_assistant.cpp @@ -293,8 +293,6 @@ void VoiceAssistant::loop() { msg.audio_settings = audio_settings; msg.wake_word_phrase = this->wake_word_; this->wake_word_ = ""; - msg.pipeline_run_id = this->pipeline_run_id_; - this->pipeline_run_id_ = ""; if (this->api_client_ == nullptr || !this->api_client_->send_voice_assistant_request(msg)) { ESP_LOGW(TAG, "Could not request start"); @@ -396,6 +394,11 @@ void VoiceAssistant::loop() { this->set_timeout("playing", 50, [this]() { this->cancel_timeout("speaker-timeout"); this->set_state_(State::IDLE, State::IDLE); + + api::VoiceAssistantAnnounceFinished msg; + msg.media_id = this->announce_media_id_; + this->api_client_->send_voice_assistant_announce_finished(msg); + this->announce_media_id_ = ""; }); } break; @@ -710,6 +713,7 @@ void VoiceAssistant::on_event(const api::VoiceAssistantEventResponse &msg) { this->defer([this, url]() { #ifdef USE_MEDIA_PLAYER if (this->media_player_ != nullptr) { + this->announce_media_id_ = url; this->media_player_->make_call().set_media_url(url).set_announcement(true).perform(); } #endif @@ -871,10 +875,12 @@ void VoiceAssistant::timer_tick_() { this->timer_tick_trigger_->trigger(res); } -void VoiceAssistant::on_announce(const api::VoiceAssistantAnnounce &msg) { +void VoiceAssistant::on_announce(const api::VoiceAssistantAnnounceRequest &msg) { #ifdef USE_MEDIA_PLAYER if (this->media_player_ != nullptr) { + this->announce_media_id_ = msg.media_id; this->media_player_->make_call().set_media_url(msg.media_id).set_announcement(true).perform(); + this->set_state_(State::STREAMING_RESPONSE, State::STREAMING_RESPONSE); } #endif } diff --git a/esphome/components/voice_assistant/voice_assistant.h b/esphome/components/voice_assistant/voice_assistant.h index 7a5bfeb..bc7d980 100644 --- a/esphome/components/voice_assistant/voice_assistant.h +++ b/esphome/components/voice_assistant/voice_assistant.h @@ -138,7 +138,7 @@ class VoiceAssistant : public Component { void on_event(const api::VoiceAssistantEventResponse &msg); void on_audio(const api::VoiceAssistantAudio &msg); void on_timer_event(const api::VoiceAssistantTimerEventResponse &msg); - void on_announce(const api::VoiceAssistantAnnounce &msg); + void on_announce(const api::VoiceAssistantAnnounceRequest &msg); bool is_running() const { return this->state_ != State::IDLE; } void set_continuous(bool continuous) { this->continuous_ = continuous; } @@ -248,6 +248,7 @@ class VoiceAssistant : public Component { #endif #ifdef USE_MEDIA_PLAYER media_player::MediaPlayer *media_player_{nullptr}; + std::string announce_media_id_{""}; #endif bool local_output_{false}; @@ -256,8 +257,6 @@ class VoiceAssistant : public Component { std::string wake_word_{""}; - std::string pipeline_run_id_{""}; - HighFrequencyLoopRequester high_freq_; #ifdef USE_ESP_ADF