import credentials constants UTC_FORMAT = “%Y-%m-%dT%H:%M:%S.00Z” TOKEN_URI = “https://api.amazon.com/auth/o2/token” Token access constants CLIENT_ID = credentials.key[‘CLIENT_ID’] CLIENT_SECRET = credentials.key[‘CLIENT_SECRET’] def get_access_token(): token_params = { “grant_type” : “client_credentials”, “scope”: “alexa::proactive_events”, “client_id”: CLIENT_ID, “client_secret”: CLIENT_SECRET } token_headers = { “Content-Type”: “application/json;charset=UTF-8” } response = requests.post(TOKEN_URI, headers=token_headers, books Dr John Allwork Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi
● This is an Elektor Publication. Elektor is the media brand of Elektor International Media B.V.
PO Box 11, NL-6114-ZG Susteren, The Netherlands Phone: +31 46 4389444
● All rights reserved. No part of this book may be reproduced in any material form, including photocopying, or storing in any medium by electronic means and whether or not transiently or incidentally to some other use of this publication, without the written permission of the copyright holder except in accordance with the provisions of the Copyright Designs and Patents Act 1988 or under the terms of a licence issued by the Copyright Licencing Agency Ltd., 90 Tottenham Court Road, London, England W1P 9HE. Applications for the copyright holder's permission to reproduce any part of the publication should be addressed to the publishers.
● Declaration
The Author and Publisher have used their best efforts in ensuring the correctness of the information contained in this book. They do not assume, and hereby disclaim, any liability to any party for any loss or damage caused by errors or omissions in this book, whether such errors or omissions result from negligence, accident, or any other cause.
All the programs given in the book are Copyright of the Author and Elektor International Media. These programs may only be used for educational purposes. Written permission from the Author or Elektor must be obtained before any of these programs can be used for commercial purposes.
● British Library Cataloguing in Publication Data
A catalogue record for this book is available from the British Library
● ISBN 978-3-89576-531-5 Print ISBN 978-3-89576-532-2 eBook
● First edition
© Copyright 2023: Elektor International Media B.V. Editor: Alina Neacsu
Prepress Production: Jack Jamar | Graphic Design, Maastricht
Elektor is part of EIM, the world's leading source of essential technical information and electronics products for pro engineers, electronics designers, and the companies seeking to engage them. Each day, our international team develops and delivers high-quality content - via a variety of media channels (including magazines, video, digital media, and social media) in several languages - relating to electronics design and DIY electronics. www.elektormagazine.com
● 4
About
Chapter 1 Alexa History and Devices 14
Chapter
Chapter
● 5 Contents Contents
the Author .................................................. 12
Introduction ..................................................... 13
1.1 Alexa voice service and AWS Lambda ............................... 15 1.2 Pricing ..................................................... 15 1.3 Alexa skills .................................................. 15 1.4 Supported programming languages 16 1.5 Terminology – Invocation, Utterances, Intents and Slots .................. 16
1.5.1 Alexa Wake word ......................................... 16 1.5.2 Invocation .............................................. 16 1.5.3 Utterances 16 1.5.4 Intents and requests ....................................... 17 1.5.5 Slots .................................................. 17 1.5.6 Interaction model 19 1.5.7 Endpoints 19 1.5.8 Regions ................................................ 19 1.6 Skill Sessions ................................................ 19 1.7 Session attributes 19 1.8 Request and response JSON ...................................... 20 1.9 Blueprint skills . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.10 Summary .................................................. 22 1.11 References: 22
2 Creating your Amazon Account ................................ 23 2.1 Introduction ................................................. 23 2.2 Create your Amazon account 23 2.3 Your skills 26 2.4 Hosting .................................................... 26 2.5 Summary .................................................. 27
3 Creating an Alexa Skill 28 3.1 Introduction ................................................. 28 3.2 Your first skill ................................................ 28
3.2.1 The interaction model ...................................... 29
3.2.2 Choose a method ......................................... 29
3.2.3 The Invocation Name ...................................... 32 3.2.4 The Intents 33 3.2.5 The code ............................................... 34 3.3 Testing your skill ............................................. 38 3.4 Skill I/O 39
3.4.1 Skill request 40 3.4.2 Skill response ............................................ 42 3.4.3 Speech Synthesis Markup Language (SSML) ...................... 43 3.5 Code editing 44
3.5.1 Edit the HelloWorldIntentHandler code .......................... 44 3.5.2 Add some debug code ...................................... 44 3.6 Test your code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.7 Utility code 46 3.8 Debugging .................................................. 49 3.9 Node.js differences ............................................ 50 3.10 Node.js debugging ........................................... 51
Chapter
4 Slots and Dialogs, Saving Session Data 52
4.1 Introduction ................................................. 52 4.2 Slots in action ............................................... 52 4.3 Slot skill 52 4.3.1 Invocation Name 52 4.4 Skill flow ................................................... 53 4.5 Add the intent to our skill ....................................... 54 4.6 Evaluate your model 57 4.6.1 The JSON editor .......................................... 59 4.7 Accessing the slot ............................................. 60 4.8 The code ................................................... 61 4.8.1 Test your skill 64 4.9 Session attributes - saving slot values ............................... 65 4.9.1 Remember their name ...................................... 65 4.10 Dialog delegation ............................................ 67 4.11 The Birthday code 72 4.12 Handling Yes and No intents ..................................... 75 4.13 Multiple Yes / No sources ....................................... 79
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi ● 6
82
Chapter
Chapter
Chapter
● 7 Contents
.........................................
............................................
...........................................
..................................................
4.14 AMAZON.SearchQuery
80 4.15 ASK SDK Utilities
81 4.16 Intent error logging
82 4.17 Language understanding NLU and Automatic speech recognition ASR 82 4.18 Summary
...........................
.............................
...........................................
.................................
5 S3 Storage and DynamoDB Database
83 5.1 Introduction 83 5.2 Local storage 83 5.3 Persistent attributes, DynamoDB and S3
84 5.3.1 Code example
85 5.3.2 DynamoDB database storage 89 5.4 Request and response interceptors
90 5.5 DynamoDB ................................................. 94 5.6 S3 storage .................................................. 95 5.7 Summary 98
..................................
.................................................
....................................
................................................
................................................
.............................................
..................................................
................................................
6 Certification and Publishing
99 6.1 Introduction
99 6.2 Adding further languages 99 6.3 Distribution 100 6.4 Availability and Beta Testing
102 6.5 Beta Tester
103 6.6 Validation 103 6.7 Submission
104 6.8 Post Publication
104 6.9 Analytics
105 6.10 Summary 106 6.11 References
106
................................................
...................................................
...........................................
..............................
7 Creating Skills with Lambda and ASK CLI ....................... 107 7.1 Introduction
107 7.1.1 AWS Lambda skill 107 7.2 ASK CLI
114 7.3 Visual Studio code
115 7.4 Local debugging 120 7.4.1 Add Alexa debugger configuration 121 7.4.2 Test your Alexa skill in VS code
123
7.5 Summary ................................................. 124 7.6 References ................................................. 124
Chapter 8 Alexa Presentation Language – APL ........................... 125
8.1 Introduction 125 8.2 APLA ..................................................... 126 8.2.1 APLA components ........................................ 127 8.3 Datasources 129 8.4 APLA datasource example 129 8.5 Adding an APLA reprompt ...................................... 133 8.6 Summary ................................................. 135 8.7 References 135
Chapter 9 APL Visual Multimodal Responses ............................. 136 9.1 Introduction ................................................ 136 9.2 Creating an APL Visual Response ................................. 136 9.3 Visual Components 140 9.4. APL component example ...................................... 140 9.5 Using the Authoring Tool ....................................... 142 9.6 Integrating APL and code 146 9.6.1 Check for screen support 148 9.7 APL Commands ............................................. 150 9.7.1 Standard Commands ...................................... 150 9.7.2 Media Commands 150 9.7.3 User-defined commands ................................... 150 9.7.4 Execute Commands directive ................................ 150 9.8 Responsive components and Alexa Layouts .......................... 151 9.9 Converting Text to speech – using Transformers 151 9.9.1 Transformer APL design .................................... 152 9.9.2 Operation ............................................. 154 9.9.3 Using the ExecuteDirective command .......................... 155 9.10 Summary 157 9.11 References ................................................ 157
Chapter 10 Alexa In-skill Purchasing (ISP) .............................. 158 10.1 Introduction 158 10.2 Create your ISP skill 159
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi ● 8
10.3 Accessing your ISP code ...................................... 161
10.4 Retrieve in-skill products, get their information and purchase. ............ 164
10.5 Produce detail and purchase ................................... 167
10.6 Purchase 169
10.6.1 Failed Purchase ......................................... 174 10.6.2 Refunds .............................................. 174
10.7 References 178
Chapter 11 Progressive Response - Accessing the Internet 179
11.1 Introduction ............................................... 179 11.2 Steps to Send a Progressive Response ............................. 179 11.3 Progressive response example 179 11.3.1 Code response .......................................... 182 11.4 asyncio, async and await - awaiting a web response ................... 183 11.5 References ................................................ 183
Chapter 12 Creating a Raspberry Pi IoT Thing 184
12.1 Introduction ............................................... 184 12.2. Create a Raspberry Pi IoT ..................................... 184 12.2.1 a) Create our ‘Thing’ and its certificates 184 12.2.1 b) Thing’s endpoint 187 12.2.1 c) Transfer the certificates to your Pi .......................... 188 12.2.2 Create and run the Python code .............................. 188 12.2.3 Send messages to your Pi 189 12.2.4 Create an Alexa-Hosted Skill ................................ 191 12.2.5 Test the skill ........................................... 193 12.3 Add intents to the Alexa skill .................................... 194 12.4 Control the robot 195 12.5 Add intent handlers to the skill code .............................. 196 12.6 Modify your code ............................................ 198 12.6.1 Modify your Pi code - LED .................................. 198 12.6.2 Modify your Pi code - explorerhat 199 12.7 Test your robot or LED ........................................ 200 12.8 Summary ................................................. 200
Chapter 13 Smart Home Devices 201
13.1 Introduction 201
● 9 Contents
13.2 Alexa Interfaces ............................................ 201 13.3 Login with Amazon (LWA) ...................................... 201 13.3.1 Create a security profile ................................... 202 13.4 Create your Smart Home Skill 203 13.5 Create a Lambda function ...................................... 203 13.6 Lambda skill code ........................................... 204 13.7 Test your Lambda function 205 13.8 Link the function to the skill 207 13.9 Configure account linking ...................................... 207 13.10 Enable and Link the skill ...................................... 209 13.11 Clean up 212 13.12 Troubleshooting ............................................ 212 13.13 Summary ................................................ 212 13.14 References ............................................... 213
Chapter 14 Controlling a smart home raspberry Pi with SQS 214
14.1 Introduction ............................................... 214 14.2 Create an SQS Queue......................................... 214 14.3 Raspberry Pi SQS code ........................................ 216 14.4 Create a Smart Home skill 218 14.5 Create the function .......................................... 218 14.6 Create a security profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 14.7 Configure the smart home skill 219 14.8 Add the function code 219 14.9 Test the function ............................................ 222 14.10 Discover your device ........................................ 222 14.11 Test from an Alexa device 223 14.12 Clean up ................................................. 223 14.13 Summary ................................................ 223 14.14 References ............................................... 224
Chapter 15 IoT, Pi and Node-RED 225
15.1 Introduction ............................................... 225 15.2 Prerequisites ............................................... 225 15.3 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 15.4 Running node-RED 226 15.5 Node-RED user interface....................................... 227
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi ● 10
15.6 First flow design - Hello world ................................... 228
15.7 Hardware I/O .............................................. 230
15.7.1 Add an input ........................................... 233
15.8 Using the Sense Hat 235
15.9 Node-RED dashboard ......................................... 237
15.10 Sense Hat output ........................................... 241
15.11 IoT - Receiving MQTT messages 242
15.12 Create a new IoT thing for MQTT communication. 242
15.12.1 Subscribe to a topic ..................................... 244
15.13 Node-RED IoT Application ..................................... 244
15.14 Receiving MQTT messages 247
15.15 Summary ................................................ 249
Chapter 16 Proactive Events – Sending Raspberry Pi Alexa Notifications ......... 250
16.1 Introduction ............................................... 250 16.2 The Lambda function 250 16.3 Send a notification ........................................... 256
16.4 Code to get the access token ................................... 257 16.5 Send the notification ......................................... 259 16.6 Summary 261 16.7 References: ................................................ 261
Chapter 17 Raspberry Pi as a Stand-alone Alexa Device ..................... 262
17.1 Introduction 262 17.2 Raspberry Pi setup ........................................... 262 17.3 Procedure ................................................. 263
17.3.1 Register your AVS device with Amazon ......................... 263 17.3.2 Download and install the AVS SDK 267 17.3.3 Run and authorize the sample app ............................ 269
17.4 Use the sample app .......................................... 271
17.5 Summary ................................................. 271 17.6 References 271
Chapter 18 Conclusion ............................................. 272
18.1 Conclusion ................................................ 272 Index 273
● 11 Contents
About the Author
Dr. John Allwork was born in 1950 in Kent, England and became interested in electronics and engineering at school. He went to Sheffield University on their BEng Electrical and Electronic Engineering course. There he developed an interest in computers and continued his education on an MSc course in Digital Electronics and Communication at UMIST. After two years working for ICL as a design, commissioning and test Engineer he returned to UMIST where he graduated with a Ph.D. in ‘Design and Development of Microprocessor Systems’.
He worked for several years in technical support and as a manager in electronics distribution, working closely with Intel Application Engineers and followed this with design work using the Inmos Transputer systems.
Having taught at Manchester Metropolitan University he retired in 2011 but has kept up his interest in electronics and programming as well as his other occupation of travelling, walking, geocaching and spending time on his allotment.
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi ● 12
Introduction
This book is aimed at anyone who wants to learn about programming for Alexa devices and extending that to Smart Home devices and controlling hardware, in particular the Raspberry Pi.
It covers Alexa programming concepts from the basic concepts of Alexa Voice service, the interaction model and the skill code which runs on AWS (Amazon Web Services) Lambda.
It takes the reader through all stages of creating skills to certification and publishing, including writing skills that involve in-skill purchasing. It discusses different ways of creating skills, then moves on to creating visual skills using APL (Alexa Presentation Language) for screen-based Alexa devices.
The book then moves on to cover different ways of controlling hardware including the Internet of Things and Smart Home devices. There are interfaces with the Raspberry Pi using MQTT and SQS communication, displaying on the Pi using Node-RED and Python code.
Although mostly based on Python, Node.js examples or links are also provided. The full code is provided in a separate document.
Please note that Alexa skill development, the developer console and APL versions have changed since writing this book, so please bear with the author if there are slight differences.
I do not pretend to know all there is about Alexa and Raspberry Pi programming – they seem to advance faster than I can follow! I have a background in hardware and software design. I am sure that there are areas where some programmers may be offended by my code and that there may be better ways to write it, but I have written and tried all the examples and know they work. I hope the examples will spur you on to find solutions to your own problems. Should you need more information then please try the online help and the Raspberry Pi or Alexa forums: alexa.design/slack is particularly good. There are plenty of programmers out there willing to help solve your problems, often extremely quickly; certainly faster than I would get back to you!
I wish to thank my friends for encouraging me, especially Dr. Hugh Frost, Andy Marsh and Dr. John Nichols; the Alexa staff: in particular Jeff Nunn, Jeff Blankenburg and Ryan J Lowe; helpers on the alexa.design/slack group, including Andy Whitworth; subscribers of my YouTube and GitHub channels who have made encouraging comments; and the many anonymous people on the internet, forums, blogs and websites who have answered many questions, not just my own – keep up the good work. Not least of all I would like to thank my wife Penny, for supporting me throughout.
And of course, you for buying the book!
● 13
Chapter 1 • Chapter 1 Alexa History and Devices
Alexa is the virtual voice assistant and Echo is the device. The standard Amazon Echo device general release was in 2015. In 2019, newer versions were released, with more rounded designs and better audio. Amazon Echo Dot was released in 2016 with a smaller design than the standard Echo. Various releases and designs, including a kid’s version, have continued to the 5th generation with a clock and improved LED display in 2022.
In 2017, Amazon released a combination of the Dot and Show, called the Echo Spot. In the same year, the Echo Show was released and featured a slanted, 7-inch touchscreen, camera and speaker. This later changed to a 10-inch screen (Echo Show 10), and more recently, added a 360-rotating display.
The Echo Show 5 came in 2019, (2nd gen in 2021), as well as Echo Show 8 and an Echo Show 15 in 2021 designed for wall mounting.
There are other devices too, including the Button, Flex, Input, Look and recently the Astro robot.
Here are some of my devices (not including smart devices). From the top: Echo Show 8, Fire TV stick, Echo Auto, my original Echo dot, and the Echo Spot.
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi ● 14
Even though many devices have a screen, you should always design for ‘voice first’.
1.1 Alexa voice service and AWS Lambda
Alexa Voice Service is Amazon’s cloud service that processes the audio, determines the appropriate action (AVS) and returns a response to the device. For the skill to produce the appropriate response, designers need to implement two major parts: the interaction model and the skill code which runs on AWS (Amazon Web Services) Lambda.
The interaction model is what your users say and how they communicate with your skill. AWS Lambda is a serverless, event-driven computing service that lets you run your code. Lambda can be triggered by many AWS services and you only pay for what you use.
When a user interacts with an Echo device, AVS sends a request to the skill which is running on AWS Lambda. The skill replies with a response that is turned into a speech and/ or visual response back to the user.
1.2 Pricing
Although there are charges for AWS Lambda, the AWS Lambda free tier includes one million free requests per month and 400,000 GB-seconds of compute time per month, as well as 500 Mb storage. As you can see, this is more than enough for a beginner. For more information, see https://aws.amazon.com/lambda/pricing/
For developers whose skills use more than this, Amazon provides Promotional Credits which reward those who build cloud-hosted applications, software, or tools for sustainability-related work.
For FAQ see reference 1.
1.3 Alexa skills
There are a few different types of Alexa skills2. You may already have realized that a skill communicating with an Alexa device is different from one switching on your lights or telling you there’s someone at your front door.
Chapter 1 ● Alexa History and Devices ● 15
At the moment, there are 15 different types of Alexa skills. The more common ones are:
Skill Function Skill Type
Automotive Custom Flash briefing Games Music Smart Home Video
Pre-built and Custom Custom Pre-built Custom Pre-built Pre-built Pre-built
Description
Automotive applications Voice and visual (APL) applications Provide news and short content information Voice and visual driven game skills Skills to control audio content Skills to control smart home devices Control video devices and content
We’ll be concentrating on Custom skills. Blueprint pre-built skills are also available and easy to develop but have reduced options for user experience. We’ll also study smart home skills, of course.
1.4
Supported programming languages
AWS Lambda natively supports Java, Go, PowerShell, Node.js, C#, Python, and Ruby code. This book will mainly use Python, but it also provides code snippets and links for Node.js.
1.5 Terminology – Invocation, Utterances, Intents and Slots
As with learning anything new, there is new terminology to be understood. You will soon meet (or may already have met) Invocation, Utterances, Intents and Slots.
1.5.1
Alexa Wake word
This is the word used to start your Alexa device listening to your command. Currently, there are five wake words: ‘Alexa’ (the default), ‘Amazon’, ‘Echo’, ‘Computer’ and ‘Ziggy’. You can change these for your devices, but not invent new ones.
1.5.2
Invocation
The ‘invocation’ is the phrase used to trigger your skill, e.g.: ‘Alexa, open Johns’ weather skill’ or ‘Alexa, launch my cooking skill’.
1.5.3 Utterances
Utterances are the phrases that your user says to make a request. There can be many ways to achieve the same result, e.g.: What’s the time? What’s the time now? What time is it? – you will have to think of as many possible ways that your user can interact with your skill. Nevertheless, Alexa will build your model and try to find similar utterances.
All the possible ways to do this can be difficult to describe (considering, for instance, how many different ways and types of pizza someone might order), so Amazon has recently announced Alexa Conversations to help with this. For more information, see reference 3.
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi ● 16
1.5.4 Intents and requests
The utterances are linked to one intent in the code. For instance, all the ‘time’ utterances would be linked to the same intent, e.g., GetTimeIntent, and this would trigger a GetTimeIntent function in our skill code.
There are two types of Intents:
• Built-in Intents
- Standard built-in intents: These are provided by default by Amazon that every skill must have, e.g.: AMAZON.StopIntent, AMAZON.CancelIntent, AMAZON.FallbackIntent, etc. and include: AMAZON.YesIntent, and AMAZON.NoIntent, intents for screen control (e.g., scroll up/ down/ left / right) and media intents (pause, repeat, resume), and also an AMAZON.SendToPhoneIntent. You can see these when you add an intent, and select “Use an existing intent from Alexa’s built-in library”
- The Alexa Skills Kit also provides a library of specific built-in intents and includes intents such as Actor intents, Books, Calendar, LocalBusiness, Music, TV, Series, WeatherForecast, etc.
These intend to add functionality to your skill without you having to provide any sample utterances. For example, the WeatherForecast includes a search action (What is), an object (WeatherForecast), location (London) and date (tomorrow) . We won’t cover them in this book, see: https://developer.amazon.com/en-US/docs/alexa/custom-skills/built-in-intent-library.html
•
Custom Intents
These are created as required for the skill (e.g., GetTimeIntent) If you use an Amazon template, the code for the built-in intents is provided for you. There are three types of requests that the skill can send:
• A Launch request that runs when our skill is invoked (as a result of the user saying, ‘Alexa open …’ or ‘Alexa, launch ...’).
• An Intent request which contains the intent name and variables passed as slot values.
• A SessionEnded request, which occurs when the user exits the skill, or there is an unmatched user’s response (although you may be able to trap this out with AMAZON. FallbackIntent).
This information is all packaged and sent as a request (and returned as a response) as a JSON file. We’ll look at the JSON code later.
1.5.5 Slots
A slot is a variable that contains information that is passed to an intent. The user might say ‘What’s the time in London’. Here ‘London’ (or Paris or Rome) is passed as a slot variable to the intent code.
Chapter 1 ● Alexa History and Devices ● 17
Amazon provides built-in slot types, such as numbers, dates and times, as well as builtin list types such as actors, colors, first names, etc. In the previous example, we could use AMAZON.GB_CITY which provides recognition of over 15,000 UK and world-wide cities used by UK speakers.
However, some of these slots are being deprecated (including AMAZON.GB_CITY in favour of AMAZON.CITY), so check. The full list is covered at ‘List Slot Types:
https://developer.amazon.com/en-US/docs/alexa/custom-skills/slot-type-reference.html#list-slot-types
Alexa slot types fall into the following general categories:
• Numbers, Dates, and Times
• Phrases
• Lists of Items
Developers can create custom slots for variables that are specific to their skill. When we define our utterances, slots are shown in curly braces: {city}, e.g.:
Example:
Intent GetTimeIntent
Utterance What is the time in Slot {city}
Utterances can have many slots and slot types.
The GetTimeIntent will trigger a function in your skill (which you might sensibly call GetTimeIntentFunction).
Slots are used to pass data from your VUI (voice user interface) to your program. As an example, we might have an Alexa skill that asks for your name.
The VUI might go like this:
User: “Alexa, Open What’s my name” (Invoke the skill – the launch request executes)
Alexa: “Welcome, please tell me your name”
User: “My name is John” (“John” is passed in a slot to myName intent)
Alexa: “Hello John” (Your intent picks John from the slot passed to it and responds)
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi ● 18
At this point, the slot data is lost unless you save it. You can save data in a temporary folder but more often data is stored in session attributes, you will find out later.
1.5.6 Interaction model
The combination of the utterances and their related intents and slots make up the interaction model. This needs to be built by the developer console, and in doing so Alexa may recognize further utterances similar to those you have defined.
1.5.7 Endpoints
The endpoint is where your code is hosted. You can choose an Amazon-hosted, AWS Lambda ARN (Amazon Resource Name) site or host it yourself on an HTTPS site that you manage.
If you choose an AWS site, it will give you an ID beginning arn:aws:lambda and look like: arn:aws:lambda:<region>:function:<functionID>. You skill also has an ID looking something like this: amzn1.ask.skill.a0093469-4a50-4428-82e6-abcde990fgh3.
1.5.8 Regions
If using an AWS-hosted site, you should host your code in a region near to your user. We’ll see that there are lots of regions, but for some skills currently only North Virginia is available.
1.6 Skill Sessions
The period that your skill runs for is called a session. A skill session begins when a user invokes your skill and Alexa sends your skill a request. Your skill receives the request and returns a response for Alexa to speak to the user.
If the shouldEndSession parameter is ‘true’ the skill terminates, otherwise, the session remains open and expects the user to respond. If no user input occurs, a reprompt is sent if included in the code. If the user still doesn’t respond (after about 8 seconds), the session ends 4.
Skill connections and progressive responses may override these rules. For example, if a skill has to get further information from another source, e.g., when your taxi will be available, or pizza delivered.
1.7 Session attributes
Session attributes are used to hold data during a session, for example, your user’s name. When the session finally ends, the data is lost. To prevent this from happening, data can be stored permanently in persistent attributes. This can be held in a DynamoDb database which is provided as one of the AWS services and easily accessed using an Alexa-Hosted Skill. With an Alexa-Hosted Skill, you can build your model, edit your code and publish your skill all from within the developer console.
Chapter 1 ● Alexa History and Devices ● 19
1.8 Request and response JSON
We saw in the figure above how the request is sent from the user (Alexa Voice Service) to your code and how the response is returned from your code. This data is passed in a JSON format. JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write and easy for machines to parse and generate” 5
The basic JSON request contains information on the active session, the context, the system information on the application (ID), user, deviceID, and the request itself: { “version”: “1.0” , “session”: { ( ..session parameters) } “context”: { ( ..information on the Alexa device) } “System”: { … “request”: { “type”: “IntentRequest” , “requestId”: “amzn1.echo-api.request.745d…9a” , “locale”: “en-GB” , “timestamp”: “2022-04-14T09:27:01Z” , “intent”: { “name”: “HelloWorldIntent” , “confirmationStatus”: “NONE” } }
The reply JSON contains is the response speech and reprompt, as well as the state of the EndSession and session attributes. { “body”: { “version”: “1.0” , “response”: { “outputSpeech”: { “type”: “SSML” , “ssml”: “<speak>Welcome, you can say Hello or Help.</speak>” }, “reprompt”: { “outputSpeech”: { “type”: “SSML” , “ssml”: “<speak>Welcome, you can say Hello or Help.</speak>” } },
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi ● 20
“shouldEndSession”: false, “type”: “_DEFAULT_RESPONSE” },
“sessionAttributes”: {}, “userAgent”: “ask-python/1.11.0 Python/3.7.12”
} }
The response can get more complicated if there is a dialog session occurring (i.e., if the program hasn’t enough information to complete the intent request and has to ask for more).
We’ll look at the information passed in the JSON request and response and how to extract it in a later chapter.
1.9 Blueprint skills
Alexa provides blueprint skills, where you can ‘fill in the blanks’ to make your skill. These are worth looking at for some fun and information presenting skills.
The current categories are: At home, Kids recommended, Learning and knowledge, Fun and Games, Storyteller, Greetings and Occasions, Communities and Organizations, and Business 6. We won’t cover them here.
Chapter 1 ● Alexa History and Devices ● 21
1.10 Summary
We’ve seen how the Alexa devices have developed from the original voice-only device to screen-based and robot devices, how the Alexa Voice service works and looked at terminology – Invocation, Utterances, Intents and Slots. Finally, we looked at a skill session and how data is passed and saved during a session and between sessions.
In the next chapter, we’ll see how to set up an Alexa account before moving on to our first Alexa skill.
1.11 References:
1. https://aws.amazon.com/lambda/faqs/
2. https://developer.amazon.com/en-US/docs/alexa/ask-overviews/list-of-skills.html
3. https://www.youtube.com/watch?v=1nYfRvg976E
4. https://developer.amazon.com/en-US/docs/alexa/custom-skills/ manage-skill-session-and-session-attributes.html
5. https://www.json.org/json-en.html
6. https://blueprints.amazon.com
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi ● 22
Chapter 2 • Creating your Amazon Account
2.1 Introduction
There are three ways to create an Alexa Skill.
1. Using Alexa-Hosted Skill – this is most probably the easiest way. You don’t need an AWS account – you can just get started.
2. Using AWS Lambda and the Developer Console.
3. Using an IDE (such as Visual Studio code) and ASK CLI (Alexa Skills Kit and Command Line Interpreter).
In any case, you need an Amazon developer account.
We’ll use an Alexa-Hosted skill where we can. It provides most of the requirements we need including extra storage (S3) and a database (DynamoDB). We’ll study these in a later chapter.
2.2 Create your Amazon account
You don’t need an AWS account for Alexa-Hosted skills, but you will need one for smart home skills.
Go to the Amazon Developer website at: https://developer.amazon.com/
Click ‘Developer Console’ and create your Amazon Developer account.
Chapter 2 ● Creating your Amazon Account ● 23
Complete the form and create your account. You may have to authenticate it with an OTP.
Answer the rest of the questions in the Amazon Developer Registration.
Agree to the terms and click submit.
You can now provide payment information, user roles, etc., or leave until later. If you want to earn money from In Skill Purchases, you will have to complete this.
The next screen is the Amazon Developer Dashboard – My Account page: https://developer.amazon.com/settings/console/myaccount
However, you can always complete this later.
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi ● 24
Eventually, you will get to the developer console.
We will be using the Alexa Skills Kit but note the other items here.
• Alexa Voice Service (AVS) is used to integrate Alexa features and functions into a product (see chapter 17).
• Amazon Appstore is an app store for Android and provides apps for Fire Tablets.
• Amazon Dash console enables you to manage Amazon dash buttons.
• Amazon GameOn is for mobile gamers to share their experiences (high scores, tips, tricks, etc.) and to participate in challenges.
• Login with Amazon (LWA) is used to authenticate users using their Amazon accounts. You need this if you create any smart home devices.
We’ll use LWA and AVS later.
Chapter 2 ● Creating your Amazon Account ● 25
2.3 Your skills
Clicking the Alexa Skill Kit takes you to the development console. If this is the first time you’ve been here, you won’t have any skills listed.
2.4 Hosting
Click on the Hosting tab to see what you’re allowed to access.
You’ll find the storage and data transfer more than enough for now.
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi ● 26
2.5 Summary
In this chapter, we saw the different ways of creating and Alexa skill, created our developer account, and saw how to start an Alexa-Hosted skill.
In the next chapter we’ll develop our first skill.
Chapter 2 ● Creating your Amazon Account ● 27
Index
A
Alexa-Hosted Skill 19, 23, 27 Alexa Presentation Language - APL 125
APL Commands 150, APL Visual Responses 135
ASK CLI 23, 107, 114 AVS 262, 263, 264 await and async 93
C
Certification and publishing 99, 272 CloudWatch logs 34, 44, 47
D
Datasources 127, 129, 132 developer console 19, 23, 25 dialogs 51, 52, 72 Discover your device 210, 222, DynamoDB 19, 23, 28
E
Execute Commands directive 150,157
I
In-skill purchasing 158,272 intent 17, 18, 20 interaction model 15, 19, 29 interceptor 90, 91, 93 IoT Thing 184, 225, 242
L
Lambda 15, 16, 19
Login with Amazon 25, 201, 219 LWA 25, 120, 121
M
MQTT 184, 187, 188
N
Node-RED 225, 226, 227
Node-RED dashboard 237, 249
Node-RED IoT Application 244
Node-RED user interface 227, 249
P
Persistent attributes 19, 53, 65 Pi SQS code 216 Proactive events 250 Progressive Response 179, 183 R
Request and response 20, 90, 98
S
S3 storage 46, 83, 95 Sense Hat output 241, 248 session attributes 19, 20, 65 Skill request 40 Skill response 42 Slots 16, 17, 17 Smart home devices 201, 272 SQS 214, 216, 217 SQS Queue 214 SSML 20, 42, 43 stand-alone 262, 271
T
Transformers 151 U
Utterance 18, 57, 58
V
Visual Components 140
Index ● 273
booksbooks
Programming
Voice-controlled IoT Applications with Alexa and Raspberry Pi
The book is split into two parts: the first part covers creating Alexa skills and the second part, designing Internet of Things and Smart Home devices using a Raspberry Pi.
The first chapters describe the process of Alexa communication, opening an Amazon account and creating a skill for free. The operation of an Alexa skill and terminology such as utterances, intents, slots, and conversations are explained. Debugging your code, saving user data between sessions, S3 data storage and Dynamo DB database are discussed.
In-skill purchasing, enabling users to buy items for your skill as well as certification and publication is outlined. Creating skills using AWS Lambda and ASK CLI is covered, along with the Visual Studio code editor and local debugging. Also covered is the process of designing skills for visual displays and interactive touch designs using Alexa Presentation Language.
The second half of the book starts by creating a Raspberry Pi IoT “thing” to control a robot from your Alexa device. This covers security issues and methods of sending and receiving MQTT messages between an Alexa device and the Raspberry Pi.
Creating a smart home device is described including forming a security profile, linking with Amazon, and writing a Lambda function that gets triggered by an Alexa skill. Device discovery and on/off control is demonstrated.
Next, readers discover how to control a smart home Raspberry Pi display from an Alexa skill using Simple Queue Service (SQS) messaging to switch the display on and o or change the color. A node-RED design is discussed from the basic user interface right up to configuring MQTT nodes. MQTT messages sent from a user are displayed on a Raspberry Pi.
A chapter discusses sending a proactive notification such as a weather alert from a Raspberry Pi to an Alexa device. The book concludes by explaining how to create Raspberry Pi as a stand-alone Alexa device.
John Allwork graduated from She ield University where he developed an interest in computers and gained his MSc at UMIST. After two years working for ICL as a design engineer, he returned to UMIST where he graduated with a PhD in ‘Design and Development of Microprocessor Systems’.
He worked for several years in technical support and as manager in electronics distribution, working closely with Intel engineers and later designing Inmos Transputer systems.
Having taught electronics at Manchester Metropolitan University, he retired in 2011 but retained his interest in electronics and programming. His other occupations consist of traveling, walking, geocaching and spending time on his allotment.
Elektor International Media www.elektor.com