I want the invocation name in the middle of the text
Ex: Alexa, where is my order?
I tried, but alexa not recognizing this.
Invocation names for custom skills have to come at the beginning of an utterance. If the utterance doesn't begin with "ask {Invocation name}, Alexa will not search your custom skill and will attempt to deal with the request itself.
Here's a diagram for the required custom skill request format.
Disappointing, I know. Hope this helped!
Related
I am trying to develop an Alexa skill where Alexa asks the user for a single word (and than uses the word in sentence).
The user should be able to response with just the word, without any phrase around it. The word can be any word found in the dictionary.
So I am trying to create Intent with an Utterance like this:
{word}
The first question is: What to use for the {word} slot. There is AMAZON.SearchQuery which is for phrases, not for words, but maybe that is good enough.
Unfortunately, when I try to build the model I get:
Sample utterance "{word}" in intent "GetNextWordIntent" must include a carrier phrase. Sample intent utterances with phrase types cannot consist of only slots.
So I really need a phrase around the slot, which is not what I want.
How can I create an Intent (or do it some other way) to ask the user for a single word?
I found this project: https://github.com/rubyrocks/alexa-backwardsword which claims to be a skill, that asks the user for a word and says it backward. Unfortunately the project does not really explain how it deploys itself and how it works in detail.
You can't use AMAZON.SearchQuery intent with a "variable only" as utterance.
You can use it with other slot type.
Why?
Because it will enter in conflict with ALL your intents.
{
"name": "ResponseIntent",
"samples": ["{response}"]
},
{
"name": "QuestionIntent",
"samples": ["play a new question"]
},
When a user wants to invoke other intents, it will work occasionally and route them to the ResponseIntent most of the time. Because the response is a searchQuery and it can be anything.
What if the user just want to quit your skill at the same time?
User: Alexa, stop
Alexa: That's not the correct response
User: Alexa, quit!
Alexa: That's not the right response!
User is frustrated.
It will generate friction. That's why it requires other words.
Creating an Alexa skill requires thinking differently.
It is not a web application, or a voicemail and it can be quite challenging sometime.
There is no button to press to interact with your skill.
A skill is not a one path direction. Yet, the user can do whatever he wants at anytime: ask for help, invoke other intents, quit your skill, ...
What you can do is, based on the context, provide a specific slot type. For example, if you expect the word to be an animal, then you can use a variable only as utterance:
"{animal}",
"the {animal}"
If you use the AMAZON.Animal slot type.
There are plenty of slot type available and you can also extend one or create your own slot type with the values you expect. (or even create a dynamic one)
The DialogFlow documentation writes that the base WelcomeDefaultIntent is triggered either by matching training phrases or every time the user starts a dialogue. But this is not true. If the user's phrases match one of the training phrases of another intent, this intent is triggered, instead of a WelcomeIntent. As a result, the user does not understand that he is communicating with the bot and the quality of service fall down. Please, give a hint, how to make the DefaultWelcomeIntent always works first when the user starts a dialogue, no matter what he wrote. I hope on you
That is an expected behavior. As the documentation mentions:
The default welcome intent is matched in one of two ways:
One of its training phrases are matched, which are pre-populated with
common greetings, like "hello".
This intent has a welcome event
attached to it, which is triggered when the end-user begins a
conversation with your agent via a supported integration.
However, it doesn't specify that no other intents can be matched at the beginning of a conversation. At the end of the day, the default welcome intent is just another intent that is automatically created alongside the agent, and pre-populated with training phrases. Intents will always "compete" with each other's matching phrases, so the best intent gets selected according to the user input, regardless of whether the intent is the welcome default intent or not.
From a natural conversational point of view, it doesn't makes much sense to "force" the welcome intent to always be triggered at the beginning of a conversation, regardless of the user input. An example could be:
User: What time is it?
Bot: It's 1:55 pm PT.
And you would be forcing this into something like:
User: What time is it?
Bot: Hey, my name is Bot, how can I help you?
User: What time is it?
Bot: It's 1:55 pm PT.
Adding an extra interaction for the user.
However, if you do want to force your welcome intent at the start of a conversation, or your use case requires to, you could try with:
Dialogflow Contexts, or.
Using the Detect Intent API method, which can receive a EventInput object that allow for matching intents by event name instead of the natural language input. Hence, you could use this to match the intent attached to the Welcome event, regardless of the user input.
I've developed an Alexa skill and now I am in the process of porting it over to a Google action. At the center of my Alexa skill, I use AMAZON.SearchQuery slot type to capture free-form text messages. Is there an entity/parameter type that is similar for google actions? As an example, see the following interactions from my Alexa skill:
Alexa, tell my test app to say hello everyone my name is Corey
-> slot value = "hello everyone my name is Corey"
Alexa, tell my test app to say goodbye friends I'm logging off
-> slot value = "goodbye friends I'm logging off"
Yes, you have a few options depending on exactly what you want to accomplish as part of your Action.
Using #sys.any
The most equivalent entity type in Dialogflow is the built-in type #sys.any. To use this, you can create an Intent, give it a sample phrase, and select any of the text that would represent what you want included in the parameter. Then select the #sys.any entity type.
Afterwards, it would look something like this.
You may be tempted to select all the text in the sample phrase. Don't do this, since it messes up the training and parsing. Instead use...
Fallback Intents
The Fallback Intent is something that isn't available for Alexa. It is an Intent that gets triggered if there are no other Intents that would match. (It has some additional abilities when you're using Contexts, but thats another topic.)
Fallback Intents will send the entire contents of what the user said to your fulfillment webhook. To create a Fallback Intent, you can either use the default one that is provided, or from the list of Intents select the three dot menu next to the create button and then select "Create Fallback Intent"
So you may be tempted to just create a Fallback Intent if all you want is all the text that the user says. If that is the case, there is an easier way...
Use the Action SDK
If you have your own Natural Language Processing / Understanding (NLP/NLU) system, you don't need Dialogflow in the mix. You just want the Assistant to send you the result of the speech-to-text processing.
You can do this with the Action SDK. In many ways, it is similar to how ASK and Dialogflow work, but it has very basic Intents - most of the time it will just send your webhook a TEXT intent with the contents of what the user has said and let you process it.
Most of the Platform based ASR systems are mainly built on 3 main parameters
1. Intent - all sorts of logic will be written here
2. Entity - On which the intent will work
3. Response - After executing all the process this is what the user will able to hear.
There is another important parameter called webhook, it is used to interact with an external API.
the basic functionalities are the same for all the platforms, already used dialogflow(google developed this platform- supports most of the platforms even Alexa too), Alexa, Watson(developed by IBM).
remember one thing that to get a precise result giving proper training phases is very much important as the o/p hugely depends on the sample input.
Hello World!
I need your help in dialogflow v2.
I have to ask and get user informations like gender, last-name, first-name, maiden-name.
Diagram of my intents
List of intents
Detail of an intent
After the welcome intent, I have the Gender intent. After that, there is the last-name intent.
If the user is Mr, then we have last-name and after the first-name.
For Mme, we want the married-name. We ask if the married-name and the maiden-name are same. If not, we need the maiden-name. And at the end, we ask for the first-name.
In the first scenario, dialogflow always ask the first-name at the end.
For the second scenario, when dialogflow ask the first-name, it doesn't understand the answer.
In last scenario, when the user answer for maiden-name, dialogflow doesn't understand.
Have you got an idee to resolve this?
Thank you for your help!
use slots to collect the parameters like gender, name, etc in a single intent
Check this issue. I have posted something that might help you.
Recognizing non-English/American names have an issue with the Dialogflow.
I have to train my dialogflow bot with a phrase i dont know i.e user can type anything he or she wants but i want that to work with a single intent only.
for example:
U- Good Morning
B- Morning how can i help you?
U- i want to create a ticket
B- Please provide a subject for the issue?
U- No i want to view a ticket with id ABC1234556
Now here bot should back track to another intent which will view the details related to the ticket id but thats not happening i am using dialogflow's system entity i.e #sys.any which captures anything user says. This entity captures anything and even back tracks on other intent's phrases like bye show all ticket's and etc but it just not works with this particular intent phrase!
I hope i have made clear what is bothering!
If you're using #sys.any in an intent to capture all user input after asking Please provide a subject for the issue, it won't be possible for another intent to be matched within Dialogflow.
To get around this issue, you could change your agent design, perhaps by confirming the "subject" in case the user wants to change path.
You could also try and match an intent to whatever text is captured by #sys.any, by calling Dialogflow's detectIntent endpoint from your webhook. However, this might result in unwanted behavior (e.g. if a legitimate ticket subject happened to match one of your intents).