avatar-im-sdk是一个web端与云渲染数字人交互的工具,提供了上行通信的能力。
npm i aliyun-avatar-im-sdk
注意:第三步中,对话行为需要等待sessionReady回调后才可以传输数据,否则js会抛出一个错误,因此当session未建立时发送数据到后端可能会出现数据丢失
import AvatarIM from '@alife/avatar-im-sdk'
// 1.调用startWork接口从服务端获取token等参数
// ...
// 2.创建实例,sdk会自动执行client.connect方法,无需重复调用
const client = new AvatarIM({
token:'xxxxxx',
appId:'virtual-human-lab',
tenantId:'20000',
sessionId: "xxxxxxxxxxxxxx",
onMessageCallback:(data) => {
console.log('onMessageCallback-------',data);
}
})
// 3.会话开始
client.startSession({
format: "wav"
});
// 4.等待sessionReady回调
client.sessionReady.then(()=>{
// 5. 数据传输
client.sendAudio({ // 发送音频
base64 // base64字符串
});
client.sendText('文本'); // 发送文字
});
// 6.关闭ws连接
client.closeSession();
创建AvatarIM实例,建立ws连接
使用示例
const client = new AvatarIM(options);
options入参
Name | Description | 是否必选 | Schema |
---|---|---|---|
url | 默认wss://pre-avatar-im.console.aliyun.com/ws | 否 | string |
token | 是 | string | |
appId | 是 | string | |
tenantId | 是 | string | |
sessionId | 会话id,视频输出时为startWork启动pod时返回的sessionId | 是 | string |
onMessageCallback | 处理返回消息的回调函数 | 否 | Function |
主动建立ws连接(调用constructor时会自动调用,手动connect可用于close后手动重新连接)
使用示例
client.connect();
手动关闭ws连接
使用示例
client.close();
开始会话,并返回随机生成的messageId
使用示例
const messageId = client.startSession({
format: "wav"
});
console.log(messageId); // 查看随机生成的messageId
options入参
Name | Description | 是否必选 | Schema |
---|---|---|---|
format | 音频格式,可不传,不传默认 pcm | 否 | string |
sampleRate | 音频采样率,可不传,不传默认 16K | 否 | string |
结束会话,并返回随机生成的messageId
使用示例
const messageId = client.stopSession();
console.log(messageId); // 查看随机生成的messageId
发送文字,并返回随机生成的messageId
使用示例
client.sessionReady().then(() => {
const messageId = client.sendText('你好呀');
console.log(messageId); // 查看随机生成的messageId
});
入参
Name | Description | 是否必选 | Schema |
---|---|---|---|
text | 发送的文本 | 是 | string |
发送音频,并返回随机生成的messageId
使用示例
client.sessionReady().then(() => {
const messageId = client.sendAudio({
base64: 'xxxxxxxxx'
});
console.log(messageId); // 查看随机生成的messageId
});
入参
Name | Description | 是否必选 | Schema |
---|---|---|---|
base64 | 音频数据 | 是 | string |
发送已包装好的纯字符串信息,完全自定义
使用示例
client.send('5{"messageId":"xxx","receiverAppId":"xxxx","content":"{}"}') // 发送数据
client.send('3') // 心跳检测
入参
Name | Description | 是否必选 | Schema |
---|---|---|---|
data | 包装好的纯字符串信息 | 是 | string |
按照固定的消息格式给传入的msg补充必要信息,发送5开头的消息,返回随机生成的messageId
使用示例
const messageId = client.sendMessage({text:"xxx",audio:"xxx"})
console.log(messageId); // 查看随机生成的messageId
// 实际发送的信息为:
5{
"content":{ // 传入的content参数
"text":"xxx",
"audio":"xxx"
},
"messageId": "xxxx", // 随机生成的messageId
"receiverAppId": "xxxx", // constructor里传入的appId
"receiverId": "ability", // 默认值
"receiverType": "server", // 默认值
"sticky": true // 默认值
}
入参
Name | Description | 是否必选 | Schema |
---|---|---|---|
content | 要传的信息 | 是 | object |