天貓精靈操作法(十分鐘用FAAS給你的天貓精靈增加自定義功能)
2023-05-22 04:11:56 1
背景
雖然天貓精靈目前功能已很豐富,但還有些定製化高的服務無法滿足,比如查詢學校課表,考研信息,公交狀態,特定網站狀態等。不過天貓精靈提供了開放平臺能力,使得我們可以輕鬆給天貓精靈添加這些自定義能力。本文做個簡單示例,和天貓精靈說小愛同學,天貓精靈回復"小愛同學,我是天貓精靈" 來展示一下如何通過天貓精靈調用我們的自定義服務。查閱文檔,可知要實現這個功能,關鍵有兩步,一是讓天貓精靈識別,二是搭建自定義服務進行回復實現
註冊技能
天貓精靈接入還是比較簡單的,註冊完成開發者後,就直接在平臺添加自定義技能就可以了。open.aligenie.com/console1. 添加自定義技能『小愛同學』
2. 在側邊欄"意圖" tab 中添加意圖
因為我們只做一個簡單的呼喚,所以就用個簡單的默認意圖就好了,注意默認意圖並不是兜底意圖,而是當只說 調用詞 時觸發的意圖如果有多種功能,可以使用例句來教會天貓精靈怎麼區分不同意圖,文檔連結3. 在側邊欄"回復邏輯"中配置回調
可以看到此處需要填寫 webhook url,也就是我們實際自定義服務的地址.目前還沒搭建,下面我們將用 faas 搭建需要注意的是這邊有個校驗文件,開放平臺為了驗證服務的有權性,會要檢驗服務根目錄下有沒有這個文件。我們先把文件下載下來,後續使用 文檔連結服務搭建
服務搭建的方式有很多,此處我們選擇採用 aliyun 的 faas 服務, 也就是函數計算進行搭建。函數計算有個好處在於不用關心真實伺服器,只需要編寫自定義邏輯即可。而且關鍵每月還有100萬次的免費調用額度,約等於不要錢 . fc.console.aliyun.com函數計算為三層結構 1個服務 -> n個函數-> m個觸發器。每個服務可以有多個函數;每個函數為一個工程,裡面有一個入口函數;然後由觸發器去調用這個函數, 常用的有 http 觸發器,定時觸發器等可見我們需要的就是創建一個服務,然後兩個函數,一個用於應答天貓精靈,一個用於天貓精靈的驗權。新建一個服務,名字隨意新建兩個函數,分別叫 xiaoai 和 auth ,對應的觸發器名字分別為 xiaoai_http, auth_http,用於應答和校驗應答服務
應答服務很簡單,就是返回 "小愛同學,我是天貓精靈"因此我們只需要收到請求直接返回就好,代碼如下, 複製到代碼執行的在線編輯器中,點擊保存即可var getjsonBody = require('div/json');exports.handler = (req, resp, context) => { getJsonBody(req, function (err, data) { if (!data || !data.utterance) { resp.send("post div wrong! " data); } resp.setStatusCode(200); resp.setHeader('content-type', 'application/json'); resp.send(JSON.stringify( { "returnCode": "0", "returnErrorSolution": "", "returnMessage": "", "returnValue": { "reply": `小愛同學,我是天貓精靈`, "resultType": "RESULT", "executeCode": "SUCCESS", "msgInfo": "" } })); });}
在下方的測試中,便可以輸入上面的 div,測試一下結果至此,應答服務完成校驗服務
校驗服務就更簡單了,就是模仿一個文件讀取,返回文件內容即可.因此打開上面下載的校驗文件,將文件內容替換到下面的 xxx 中, 粘貼到代碼執行的編輯框中,點擊保存即可。exports.handler = (req, resp, context) => { resp.setHeader('content-type', 'text/plain'); resp.send("xxx")}
在下方的測試驗證處直接 get 便可看到返回 div 即為上面的 xxx