千里传音播报服务与播报设备之间实现交互,完成智能语音播报,需要调用如下物模型服务。
服务列表
服务名称 | 功能 | 是否必须 |
向设备推送更新语料的指令。 | 是 | |
向设备下发组合播报的语料组及语音播报顺序的指令。 设备可无需返回应答,但参与吱音计划的设备必须返回应答。 | 是 | |
向设备下发语音播报指令,并等待设备应答。 | 是 | |
使设备重播上一次组合播报内容。 | 否 | |
启动设备进行指定语料组合的重复播报。 | 否 | |
停止设备进行固定语料组合的重复播报。 | 否 | |
按照语料标识,删除设备内指定语料。 | 是 | |
将设备的本地语料中,来自千里传音语音播报服务推送的语料全部删除。 | 是 | |
拓展服务 | 方便千里传音播报服务后续做功能拓展。 | 否 |
查看服务定义
登录物联网平台控制台。
在控制台左上方,选择物联网平台所在地域华东2(上海)。
在实例概览页签的全部环境下,找到对应的实例,单击实例卡片。
在左侧导航栏,选择 。
在产品列表中,单击播报设备所属产品对应操作列的查看。
在产品详情页面,单击功能定义页签。
单击服务类型对应功能名称右侧操作列的查看,可查看到对应功能定义的标识符、输入参数、输出参数等信息。
服务定义说明
语料内容下载地址:
物联网平台将待推送的语料地址记录到一个JSON文件中,并将文件的URL推送至设备,设备解析文件后,根据不同语料的下载地址,完成下载后,将语料存放至本地,以便后续实现组合播报。
说明为了实现千里传音服务的正确调用,下载的语料存放至本地的文件应使用语料标识进行命名,或者在播报设备中已实现语料标识与本地文件名的映射关系。
任务标识:
用于标识本次语料推送任务的ID号。在任务完成或发生错误时,需要通过该ID号向物联网平台云端反馈语料推送结果。
设备收到的数据示例
{ "method":"thing.service.SpeechPost", "id":"6835*", "params":{ "jobcode":"LJSdmPCIcG9js83R3IHc3GD6cbN*_16086091*", //任务标识 "url":"http://speech-solution.oss-cn-shanghai.aliyuncs.com/speech_post_content/hL7****gu7Auup1TQUMy4gEcFyQ/LJSdmPCIcG9js8****Hc3GD6cbN.json?Expires=16086&OSSAccessKeyId=LTAIN******&Signature=ivvUslTdFHqeUCsa0yBv%2FD****" //语料内容下载地址 }, "version":"1.0.0" }
URL下载文件内容示例
{ "audios":[ { "format":"wav", //本条语料的音频格式 "id":"100wan", //本条语料标识 "size":69960, //本条语料的大小(字节数) "type":"custom", "url":"http://speech-solution.oss-cn-shanghai.aliyuncs.com/speech_model_audio/A96R0NcWiYoAXPSAuyfoLTG12nn*****/100wan.wav?Expires=1628949824&OSSAccessKeyId=LTAIN******S6P47&Signature=%2Bqk2bs********SfyoXU1Ugjxeg%3D" //语料下载地址 } ], "format":"wav", "size":69960 //本次推送的所有语料的总大小(字节数) }
标识符:SpeechBroadcast。
调用方式:异步。物联网平台执行调用后直接返回结果,不会等待设备的回复消息。
如果使用概述,请参考SDK中《data_model_basic_demo.c》文件中的异步调用回调函数实现异步调用。具体操作,请参见步骤四:设置属性。
static void demo_dm_recv_async_service_invoke(void *dm_handle, const aiot_dm_recv_t *recv, void *userdata) { printf("demo_dm_recv_async_service_invoke msg_id = %ld, service_id = %s, params = %.*s\r\n", (unsigned long)recv->data.async_service_invoke.msg_id, recv->data.async_service_invoke.service_id, recv->data.async_service_invoke.params_len, recv->data.async_service_invoke.params); /* TODO: 以下代码演示如何对来自云平台的异步服务调用进行应答,用户可取消注释查看演示效果 * * 注意:如果用户在回调函数外进行应答,需要自行保存msg_id,因为回调函数入参在退出回调函数后将被SDK销毁,不可以再访问到 */ /* { aiot_dm_msg_t msg; memset(&msg, 0, sizeof(aiot_dm_msg_t)); msg.type = AIOT_DMMSG_ASYNC_SERVICE_REPLY; msg.data.async_service_reply.msg_id = recv->data.async_service_invoke.msg_id; msg.data.async_service_reply.code = 200; msg.data.async_service_reply.service_id = "ToggleLightSwitch"; msg.data.async_service_reply.data = "{\"dataA\": 20}"; int32_t res = aiot_dm_send(dm_handle, &msg); if (res < 0) { printf("aiot_dm_send failed\r\n"); } } */ }
输入参数:
参数名称
说明
组合播报参数
内容播报:用JSON数组传递待播报语料的标识,将标识分别对应存储在本地的语料段落。根据语料标识所属数组下标顺序,依次播报存储在设备端的语料内容。
数字播报:与内容播报不同,数字播报不会逐个下发数字标识,而是下发特殊标识符
{}
来通知设备端进行数字播报。播报金额:格式为
{$***}
,例如{$123.4}
,则播放一百二十三点四元。播报数字:格式为
{N***}
,例如{N123.4}
,则播报一二三点四。
播报指令下发时间戳
播报指令下发时,物联网平台侧的时间戳,为UTC时间戳格式。
播报标识
当前播报指令的消息ID,用于区分不同的播报指令,相同指令设备侧只播报一次。
音频格式
需要播报的语料的音频格式,用于播报标识相同、格式不同的语料,支持:wav,mp3,amr。
返回参数:
参数名称
说明
播报结果
设备端的实际播报结果。返回值如下:
0:语料播报成功。
1:语料已播报,重复播报。
2:语料不存在。
错误信息
用于向调用者返回具体的错误原因,您可按照实际情况自定义。
播报标识
需与输入参数中的播报标识保持一致,用于返回本次播报调用相匹配的应答消息。
开始处理时间戳
设备开始处理播报请求的UTC时间戳,用于云端统计播报的指标。
处理完成时间戳
设备完成处理播报请求的UTC时间戳,用于云端统计播报的指标。
Topic:
/sys/${productKey}/${deviceName}/thing/service/SpeechBroadcast
。payload:
{ "method":"thing.service.SpeechBroadcast", "id":"4532*", "params":{ "format":"wav", //音频格式 "speechs":[ "ZFBDZ", //组合播报参数,内容播报 "{$123}" //组合播报参数,播报金额 ], "id":"zGlLLH9GMhrWTwYWXppcvvM3****", //播报标识 "timestamp":"1608523503634" //播报指令下发时间戳 }, "version":"1.0.0" }
Topic:
/sys/${productKey}/${deviceName}/thing/service/SpeechBroadcast_reply
。payload:
{ "code":200, "data":{ "result":2, "error_message":"speech model not found", "task_id":"LH9GMhrWTwYWXppcvvM3****", "start_time":"1638179978545", "end_time":"1638179978545" }, "id":"4532*" }
返回参数:
参数
说明
code
固定值200,表示播报请求已处理。
id
消息ID,与设备收到的播报请求payload.id保持一致。
data
返回结果。详细说明,请参见定义中的返回参数。
标识符:SyncSpeechBroadcast。
调用方式:同步。物联网平台会等待设备回复;若设备没有回复,则调用超时。
对于同步服务,您需要通过RRPC方式进行回复。如果使用概述,请参考SDK中《data_model_basic_demo.c》文件中的同步调用回调函数实现。具体操作,请参见步骤四:设置属性。
static void demo_dm_recv_sync_service_invoke(void *dm_handle, const aiot_dm_recv_t *recv, void *userdata) { printf("demo_dm_recv_sync_service_invoke msg_id = %ld, rrpc_id = %s, service_id = %s, params = %.*s\r\n", (unsigned long)recv->data.sync_service_invoke.msg_id, recv->data.sync_service_invoke.rrpc_id, recv->data.sync_service_invoke.service_id, recv->data.sync_service_invoke.params_len, recv->data.sync_service_invoke.params); /* TODO:以下代码演示如何对来自云平台的同步服务调用进行应答,用户可取消注释查看演示效果 * * 注意:如果用户在回调函数外进行应答,需要自行保存msg_id和rrpc_id字符串,因为回调函数入参在退出回调函数后将被SDK销毁,不可以再访问到 */ /* { aiot_dm_msg_t msg; memset(&msg, 0, sizeof(aiot_dm_msg_t)); msg.type = AIOT_DMMSG_SYNC_SERVICE_REPLY; msg.data.sync_service_reply.rrpc_id = recv->data.sync_service_invoke.rrpc_id; msg.data.sync_service_reply.msg_id = recv->data.sync_service_invoke.msg_id; msg.data.sync_service_reply.code = 200; msg.data.sync_service_reply.service_id = "SetLightSwitchTimer"; msg.data.sync_service_reply.data = "{}"; int32_t res = aiot_dm_send(dm_handle, &msg); if (res < 0) { printf("aiot_dm_send failed\r\n"); } } */ }
输入参数:
与组合播报中输入参数相同,具体说明,请参见本文组合播报服务定义中的输入参数。
输出参数:
参数名称
说明
播报结果
设备端的实际播报结果。返回值如下:
0:语料播报成功。
1:语料已播报,重复播报。
2:语料不存在。
错误信息
用于向调用者返回具体的错误原因,您可按照实际情况自定义。
播报标识
需与输入参数中的播报标识保持一致,用于返回本次播报调用相匹配的应答消息。
播报结果详情
返回播报时设备的信号强度,电池电量等信息,您可按照实际情况自定义。
开始处理时间戳
设备开始处理播报请求的UTC时间戳,用于云端统计播报的指标。
处理完成时间戳
设备完成处理播报请求的UTC时间戳,用于云端统计播报的指标。
Topic:
/ext/rrpc/${rrpcId}/sys/${productKey}/${deviceName}/thing/service/SyncSpeechBroadcast
。payload:
{ "method":"thing.service.SyncSpeechBroadcast", "id":"4532*", "params":{ "format":"wav", //音频格式 "speechs":[ "ZFBDZ", //组合播报参数,内容播报 "{$123}" //组合播报参数,播报金额 ], "id":"zGlLLH9GMhrWTwYWXppcvvM3****", //播报标识 "timestamp":"1608523503634" //播报指令下发时间戳 }, "version":"1.0.0" }
Topic:
/ext/rrpc/${rrpcId}/sys/${productKey}/${deviceName}/thing/service/SyncSpeechBroadcast
。payload:
{ "code":200, "data":{ "result":2, "error_message":"speech model not found", "task_id":"LH9GMhrWTwYWXppcvvM3****", "start_time":"1638179978545", "end_time":"1638179978545" }, "id":"4532*" }
返回参数:
参数
说明
code
固定值200,表示播报请求已处理。
id
消息ID,与设备收到的播报请求payload.id保持一致。
data
返回结果。详细说明,请参见定义中的返回参数。
播报语料标识列表:
用JSON数组传递需要重复播报语料的标识列表。
音频格式:
需要重复播报语料的音频格式,支持:wav,mp3,amr。
播报语料标识列表:
用JSON数组传递需要停止重复播报语料的标识列表。
音频格式:
需要停止重复播报的语料的格式,支持:wav,mp3,amr。
语料标识:
需要删除的语料的标识。
音频格式:
需要删除语料的音频格式,支持:wav,mp3,amr。
语料推送
当您通过千里传音播报服务向设备推送语料时,设备会收到来自物联网平台语料推送服务的调用。该服务需与事件上报配合使用,将语料推送结果通过事件上报的方式反馈给物联网平台。
定义
功能项 | 说明 |
标识符 | SpeechPost。 |
调用方式 | 异步。物联网平台执行调用后直接返回结果,不会等待设备的回复消息。 |
输入参数 |
语料推送结果
语料推送结果需通过事件上报的方式反馈给物联网平台。具体请参见事件上报。
当设备上报执行结果后,千里传音播报服务控制台语料推送任务看板的状态才会更新,否则即使语料推送成功,任务看板的状态依然会显示超时。
示例
组合播报
当用户播报应用通过千里传音播报服务向设备下达播报指令时,设备端会收到物联网平台组合播报服务的调用。无论调用组合播报API,还是共享组合播报API,设备都将收到组合播报服务的调用,无需分别对接。
定义
示例
设备收到数据示例
设备返回的数据示例
同步组合播报
相对于组合播报服务,同步组合播报服务要求设备端必须返回执行结果,如果物联网平台没有收到返回结果,则会进行播报命令重试。
定义
示例
设备收到的数据示例
设备返回的数据示例
重播上一条
当您通过千里传音播报服务向设备下达重播上一次组合播报内容的指令时,设备会收到物联网平台重播上一条服务的调用。
功能项 | 说明 |
标识符 | ReSpeechBroadcastLastOne。 |
调用方式 | 异步。物联网平台执行调用后直接返回结果,不会等待设备的回复消息。 |
输入参数 | 无。 |
启动重复播报
当您通过千里传音播报服务启动设备进行固定语料组合的重复播报动作时,设备会收到物联网平台启动重复播报服务的调用。
功能项 | 说明 |
标识符 | StartSpeechBroadcastLoop。 |
调用方式 | 异步。物联网平台执行调用后直接返回结果,不会等待设备的回复消息。 |
输入参数 |
停止重复播报
当您通过千里传音播报服务停止设备进行固定语料组合的重复播报动作时,设备会收到物联网平台停止重复播报服务的调用。
功能项 | 说明 |
标识符 | StopSpeechBroadcastLoop。 |
调用方式 | 异步。物联网平台执行调用后直接返回结果,不会等待设备的回复消息。 |
输入参数 |
批量删除语料
当您通过千里传音播报服务删除设备内指定语料时,设备会收到物联网平台批量删除语料服务的调用。调用成功后,您可以在千里传音控制台对设备中的语料进行管理。
定义
功能项 | 说明 |
标识符 | DeleteSpeech。 |
调用方式 | 异步。物联网平台执行调用后直接返回结果,不会等待设备的回复消息。 |
输入参数 | 语料列表:需要删除的语料标识列表,用JSON数组传递。 |
示例
设备收到的数据示例:
{
"method":"thing.service.DeleteSpeech",
"id":"189604****",
"params":{
"speechs":[
{
"format":"wav", //音频格式
"id":"SYS_T**E_0" //语料标识
},
{
"format":"wav",
"id":"SYS_T**E_TIME_ri"
}
]
},
"version":"1.0.0"
}
删除所有推送语料
删除所有由物联网平台云端推送的语料,以释放本地存储资源。该服务对接后,可以在千里传音控制台实现对设备存储的管理。
当您需要删除千里传音播报服务推送至设备中的所有语料时,设备会收到物联网平台删除所有推送语料服务的调用。
功能项 | 说明 |
标识符 | ClearAllSpeechModelByPost。 |
调用方式 | 异步。物联网平台执行调用后直接返回结果,不会等待设备的回复消息。 |
输入参数 | 音频格式:需要删除的语料音频格式。 支持:wav,mp3,amr。 示例:如果传入mp3,则删除设备内所有mp3格式的语料。 |
Topic说明
服务下行调用:
/sys/${productkey}/${deviceName}/thing/service/${tsl.service.identifier}
。服务返回应答:
为了更好地了解服务调用的设备端执行情况,对应异步服务需要通过Topic返回应答。
/sys/${productkey}/${deviceName}/thing/service/${tsl.service.identifier}_reply
。
其中:
${productkey}
、${deviceName}
:替换为具体设备的证书信息。${tsl.service.identifier}
:服务标识符。例如:组合播报为SpeechBroadcast。
使用说明
阿里云OpenAPI开发者门户提供API在线调试工具。您可以模拟云端对设备进行服务调用,验证对物联网平台云端服务调用的响应是否正确。
物联网平台OpenAPI使用说明和使用方法,请参见使用OpenAPI和使用OpenAPI示例。