How can I make a call from my action on google? - chatbot

I'm building an action for Google Assistant using DialogFlow.
And for this action, I want an intent say "Call X" with which the user can call "X".
Here "X" is not a contact in the user's device but a contact defined within my intent's response.
Is there any option with which I can achieve any of the following for my action?
Make a Call to X, or atleast
Open up the dialer with the defined number from my action
Please guide me on this.

What you can do is Use a Helper Intent Through which you will get the permission from the Phone to make calls and then perform the Action using fullfillment logic.

Related

How to callout to an action skill from a dialog skill in IBM watson?

I have been trying to create a chat bot that helps users to interact with my website. I want Watson to be able to interact with my web-server to read, write or modify my database. In certain cases, Watson will require some very specific user inputs/Q&A which are too unordered to belong to any specific entity, for which I'm thinking an Action skill can help. After creating an Action skill that collects the desired user inputs, I'm now unable to find the option that let's you call an action skill from within a dialog node, or to callout for webhooks from an action skill.
Although some articles from the documentation says, it's possible to do so but I can't see from where. There used to be an option (Call an action skill) in the customize dialog box, here is a screenshot of the old customize dialog box, but this option is not there anymore. Is there any other way to achieve this?
IBM no longer provides the callout to actions skill from dialog skill. They posted alerts for existing users;-
Note: Once disabled, call out to an action skill will no longer be available.

Handle No Match input with custom logic in Confirmation Intent using Actions SDK

When I use the Confirmation Helper Intent on an Actions SDK project, it works as it's supposed to. But I want to handle the case when the user's input doesn't mean either yes or no (a No Match situation). Currently Assistant automatically re-prompts the user in this situation.
Actions SDK provides the user's actual input when a confirmation is granted or denied. But is there any way to know what the user said in a No Match situation?
For example, let's say, in a Confirmation prompt, the user says: "I just need some eggs. Just give me some eggs". This would cause Assistant to show the same prompt to the user again. It happens automatically and I have no way of accessing what the user actually said. If I want to do something when the user says "I just need some eggs" I can't do it because I can't access what the user is saying. Moreover, I haven't seen any Intent getting fired in this situation.
So, how can I handle No Match situations with custom logic instead of giving the default re-prompt to the user?
The easiest way is to not use the confirmation helper and just create Intents that handle "yes" or "no" equivalents yourself.

Dialogflow - responding to Actions on Google events

I'm building an action for AoG using Dialogflow, using node.js as the fulfillment webhook.
I use suggestions and carousels in my app and want to respond to when a user clicks. My current implementation uses dialoglow's fallback, and then I check the payload manually for rawInputs.inputType="TOUCH" for suggestions and intputs.intent=actions.intent.OPTION for carousels. I'm looking for a more elegant way to do so with dialogflow and the webhook.
Does anyone know if there's a way to either:
Detect a carousel selection event in Dialogflow that can later be used as intent
A built-in method in the node.js webhook to catch this event.
Suggestion chips cannot be detected through Dialogflow directly - they are treated just like the user said or typed the chip that was selected.
However, you can detect that a carousel option has been selected. You can't determine which carousel item is selected in Dialogflow, you need to do that in your fulfillment webhook.
You can create an Intent which does not have any training phrases set, but which will trigger on an Event named actions_intent_OPTION (based on the native Intent name, but with the periods replaced by an underscore).

Main differences between a Smart Home action and a DialogFlow action

I'm just trying to figure out the main differences between these two types of actions. I mean a action that's use DialogFlow seems to be more conversational and more customizable. How does the Smart Home action handle the conversation? Is that a standard conversation based on the target device type?
When to create a Smart Home action and when to use DialogFlow?
To understand the difference, you need to understand the difference between a smart home action and a conversational action.
Conversational Actions
This is where the user initiates a conversation with "talk to X". Your action gets a WELCOME event. Then the user says more things and your action needs to process the user query and provide a text-based response.
Smart Home Actions
With the smart home integration, the user just gives a command directly. "Turn on my lights," for example, without precluding that with a "talk to" statement. Another big difference is that Google processes the user's query directly. Your smart home action does not get the user's text. Instead, there's a JSON request that specifies the user's intent.
The text that comes back is generated from Google as well, with parameters from your integration. Saying "turn on my lights" will result in "Ok, turning on lamp" or "Sorry, your lamp is offline" depending on what response your fulfillment sends.
There are a number of device types supported out of the box, as well as many traits. Traits specify the types of things that a device can do, such as turning on/off, or changing color. The traits are not explicitly tied to type, eg. you could change the color of a vacuum.
When to use each
If you're building or integrating a device that is meant to work with the Google Assistant, I'd suggest you look at smart home first. It will give users a better experience in being able to directly send queries, and it will make it easier for you to build fulfillment as the requests are structured already.
However, if it will not work for your application, you would want to look at Dialogflow, which will give you a greater level of flexibility in what the user can say.

Required parameters - Either/Or

I created an "intent" that I want to collect some contact information from. I want either their phone number or email address. As most users don't want to give both, I want to make it required that they share one of the other.
Is there a way to do this from the web app? Is there a way to accomplish this thru fulfillment code? or is there any other way to achieve this?
The either/or (or better put the if/else) logic can be achieved via follow up intents like this:
Create an intent and ask your user if they rather give you their phone or their email
Create a follow up intent for when the user replies with 'email' and another follow up intent for when the user replies with 'phone'. At the 'Responses' in each intent, ask for the user's email or address accordingly and then follow up the conversation as you'd do with any other intents.
To create follow up intents, hover over an intent at the intents page and click at the 'Add follow up intent' option.
If there isn't a screen input, consider that it may be difficult for the user to input their emails so make sure you do appropriate checks that it is a valid email format and of course ask your users for confirmation (ex. the submitted email is xyz#app.com. Shall I proceed?)
In a given intent, you can enable "use webhook for slot-filling" to have Dialogflow call your webhook each time the intent is matched.
https://dialogflow.com/docs/fulfillment#slot_filling
In your fulfillment code, you can check the presence of either parameter and respond appropriately if neither is provided.