fix(voicemail): improve greeting generation and playback error handling in VoicemailManager
This commit is contained in:
@@ -252,33 +252,42 @@ class VoicemailManager:
|
|||||||
greeting_path = os.path.join(self.greetings_dir, "greeting.opus")
|
greeting_path = os.path.join(self.greetings_dir, "greeting.opus")
|
||||||
if not os.path.exists(greeting_path):
|
if not os.path.exists(greeting_path):
|
||||||
# Fallback if no greeting generated yet
|
# 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():
|
def session_job():
|
||||||
try:
|
try:
|
||||||
# 1. Play greeting
|
# 1. Play greeting
|
||||||
try:
|
if os.path.exists(greeting_path):
|
||||||
greeting_source = OpusFileSource(greeting_path, target_frame_ms=60)
|
try:
|
||||||
# Attach to transmit mixer
|
greeting_source = OpusFileSource(greeting_path, target_frame_ms=60)
|
||||||
greeting_pipeline = Pipeline(
|
# Attach to transmit mixer
|
||||||
source=greeting_source,
|
greeting_pipeline = Pipeline(
|
||||||
codec=Null(),
|
source=greeting_source,
|
||||||
sink=telephone.transmit_mixer,
|
codec=Null(),
|
||||||
)
|
sink=telephone.transmit_mixer,
|
||||||
greeting_pipeline.start()
|
)
|
||||||
|
greeting_pipeline.start()
|
||||||
|
|
||||||
# Wait for greeting to finish
|
# Wait for greeting to finish
|
||||||
while greeting_source.running:
|
while greeting_source.running:
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
if not telephone.active_call:
|
if not telephone.active_call:
|
||||||
return
|
return
|
||||||
|
|
||||||
greeting_pipeline.stop()
|
greeting_pipeline.stop()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
RNS.log(
|
RNS.log(
|
||||||
f"Voicemail: Could not play greeting (libs missing?): {e}",
|
f"Voicemail: Could not play greeting (libs missing?): {e}",
|
||||||
RNS.LOG_ERROR,
|
RNS.LOG_ERROR,
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
RNS.log("Voicemail: No greeting available to play", RNS.LOG_WARNING)
|
||||||
|
|
||||||
# 2. Play beep
|
# 2. Play beep
|
||||||
beep_source = LXST.ToneSource(
|
beep_source = LXST.ToneSource(
|
||||||
|
|||||||
Reference in New Issue
Block a user