Unable to invoke DialogFlow agent via explicit invocation - actions-on-google

I am unable to invoke a intent say, "ABCwelcomeintent" which has event trigger of "GOOGLE ASSISTANT WELCOME". This intent has been mapped to explicit invocation in Google integration settings and synced with actions list.
The training phrases include ABC and talk to ABC (both). I am able to invoke by just saying talk to ABC to Google Assistant.
Can we invoke the app by just saying,
ABC
only and not
talk to ABC
I want to invoke bot without trigger "talk to" and just only ABC. Such way is not mentioned according to the official documentation. Please update the official documentation if there is a way.
The reason for this is my current live bot is unhealthy according to health check probe bot by Google which tries to invoke the bot by just querying "ABC". So I also need to do the same way. And this Health check probe bot will take down my live bot from Production to obsolete.

You may use implicit invocation to make Google Assistant suggest user to use your Assistant App. Otherwise, for explicit invocation, you will need to say "Ok Google! Talk to", "Hey Google! Speak to", "Ok Google! ask" to start the conversation with your assistant app.

It sounds like you have two different issues here.
Health Check
The health check is done through an automated process that sends a payload identical to what it would send if a user triggered it, with a flag indicating it is the health ping. No user actually says anything.
If the health check is failing, then it means that your service isn't responding in some fashion. Check your logs and Dialogflow's logs to indicate what might be happening - is your webhook responding? Are you sending back invalid data? Is Dialogflow misconfigured? There may be many reasons for this. In order to figure out which, we would need to see a lot more information to help you - details of the error Google is reporting from the health check, your Dialogflow logs, the results of your own testing in the simulator, etc.
Name Triggering
Triggering based on just the command "ABC" is a separate issue - there are many ways that your action could be invoked.
All Actions will start with "Hey Google, talk to " or "Hey Google, ask ".
If you have identified specific built-in Intents that your Action can handle, you may also have registered these.
Additionally, Google will identify Implicit Triggers that it may suggest to users that might trigger your Action. You have little control over this, but this is somewhat like SEO - if your Action does this, then Google may suggest it.
Finally, users can setup a Routine or Shortcut which triggers your Action when they say "Hey Google, something".

Related

Google Action leaves the mic open for a user command without a prompt

I have created Google Assistant Conversation Action that sends user questions via webhook to IBM Watson. When I sent it for review, Google denied it for the following reason:
Your Action leaves the mic open for a user command without a prompt, such as a greeting or an implicit or explicit question.
Example of a user conversation:
.
Google Action review team says the following:
I am happy to hear that 🙂 (mic opens) - At this point, either prompt the user with further options or close the Action.
Do I need to send explicit or implicit questions every time, or would it be OK if I just sent a response with suggestions (quick replies) that can guide the user without asking them for something?
For example:
Action: I am happy to hear that 🙂 (mic opens)
Suggestions: "Tell me about your company"
Example of response with suggestion:
Consider a Google Home, a speaker where you cannot show suggestions. When your Action responds with "I'm glad to hear that." there is no further indication that it is listening or expecting a response. To the person using it, they don't know to say anything, and no reason to believe that the microphone is open.
In order to provide a better conversational experience, you should append a question to the end of each response. It can be something simple, like "What else do you want to talk about?" or you can make it more dynamic depending on the context.
Either way, you will need to provide auditory and visual clues that your Action wants to continue the conversation.

What could be the reason for a Google Action with external endpoint (API) to work on the Actions Console Simulator, but not as deployed?

I am new to the whole creation-process of Google Actions.
I created an Action with the new Action Console.
It has an fulfillment endpoint to my server (as example: www.mypage.com/api).
For testing purposes it has no authentification, so it generates a public API response.
Said API generates a simple JSON response based on a send event handler.
In short: Action onEnter sends handler to API, API queries SQL database and sends the response back to my Google Action that then "speaks" the SQL result.
The result with the Actions Console Simulator is:
Testing with "Smart Display device: everything works.
Testing with "Speaker (e.g. Google Home): everything works.
Testing with "Phone": main intent is invoked and text is shown but does not get spoken.
So i tested the command "Hey Google, talk to the unicorn app" directly on my smartphone.
Here **everything works fine ** as said smartphone has the same e-mail like the one on my Action Console account: it recognizes the main invocation command and when i ask by voice to get the data, the data is received from my server and spoken.
So something is wrong with the "Phone" device in the simulator. This has been confirmed by me from other users saying that they often have trouble with the simulator function correctly.
I then deployed my Action.
It was reviewed and approved.
A few seconds later i received an auto-email saying that there were too many errors with my app, asking me to check its health status. I did so and in the Health tab, i can see that it has an error but it does not show me what the error is.
THEN I CONTACTED A ACTIONS-ON-GOOGLE EXPERT
They helped me a lot into the right direction but could not go deeper into the problem as my connection (the endpoint API) is outside of their servers.
So i ended with their tip on checking the Google Cloud Logging Console.
As said Logging Console is also new for me, i learned on how to query my results but:
How can i query for the so called "is_health_check" flag?
I am asking this because the Google Expert recommended me to search for said flag but i do not know on how to query it.
Sorry for this ultra-long entry but i am trying to be as transparent to you as possible, as i have been trying this out for several days now.
Thanks in advance for your time, ppl!
So the error is simple once that you know how Google handles the external webhooks. Thanks to the help of 2 Actions-On-Google Experts i was informed that Google pings your external Webhook from time to time.
As soon as they get an error as result from said ping, the Action will be deactivated from the Assistant until a new ping response sends that everything is fine again.
My problem was that after deploying the action and while it was under reviews, i continued to work on the code on my server. While coding, the Google server pinged and received an error code.
My fault, but at least i learned the thing about pinging your action!

