Voice control of an Android app via Google Assistant

Users abandon an app if they cannot complete a task by voice or in a single tap. We develop turnkey voice control for Android apps via Google Assistant: we design scenarios, integrate, and hand over with documentation. We shorten the path to action for the customer and reduce the load on support.

Development and support of all types of mobile applications:

Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Our competencies:

Frequently Asked Questions

Latest works

  • Development of a mobile application for FEEDME
    Development of a mobile application for FEEDME
    971
  • Development of a mobile application for XOOMER
    Development of a mobile application for XOOMER
    869
  • Development of a mobile application for RHL
    Development of a mobile application for RHL
    1289
  • Development of a mobile application for ZIPPY
    Development of a mobile application for ZIPPY
    1143
  • Development of a mobile application for Affhome
    Development of a mobile application for Affhome
    1076
  • Development of a mobile application for the FLAVORS company
    Development of a mobile application for the FLAVORS company
    677

Why voice commands don't work in an Android app

Voice control in an Android app most often breaks not at the speech recognition stage, but at the junction between the system assistant and your code.

Google Assistant correctly parses the phrase, determines the intent, and passes it along — but the app doesn't receive the call because the required intent isn't declared in the manifest or is declared under a different action.

From the user's perspective, this looks like "the assistant can't hear me," although technically the command is recognized and simply goes nowhere.

The second most common cause is a desync between the scenario and the actual state of the app.

The voice scenario describes abstract steps, while the screen follows its own logic: if the command arrives at a stage where the required fragment hasn't been created yet or has already been closed, the handler silently discards the request.

This leads to "floating" behavior: today the command works, tomorrow it doesn't — and reproducing the bug step by step becomes impossible.

The third class of problems is the binding to the account and permissions.

The assistant operates in the context of the system profile, while the app operates in its own; if access to the microphone, background operation, or account connection isn't fully configured, the chain breaks in the middle.

Testing on real devices deserves separate mention: an emulator doesn't reproduce the behavior of the system assistant, so some defects only surface on a real fleet of models and shell versions.

We break down how this gets resolved: from diagnosing declared intents and aligning the scenario with screen states to configuring permissions and testing on real devices.

What the integration delivers: measurable effects for the product

The voice layer does not replace the interface; it takes some scenarios off its hands. When a user invokes a function by voice through Google Assistant, the path to the result shrinks from 4–6 screens to a single phrase.

This is noticeable where an action is needed "on the go": start a recording, turn on a mode, repeat the last order, dictate a note.

Speed of invoking functions

Voice input removes navigation: the user does not look for the right section but immediately names the action. For high-frequency scenarios, this is the difference between "opened the app — found it — tapped" and a single command.

The shorter the path, the higher the share of actions carried through to completion — conversion grows on those operations where some users previously dropped off at intermediate steps.

Reduced support load

Typical requests ("how do I turn that on," "where do I find this") are handled by voice right in the app.

We design intent recognition so that ambiguous phrases do not lead to false actions: disputed commands go to a clarifying question rather than being executed at random.

This reduces the flow of requests on navigation questions and lowers the number of erroneous operations that support later has to sort out.

Retention and accessibility

A voice scenario brings the user back into the app in situations where their hands are busy or the screen is unavailable — and that is an additional point of contact throughout the day.

For people with visual or motor impairments, this is not a convenience but a way to use the product at all, which expands the audience and reduces churn.

Supporting the voice layer is separate work: the list of commands, the wording, handling recognition failures, and updating scenarios alongside app releases.

The effect rests on the quality of the design, not on the fact of integration: we describe scenarios, test the wording with real users, and make sure voice does not conflict with the main interface.

Ways to Connect a Voice Layer to an Application

A voice layer can be assembled in three ways, and the choice between them determines how deeply a team can embed control into the product.

A built-in scenario lives inside the application and gets direct access to its state — this is maximum flexibility, but also maximum coupling to the platform.

An external intermediary service moves the logic of recognition and command parsing outside the application: it receives a request from the assistant, converts it into a command the application understands, and passes it on.

A hybrid scheme combines both approaches — simple commands are handled on the platform side, while complex scenarios go to the application.

Option When it fits Limitations
Built-in scenario The application already has its own recognition layer and full control over state Requires support on each platform separately; when the assistant is updated, the logic has to be re-verified
Intermediary service You need to add voice quickly without rebuilding the application; several platforms at once Dependence on an external service: response latency, a separate authorization contour, restrictions on data transfer
Hybrid scheme Some scenarios are simple, some require deep application logic Harder to maintain: two points of failure, state synchronization between layers is needed

What to Look at When Choosing

