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

創(chuàng)建一個(gè)意圖

先簡(jiǎn)單填入一個(gè)單輪對(duì)話,此時(shí)我設(shè)置了默認(rèn)意圖。所以我對(duì)天貓精靈說(shuō)
天貓精靈 熱水用完了 (調(diào)用詞) 或 天貓精靈 熱水用完了 吃了沒(méi) (調(diào)用詞+單輪對(duì)話)
都調(diào)用的是這個(gè)意圖

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

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

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

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


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

3、后端部署
繼續(xù)回到天貓精靈的控制臺(tái),將公網(wǎng)服務(wù)器地址加上Controller路徑填上去,點(diǎn)擊保存的時(shí)候他會(huì)判斷你的web service有沒(méi)有認(rèn)證文件,如果點(diǎn)擊報(bào)錯(cuò)報(bào)錯(cuò),可以檢查一下 檢查指向1
關(guān)于服務(wù)器SSL證書(shū)可參見(jiàn) 文檔指向4

4、測(cè)試

后端返回?cái)?shù)據(jù)
2021-12-04 21:13:06.796 INFO 5388 --- [nio-8091-exec-2] c.a.s.demo.controller.GenieController :
天貓精靈測(cè)試 : leading:{
"sessionId":"79c799a7-d4ee-495e-b472-0effa1c23fa3",
"utterance":"熱水用完了",
"requestData"{}, //非真機(jī),沒(méi)有數(shù)據(jù)
"botId":114376,
"domainId":63502,
"skillId":84340,
"skillName":"TIAMTEst",
"intentId":123759,
"intentName":"天貓精靈測(cè)試",
"slotEntities":[], //沒(méi)有傳參
"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 :
天貓精靈測(cè)試 : leading:{
"sessionId":"206b0ee1-c4bf-4834-9caa-571960f2a9fc",
"utterance":"熱水用完了上K2樓",
"requestData":{},
"botId":114376,
"domainId":63502,
"skillId":84340,
"skillName":"TIAMTEst",
"intentId":123760,
"intentName":"傳參測(cè)試",
"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
然后就可以通過(guò)傳遞過(guò)來(lái)的設(shè)備號(hào),參數(shù)等信息進(jìn)行業(yè)務(wù)邏輯代碼的編寫
到此這篇關(guān)于springboot項(xiàng)目接入天貓精靈的文章就介紹到這了,更多相關(guān)springboot天貓精靈內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot+Oauth2實(shí)現(xiàn)自定義AuthenticationManager和認(rèn)證path
本篇文章主要介紹了springboot+Oauth2實(shí)現(xiàn)自定義AuthenticationManager和認(rèn)證path,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09
jmeter添加自定義擴(kuò)展函數(shù)之圖片base64編碼示例詳解
這篇文章主要介紹了jmeter添加自定義擴(kuò)展函數(shù)之圖片base64編碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
Spring Boot 集成Shiro的多realm配置過(guò)程
這篇文章主要介紹了Spring Boot 集成Shiro的多realm配置,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
SpringBoot集成Redis并實(shí)現(xiàn)主從架構(gòu)的實(shí)踐
本文主要和大家分享一下在springboot中如何集成redis,并實(shí)現(xiàn)主從架構(gòu),進(jìn)行數(shù)據(jù)的簡(jiǎn)單存儲(chǔ),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
java:try...catch跳過(guò)異常繼續(xù)處理循環(huán)問(wèn)題
這篇文章主要介紹了java:try...catch跳過(guò)異常繼續(xù)處理循環(huán)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
Java8中Stream流求最大值最小值的實(shí)現(xiàn)示例
本文主要介紹了Java8中Stream流求最大值最小值的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04

