您的裝置可能有某些特殊功能,但這些功能不屬於目前的 特徵 --,例如「閃爍燈光」是指可以閃爍燈光的裝置模式。個人中心 您可以為裝置定義自訂動作,指定傳送到 觸發特殊功能。
如要定義自訂裝置動作,您需要下列項目:
- 與使用者查詢比對的模式
- 要與相符查詢建立關聯的自訂裝置動作
- 如果裝置支援動作,系統會向使用者朗讀文字
- 傳回裝置的指令名稱,其中包含所有參數
只要將這些資訊放入 動作套件。 動作套件會定義 Google 助理回應的格式。與 Actions SDK、自訂裝置動作是在本機執行;未指定 處理要求並提供回應自訂裝置動作為 這類文字在本質上並非對話
建立動作套件
以下範例可讓您建立檔案 (例如 actions.json
)
會定義一個測試指令:閃爍 LED 燈。
請從您提供的範例程式碼中複製
已在上一步下載:
cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/grpc/
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 助理存取的動作套件。
雖然您可以在自己的裝置上執行本節所述的步驟,但這可能比較簡單 以便在開發系統中執行這些作業下列指令不需要 和虛擬環境
下載
gactions
指令列工具。移除與
gactions
位於相同目錄的所有現有憑證 如果偏好在終端機視窗中工作 可使用 Google Cloud CLI gcloud 指令列工具rm creds.data
使用
gactions
CLI 將 Action 套件儲存至 Google。 將project_id
替換為 Actions 主控台專案 ID:./gactions update --action_package actions.json --project project_id
首次執行這個指令時,系統會提供一個網址,並要求您 登入帳戶。複製網址並貼到瀏覽器 (任何系統都可以)。 頁面會要求您登入 Google 帳戶。簽署 登入在前一個步驟中建立專案的 Google 帳戶 步驟。
您在 API 中核准權限要求後,畫面上就會顯示代碼 ,例如「4/XXXX」。請複製這段程式碼,並貼到 終端機:
Enter the authorization code:
如果授權成功,您會看到類似 包括:
Your app for the Assistant for project my-devices-project was successfully updated with your actions.
使用
gactions
CLI 將動作套件部署至測試模式。 你必須至少將 Action 套件儲存至 Google 一次 就會執行這個指令測試模式會在您的 使用者帳戶。./gactions test --action_package actions.json --project project_id
目前無法使用動作模擬工具測試專案。
如要更新 Action 套件,請使用
gactions update
指令。
修改範例
請在裝置上執行本節所述的步驟。
nano pushtotalk.py
為自訂動作新增處理常式。請注意,已新增下列處理常式 加到上述動作套件範例的程式碼範例中
... device_handler = device_helpers.DeviceRequestHandler(device_id) @device_handler.command('com.example.commands.BlinkLight') def blink(speed, number): logging.info('Blinking device %s times.' % number) delay = 1 if speed == "SLOWLY": delay = 2 elif speed == "QUICKLY": delay = 0.5 for i in range(int(number)): logging.info('Device is blinking.') # GPIO.output(25, 1) time.sleep(delay) # GPIO.output(25, 0) time.sleep(1)
執行範例
執行原始碼。
python pushtotalk.py
請嘗試查詢內容。就上述範例而言,請嘗試下列操作:
閃爍 5 次。
請注意,查詢必須與動作套件中的查詢模式相符。