springboot項目接入天貓精靈語音功能
最近工作需要使用到天貓精靈的語音功能,大體是通過呼叫對應的“調(diào)用詞”實現(xiàn)攜帶參數(shù),然后調(diào)用我項目中的接口,以實現(xiàn)對應的業(yè)務。所以在此簡單的記錄下使用過程 實際上:天貓精靈的官方文檔記錄的也很詳細
重點參見自定義接入
1、創(chuàng)建語音技能
創(chuàng)建一個意圖
先簡單填入一個單輪對話,此時我設(shè)置了默認意圖。所以我對天貓精靈說
天貓精靈 熱水用完了 (調(diào)用詞) 或 天貓精靈 熱水用完了 吃了沒 (調(diào)用詞+單輪對話)
都調(diào)用的是這個意圖
創(chuàng)建實體,對于實體的創(chuàng)建,只有你在如下情況需要用到
天貓精靈 熱水用完了 {今天}的天氣 (調(diào)用詞)+ 單輪對話<包含數(shù)據(jù)> 天貓精靈 熱水用完了 放一首{周杰倫}的歌曲 天貓精靈 熱水用完了 我要去{19R}樓
像如上這些情況,考慮到{}中的數(shù)據(jù)是要作為參數(shù)傳遞給后端服務來進行操作的。所以需要創(chuàng)建對應實體。實體的作用就是為了在{}插槽的位置將你口述語音識別的內(nèi)容轉(zhuǎn)化為符合實體中設(shè)定的值的內(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
關(guān)于服務器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è)備號,參數(shù)等信息進行業(yè)務邏輯代碼的編寫
到此這篇關(guān)于springboot項目接入天貓精靈的文章就介紹到這了,更多相關(guān)springboot天貓精靈內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot+Oauth2實現(xiàn)自定義AuthenticationManager和認證path
本篇文章主要介紹了springboot+Oauth2實現(xiàn)自定義AuthenticationManager和認證path,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09jmeter添加自定義擴展函數(shù)之圖片base64編碼示例詳解
這篇文章主要介紹了jmeter添加自定義擴展函數(shù)之圖片base64編碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01Spring Boot 集成Shiro的多realm配置過程
這篇文章主要介紹了Spring Boot 集成Shiro的多realm配置,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10SpringBoot集成Redis并實現(xiàn)主從架構(gòu)的實踐
本文主要和大家分享一下在springboot中如何集成redis,并實現(xiàn)主從架構(gòu),進行數(shù)據(jù)的簡單存儲,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12java:try...catch跳過異常繼續(xù)處理循環(huán)問題
這篇文章主要介紹了java:try...catch跳過異常繼續(xù)處理循環(huán)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10Java8中Stream流求最大值最小值的實現(xiàn)示例
本文主要介紹了Java8中Stream流求最大值最小值的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-04-04