您的裝置可能有某些特殊功能,但這些功能不屬於目前的 特徵 --,例如「閃爍燈光」是指可以閃爍燈光的裝置模式。個人中心 您可以為裝置定義自訂動作,指定傳送到 觸發特殊功能。
如要定義自訂裝置動作,您需要下列項目:
- 與使用者查詢比對的模式
- 要與相符查詢建立關聯的自訂裝置動作
- 如果裝置支援動作,系統會向使用者朗讀文字
- 傳回裝置的指令名稱,其中包含所有參數
只要將這些資訊放入 動作套件。 動作套件會定義 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 助理存取的動作套件。
雖然您可以在自己的裝置上執行本節所述的步驟,但這可能比較簡單 以便在開發系統中執行這些作業下列指令不需要 和虛擬環境
下載
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 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 次。
請注意,查詢必須與動作套件中的查詢模式相符。