""" 对话 TTS 音频 URL 下发到客户端。 与回忆录章节图片一致:私有桶下不能把「直链」当公开可读 URL 使用,应对 COS object key 生成预签名下载地址后再交给 App(参见 `normalize_image_assets_for_api` 中的 `get_download_url`)。 持久化(DB / Redis)仍保存 upload 返回的 canonical URL,仅在 API 响应与 WS 实时下发时做 presign。 """ from __future__ import annotations from app.core.cos_url_keys import presign_tts_urls_for_playback from app.ports.storage import ObjectStorage def apply_presigned_tts_urls_to_messages( messages: list[dict], storage: ObjectStorage | None, ) -> None: """就地改写助手消息的 `ttsAudioUrls` 为预签名 URL;无 storage 时不变。""" if not storage: return for m in messages: tts = m.get("ttsAudioUrls") if not isinstance(tts, list) or not tts: continue str_urls = [x for x in tts if isinstance(x, str)] m["ttsAudioUrls"] = presign_tts_urls_for_playback(str_urls, storage)