How to write custom Alexa Skills without 'Ask xxxx'

15

I am currently using fauxmo to send custom commands to various devices to turn them on/off (For instance I have a WiFi to IR converter to control my Tuner & TV) and I can turn the tv on/off with this.

I also have Kodi integration setup, so I can say:

Alexa, Ask Kodi to set volume to 50%

But I'd like to be able to say:

Alexa, Set tuner volume to 50%
Alexa, Play Bluray

I.e. I want to be able to control devices without needing an Ask xxxx as part of my request.

Ideally I want to do this without a cloud-based service (i.e. SmartThings or Wink).

I like the solution used by fauxmo (emulate an existing UPNP service), but it is limited to on/off (and 'dim' if you use the Hue enabled patch) and not really flexible enough.

PhratcuredBlue

Posted 2016-12-14T07:51:18.677

Reputation: 78

Answers

9

I've been exploring dropping the invocation name for Alexa custom skills myself for a couple of projects. And what I came up with after hours of reading through guides and documentations is that... It can't be done for custom skills.

So, your best bet for your use case is to use Alexa Smart Home along with some smart home service. I know you said:

Ideally I want to do this without a cloud-based service (i.e. SmartThings or Wink)

Unfortunately, the only way to not have an invocation name with Alexa is to use their predefined APIs (i.e. Smart Home, List Skill, & Flash Briefing).

EDIT: Your use case falls within the Smart Home API though. So you can always create your own service that consumes that API instead on relying on other services (Wink, SmartThings, etc).

leon.valencia

Posted 2016-12-14T07:51:18.677

Reputation: 504

1Is there a source that says it can't be done, or is it the implicit result of your research?Helmar 2016-12-14T10:55:44.813

It's just implicit. Although in hind sight, considering how voice recognition and NLP work, it should have been a reasonable assertion and I shouldn't have gone into such a research on the first place. It's a reasonable assertion because a particular utterance needs a context for which it would be interpreted - and that context is the invocation name. In fact, the very reason there is a wake word is the same as having an invocation name - so that statements that would be interpreted belong to a context (the wake word is the system wide context such that random utterances are not processed).leon.valencia 2016-12-14T11:24:54.100

The only way to have utterances that don't need invocation names are those with system wide contexts (these are the APIs). For instance, utterances that Alexa interprets as interacting with appliances would automatically be for smart home API - NLP would categorize the utterance as such using keywords like on, off, turn down, etc + syntax that is like a command to an appliance.leon.valencia 2016-12-14T11:25:53.053

But you know what... your use case falls under the smart home API. So I'll append my answer because you can just use that API.leon.valencia 2016-12-14T11:43:01.747

Thanks. I was reading about the Smart Home Skills, and while I don't think they'll be able to do everything I want to yet, it looks like Amazon plans on adding more capabilities to it. So rather than fauxmo, I think it may be worth investing in a proper open-source Smart Home Skill that can process all available commands and be expandable to the future. Here is the current API for posterity: https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/smart-home-skill-api-reference

PhratcuredBlue 2016-12-14T17:50:17.977

6

As lynx already details in his answer, there is no way to go completely without invocation name unless you're addressing the predefined APIs. However ask my skill is not the only way to use the invocation name.

The developer pages offer three different ways to use invocation names with a request.

“Alexa, Ask Daily Horoscopes for Gemini”

“Alexa, Talk to Daily Horoscopes and give me the horoscope for Taurus”

“Alexa, give me my Taurus horoscope using Daily Horoscopes

Alexa invocation name documentation

Furthermore this page shows what other words you can use to connect the request, the invocation name and the mandatory connection words. Thus, if you do create your own Alexa skill it's all about using a good invocation name and a good request to make it sound natural.

Even better, your echo should already react to this by starting the Blu-ray with your Kodi integration.

Alexa, play Blu-ray with Kodi.

So, while you cannot get rid of the invocation name outside the predefined APIs you can make the voice command feel more natural and skip the awkward ask ... usage.

Helmar

Posted 2016-12-14T07:51:18.677

Reputation: 5 936

2

If you use special words not used by default by Alexa, it is actually possible. The method is quite tricky anyway.

You just need to avoid passing by AWS for your request! Impossible you say? Yes—it is possible.

In your Amazon Alexa app or on the Amazon Alexa web app, you log in in your Amazon Alexa account, and in --> settings --> history your have a live page of all requests and words that you will tell Alexa.

At this moment, you can use a web parser to get the word said and trigger a script if this word is the one you want, or you can use some amazing small software for Windows only that can trigger actions and scripts.

Here the link of the software. Check on YouTube for tutorials on how to use addtopad.

If you want to launch scripts, just trigger a listener on a port and a special request sent after a word in the software. I use it at home and I really like the fact of not having to say any invocation name.

After, as I said, you can use any words, even words like open. It will trigger your script, but you will hear a "sorry, I don't know that" from Alexa.

I use it and it work perfectly!

léo Bernard

Posted 2016-12-14T07:51:18.677

Reputation: 21

That's an interesting approach.Helmar 2017-10-03T16:47:09.100

Should we trust that software? Makes me twitchy...Sean Houlihane 2017-10-03T20:03:29.730

-2

So is this Amazon documentation not true? https://developer.amazon.com/docs/custom-skills/understanding-how-users-invoke-custom-skills.html#invoking-a-skill-with-no-specific-request-no-intent

This seems to say fairly directly that you can say "Alexa" plus the invocation name. Such as "Alexa, Daily Horoscopes".

It also shows this method as a option #3 for custom skills: https://developer.amazon.com/docs/custom-skills/choose-the-invocation-name-for-a-custom-skill.html#invoking-custom-skills

Mike

Posted 2016-12-14T07:51:18.677

Reputation: 1

3The documentation is true, but I don't think that's what the author is looking for here. For example, "Play Bluray" wouldn't be the invocation name — rather it is an intent, without any invocation name specified. Unless you actually named your skill "Play Bluray" (which probably wouldn't be allowed per Amazon's name guidance), this won't work, unfortunately.Aurora0001 2018-02-08T20:22:05.950