Explicit Invocation that bypasses welcome message

I'm not sure if this is due to the Dialogflow testing environment, or if there is something else I am missing.
I have app ABC that has a default welcome message "hi" and also some intents for specific responses. I would like the user to be able to invoke a response by saying "Hey Google, ask ABC what is it's favorite color?" and have the intent passed to ABC. However, instead of answering the "what is your favorite color?" ABC responds with the default "hi".
Can I fix this or does the app have to first pass through the welcome message?
In the integrations section of Dialogflow check your integration settings for your Google Assistant action. There is a section there to add implicit invocations where you can select other intents that should be able to launch your app. Select the intents you want and then these should work

Can I trigger a Google Assistant action without a conversation?

I'm trying to develop an action for my Google Assistant. I'd like for it to be fire and forget type deal (i.e. 'Add x to my todo list').
The problem is, the assistant won't recognise the command without me first starting a conversation with the assistant app that the action exists within.
(Hey Google, I want to talk to ... )
I'm using webhooks to call a webserver that will handle the request.
I can't use IFTTT in this instance as it needs to be available for everyone in my home. (IFTTT actions are private or public to EVERYONE)
Is there any way to trigger an action without having to say anything else (besides 'Hey Google')?
There's a few ways to complete a quick action. There is implicit triggering, when your action gets matched based on a certain set of requests.
You: Hey Google, add paying taxes to my to-do list
Google: Ok, for that you may want to try talking to My App.
You: Okay
My App: Ok, added paying taxes
That may work, although still may require an extra step with the Google Assistant. Alternatively, you can also launch a specific intent in a conversation without a full conversation.
You: Hey Google, tell My App to add paying taxes to my to-do list
Google: Ok, getting My App
My App: Ok, added paying taxes
A third alternative would be to use the Google Assistant shortcuts feature which will take something you say and interpret that as something else. It only works for static utterances, so it may not work in your case.
You: Hey Google, add paying taxes to my to-do list
Google: Ok, getting My App
My App: Ok, added paying taxes
In this scenario, you'd need to have the shortcut "add paying taxes to my to-do list" to be interpreted as "tell My App to add paying taxes to my to-do list".
If this is designed to be used by several people in your home, you may need to think about how and whether each account should be able to access the same lists.

How do you allow the user to cancel while the Google Assistant is responding via a webhook?

I have a Google Action (using API.AI) that is very similar to the Silly Name Maker webhook example.
However, my app was rejected for the following reason:
One or more of your actions does not allow a user to easily exit a conversation. Please make sure that you do not continue to converse with a user if they ask to cancel or exit.
When you say stop, cancel or quit when the mic is open, it responds "Sure, canceled", closes the mic and exits. However, when you try using those commands while the agent is speaking, it does close the mic and exit but it doesn't say "Sure, canceled" as it's supposed to.
My Action is set up like this:
Welcome intent: User is asked for two parameters
Webhook response: Once all the parameters have been supplied, a webhook (structured exactly like this Silly Name Maker webhook) delivers a single sentence and then immediately ends the conversation.
During the Welcome intent, if a user says "Okay Google, cancel" while the agent is speaking, it responds "Sure, canceled" and exits.
However, while the agent is speaking the webhook response (from assistant.tell()), if you say "Okay Google, cancel" it will exit immediately without saying "Sure, canceled."
How do I get the Google Assistant to say "Sure, canceled"? Do I have to set up a "cancel" intent in API.AI, and use an actionMap on my webhook to handle a user's request?
Use assistant.ask(), not tell, then cancel should work. You can have a look at https://github.com/actions-on-google/actions-on-google-nodejs/blob/master/assistant.js
I know this is an old question, but I have an answer nonetheless.
You can trap "Cancel" type requests from the user, if necessary, to play your own 'goodbye' message, as your yellow highlighted request seemed to desire.
(Is that review feedback? Weird...)
As described here:
https://developers.google.com/actions/assistant/app-exits
The basic trick is to setup an Intent in Dialogflow that is configured for the 'event' of "actions_intent_CANCEL".
Set it to 'end the conversation' (or it won't work, I think).
Don't set any example phrases.
Set the desired 'Response', or set it to hit your webhook.
With that setup, you can get "Cancel" requests to say anything you want on app exit, up to a 60-character limit (To allow the user to quit quickly).
Currently, there is no way to open up the mic when you are doing an app.tell() from inside your custom app. So, there's no way to interrupt the response.
Only the phrase "ok google" opens up the mic. So you could add user says for "ok Google" to go to your fulfillment. That way you can handle the interruption in your own app.