天天看點

【随便看看】十分鐘用 FAAS 給天貓精靈增加自定義能力

背景

  • 雖然天貓精靈目前功能已很豐富,但還有些定制化高的服務無法滿足,比如查詢學校課表,考研資訊,公交狀态,特定網站狀态等。不過天貓精靈提供了開放平台能力,使得我們可以輕松給天貓精靈添加這些自定義能力。
  • 本文做個簡單示例,和天貓精靈說小愛同學,天貓精靈回複"小愛同學,我是天貓精靈" 來展示一下如何通過天貓精靈調用我們的自定義服務。
  • 查閱文檔,可知要實作這個功能,關鍵有兩步,一是讓天貓精靈識别,二是搭建自定義服務進行回複
    【随便看看】十分鐘用 FAAS 給天貓精靈增加自定義能力

實作

注冊技能

  • 天貓精靈接入還是比較簡單的,注冊完成開發者後,就直接在平台添加自定義技能就可以了。

1. 添加自定義技能『小愛同學』

【随便看看】十分鐘用 FAAS 給天貓精靈增加自定義能力

2. 在側邊欄"意圖" tab 中添加意圖

  • 因為我們隻做一個簡單的呼喚,是以就用個簡單的預設意圖就好了,注意預設意圖并不是兜底意圖,而是當隻說 調用詞 時觸發的意圖
  • 如果有多種功能,可以使用例句來教會天貓精靈怎麼區分不同意圖, 文檔連結
    【随便看看】十分鐘用 FAAS 給天貓精靈增加自定義能力

3. 在側邊欄"回複邏輯"中配置回調,可以看到此處需要填寫 webhook url,也就是我們實際自定義服務的位址.目前還沒搭建,下面我們将用 faas 搭建

  • 需要注意的是這邊有個校驗檔案,開放平台為了驗證服務的有權性,會要檢驗服務根目錄下有沒有這個檔案。我們先把檔案下載下傳下來,後續使用,
    【随便看看】十分鐘用 FAAS 給天貓精靈增加自定義能力

服務搭建

  • 服務搭建的方式有很多,此處我們選擇采用 aliyun 的 faas 服務, 也就是函數計算進行搭建。函數計算有個好處在于不用關心真實伺服器,隻需要編寫自定義邏輯即可。而且關鍵每月還有100萬次的免費調用額度,約等于不要錢 ? https://fc.console.aliyun.com
  • 函數計算為三層結構

    1個服務 -> n個函數-> m個觸發器

    。每個服務可以有多個函數;每個函數為一個工程,裡面有一個入口函數;然後由觸發器去調用這個函數, 常用的有 http 觸發器,定時觸發器等
  • 可見我們需要的就是建立一個服務,然後兩個函數,一個用于應答天貓精靈,一個用于天貓精靈的驗權。
  1. 建立一個服務,名字随意
    【随便看看】十分鐘用 FAAS 給天貓精靈增加自定義能力
  2. 建立兩個函數,分别叫 xiaoai 和 auth ,對應的觸發器名字分别為

    xiaoai_http

    ,

    auth_http

    ,用于應答和校驗
    【随便看看】十分鐘用 FAAS 給天貓精靈增加自定義能力

應答服務

  • 應答服務很簡單,就是傳回 "小愛同學,我是天貓精靈"
  • 是以我們隻需要收到請求直接傳回就好,代碼如下, 複制到代碼執行的線上編輯器中,點選儲存即可
    【随便看看】十分鐘用 FAAS 給天貓精靈增加自定義能力
var getJsonBody = require('body/json');

exports.handler = (req, resp, context) => {
    getJsonBody(req, function (err, data) {
        if (!data || !data.utterance) {
            resp.send("post body 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": ""
                }
            }));
    });
}           
  • 在下方的測試中,便可以輸入上面的 body,測試一下結果
    【随便看看】十分鐘用 FAAS 給天貓精靈增加自定義能力
  • 至此,應答服務完成

校驗服務

  • 校驗服務就更簡單了,就是模仿一個檔案讀取,傳回檔案内容即可.
  • 是以打開上面下載下傳的校驗檔案,将檔案内容替換到下面的 xxx 中, 粘貼到代碼執行的編輯框中,點選儲存即可。
exports.handler = (req, resp, context) => {
    resp.setHeader('content-type', 'text/plain');
    resp.send("xxx")
}           
  • 在下方的測試驗證處直接 get 便可看到傳回 body 即為上面的 xxx
    【随便看看】十分鐘用 FAAS 給天貓精靈增加自定義能力

路徑注冊

  • 完成了上面兩個服務後,雖然可以直接用各個函數的觸發器對應的網址直接通路,但是由于驗權檔案必須要在根目錄的 /aligenie/ 下,是以還需通過 自定義域名 來統一域名
    【随便看看】十分鐘用 FAAS 給天貓精靈增加自定義能力
  • 打開自定義域名,可以看到有一個預設域名,我們就直接編輯這個域名, 添加兩個路徑,一個為

    /aligenie/aaa.txt

    , 将 aaa 替換為上面下載下傳的驗權檔案的檔案名, 一個為

    /xiaoai/*

    【随便看看】十分鐘用 FAAS 給天貓精靈增加自定義能力

大功告成

  • 将天貓精靈 webhook 位址改成我們上面的自定義域名即可
    【随便看看】十分鐘用 FAAS 給天貓精靈增加自定義能力
  • 在測試驗證便可進行測試了,打開真機測試則可在 taobao 賬号綁定的天貓精靈上進行測試
    【随便看看】十分鐘用 FAAS 給天貓精靈增加自定義能力

Tips

  • 本文僅示範了簡單的 faas 服務,是以采用了直接頁面編輯的方式,對于複雜的業務邏輯,比如要安裝依賴包,debug 的測試的,建議是用 aliyun 的 funcraft 提供了一種在本地可以測試服務和快速釋出的方法。 不過需要注意的是其 template.yml 生成的配置一般不含日志部分,日志部分手工配置比較難寫,建議通過導出功能,直接導出在界面上配置好的參數
    【随便看看】十分鐘用 FAAS 給天貓精靈增加自定義能力
  • 對于線上運作情況可以通過 函數計算 的日志查詢進行檢視, 首次配置需要開通下 aliyun 的日志服務。
  • 【随便看看】十分鐘用 FAAS 給天貓精靈增加自定義能力

參考資料