I've been working with Alexa for a few months now and if there is one thing I wish I had done more of, I would have spent more time understanding these key concepts: Skills, Invocation, Intent, Slot, Utterances and Intent Schemas. These concepts are not difficult to learn but they do require some consideration.

Here is my attempt to explain them in as simple of a way as possible.

What is a Skill?

Skills are built-in capabilities for Alexa to give listeners new experiences.

Said differently, Skills are the product you make for the Alexa platform and Alexa marketplace. You can make skills, sell skills, sell advertising through skills or charge users to use your skill.

Where do I create a skill?

You can create a skill through the Amazon Alexa Developer Console

What is an Invocation?

After you create your skill, you will be required to make an invocation name. An invocation name identifies what the user wants to do. It's how users call upont your skill when they are speaking with Alexa.

Invocations can either look like commands or questions such as,

"Alexa, ask ninety point five...".

In this example, the invocation is ninety one point five and it's how the user activates your skill.

Note: Invocation Name Requirements

There are a few details you must consider while creating an invocation name. Here are the key points:

  • Write out numbers like "twenty one" for 21.
  • Invocations should be two words or more.
  • Use lowercase words.
  • It's OK to use spaces in between words.
  • It's OK to use apostrophes if they are used possesively.
  • Use periods when you are abbreviating something.

What is an Intent?

Once you've created your skill and created a trigger phrase to active it (aka invocation), then you'll want to create an intent. Intents describe what a user specifically wants to do. Connecting the intent with the invocation name above, you migth say,

"Alexa, ask ninety one point five what's playing."

The intent is to find out information about what music is playing on 91.5.

What is a Slot?

A slot is a condition (or a variable) set by the user. It's a way to qualify the request and help narrow down what the user wants.

Here is the previous example with the addition of a slot.

"Alexa, ask ninety one point five what's playing right now."*.

The slot in our case is right now.

Another example could be:

"Alexa, ask ninety one point five what was playing yesterday at 2pm."

In this example, the user changed two variables, the date and the time.

What is an Utterance?

Not everyone is going to ask a radio station "what's playing" in the exact same way so we use utterances to consider other ways to ask for the same information.

Utterances are derivatives of your original request –said differently. For example, below are two similar requests for information and what's implied by the user that is they want to know what's playing right now.

"Alexa, ask ninety one point five composer".

"Alexa, ask ninety one point five the composer's name".

Utterances are useful because they will help you improve the accuracy of Alexa and they can also help you reach new audiences from different age ranges. For example, maybe you want to reach a younger audience and they may be more inclined to ask,

"Alexa, ask ninety one point five name".

"Alexa, ask ninety one point five title".

"Alexa, ask ninety one point five 'da name".

What is a Command?

Commands are a different type of invocation. They are used by users to get a response from Alexa.

"Alexa, set ninety one point five to turn on at 5am."

In this example:

  • "ninety one point five" is the invocation name.
  • "to set" is the command.
  • "turn on at 5am" is the variable slot.

What is an Intent Schema?

Now that we've covered Skills, Invocations, Intents, Slots, and Utterances, we can organize these building blocks into a structured format using Intent Schemas.

Intent Schemas are how you prepare "intents" and "slots" in a JSON format.

  "intents": {
    "intent": "turn on",
    "slots": {
      "time": 4,
      "type": "am"

Final Thoughts

These Alexa concepts are somewhat abstract until you start developing so I don't expect developers to spend tons of time studying them up front but I wish I had spend more time thinking about them more beforehand. It would have saved me a lot of time.