springboot項目接入天貓精靈語音功能
最近工作需要使用到天貓精靈的語音功能,大體是通過呼叫對應的“調(diào)用詞”實現(xiàn)攜帶參數(shù),然后調(diào)用我項目中的接口,以實現(xiàn)對應的業(yè)務。所以在此簡單的記錄下使用過程 實際上:天貓精靈的官方文檔記錄的也很詳細
重點參見自定義接入
1、創(chuàng)建語音技能

創(chuàng)建一個意圖

先簡單填入一個單輪對話,此時我設置了默認意圖。所以我對天貓精靈說
天貓精靈 熱水用完了 (調(diào)用詞) 或 天貓精靈 熱水用完了 吃了沒 (調(diào)用詞+單輪對話)
都調(diào)用的是這個意圖

創(chuàng)建實體,對于實體的創(chuàng)建,只有你在如下情況需要用到
天貓精靈 熱水用完了 {今天}的天氣 (調(diào)用詞)+ 單輪對話<包含數(shù)據(jù)> 天貓精靈 熱水用完了 放一首{周杰倫}的歌曲 天貓精靈 熱水用完了 我要去{19R}樓
像如上這些情況,考慮到{}中的數(shù)據(jù)是要作為參數(shù)傳遞給后端服務來進行操作的。所以需要創(chuàng)建對應實體。實體的作用就是為了在{}插槽的位置將你口述語音識別的內(nèi)容轉化為符合實體中設定的值的內(nèi)容。

當然你也可以引用公共的實體(長度,任意數(shù)等),這里的@floor寫的時候不需要加@,這個標識可以作為后面單論對話的插值,如我要去@{floor}樓

這里也創(chuàng)建一個帶參的意圖,創(chuàng)建單論對話的時候要選擇“模板”

部署后端服務,可以為意圖單獨綁定服務,這里測試方便就綁定同一服務。這里的服務部署地址就是你為這個意圖寫的controller的路徑,當然得是公網(wǎng)上的。我們先下載認證文件,將認證文件放到我們的springboot項目下,表示這個技能可與這個web service配對 文檔指向3


這里除了放在路徑下,也可以直接寫一個controller,如下。如果后面認證失敗,可以試試
@PostMapping("/aligenie/6523cc2653ef3a0fed8證書.txt")
public String authentication(){
return "Jfc4Z4Ur15JwUBuvUQD5wg7Nu8+l+HscqYlfofbyJdZPKKvjJdxxxxxxxBH+L5";//證書內(nèi)容
}
2、一個SpringBoot項目
導入官方提供的依賴 文檔指向1
<dependency>
<groupId>com.alibaba.da.coin</groupId>
<artifactId>semantic-execute-meta</artifactId>
<version>1.1.18-REALEASE</version>
</dependency>
便于操作,我就直接再控制層中寫代碼 , 大家可以直接去 文檔指向2查看官方提供的簡單示例和呼叫天貓精靈時產(chǎn)生的請求頭和請求正文。參照請求正文的格式,我們可以從傳遞過來的taskQuery取得正文中的任何數(shù)據(jù)
@RestController
@RequestMapping("/genie")
@Slf4j
public class GenieController {
@PostMapping("/getGenieMsg")
public ResultModel<TaskResult> bindingBuilding(@RequestBody String taskQuery) {
log.info("天貓精靈測試 : leading:" + taskQuery);
TaskQuery query = MetaFormat.parseToQuery(taskQuery);
Map<String, String> requestData = query.getRequestData();
log.info("requestData:" + requestData.toString());
List<SlotEntity> slotEntities = query.getSlotEntities();
if (slotEntities.size() > 0) {
log.info("slotEntities:" + slotEntities.get(0).getStandardValue());
}
//返回數(shù)據(jù)
ResultModel<TaskResult> resultModel = new ResultModel<TaskResult>();
TaskResult result = new TaskResult();
resultModel.setReturnCode("0");
result.setReply("測試成功");
result.setExecuteCode(ExecuteCode.SUCCESS);
result.setResultType(ResultType.RESULT);
resultModel.setReturnValue(result);
return resultModel;
}
}
然后將服務跑起來,采用花生殼的內(nèi)網(wǎng)穿透將服務部署到公網(wǎng)上,這么用來測試很方便。不會可以參見這篇文章

