註冊自訂裝置動作

您的裝置可能有某些特殊功能,但這些功能不屬於目前的 特徵 --,例如「閃爍燈光」是指可以閃爍燈光的裝置模式。個人中心 您可以為裝置定義自訂動作,指定傳送到 觸發特殊功能。

如要定義自訂裝置動作,您需要下列項目:

  • 與使用者查詢比對的模式
  • 要與相符查詢建立關聯的自訂裝置動作
  • 如果裝置支援動作,系統會向使用者朗讀文字
  • 傳回裝置的指令名稱,其中包含所有參數

只要將這些資訊放入 動作套件。 動作套件會定義 Google 助理回應的格式。與 Actions SDK、自訂裝置動作是在本機執行;未指定 處理要求並提供回應自訂裝置動作為 這類文字在本質上並非對話

建立動作套件

以下範例可讓您建立檔案 (例如 actions.json) 會定義一個測試指令:閃爍 LED 燈。 從您提供的程式碼範例中複製檔案 已在上一步下載:

cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/library/
cp ~/assistant-sdk-python/google-assistant-sdk/actions.json .

範例
{
   
"manifest": {
       
"displayName": "Blinky light",
       
"invocationName": "Blinky light",
       
"category": "PRODUCTIVITY"
   
},
   
"actions": [
       
{
           
"name": "com.example.actions.BlinkLight",
           
"availability": {
               
"deviceClasses": [
                   
{
                       
"assistantSdkDevice": {}
                   
}
               
]
           
},
           
"intent": {
               
"name": "com.example.intents.BlinkLight",
               
"parameters": [
                   
{
                       
"name": "number",
                       
"type": "SchemaOrg_Number"
                   
},
                   
{
                       
"name": "speed",
                       
"type": "Speed"
                   
}
               
],
               
"trigger": {
                   
"queryPatterns": [
                       
"blink ($Speed:speed)? $SchemaOrg_Number:number times",
                       
"blink $SchemaOrg_Number:number times ($Speed:speed)?"
                   
]
               
}
           
},
           
"fulfillment": {
               
"staticFulfillment": {
                   
"templatedResponse": {
                       
"items": [
                           
{
                               
"simpleResponse": {
                                   
"textToSpeech": "Blinking $number times"
                               
}
                           
},
                           
{
                               
"deviceExecution": {
                                   
"command": "com.example.commands.BlinkLight",
                                   
"params": {
                                       
"speed": "$speed",
                                       
"number": "$number"
                                   
}
                               
}
                           
}
                       
]
                   
}
               
}
           
}
       
}
   
],
   
"types": [
       
{
           
"name": "$Speed",
           
"entities": [
               
{
                   
"key": "SLOWLY",
                   
"synonyms": [
                       
"slowly",
                       
"slow"
                   
]
               
},
               
{
                   
"key": "NORMALLY",
                   
"synonyms": [
                       
"normally",
                       
"regular"
                   
]
               
},
               
{
                   
"key": "QUICKLY",
                   
"synonyms": [
                       
"quickly",
                       
"fast",
                       
"quick"
                   
]
               
}
           
]
       
}
   
]
}

上一個範例使用下列資訊定義自訂裝置 動作:

  • 與使用者查詢比對的模式 (閃爍 N 次)
  • 要與相符查詢建立關聯的自訂裝置動作 (com.example.actions.BlinkLight) 建立新聞機構
  • 如果裝置支援動作,系統會向使用者朗讀文字 (閃爍 N 次)
  • 傳回的指令名稱 (com.example.commands.BlinkLight) 以及任何參數 (可能包括速度的數值說明)

如要定義查詢模式,請注意下列事項:

  • 您可以使用 schema.org 定義的類型 部分
  • types [...] 陣列定義自訂類型清單 (例如 $Speed)。
  • 您可以在查詢模式中使用自訂類型。使用者可以說出以下任一項目: 符合查詢模式的同義詞。
  • 如果同義詞相符,類型執行個體 (speed) 會 則會傳回正規化鍵 (SLOWLY)。可以有多個實體 舉例來說,不同的燈具可支援不同速度
  • 要求 TTS 模式的某些部分可選用。舉例來說,請使用 查詢模式中的 ($Speed:speed)?,將此部分設為選用項目。
  • 值中的 $type.raw (例如 $speed.raw) 回應內容會替換為使用者實際說出的字詞。

如需其中許多欄位的說明,請參閱 ActionPackage 說明文件。

部署動作套件

在 Action 套件中建立自訂裝置動作後,您就可以 可供 Google 助理存取的動作套件。

雖然您可以在自己的裝置上執行本節所述的步驟,但這可能比較簡單 以便在開發系統中執行這些作業下列指令不需要 和虛擬環境

  1. 下載 gactions 指令列工具

  2. 移除與 gactions 位於相同目錄的所有現有憑證 如果偏好在終端機視窗中工作 可使用 Google Cloud CLI gcloud 指令列工具

    rm creds.data
  3. 使用 gactions CLI 將 Action 套件儲存至 Google。 將 project_id 替換為 Actions 主控台專案 ID

    ./gactions update --action_package actions.json --project project_id
  4. 首次執行這個指令時,系統會提供一個網址,並要求您 登入帳戶。複製網址並貼到瀏覽器 (任何系統都可以)。 頁面會要求您登入 Google 帳戶。簽署 登入在前一個步驟中建立專案的 Google 帳戶 步驟

  5. 您在 API 中核准權限要求後,畫面上就會顯示代碼 ,例如「4/XXXX」。請複製這段程式碼,並貼到 終端機:

    Enter the authorization code:

    如果授權成功,您會看到類似 包括:

    Your app for the Assistant for project my-devices-project was successfully
    updated
    with your actions.
  6. 使用 gactions CLI 將動作套件部署至測試模式。 你必須至少將 Action 套件儲存至 Google 一次 就會執行這個指令測試模式會在您的 使用者帳戶。

    ./gactions test --action_package actions.json --project project_id

    目前無法使用動作模擬工具測試專案。

  7. 如要更新 Action 套件,請使用 gactions update 指令。

  8. (選用) 您可以建立本地化動作套件 支援多種不同語言和語言代碼 在單一專案中使用同個模型

修改範例

請在裝置上執行本節所述的步驟。

nano hotword.py

為自訂動作新增處理常式。您可以視需要使用下方的處理常式 才能使用上述的動作套件範例。

import time # Add this to the imports near the top of the file

...

if event.type == EventType.ON_DEVICE_ACTION:
   
for command, params in event.actions:
       
print('Do command', command, 'with params', str(params))

       
# Add the following lines after the existing line above:

       
if command == "com.example.commands.BlinkLight":
            number
= int( params['number'] )
           
for i in range(int(number)):
               
print('Device is blinking.')
               
# GPIO.output(25, 1)
                time
.sleep(1)
               
# GPIO.output(25, 0)
                time
.sleep(1)

執行範例

執行修改後的原始碼。

python hotword.py --device-model-id my-model

請嘗試查詢內容。就上述範例而言,請嘗試下列操作:

Ok Google,閃爍 5 次。

請注意,查詢必須與動作套件中的查詢模式相符。