Compatibility with the assistant is not a binary attribute but a set of conditions: supported command types, available permissions, behavior when there is no network.

A built-in scenario gives the best response but is tied to the platform version and requires a rebuild when changes occur. An intermediary removes this tie but adds a network round trip and a point of failure.

A hybrid scheme wins where scenarios are heterogeneous: short commands like "turn on the mode" are handled quickly, while multi-step ones — with access to application data.

The price is more complicated debugging: you need to track which layer handled the request and make sure the states do not diverge. In practice, the choice comes down to how many scenarios really require the application context and how many can be covered on the platform side.

Stages of Voice Control Implementation

Implementing voice control is not a matter of "flipping a switch" in a console, but a sequence of steps where each subsequent one builds on the result of the previous.

Below is how we approach this work so that the scenario runs reliably on real devices, not just in a test environment.

  1. Audit of the application and scenarios. We analyze the current architecture: which screens and actions are even worth invoking by voice, where parameters from the user are needed, and where a short command suffices. We document what is already supported in the application and what will need to be modified.
  2. Designing the voice interaction scheme. We describe the set of commands, their phrasing and synonyms, the rules for parsing parameters, and the behavior for ambiguous requests. At this step, we agree with you on the scenario map — what exactly the user will be able to do by voice.
  3. Setting up the integration. We connect the application to Google Assistant, register the actions, and link the commands to the application's internal calls. We separately work through authorization: the voice scenario must not open access to data bypassing the normal login.
  4. Implementation and linking with the application logic. We refine the handlers so that a command produces the same result as a manual action on the screen. Here we also cover edge cases: no network, the user is not authorized, the command is partially recognized.
  5. Testing on devices and under different conditions. We run the scenarios on real phones, with different pronunciations, background noise, and interrupted sessions. We look not only at "worked/didn't work," but also at response time and how clear the assistant's reply is.
  6. Handover and regulations. We deliver the configured scenario, the command scheme, and a support guide: how to add a new command, how to change the phrasing, and what to look at when failures occur. Your team then maintains the scenario independently.

Each stage ends with an artifact that can be verified: a scenario map, a command scheme, test run results. This eliminates the situation where the integration "seems to work," but it's unclear what exactly needs to be maintained and how.

Artifacts and documentation after implementation

After the project is delivered, the client is left not only with working voice control, but also with a complete set of artifacts that the team can use to develop and maintain the Google Assistant integration without us.

Everything we configured during implementation is captured as configurations, diagrams, and policies — this removes dependence on the contractor and simplifies handing the task over to another engineer.

  • Project configurations in Actions Console: intent structure, trigger phrases, mapping to app scenarios, and account linking parameters.
  • Request routing diagram: how a voice command travels from the assistant to the app's business logic and which services are involved at each step.
  • Access policies and roles: which employees can change intents, publish releases, and view dialogue logs, with differentiated permissions.
  • Scenario update policy: the procedure for adding new voice commands, reviewing wording, and rolling out changes without stopping the service.
  • Local debugging guide: how to reproduce a dialogue in a test environment and verify the assistant's response before publishing.
  • Catalog of supported commands with example phrases and expected actions — for support and onboarding new employees.
  • Acceptance and rollback checklist: checkpoints after release and the procedure for reverting to the previous configuration in case of failure.

We hand over each artifact in a working state — not as a description of "what was done," but as a tool the team uses daily. Diagrams and policies are updated alongside the code, so the documentation does not diverge from the actual configuration a month after launch.

Case study: how a voice scenario accelerated the service's operation

The client is a grocery delivery service with an Android app in which an order was assembled across 5-7 screens.

Couriers and operators complained about the slow scenario, and support was drowning in repetitive requests like "I can't find it," "it didn't save." We proposed adding a voice scenario via Google Assistant: the user dictates a command, the app parses it and inserts it into the order.

What it was before

Measurements on real traffic showed: the average time from a voice command to the interface response was about 4 seconds, the share of successfully recognized commands was 61%, and support received roughly 1,200 requests per month related to manual input.

The main cause of the delay was a synchronous recognition call directly in the UI thread: until the response arrived, the screen did not respond.

What we changed

We moved recognition into a separate service, added a cache of frequent commands, and added a local intent check before the network request. Commands that could not be parsed now go into a clear clarification dialogue instead of a silent failure.

We also set up logging separately: each command is tagged with a status, so failures are visible immediately rather than through complaints.

What it became

The response time dropped to 1.3 seconds, the share of successful commands rose to 89%, and the flow of support requests for manual input fell by almost threefold. The load on operators decreased so much that some shifts were reassigned to other tasks.

A month after launch, we added support for new phrasings without rebuilding the app — the scenario is updated on the service side.

