This skill acts as a companion for our app developed prior to the hackathon but the skill itself was completely new created within the submission period of the hackathon. So although the development of the skill was a project itself some time after the development of the server backend and the mobile app, we will still refer to both in this whole story because the skill would not exist without the prior project due to the inspiration as well as its dependance on the previous project.

Inspiration and motivation to do this project

As explained in the video we started the project motivated by the user unfriendly experience at that time newly available teacher substitution schedule website for our German high school provided.

After we discovered Alexa on a Rasperry Pi and getting into Alexa development with Python, we started discussing how Alexa could benefit the substitution schedule project. The idea about waking up and asking Alexa about possible canceld lesson was exciting. For the Alexa skill itself we got inspired to futher improve the accesibility and comfort to access this information via VUI when we first heard about the Alexa skills kit.

What it does

It enables you to ask Alexa for your personalized substitution information. It's best to see the functionality in the demo video but basically the skill functions as a easier method to get the substitution information of our app. To register you select the class and course you participate in the app and our application filters, saves and send you only the substitution information concerning you. The Alexa skill that is the subject of this submission is linked to your app account which enables it to tell the user wether the student has any substitution concerning him and if so dictate him all relevant information.

How we built it


We started by building a parser for the online schedule a year ago. It collects the entries regularly and saves them in our MongoDB database. This Java application also checks if the users saved in the database are affected by entries on the schedule. During that time we developed many different solutions for notifing users about their entries. The project evolved to an hybrid mobile App for iOS and Android. This app uses our NodeJS backend for retrieving data from the server.

Getting started with Alexa

We started by reading the Alexa skills kit documentation and watched different tutorials on using the Alexa skills kit and flask-ask. Flask-ask and python seemed the easiest framework for beginners after an overview of the available solutions. So we chose this method and started to build it with the most basic intents, utterances needed and served it using ngrok while developing it. To allow interaction with our server we needed to expand our REST-API and create a account linking method. The creation of this account linking method to link accounts of an Alexa user with the users of our app got the most complicated building the skill. After implementing most basic intents, further developing the API and deploying it to AWS lambda with zappa (which seemed the easiest and most reliable for Alexa skills) we tried to submit the skill for certification for the first time.
This first try failed with some complaints including concerns on VUI implementation, security validation of requests and especially account linking.
Therefore we fixed the criticised points, further enhanced the VUI interface with built in intents like the cancel and help intents and interaction prompts for launch only intents, rebuilt the complete account linking flow and followed all available blogs and docs on pre-certification checklists.
After fixing those points and making sure our skill followed all certification guidelines we submitted the skill for certification again and it passed.

Challenges we ran into

  1. The parser for the online schedule had some uncalculated bugs but because we are not asociated with the school there was no other way to get the data.
  2. The online teacher substitution schedule is written by one of the teachers so it's subject to sudden syntax/markup changes which made the development of the parser even more complicated.
  3. Developing a reliable communication between the user of the app/Alexa and our server via an API was a task new to both team members.
  4. The account linking flow using existing oauth providers (we use login with amazon) and linking these instances to app users which are only identified by their unique push message provider ID was not easy to figure out. At creating this process we struggled with some lacking information in documentation (in contrast to all other aspects of the Alexa Skills Kit).
  5. We started with strong differences in skill and experience levels which led to an imbalance of work at first while developing the initial backend and parser. This was later indemnified after the project experience balanced the skill levels and a strong interest in Alexa Skills motivated David to develop this Alexa skill to enhance the pre-existing base backend and mobile app.

Accomplishments that we're proud of

  • David newly learned multiple modern technologies for example the use of NoSQL (MongoDB), NodeJS Web Development with express.js, hybrid app development with Ionic Cordova
  • It was the first Alexa skill that any of our team members built and it taught us many things about developing with the Alexa skills kit platform e.g. the concept of intents, utterances, SSML and development of custom skills with Flask Ask.

What we learned

The main part of the project was learning to develop an Alexa skill. Furthermore we exteded our knowlede in NodeJS development while developing backend extensions for the skill.

Main things we learned among others include:

  • Alexa Skill development
  • Web development with express.js and templating with handlebars
  • Basics of NoSQL with MongoDB
  • Login with Amazon implicit grant flow
  • A bettter understanding of networking
  • Using AWS Lambda
  • Zappa

What's next for "Teacher substitution schedule"

In future we plan to further brainstorm about the possibilites for us to integrate upcoming features that are still in testing phases for the app into the Alexa skill.
Many features like the plan for upcoming exams and tests which consists of a PDF made available by the school don't seem to be suitable for voice interaction. Other features like the still very experimental function to search for other schoolmates having a free period simultaneously to yourself are more suited to be integrated in future.

Translation of German skill store descriptions

Short skill description

App zur sprachlichen Nachfrage nach dem Vertretungsplan der App "Vertretungsplan Newsletter" für die Rabanus Maurus Schule Fulda.

App to ask for the substitution schedule of the app "Vertretungsplan Newsletter" for the "Rabanus Maurus" school Fulda

Full skill description

Dieser Skill ermöglicht die personalisierten Vertretungsinformationen der RMS Fulda schnell und unkompliziert abzufragen und stellt somit die Sprach Companion zur "Vertretungsplan Newsletter" App für Android (https://goo.gl/74UZsU) und iOS (https://goo.gl/RqvHrR) der Rabanus Maurus Schule Fulda dar. Weitere Schulen der Region mit dem Untis Online Vertretungsplan werden eventuell folgen. Zur Benutzung dieses Skill muss in den Einstellungen der genannten App das Feature "Alexa/Echo Support" angehakt sein und die Einstellungen gespeichert werden. Der in der App angezeigte PIN wird später beim Pairing des Alexa Skill gebraucht, um ihn einzugeben.

This skill enables you to fast and straightforwardly find out your personalised substitution information of the "RMS Fulda" and it therefore represents the speech companion to the "Vertretungsplan Newsletter" app for Android (https://goo.gl/74UZsU) and iOS (https://goo.gl/RqvHrR). More schools using the Untis Online substitution schedule might be implemented in future. To use this skill you have to activate the feature "Alexa/Echo Support" in the settings of the app and save. The PIN displayed in the app has to be entered later when the skill gets paired.

Built With

Share this project: