Websocket API
WebAPI 接口描述
大模型互动客户端API接口采用websocket协议的连接方式, 直接进行语音聊天。
主要流程
- 连接
- 连接成功后发送音频数据, 接收音频数据
- 关闭连接
- 名词解释:
- 连接: 这里指TCP连接及握手(Opening Handshake), 一般WebSocket库已经封装,用户不必关心
-
发送数据帧:Sending Data Frame, 类似包的概念,指一次发送的内容 。从客户端到服务端。
- 文本帧:Opcode 0x1 (Text), 文本指令等
- 二进制帧:Opcode 0x2 (Binary), 音频数据帧
-
接收数据帧: Receiving Data Frame, 类似包的概念,指一次发送的内容 。从服务端到客户端。
- 文本帧:Opcode 0x1 (Text), 识别结果和事件
- 二进制帧:Opcode 0x2 (Binary), 实时语音的回答数据
- 关闭连接:Closing Handshake。 关闭连接后就停止了对话
通常WebSocket库用需要用户自己定义下面的3个回调函数实现自己的业务逻辑。
1连接成功后的回调函数:
2{
3 #通常需要开启一个新线程,以避免阻塞无法接收数据
4 1.1 实时发送音频数据帧
5 1.2 发送文本
6}
7
8接收数据的回调函数
9{
10 2.1 实时返回音频数据帧
11 2.2 实时返回文本消息
12}
13
14服务端关闭连接的回调函数
15{
16 3. 关闭客户端连接。
17}
在线调试&示例代码
目前提供如下demo及演示功能.
语言 | 收发音频 | 采集音频 | 播放音频 |
---|---|---|---|
javascript | Y | Y | Y |
Go | Y | ||
C | Y | ||
java | Y | ||
Python | Y | ||
Node.js | Y |
webAPI SDK(javascript)
webAPI SDK(Go)
webAPI SDK(C)
webAPI SDK(Java)
webAPI SDK(Python)
webAPI SDK(Node.js)
g722 codec(C)
请求说明
连接方式一:
连接地址:wss://rtc-aiotgw.exp.bcelive.com/v1/realtime?a=APPID&id=YYYY&t=ZZZZ&ac=raw16k
如果连接成功,一般WebSocket库会发起回调。
连接具体参数说明
参数 | 类型 | 选项 | 说明 |
---|---|---|---|
a | string | 必填 | 大模型互动应用ID, 创建互动应用 |
id | int | 必填 | 大模型互动实例 ai_agent_instance_id 值, 创建大模型互动实例API |
t | string | 必填 | 连接大模型互动实例的context.token值, 创建大模型互动实例API |
ac | string | 可选 | 音频格式,取值有raw,raw16k,pcma, pcmu, g722,opus; 默认是raw16k,要和config的audiocodec值保持一致 |
连接方式二:
连接地址:wss://rtc-aiotgw.exp.bcelive.com/v1/realtime?a=APPID&ak=AK&sk=SK&ac=raw16k
参数 | 类型 | 选项 | 说明 |
---|---|---|---|
a | string | 必填 | 大模型互动应用ID, 创建互动应用 |
ak | string | 必填 | 百度云账号下的AK值, 创建AK/SK |
sk | string | 必填 | 百度云账号下的SK值, 创建AK/SK |
ac | string | 可选 | 音频格式,取值有raw,raw16k,pcma, pcmu, g722,opus; 默认是raw16k |
发送音频数据帧
注意帧的类型(Opcode)是Binary
内容是二进制的音频内容。 每个帧的音频数据长度为20-200ms。 建议最佳20ms一个帧,有限制的也建议60ms。
计算方式:
16000采样率: 1s音频 16000采样点
16bits: 一个采样点 16bits = 2 bytes
1s : = 1000ms
即 20ms 16000 2bytes / 1000ms = 640bytes
实时语音识别api 建议实时发送音频,即每个160ms的帧之后,下一个音频数据帧需要间隔20ms。即:文件,此处需要sleep(20ms)。
发送文本对话信息
注意帧的类型(Opcode)是Text
示例:
[T]:你好!
返回说明
接收数据帧
正常音频数据
注意帧的类型(Opcode)是Binary
WebSocket opcode:binary
WebSocket消息体:音频二进制数据, 具体格式是由连接参数ac确定的
正常文本响应数据
1// 互动智能体事件
2[E]:[AGENTID]:2233343116640256
3[E]:[MEDIA]:[READY]:1
4[E]:[VOICE_COMING]
5[E]:[TTS_BEGIN_SPEAKING]
6[E]:[TTS_END_SPEAKING]
7
8// ASR的返回结果
9[Q]:[M]:上海
10[Q]:[M]:上海有多少
11[Q]:[M]:上海有多少人
12[Q]:上海有多少人?
13
14// 大模型回答结果
15[A]:[M]:人口数量啊。
16[A]:[M]:上海有
17[A]:[M]:2487.4万人。
18[A]:人口数量啊。上海有2487.4万人。
license授权处理步骤:
- 第一步购买lickey。
- 添加代码处理服务器下发的授权消息。
消息格式为: [E]:[LIC]:[MUST]:XXXX - 发送激活消息给服务器。
在收到第2步的消息后, 发送激活消息给服务器。
激活消息格式为:[E]:[LIC]:[ACTIVE]:{"devId":"DDD","uId":"YYY","licKey":"xxx"}
json 中的参数devId 是设备硬件的序列号或设备的MAC地址,唯一标识设备;
参数uId,是使用设备的用户号,可以和设备号一样
参数licKey,就是购买的lickey串。 - 服务器返回授权成功或失败消息。
授权成功消息为: [E]:[LIC]:[RES]:[PASS]:
授权失败消息为: [E]:[LIC]:[RES]:[FAILED]:
如果授权失败,智能体就会自动退出,终止对话。