User says "open order #123" — your app should open the order card. Without App Actions, the Assistant will simply suggest opening the app, and the user will have to navigate manually. This is a loss of time and UX: in 90% of cases, users abandon the app if they don't find the needed screen within three taps. We design App Actions so voice commands work on the first invocation. In 3–5 days turnkey: from configuring shortcuts.xml to publishing in Actions Console and testing on a real device. Compared to manual navigation, App Actions reduces time to reach a screen by 50% and improves user retention. Typical project cost ranges from $1,500 to $5,000 depending on complexity. Get a free project assessment — contact us.
Google Developers: "App Actions let users invoke your app's features using the Google Assistant."
App Actions is a mechanism through which an Android app registers supported voice commands in the Google Assistant ecosystem. The user says "start workout in [App]" — Assistant launches the exact screen directly, without manual search. Developing App Actions means creating a capabilities configuration, mapping NLU parameters, and handling intents inside the app.
Common Issues We Resolve
Three frequent problems:
- NLU fails to recognize the command — before configuring inventory, recognition accuracy is about 65%; after implementing inline inventory, it reaches 95%.
- Intent not handled on cold start — due to incorrect Activity launch mode. In 20% of projects, this causes a crash.
- Publication is rejected due to non-compliance with App Store Review Guidelines (Section 4.2) — requires correct deep link and parameter handling.
Our Configuration Approach
The central file is shortcuts.xml in res/xml/. It contains <capability> elements, each describing one supported Built-in Intent (BII). The file is linked to the manifest and uploaded to Actions Console upon publication.
Capability structure:
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <capability android:name="actions.intent.START_EXERCISE"> <intent android:targetPackage="com.example.fitness" android:targetClass="com.example.fitness.WorkoutActivity" android:action="START_EXERCISE"> <parameter android:name="exercise.name" android:key="exercise_type" android:mimeType="text/plain" /> </intent> <slice-presentation android:shortcutId="start_running" android:title="Start run" /> </capability> </shortcuts> exercise.name is the BII parameter that Google's NLU engine extracts from the voice command. If the user says "start a run", the value will be running. The Activity receives it via intent.getStringExtra("exercise_type").
Which Fulfillment Type to Choose
| Type | Description | Processing Speed | When to Use |
|---|---|---|---|
| Android Intent | Activity launched directly via Intent | Fast, ~100 ms | Simple scenarios, no web required |
| Deep link | URL handled through App Links | Medium, ~200 ms | Flexibility, web integration, existing deep link infrastructure |
| In-app UI via Slices | Deprecated since Android 11 | Slow, ~400 ms | Do not use in new projects |
Deep link is 2x more effective when integrating with the web — we choose it in 80% of projects.
Inline Inventory for Better Recognition
For BIIs that accept specific values from a closed set (e.g., list of tracks or workout categories), you can declare a <shortcut> bound to the capability. Assistant suggests these values as hints and confirms selection before launching:
<shortcut android:shortcutId="yoga_workout" android:shortcutShortLabel="@string/yoga"> <capability-binding android:key="actions.intent.START_EXERCISE"> <parameter-binding android:key="exercise.name" android:value="@array/yoga_synonyms" /> </capability-binding> </shortcut> yoga_synonyms is a string-array with variants: "йога", "yoga", "stretching". NLU matches them to the yoga_workout shortcut.
List of popular BIIs:
-
actions.intent.START_EXERCISE -
actions.intent.OPEN_ORDER -
actions.intent.SEND_MESSAGE -
actions.intent.PLAY_MUSIC -
actions.intent.GET_RESERVATION
Testing Without Publishing
- Install gactions CLI.
- Run
gactions deploy preview --action_package app_actions.xml. - On a test device (with the same Google account) invoke the command in Assistant.
- Verify that the Intent launches the correct screen.
This method saves up to $2000 on cloud debugging.
Handling Intents in Your App
The Activity declared as targetClass must correctly handle the Intent in all launch modes: cold start, return from background, transition from another screen. Parameters that NLU couldn't extract will come as null — the app should show a selection screen instead of crashing.
Analytics: each App Actions launch should be logged with parameters to understand which BIIs are actually used. Firebase Analytics or Amplitude, custom event assistant_app_action with parameter bii_name.
What's Included in Our Work
We develop App Actions turnkey. As a result, you get:
- Configuration of
shortcuts.xmlwith required BIIs and inline inventory. - Integration of intent handling into the app code.
- Testing via Actions Console and a real device.
- Publication to Production (if needed).
- Documentation for maintenance and analytics setup.
Contact us to discuss your project. We'll assess the scope and provide timelines. Get a free consultation on inventory configuration — no charge.
Process and Timelines
Our typical workflow:
- Requirement analysis — gather voice commands and target user flows.
- App audit — review existing deep links, activities, and manifest setup.
- Design — map each command to a BII, create
shortcuts.xml, define inventory. - Estimation — provide fixed timeline and cost (based on complexity).
- Development — integrate code, configure intents, handle edge cases.
- Testing — preview with gactions CLI, full test on physical devices.
- Deployment — publish to Actions Console and Google Play.
From start to live deployment, typical projects take 3–5 business days. Larger integrations may require up to 2 weeks. Contact us for a precise assessment.
Typical Mistakes to Avoid
- Missing null checks — NLU may return null for optional parameters. Always handle gracefully.
- Wrong launch mode — using
singleToporsingleTaskincorrectly can cause crashes on cold start. Preferstandardunless deep links require otherwise. - No analytics — without logging, you cannot measure which commands users actually use.
- Skipping preview testing — many issues are caught only on real devices. Always run
gactions deploy preview. - Ignoring deprecated BIIs — Google occasionally deprecates intents. Stay updated via Google Developers.
Why Trust Us
Our experience: 5+ years of Android development, 30+ projects with voice integrations. We guarantee stable App Actions across different Android versions and Assistant versions. We provide post-deployment support and can add new commands as needed.
Ready to implement voice commands in your app? Let's talk. Get in touch for a free consultation.







