Giving the NeboCMS a Voice

It’s no secret — voice technology is rapidly gaining traction in the tech industry and is poised to overtake traditional avenues of search, marketing and eCommerce. If you want to be where your users are, you’ll want to get in on voice!

The Problem

People who want to manage voice content have, generally, two options right now: an Alexa Skill or a Google Action. Both of these services are separate entities that require different means of management, so an aspiring voice developer faces a difficult choice: which service do you dedicate your time and effort to? Will you risk alienating one audience for the sake of another?

Let’s say that you want to invest time into configuring and understanding both platforms. This is a great option (after you’ve figured out all of the configuration and setup) until it’s time to update your voice content: how do you make sure updates make it to both services and ensure the experiences are consistent across all of your users?

The Solution

NeboCMS is our answer to easily managing website content for our clients. However, our system can manage more than just websites. We can easily extend our CMS’s functionality to support content editing across a variety of mediums.

In order to solve the problem of juggling multiple voice services, we’ve developed an add-on to our CMS to store all of your voice content in one place and automatically update it across your voice services in real-time, without having to interact with any of the internals of Google Actions or Alexa Skills. Enter: the NeboVoice CMS.

The main view of our CMS voice module. The voice module allows you to easily add, update and delete voice content for Google Actions and Alexa Skills at the same time.

Our voice module allows users to define the following content within their Alexa Skills and Google Actions:

  • Voice command: the command, often referred to as the “intent” by voice services, represents what the user is trying to accomplish within the app.

  • Training phrases: training phrases are sentences or words that the user may say to express that they are trying to access a particular command — this allows our voice apps to listen and respond appropriately.

  • Responses: the response dictates what the app will say back to the user and, in the case of devices with display capabilities, what the app will show to the user. Currently we support audio and image/card responses.

Once a particular voice command is defined, it is automatically synced to any service (Google or Amazon) that is configured in the CMS. Updates can be seen on the Alexa Skill and Google Action as soon as the data is published, which means that users will always see the latest version of your content and will see the same content regardless of their voice platform!


How Does It Work?

Both Alexa Skills and Google Actions offer API access to their respective voice app builders. First, we leverage these APIs to register our voice commands/intents with those services. Along with the voice command itself, we send our training phrases to each service to be analyzed by Amazon and Google’s language processors, which allows users to ask for information/actions in the voice app and be understood by the system. When a particular voice command is activated, each service is instructed to refer back to our CMS for the appropriate response to the query, which is then presented to the user.

class VoiceCommands::FulfillmentController < ActionController::Base
  def google
    render json:, request).format
  rescue NoMethodError
    render json:, request).format

  def amazon
    render json:, request).format
  rescue NoMethodError
    render json:, request).format


This code snippet shows an example of how Google Action requests are fulfilled in our CMS. We receive the command from Google, find it in our CMS and then choose one of the CMS user-defined responses for that command to send back to the voice app. If we can’t identify the correct command, we send a fallback message to the voice app.

When we send a response back to a voice service, it is done in JSON format. We utilize service objects to keep the formatting details of Google Action and Alexa Skill responses out of our controller.

The Future of Voice

At Nebo, we’re exploring all of the promise voice holds for the future of marketing and technology, and this is just one piece of that process. If you are a content manager looking to break into voice, you currently don’t have any options on the market that allow you to manage your Google Action and Alexa Skill in one place without a steep coding and configuration learning curve. We hope to use this tool in the future to help fulfill that need and make voice apps accessible to anyone with good ideas — not just engineers!

Be sure to keep checking back as we continue to improve and make advancements in voice tech.


Take Over the World With Us

Work With Us

See how our ideas, insights and know-how can help you tackle your next project — or build a human-centered experience for your brand.


Join the Team

Want to build something you believe in? See what it takes to become part of our fast-paced team of dreamers and innovators.

Open Jobs