How does an embedded scenario differ from an external service?

An embedded scenario lives inside the application itself: the voice layer is part of the codebase, it is built and shipped together with the release.

An external service is moved outside the application — a separate server receives a request from Google Assistant, parses the intent, and calls the required method in the application or backend.

The difference is not in where the code physically runs, but in who is responsible for the "phrase — action" link and how that link changes over time.

The embedded option provides a direct architecture: the application itself registers the supported commands, handles intents itself, and does not depend on the availability of a third-party node.

Latency is predictable because there is no extra network hop, and the voice logic and the interface logic sit side by side — they are easier to keep consistent.

The price is the release cycle: any edit to wording or addition of a command requires a new build and passing review in the store.

An external service frees up your hands for development. Scenarios, synonyms, and parsing rules change on the server side and take effect without updating the application — this is critical when commands are edited by marketing or support, not just by development.

But a second circuit appears: your own service needs to be deployed, monitored, and secured, and the application must work correctly when this circuit is unavailable or responds slowly.

In practice, the choice is rarely binary. Commands tied to screen state and local data are kept embedded — instant response and offline operation matter there. Scenarios that change frequently or must be shared across several platforms are moved outside.

The boundary runs along the frequency of changes and fault-tolerance requirements, and it is worth fixing it explicitly, otherwise the voice layer spreads across both circuits.

For support, this means a different cost of ownership. An embedded scenario is cheaper to operate, but every change is paid for with a release. An external service requires constant infrastructure maintenance, but edits are rolled out in minutes.

At the start, we lay out the commands along this boundary and describe what goes into the application and what goes into the service — so that the development of the voice layer does not hit the publication cycle.

Common technical doubts and answers

Integration with Google Assistant almost always raises the same questions: will it break the current app, how will it behave under load, and what about security. Below is a breakdown of each point, without generalities.

Will this break the app's existing features?

No, if the integration is placed in a separate layer. Voice scenarios are connected as a standalone module that calls the app's existing methods rather than rewriting them.

The current screens, authorization, and business logic remain untouched — voice becomes just another input channel, on par with buttons and gestures. Rolling back comes down to disabling the module, without a full app release.

Will the system handle the load from voice requests?

Voice calls go through a separate handler and do not compete with the app's main traffic. Peak spikes are smoothed out by a queue, and heavy operations (recognition, intent parsing) are performed asynchronously.

In practice, the share of voice requests rarely exceeds a few percent of the total number of calls, so no infrastructure growth is required for them.

How are security and access handled?

Access to sensitive actions is confirmed by the same mechanisms as in the app: session token, server-side permission checks, and a restricted command list. A voice command does not bypass authorization — it goes through the same validation.

Tokens are not stored in plaintext, and account linking to the assistant is performed via the standard linking protocol.

What happens when the app or the assistant itself is updated?

The voice layer is isolated from the interface, so app updates do not affect the scenarios, and changes on the assistant's side do not require a rebuild.

We keep the command contract separate from the implementation — when the internal logic changes, it is enough to update the adapter. This removes the risk that another release will "bring down" voice control.

Will the app have to be rewritten for voice?

No. Compatibility is ensured by an adapter: it translates voice intents into calls to existing functions. Current Android versions and the current branch of the assistant are supported — a separate build for voice is not needed.

If the app already runs on multiple platforms, the voice layer is added selectively, without affecting the others.

Let's discuss your task and come back with a plan

To understand how voice control will fit your specific app, we need to break down the scenarios: which actions the user will trigger by voice, which of them are already described in the screen structure, and which will require reworking the navigation.

Google Assistant here is not a separate feature, but another entry point into the product, and it must lead to the same results as regular taps. That is why we start the conversation with your task, not with a template list of commands.

Based on the discussion, you will receive an estimate and a work plan: which scenarios we cover in the first stage, what will require changes in the existing code, where access to accounts will be needed, and how we will verify the result on real devices.

We break the implementation into stages so that each step can be accepted separately and without redoing the already working parts of the app.

What the plan will include:

  • breakdown of user scenarios and prioritization by frequency of use;
  • a scheme for connecting the app with Google Assistant and a list of supported commands;
  • requirements for access, test builds, and accounts for verification;
  • implementation stages with acceptance points at each;
  • a list of changes in the current code and an estimate of their effort;
  • the procedure for testing on live devices and under different connectivity conditions;
  • the scope of documentation on voice scenarios for your team;
  • post-launch support terms and the procedure for handling requests.

Describe the task in two or three sentences: what the app is, which actions you want to trigger by voice, and whether there are constraints on timelines and the current team. We will come back with an estimate and a work plan — with no obligation on your side.