個人 Rokid 之路 附:記事本技能所有源代碼

今天(2017年12月25號,聖誕節,Rokid有心啦,木有收到聖誕節禮物的我,給我送來Rokid All in ONE 全棧語音智能開發套件做爲聖誕節驚喜)javascript

開箱後只能說作工至關不錯,很精緻。html

廢話很少說,正式走一遍遇到的坑,官方的開發指南其中已經寫好了不少必要的入門流程。java

目前開發的技能

  1. 記事本git

    • 基本功能框架完成
    • 歡迎各位開發提交PR

本人遇坑及經驗總結以下

  1. 沒迅速找到官方的開發指南,直接進官方文檔就上,而後沒法經過APP內置的點擊6下的開發模式鏈接Rokid,查詢官方文檔,可得知,須要經過Pebble設備方式進行鏈接,若是之後還有其它問題建議先進入開發套件常見問題解決方案彙總
  2. 在配置WiFi時,本人路由器名稱設置了默認隱藏,所以在經過藍牙配置WiFi鏈接時,一直沒法配置經過,總結以往raspberry pi把玩經驗,果斷嘗試關閉隱藏WiFi,得以解決沒法配置鏈接WiFi的問題,致使該問題須要修改固件裏的WiFi鏈接腳本,這個本人就先不嘗試了,具體問題及解決方案已經發送到Rokid討論裏了,但願能改進沒法正常鏈接隱藏的WiFi,解決資料
  3. 若是在APP的配網藍牙鏈接這裏搜索不到設備,要麼使用點擊6下的方式進入配網流程,要麼使用Pebble設備的配網流程。
  4. 本人測試經過的可信刷機鏡像(其實就是官方鏡像)github

  5. CPU板正對USB Type-c 的那個按鍵就是刷機用的按鍵,先按住,再通電,看出USB_Burning_Tool上出現設備,就能夠鬆了,比用Debug板進行刷機方便不少,很人性化。
  6. 在Windows下使用adb shell鏈接到開發板後,使用ls命令,若是出現相似以下的內容,多是自帶的字符串着色與Windows的console不兼容,登入shell後,直接執行 alias ls='busybox ls --color=never' 便可。建議Rokid預安裝bash做爲備用選項,或者開發者自行下載使用Cmder軟件,可解決以上問題。(不怎麼直接使用sh,一直用的bash或者zsh,沒有出現過相似問題)shell

    [0;0mdefault.prop[0m  [1;36mlib64[0m         [1;34mopt[0m           [1;34msrv[0m
    [1;34mdev[0m           [1;34mlibexec[0m       [1;34mproc[0m

關於WiFi鏈接及配網

  • 坑走完以後就是Demo了,能正式配置Rokid的WiFi鏈接,剩下的就很方便了,經過官方開發指南先作一個簡單的人機對話,在開發過程當中與Rokid的直接交流語言的JavaScript,所以若要開發更爲靈活的服務功能,須要依託其它的後臺接口開發。

關於入口詞的一些事

  • Rokid 中可能涉及的入口詞問題,本人發現Rokid是針對技能貌似是獨佔的(尚未徹底肯定這一點),前期可能刺激開發者或者其餘人員搶佔入口詞,建議平臺針對這點進行入口詞融合、增長針對用戶或者設備調試不一樣技能的優先級功能。

順便來幾張開箱照(圖片太醜,請點擊下方連接查看):

技能開發過程須要知道的事情

技能類型說明

屬性 開放性 開發平臺
公有 全部用戶 雲端
私有 - 雲端 指定用戶 雲端
私有 - 本地 指定用戶 本地(/opt/apps或/data/apps目錄)

關於rokidos-cli

整理中。。。

關於語言交互的設置

  1. 詞表數據庫

    • Rokid 預約義詞表
    • 自定義詞表
      自定義詞表除了能夠經過普通的一行一個詞的方式設定本身的詞表,還能夠經過以下的方式引用其它詞表(引用詞表以 $ 符號開頭)json

      $ROKID.YES_ZH
      $ROKID.NO_ZH
    • setConfirm
      若是要經過setConfirm獲取用戶對話過程的任意內容,能夠參考以下方式
      意圖定義:segmentfault

      {
          "intent": "RecordAny",
          "slots": [
              {
                  "name": "content",
                  "type": "ROKID.ANY"
              }
          ],
          "user_says": [
              "!$content"
          ]
      }

      服務代碼中對應handler中使用以下setConfirm語句:後端

      this.setConfirm({
          confirmIntent: 'RecordAny',
          confirmSlot: 'content'
      });
  2. Session

    • this.setSession(key, value)中,所傳value爲null時,該值不會被記錄。
  3. dbServer

    • dbServer.set(key, value, callback) 該方法爲異步形式,所以涉及數據庫操做時,應該將其後的業務邏輯放於callback中,不然數據還沒取回就執行到後面的業務中。
    • get:Rokid.dbServer.get(key, callback)與Rokid.dbServer.delete(key,callback)是否爲異步形式還沒有驗證,建議一樣將數據庫操做以後的業務邏輯放於callback中。
    • 鑑於關於數據庫操做爲異步形式,所以建議相關開發者自建統一的數據庫存取管理的相關代碼以免多層嵌套(具體參考代碼稍後會以GitHub的形式放出),或者改寫爲Promise形式,目前還沒有改寫成功。
    • 集成測試中的後端服務測試與服務列表中的測試用例在邏輯上不屬於同一個會話,所以在調試中須要作區別,也就是數據庫裏的數據不共享,須要單獨各自添加測試數據。

後續進一步整合raspberry pi與Rokid

該文章持續更新中。。。

本文參與了 SegmentFault 「Rokid 開發板試用,開啓你的嵌入式開發之旅」活動,歡迎正在閱讀的你申請試用,一塊兒交流開發心得。
相關文章
相關標籤/搜索