Google Assistant Personal Actions - dialogflow-es

I have created an action inside google, connected it to dialogflow, connected in byt fulfillment to my own home network.
Now I would like to be able to use this on my phone, raspberry, etc. But I don`t want to deploy this to the whole world (because then they can turn off my lights).
How should I do this?

You can release your action to an Alpha channel, which let's you control who can access your action, which is just yourself by default. But you can also add up to twenty accounts.
https://developers.google.com/actions/deploy/release-environments

Related

Smart home google action not responding and device is always offline

I created a smart home action using action-on-google and nodeJs, and it works fine. When you say turn on switch off, it sends MQTT request to my server, means that onExecute function works fine but the problem is that google doesn't respond to my command by OK it says "sorry it looks like your device not available right now", I observed also that my device is always offline in Google home app. Is it required to work with firebase and get device state from there?
Firebase is one of web services allowed to store a device's states. You can feel free to use other web services.
If your device is offline, it may be because your Google Home App hasn't received your device's states.
Here are two paths for Google Home App receiving your device's data:
Google Server will send a action.devices.QUERY intent and callback your function (e.g. onQuery) to get the data of your device through your fulfillment, see action.devices.QUERY.
Thus, please print logs in the onQuery function and make sure that your function works fine.
Your smart home action must use the API of reportStateAndNotification to update your device's data in the Home Graph, see Method: devices.reportStateAndNotification.
If Google Assistant gives you "Sorry, device is not available right now", it probably is because the Google server hasn't received correct information from your fulfillment. Please follow the suggestions above and try it again.
If you're still having issues, check your logs to identify the particular issue for that device.

Google Actions: open/redirect to different voice app

From my Google Actions voice app, can I redirect the user to a different voice app?
I have multiple Google Actions projects and would like to create one that shows an overview of the others and can redirect the user, on request. However, I cannot find a way to launch an external intent from my Google Actions code.
No, the platform does not provide a way for an action to automatically redirect the user to another action. The best you could do is exit the conversation with a hint ie., "To use this action say, 'Hey Google, talk to action name'".

Not able to add the intent from Dialogflow to Google Assistant

Ok I am using the Dialogflow Essentials and there are several intents are already defined which were integrated with google assistant and these intents works fine,But now I made new intent in Dialogflow and it works fine in try now option but when I tried to integrate it with google assistant (Dialogflow ------> Integrations ------> Google Assistant ------->continue with integration ), I can not see the new intent in the List (pop up with previous intents and their check boxes ). May some one help me to know why the new intent is not visible in the list ?
The following screen shot image shows the corresponding error message
The error message reads:
The maximum number of intents is 10.
You are limited to 10 "deep link" Intents that would be used as part of the Action invocation. These enable you to say things like "Ask Super Action to Turn the lights on". Instead of just "Talk to Super Action" and then, while it is running, asking it to turn the lights on.
You are allowed many more Intents themselves - but just 10 that can be used as part of the invocation phrase.
If this is actually for controlling Smart Home devices, you may wish to look into the Smart Home integration for the Google Assistant instead. This lets people control your devices directly through commands to the Assistant ("Hey Google, Turn on the bedroom lights") instead of having to go through an Action you've written ("Hey Google, Ask Super Home to turn on the bedroom lights"). This method does not involve Dialogflow at all.

How to answer a user in Home device and send a notification to user's phone

Is there any way to answer a user question in the Home device and at the same time, send a notification to another device?
For example, if the user ask for a direction, answer with the location (voice) and finish saying to the user:"I've sent you the location to your phone" and send him a map...
I know there is a way to switch conversation to another device (say, for example, one with screen) but I don't want to finish it in Home device.
Thanks in advance.
Not in a straightforward way, no, but there are a few options that you have that may do what you want.
You can try to use Assistant Notifications. Right now, notifications only appear on mobile devices, but even if/when they allow speaker notifications in the future, your user could still open it on a mobile device. You need to ask for permission to send a notification, and when they trigger the notification, an Intent in your Action will be triggered to actually show what you want to show.
You can also look into using a more standard notification channel such as Firebase Cloud Messaging. This does require you to have your own app on the mobile device, and it works outside of the Assistant, but may be a good choice if it meets your needs.

Hooking up a web service, which can ask things back and receives answers?

Is it somehow possible to call a web service which can ask things back and receives the answer?
Let me explain:
At home, I have a media center with some movies on it. It's content changes over time of course: Files get added, removed, renamed and so on.
Now I’d like to say for example “Hey Google, play wizard of oz” and then wizard of oz should played on my tv.
Since I know how to develop things in .NET, the web service running at home already exists and works fine, movies start. And I guess thanks to API.ai, I should be able connect it via the webhook function to Google Home.
But what if there are multiple results and I want to ask, which result should be picked? For example:
User says "Play Star Wars"
Google Home calls my web service, which checks my disk and finds out that there are multiple Star Wars movies.
Now, the user needs to be asked "There are multiple results. Which one would you like to see? Star Wars: A new hope, Star Wars: The empire strikes back, ..."
The user now answers "Star Wars: A new hope"
Google Home calls the web service again with that info and after success it replies "Okay, playing Star Wars: A new hope."
I haven't found out how to do that with API.ai. As I understand, API.ai calls the web service with some parameters (JSON), sends the response text received from the web service back to Google Home and then just ends.
Or did I miss something? Do you guys have any idea how I could achieve this scenario?
Or can we somehow develop our private services, like the ones listed in the Google Home app (Akinator, Dominos, CNBC, ...) or is that only possible as a partner? Would be nice actually.
Thanks in advance!
As I understand, API.ai calls the web service with some parameters
(JSON), sends the response text received from the web service back to
Google Home and then just ends.
The bot is still in control unless you send from your web service:
data: {
google: {
expect_user_response: false,
}
}
or check this box in API.AI in the intent pane
If you are using the ActionsSDKAssistant, make sure that you are using the right method. Ask vs. Tell
https://developers.google.com/actions/reference/ActionsSdkAssistant#ask
https://developers.google.com/actions/reference/ActionsSdkAssistant#tell
You need to study the API, the api.ai webhook request/response format and implement it. Take a look at this tutorial. Then, of course, you will have to poke a hole in your firewall to be able to receive the calls from Google or use ngrok or the BST proxy.

Resources