Amazon Connect语音邮件配置:如何将Kinesis流音频存储至S3桶
将Amazon Connect实时媒体流的语音邮件存储到S3桶的解决方案
1. 先确认Kinesis Video Streams(KVS)的基础配置
- 检查Amazon Connect实例的「实时媒体流」设置,已绑定正确的KVS流ARN,且Connect的服务角色拥有
kinesisvideo:PutMedia权限,确保语音数据能正常流入KVS。 - 确认KVS流状态为「活跃」,可以在KVS控制台查看流入的媒体片段数量,验证数据传输正常。
2. 用Lambda处理KVS中的媒体片段
KVS存储的是碎片化的语音数据,需要拉取并拼接成完整的语音文件:
- 创建Lambda函数,触发方式可选:要么用CloudWatch Events定时批量处理,要么配置KVS的片段通知触发实时处理。
- 在Lambda里用AWS SDK(比如Python的boto3)调用KVS的
ListFragments获取指定时间/呼叫ID对应的片段,再用GetMedia拉取片段的原始音频数据。 - 按片段的时间顺序拼接原始G.711格式数据(Connect语音流默认是G.711 μ-law,直接拼接即可,无需解码)。
3. 音频格式转换(可选)
如果需要转换成MP3/WAV这类通用格式:
- 给Lambda添加包含ffmpeg的层(因为音频处理库依赖ffmpeg),然后用
pydub库做格式转换:
from pydub import AudioSegment # 加载原始G.711 μ-law音频 raw_audio = AudioSegment.from_file("temp_audio.g711", format="mulaw", frame_rate=8000, channels=1) # 导出为MP3 processed_audio = raw_audio.export("voicemail.mp3", format="mp3")
4. 上传到目标S3桶
- 给Lambda执行角色添加
S3:PutObject权限,指定目标S3桶。 - 用boto3将处理好的音频文件上传,建议用呼叫ID作为文件名前缀,方便后续检索:
import boto3 s3_client = boto3.client('s3') s3_client.put_object( Bucket='你的目标S3桶名称', Key=f'voicemails/{呼叫ID}.mp3', Body=processed_audio.read() )
5. 监控与容错
- 在Lambda中添加日志输出,用CloudWatch Logs监控处理流程,排查拉取片段、转换、上传环节的错误。
- 给S3桶配置生命周期规则,比如将超过30天的语音邮件归档到Glacier,降低存储成本。
内容的提问来源于stack exchange,提问作者Bharavi Desai
相关产品推荐
相关产品推荐

