Register Custom Device ActionsStay organized with collectionsSave and categorize content based on your preferences.
Page Summary
Custom device actions allow devices to perform special abilities not covered by standard traits.
Defining a custom device action requires a pattern to match user queries, an associated custom action, text spoken back to the user, and a command name sent to the device with parameters.
Custom device actions are defined within an action package file, such asactions.json, and are fulfilled locally.
Thegactionscommand-line tool is used to deploy and test your action package.
To handle a custom action on the device, you need to modify the sample code to include a handler that processes the command and parameters.
Your device may have special abilities not covered by the current set oftraits-- such as a "blink my light" trait for a device that can blink its lights. You
can define custom actions for your device that specify the commands sent to
your device to trigger special abilities.
To define a custom device action, you need the following:
A pattern to match against the user query
A custom device action to associate with a matched query
Text spoken back to the user if the device supports the action
A command name that is sent back to your device, along with any parameters
You create the custom device action by putting this information into anaction package.
Action packages define the format for the Assistant responses. Unlike the
Actions SDK, custom device actions are fulfilled locally; you do not specify an
endpoint to process requests and provide responses. Custom device actions are
not conversational in nature.
Create an Action Package
Using the following as an example, create a file (such asactions.json) that
defines a test command: blinking an LED.
Copy the file from the sample code you
downloaded in aprevious step:
cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/library/
The previous example uses the following information to define the custom device
action:
A pattern to match against the user query (blink N times)
The custom device action to associate with a matched query (com.example.actions.BlinkLight)
for organizational purposes
Text spoken back to the user if the device supports the action
(Blinking N times)
A command name (com.example.commands.BlinkLight) that is sent back to
the device, along with any parameters (a number and possibly a description of the speed)
Thetypes [...]array defines the list of custom types (for example,$Speed).
You can use custom types in the query pattern. The user can speak any of the
synonyms in your custom type to match the query pattern.
When a synonym does match, the type instance (speed) would
return the normalized key (SLOWLY). There can be multiple entities in
case, for example, there are different lights that support different speeds
of blinking.
Parts of the request TTS pattern can be optional. For example, use($Speed:speed)?in the query pattern to make this part optional.
$type.raw(for example,$speed.raw) in the
response TTS is replaced by the word(s) the user actually spoke.
For descriptions of many of these fields, see theActionPackagedocumentation.
Deploy the Action Package
After you build your custom device action in an Action package, you can make the
Action package accessible to the Assistant.
While you can perform the steps in this section on your device, it may be easier
to do them on your development system. The following commands do not require a
virtual environment to run.
The first time you run this command you will be given a URL and be asked to
sign in. Copy the URL and paste it into a browser (this can be done on any system).
The page will ask you to sign in to your Google account. Sign
into the Google account that created the project in a previousstep.
After you approve the permission request from the API, a code will appear
in your browser, such as "4/XXXX". Copy and paste this code into the
terminal:
Enter the authorization code:
If authorization was successful, you will see a response similar to
the following:
Deploy your Action package into test mode by using thegactionsCLI.
You must have saved your Action package to Google at least once before
running this command. Test mode enables the Action package on your
user account only.
./gactions test --action_package actions.json --projectproject_id
Currently, you cannot test the project using the Actions simulator.
To update the Action package, use thegactions updatecommand.
Add a handler for your custom action. You can use the handler below if you want
to use the sample Action Package above.
importtime# Add this to the imports near the top of the file...ifevent.type==EventType.ON_DEVICE_ACTION:forcommand,paramsinevent.actions:print('Do command',command,'with params',str(params))# Add the following lines after the existing line above:ifcommand=="com.example.commands.BlinkLight":number=int(params['number'])foriinrange(int(number)):print('Device is blinking.')# GPIO.output(25, 1)time.sleep(1)# GPIO.output(25, 0)time.sleep(1)
Run the sample
Run the modified source code.
python hotword.py --device-model-idmy-model
Try a query. For the example above, try the following:
Ok Google, blink 5 times.
Note that the query needs to match the query pattern in the Action Package.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-09-18 UTC."],[],[]]