首页 虚拟数字人开放平台 开发指南 2D播报数字人接入指南

2D播报数字人接入指南

2D播报数字人(对应开放平台的“咨询播报”场景)是虚拟数字人开放平台提供能够支持用户通过发送文本让2D数字人进行播报的实时文本驱动数字人产品能力。本篇文档将介绍如何接入2D播报数字人。

能力介绍

2D播报数字人是虚拟数字人开放平台提供能够支持用户直接发送文本让2D数字人进行实时播报的数字人产品能力。

使用场景

适用于一些需要2D数字人进行文本播报的场景,如咨询播报等场景,通过封装结合ASR语音识别及云小蜜对话机器人能力也可以实现互动数字人相同的能力(也可以直接使用虚拟数字人平台提供的互动数字人产品直接实现语音与数字人互动)。

前置条件

下述介绍接入2D播报数字人需要提前完成的步骤,每个步骤都需要完成才能顺利接入2D播报数字人。

1. 申请阿里云账号

2. 申请购买权限,完成购买开通服务

3. 进入虚拟数字人开放平台创建并配置应用

具体创建和配置流程可以参考:创建并配置数字人应用

重要

创建播报数字人应用时请在菜单选择“播报数字人”,然后点击创建数字人应用。

技术接入

警告

请确保完成上述全部前置步骤,获取到阿里云账号的AccessKey ID和AccessKey Secret(点击获取),以及获取到对应数字人应用的tenantId和appId。

下面介绍接入播报数字人的完整步骤以及涉及到API

1. 了解虚拟数字人开放平台服务端API接入方式

虚拟数字人开放平台的服务端API采用OpenAPI形式对外输出,具体对接方案见:服务端 API 接入

2. 调用OpenAPI启动一路数字人实例

下面介绍通过Java调用OpenAPI启动一路数字人实例的代码示例,获取到返回的sessionId以及token。

public static void main(String[] args) throws Exception {  
    // 初始化sdk 
    Config config = new com.aliyun.teaopenapi.models.Config();
    config.setAccessKeyId("<accessKeyId>");
    config.setAccessKeySecret("<accessSecret>");
    // 在服务接入点可以查看其他的endpoint配置
    config.setEndpoint("avatar.cn-zhangjiakou.aliyuncs.com");
    Client client = new Client(config);
    
    // 调用api
    StartInstanceRequest startInstanceRequest = new StartInstanceRequest();
    // 租户ID从数字人开放平台的业务配置详情中获取
    startInstanceRequest.setTenantId(<tenantId>);
    // 业务APP从数字人开放平台的业务配置详情中获取
    startInstanceRequest.setApp(new StartInstanceRequest.StartInstanceRequestApp().setAppId("<appId>"));
    startInstanceRequest.setUser(new StartInstanceRequest.StartInstanceRequestUser().setUserId("<userId>").setUserName("<userName>"));   
    StartInstanceResponse startInstanceResponse = client.startInstance(startInstanceRequest);

    // 获取启动后SessionId
    String sessionId = startInstanceResponse.getBody().getData().getSessionId();
    // 获取启动后的Channel信息,在通过RTC进行拉流时需要使用
    StartInstanceResponseBodyDataChannel channel = startInstanceResponse.getBody().getData().getChannel();
}
说明

接口调用返回的sessionId在后续步骤发送文本让数字人进行播报时将会使用到,channel信息在对接RTC进行拉流时需要使用。

关于StartInstance API的详细信息可以参考:《StartInstance - 启动一个数字人》。同时OpenAPI提供了在线调试页面,可以直接面代码调试API:OpenAPI在线调试

3. 通过SendMessage驱动数字人进行播报

播报数字人需要接入方调用SendMessage接口驱动数字人进行文本播报,下面是一段示例代码。

public static void main(String[] args) throws Exception {  
    // 初始化sdk 
    Config config = new com.aliyun.teaopenapi.models.Config();
    config.setAccessKeyId("<accessKeyId>");
    config.setAccessKeySecret("<accessSecret>");
    // 在服务接入点可以查看其他的endpoint配置
    config.setEndpoint("avatar.cn-zhangjiakou.aliyuncs.com");
    Client client = new Client(config);
    
    // 调用api
    SendMessageRequest sendMessageRequest = new SendMessageRequest();
    // 租户ID从数字人开放平台的业务配置详情中获取
    sendMessageRequest.setTenantId(<tenantId>);
    // 获取startInstance返回的SessionId
    sendMessageRequest.setSessionId("<sessionId>");
    // 传入要播报的文本内容
    sendMessageRequest.setTextRequest(new SendMessageRequest.SendMessageRequestTextRequest()
       .setCommandType("START")
       .setSpeechText("你好,我是智慧数字人小萌,很高兴跟大家见面")
       .setId(UUID.randomUUID().toString()));
    SendMessageResponse sendMessageResponse = client.sendMessage(sendMessageRequest);
}
重要

关于SendMessage API的详细信息可以参考:《SendMessage - 发送文本消息》。同时OpenAPI提供了在线调试页面,可以直接面代码调试API:OpenAPI在线调试

4. 接入RTC客户端进行拉流

接入RTC客户端可参考文档:实时流媒体服务接入。需要使用到第二步中获取到的Channel信息。

5. 调用OpenAPI停止对应数字人实例

下面介绍通过Java调用OpenAPI启动一路数字人实例的代码示例,需要使用到第二步中获取的sessionId。

public static void main(String[] args) throws Exception {  
    // 初始化sdk 
    Config config = new com.aliyun.teaopenapi.models.Config();
    config.setAccessKeyId("<accessKeyId>");
    config.setAccessKeySecret("<accessSecret>");
    // 在服务接入点可以查看其他的endpoint配置
    config.setEndpoint("avatar.cn-zhangjiakou.aliyuncs.com");
    Client client = new Client(config);
    
    // 调用api
    StopInstanceRequest stopInstanceRequest = new StopInstanceRequest();
    // 租户ID从数字人开放平台的业务配置详情中获取
    stopInstanceRequest.setTenantId(<tenantId>);
    // 获取startInstance返回的SessionId
    stopInstanceRequest.setSessionId(<sessionId>);
    StopInstanceResponse stopInstanceResponse = client.stopInstance(stopInstanceRequest);
}

6. sessionId丢失如何停止数字人实例

针对运行中的数字人实例,如果sessionId丢失将无法调用StopInstance接口停止,此时可通过调用QueryRunningIntance接口获取到正在运行中的数字人实例列表,从而获取到对应的sessionId。

public static void main(String[] args) throws Exception {  
    // 初始化sdk 
    Config config = new com.aliyun.teaopenapi.models.Config();
    config.setAccessKeyId("<accessKeyId>");
    config.setAccessKeySecret("<accessSecret>");
    // 在服务接入点可以查看其他的endpoint配置
    config.setEndpoint("avatar.cn-zhangjiakou.aliyuncs.com");
    Client client = new Client(config);
    
    // 调用api
    QueryRunningInstanceRequest queryRunningInstanceRequest = new QueryRunningInstanceRequest();
    // 租户ID从数字人开放平台的业务配置详情中获取
    queryRunningInstanceRequest.setTenantId(<tenantId>);
    // 业务APP从数字人开放平台的业务配置详情中获取
    queryRunningInstanceRequest.setApp(new QueryRunningInstanceRequest.QueryRunningInstanceRequestApp().setAppId("<appId>"));
    // 获取运行中的数字人实例信息
    QueryRunningInstanceResponse stopInstanceResponse = client.queryRunningInstance(queryRunningInstanceRequest);
}

阿里云首页 虚拟数字人 相关技术圈