From c10fef9723c996e18ae6d01bdea4406fb2606301 Mon Sep 17 00:00:00 2001 From: Sudo-Ivan Date: Thu, 1 Jan 2026 22:26:54 -0600 Subject: [PATCH] fix(voicemail): improve greeting generation and playback error handling in VoicemailManager --- meshchatx/src/backend/voicemail_manager.py | 51 +++++++++++++--------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/meshchatx/src/backend/voicemail_manager.py b/meshchatx/src/backend/voicemail_manager.py index cfd128b..b29cb0a 100644 --- a/meshchatx/src/backend/voicemail_manager.py +++ b/meshchatx/src/backend/voicemail_manager.py @@ -252,33 +252,42 @@ class VoicemailManager: greeting_path = os.path.join(self.greetings_dir, "greeting.opus") if not os.path.exists(greeting_path): # Fallback if no greeting generated yet - self.generate_greeting(self.config.voicemail_greeting.get()) + if self.has_espeak and self.has_ffmpeg: + try: + self.generate_greeting(self.config.voicemail_greeting.get()) + except Exception as e: + RNS.log(f"Voicemail: Could not generate initial greeting: {e}", RNS.LOG_ERROR) + else: + RNS.log("Voicemail: espeak-ng or ffmpeg missing, cannot generate greeting", RNS.LOG_WARNING) def session_job(): try: # 1. Play greeting - try: - greeting_source = OpusFileSource(greeting_path, target_frame_ms=60) - # Attach to transmit mixer - greeting_pipeline = Pipeline( - source=greeting_source, - codec=Null(), - sink=telephone.transmit_mixer, - ) - greeting_pipeline.start() + if os.path.exists(greeting_path): + try: + greeting_source = OpusFileSource(greeting_path, target_frame_ms=60) + # Attach to transmit mixer + greeting_pipeline = Pipeline( + source=greeting_source, + codec=Null(), + sink=telephone.transmit_mixer, + ) + greeting_pipeline.start() - # Wait for greeting to finish - while greeting_source.running: - time.sleep(0.1) - if not telephone.active_call: - return + # Wait for greeting to finish + while greeting_source.running: + time.sleep(0.1) + if not telephone.active_call: + return - greeting_pipeline.stop() - except Exception as e: - RNS.log( - f"Voicemail: Could not play greeting (libs missing?): {e}", - RNS.LOG_ERROR, - ) + greeting_pipeline.stop() + except Exception as e: + RNS.log( + f"Voicemail: Could not play greeting (libs missing?): {e}", + RNS.LOG_ERROR, + ) + else: + RNS.log("Voicemail: No greeting available to play", RNS.LOG_WARNING) # 2. Play beep beep_source = LXST.ToneSource(