# Intro

Alice's skills are the voice applications that provide different functionality for users. To create a Skill requires at least basic technical experience, an Alice installation, an idea of what your Skill will do, and how people will use it.

TIP

Explore the fundamental building blocks of a Skill, and the knowledge required to create meaningful and engaging voice interactions.

# Technical Requirements

# Python programming language

WARNING

It is required that you read and understand our Code guidelines

Skills for Alice are written using the Python programming language(opens new window) . A simple Skill can be a great way for new developers to try Python out in a real project, whilst experienced programmers will quickly see the powerful possibilities available in a well crafted Skill.

If you aren't familiar with the basics of Python, check one of the many great tutorials online to get you started. If you've programmed in other object-oriented languages, like Java or C#, then you'll be able to pick it up, but if you're totally new to programming, you might want to look at an introductory programming course(opens new window) .

For a quick jump into setting your IDE for Alice, read the following community made documentation: Getting started with Pycharm.

# GitHub account

Skills are hosted on GitHub(opens new window) , so you will need to create an account there if you don't already have one. It is good to have a basic understanding of the Git basics(opens new window) and GitHub basics(opens new window) .

# Running Alice

To test your Skill out, you will need to set up an Alice device. Currently, Alice can be installed on devices running debian stretch/buster. Alice also comes with a number of helpful tools to create new Skills, and validate them. If you aren't yet familiar with how Alice works, check out the overview of Alice components to understand the many technologies that come together to provide an intelligent voice assistant.

# What makes a good Skill?

# Fulfilling a need the user has

Good Skills meet one or more of the user's needs. Popular Skills are popular because people use them frequently - for instance, to set alarms, reminders, or to identify the time in other time zones. On the other hand, a Skill that, say, recites π to 100 digits might be pretty cool, but when was the last time you needed to know π to 100 digits? Contrast that with the last time you set a reminder on your phone.

# Having an easy-to-use voice interface

Just like a web page with a thoughtfully-designed interface is much more pleasant to use, a Skill with a well-designed voice interface is a delight, not a chore, to use. You should anticipate the task the user is trying to accomplish, and how to make that as straightforward as possible.

If you have an idea for a Skill, it's a great idea to join our Discord Chat(opens new window) , specifically the skills channel, and share what your plans are. You'll be able to get constructive and helpful feedback on your Skill from an experienced community.

# Alice's idiom

This part is important, to provide the smoothest experience possible to the end user. Let's set the example:

  • You have a house
  • The house has 3 rooms Living room, kitchen, bedroom.
  • Every rooms have an Alice Satellite
  • Every rooms have some smart lights installed.
  • Bedroom and kitchen rooms have roof windows.

Now, you are standing in the living room and ask Alice

Turn the lights on please

As a user, you expect Alice to turn the lights on in the living room right? Without explicitly specifying it. Your skill must follow this rule.

Now, while still standing in the living room:

Close the windows

There's no windows in the living room, as a user, you know it. Your skill must close all the available windows as the user did not specify which ones!

In the contrary:

Close the windows in the living room

Alice should respond that there's no windows in the living room.

Or:

Close the windows in the bedroom

Alice should close the windows in the bedroom only, as explicitly specified

This set of rules is relatively simple, and must be followed by every skill!

# Skill terminology

Make sure to check our Alice Glossary to understand all the terms used in relation with skills.