3、后端部署
繼續(xù)回到天貓精靈的控制臺,將公網(wǎng)服務器地址加上Controller路徑填上去,點擊保存的時候他會判斷你的web service有沒有認證文件,如果點擊報錯報錯,可以檢查一下 檢查指向1
關于服務器SSL證書可參見 文檔指向4

4、測試

后端返回數(shù)據(jù)
2021-12-04 21:13:06.796 INFO 5388 --- [nio-8091-exec-2] c.a.s.demo.controller.GenieController :
天貓精靈測試 : leading:{
"sessionId":"79c799a7-d4ee-495e-b472-0effa1c23fa3",
"utterance":"熱水用完了",
"requestData"{}, //非真機,沒有數(shù)據(jù)
"botId":114376,
"domainId":63502,
"skillId":84340,
"skillName":"TIAMTEst",
"intentId":123759,
"intentName":"天貓精靈測試",
"slotEntities":[], //沒有傳參
"requestId":"20211204211305435-225488739",
"device":{},
"skillSession":{
"skillSessionId":"ae3fa617-ecf7-4c90-a2ac-8ba05038a24e",
"newSession":true
},
"context":{
"system":{
"apiAccessToken":""
}
}
}
2021-12-04 21:13:06.796 INFO 5388 --- [nio-8091-exec-2] c.a.s.demo.controller.GenieController :
requestData:{}

2021-12-04 21:29:51.463 INFO 5388 --- [nio-8091-exec-7] c.a.s.demo.controller.GenieController :
天貓精靈測試 : leading:{
"sessionId":"206b0ee1-c4bf-4834-9caa-571960f2a9fc",
"utterance":"熱水用完了上K2樓",
"requestData":{},
"botId":114376,
"domainId":63502,
"skillId":84340,
"skillName":"TIAMTEst",
"intentId":123760,
"intentName":"傳參測試",
"slotEntities":[
{"intentParameterId":95268,
"intentParameterName":"floor1",
"originalValue":"K2",
"standardValue":"k2",
"liveTime":0,
"createTimeStamp":1638624590055,
"slotName":"floor1:floor",
"slotValue":"k2"
}],
"requestId":"20211204212949987-504243894",
device":{},
"skillSession":{
"skillSessionId":"1e66de8b-3c89-43c4-8af2-0536edda3f83",
"newSession":false},
"context":{"system":{"apiAccessToken":""}}}
2021-12-04 21:29:51.464 INFO 5388 --- [nio-8091-exec-7] c.a.s.demo.controller.GenieController :
requestData:{}
2021-12-04 21:29:51.464 INFO 5388 --- [nio-8091-exec-7] c.a.s.demo.controller.GenieController :
slotEntities:k2
然后就可以通過傳遞過來的設備號,參數(shù)等信息進行業(yè)務邏輯代碼的編寫
到此這篇關于springboot項目接入天貓精靈的文章就介紹到這了,更多相關springboot天貓精靈內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springboot+Oauth2實現(xiàn)自定義AuthenticationManager和認證path
本篇文章主要介紹了springboot+Oauth2實現(xiàn)自定義AuthenticationManager和認證path,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09
jmeter添加自定義擴展函數(shù)之圖片base64編碼示例詳解
這篇文章主要介紹了jmeter添加自定義擴展函數(shù)之圖片base64編碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01
Spring Boot 集成Shiro的多realm配置過程
這篇文章主要介紹了Spring Boot 集成Shiro的多realm配置,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
SpringBoot集成Redis并實現(xiàn)主從架構的實踐
本文主要和大家分享一下在springboot中如何集成redis,并實現(xiàn)主從架構,進行數(shù)據(jù)的簡單存儲,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12
java:try...catch跳過異常繼續(xù)處理循環(huán)問題
這篇文章主要介紹了java:try...catch跳過異常繼續(xù)處理循環(huán)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
Java8中Stream流求最大值最小值的實現(xiàn)示例
本文主要介紹了Java8中Stream流求最大值最小值的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-04-04

