Ecommerce Voice CS
实现一个最小可集成的电商售后语音客服 skill。
Trigger
识别触发词:
这两个模式必须完全独立运行,不能共享会话状态、配置或业务逻辑。用户触发哪个模式,就只进入哪个模式。
售后模式
收到售后触发词后,不要立刻进入客服模式。先收集并确认这些配置:
- -
api_key(可选;若未设置环境变量 SENSEAUDIO_API_KEY 时再提供) - INLINECODE4
- INLINECODE5
- INLINECODE6
- INLINECODE7
- INLINECODE8 (可选,默认
child_0001_b)
配置收集完整后,先给用户一份确认摘要。只有用户明确回复“确认进入”,才正式进入售后模式。
进入售后模式后,每次处理客户消息时都必须:
- 1. 先生成文本客服回复
- 再生成 TTS 音频文件
- 在文本结尾附上“
TTS 已生成成功,文件已保存到:<path>”
电话推销模式
收到推销触发词后,不要立刻进入推销模式。先收集并确认这些配置:
- -
api_key(可选;若未设置环境变量 SENSEAUDIO_API_KEY 时再提供) - INLINECODE13
- INLINECODE14
- INLINECODE15
- INLINECODE16
- INLINECODE17
- INLINECODE18 (可选,默认
child_0001_b)
配置收集完整后,先给用户一份确认摘要。只有用户明确回复“开始”或确认进入,才正式进入电话推销模式。
进入电话推销模式后,每次处理客户消息时都必须:
- 1. 先生成电话推销文本话术
- 再生成 TTS 音频文件
- 在文本结尾附上“
TTS 已生成成功,文件已保存到:<path>”
Runtime Inputs
调用方应提供这些字段:
- -
session_id: 会话标识。多轮配置和客服模式都依赖同一个 INLINECODE22 - INLINECODE23 : 用户输入文本
- INLINECODE24 : SenseAudio API Key,可选;优先通过环境变量
SENSEAUDIO_API_KEY 提供,未设置时再由调用方传入 - INLINECODE26 : 已确认可用的 SenseAudio voice_id
- INLINECODE27 : 退款政策文本
- INLINECODE28 : 是否支持拆封退货
- INLINECODE29 : 运费承担方
- INLINECODE30 : 音频输出目录
- INLINECODE31 : 电话推销产品名称
- INLINECODE32 : 电话推销产品功能
- INLINECODE33 : 电话推销产品优势
- INLINECODE34 : 电话推销可优惠范围
- INLINECODE35 : 可选,默认 INLINECODE36
Playback Protocol
当 skill 成功生成音频时,返回结果除 audio_file 外,还会带一个 playback 字段,供宿主直接播放:
CODEBLOCK0
宿主约定:
- - 当
playback 不为 null 且 playback.action == "play_audio" 时,立即播放 INLINECODE42 - 播放完成后不要删除文件,因为
retain_file 固定为 INLINECODE44 - 如果宿主不支持自动播放,至少保留
audio_file 和 playback.path 供后续手动播放
Confirmed Voice IDs
只使用这 3 个已确认可用的 voice_id:
- - INLINECODE47
- INLINECODE48
- INLINECODE49
如果调用方未指定 voice_id,默认使用 child_0001_b。
Files
- -
helper.py: 对外调用入口,包含售后模式和电话推销模式两套独立状态机 - INLINECODE53 : 底层实现,包括状态管理、规则引擎、SenseAudio TTS 适配层
Notes
- - 当前仅接入公开可验证的 SenseAudio TTS 接口
- 音色克隆上传接口未公开时,不实现
upload_sample 真正上传;直接使用现有 INLINECODE55 - TTS 接口文档: INLINECODE56
电商语音客服
实现一个最小可集成的电商售后语音客服 skill。
触发词
识别触发词:
- - 我需要你现在当一个客服机器人
- 我需要你现在当一个推销员
这两个模式必须完全独立运行,不能共享会话状态、配置或业务逻辑。用户触发哪个模式,就只进入哪个模式。
售后模式
收到售后触发词后,不要立刻进入客服模式。先收集并确认这些配置:
- - apikey(可选;若未设置环境变量 SENSEAUDIOAPIKEY 时再提供)
- refundpolicy
- unboxingallowed
- shippingfeeby
- audiooutputpath
- voiceid(可选,默认 child0001b)
配置收集完整后,先给用户一份确认摘要。只有用户明确回复“确认进入”,才正式进入售后模式。
进入售后模式后,每次处理客户消息时都必须:
- 1. 先生成文本客服回复
- 再生成 TTS 音频文件
- 在文本结尾附上“TTS 已生成成功,文件已保存到:”
电话推销模式
收到推销触发词后,不要立刻进入推销模式。先收集并确认这些配置:
- - apikey(可选;若未设置环境变量 SENSEAUDIOAPIKEY 时再提供)
- audiooutputpath
- productname
- productfeatures
- productadvantages
- discountrange
- voiceid(可选,默认 child0001b)
配置收集完整后,先给用户一份确认摘要。只有用户明确回复“开始”或确认进入,才正式进入电话推销模式。
进入电话推销模式后,每次处理客户消息时都必须:
- 1. 先生成电话推销文本话术
- 再生成 TTS 音频文件
- 在文本结尾附上“TTS 已生成成功,文件已保存到:”
运行时输入
调用方应提供这些字段:
- - sessionid: 会话标识。多轮配置和客服模式都依赖同一个 sessionid
- message: 用户输入文本
- apikey: SenseAudio API Key,可选;优先通过环境变量 SENSEAUDIOAPIKEY 提供,未设置时再由调用方传入
- voiceid: 已确认可用的 SenseAudio voiceid
- refundpolicy: 退款政策文本
- unboxingallowed: 是否支持拆封退货
- shippingfeeby: 运费承担方
- audiooutputpath: 音频输出目录
- productname: 电话推销产品名称
- productfeatures: 电话推销产品功能
- productadvantages: 电话推销产品优势
- discountrange: 电话推销可优惠范围
- audioformat: 可选,默认 .mp3
播放协议
当 skill 成功生成音频时,返回结果除 audio_file 外,还会带一个 playback 字段,供宿主直接播放:
json
{
playback: {
action: play_audio,
auto_play: true,
sourcetype: localfile,
path: ttsoutput\\csreply20260315210818.mp3,
format: mp3,
mime_type: audio/mpeg,
retain_file: true
}
}
宿主约定:
- - 当 playback 不为 null 且 playback.action == playaudio 时,立即播放 playback.path
- 播放完成后不要删除文件,因为 retainfile 固定为 true
- 如果宿主不支持自动播放,至少保留 audio_file 和 playback.path 供后续手动播放
已确认可用的音色 ID
只使用这 3 个已确认可用的 voice_id:
- - child0001b
- male0004a
- male0018a
如果调用方未指定 voiceid,默认使用 child0001_b。
文件
- - helper.py: 对外调用入口,包含售后模式和电话推销模式两套独立状态机
- src/ecommercevoicecs/: 底层实现,包括状态管理、规则引擎、SenseAudio TTS 适配层
备注
- - 当前仅接入公开可验证的 SenseAudio TTS 接口
- 音色克隆上传接口未公开时,不实现 uploadsample 真正上传;直接使用现有 voiceid
- TTS 接口文档:https://senseaudio.cn/docs/voice_api