Dialogflow Webhook Format vs. Conversation Webhook Format - webhooks

There are two types of fulfilments provides by Google Actions - Dialogflow Webhook Format & Conversation Webhook Format. In my understanding (as per this doc- https://developers.google.com/actions/build/json/conversation-webhook-json) Google sends "Conversation Webhook Format" request if we are using Actions SDK and Google uses "Dialogflow Webhook Format" if we use DialogFlow. Is this understanding correct?
The reason I am asking this is because the request format from Google has suddenly changed from the last two days from Dialogflow Webhook Format to Conversation Webhook Format. We are not using Actions SDK, so to me it appears some bug from Google. Is this change possible using settings?

Your question about the message format sounds correct.
Some of the confusion, however, is that if you're using the Actions on Google Simulator - you will always see the "Conversation Format" version. This is because AoG sends this to Dialogflow, which then converts it into the "Dialogflow Format" before it sends it to your webhook. (It does a similar conversion on the way back.) So if you're just looking at things through the Simulator, you may get confused about what you will actually see.
Also keep in mind that the "Conversation Format" is also (mostly) sent along inside the "Dialogflow Format" under originalDetectIntentRequest.payload. If you're not looking carefully, you'll see it there and may miss the other parts of the message format that are intended for Dialogflow.
If you are actually seeing the Conversation Format JSON in your Dialogflow webhook - this is extremely strange. There is no setting that you can control that should be able to do this. You should contact Google through the Support page to try and clarify what is going on.

Related

Dialogflow query working in console but not when you use embedded url

I have made a query flow in dialogflow and it has four intent and in the last intent it uses a webhook to get data from server side and displays the result. It is trained automatically and works perfectly in dialogflow console returning response and query answer. The issue is it does not work when I use embedded url. It fails to recognize the name intent and asks (Can you repeat again or fallback intent). I've removed all intents and made query again, there is no similar name intents. Yet it works well in console and not in embedded url.
For the webhook part I've used node.js service.
Please help in this issue.
By 'embedded url' if you mean Dialogflow Web Demo (DWD), you should keep in mind that DWD can be used only for simple text messages. It does not support messages from webhook or even rich responses. However, if you steel need a web widget to embed your bot to your webpage you either create your own or you should use third party solutions (like Kommunicate). Here's the link regarding the limitations of DWD.

Default Fallback Intent responses + webhook fulfillment

I'm looking to add some logging of utterances that hit the default fallback intent. I imagine that's a pretty common desire, so maybe I'm missing some out of the box functionality that would be the real answer.. if so, please let me know!
That said, I'm trying to make use of the default text Responses section of the dialogflow UI, and additionally use a webhook to log the utterance.
I haven't tried this combination before, and I'm not sure how you are intended to do it. The user gets one of the text responses, and my webhook is called, but it seems that the webhook is expected to return a response as well. I can't simply log the utterance and be done.
Additionally i can't add suggestion pills, b/c a simple response is also required to be paired with that, even though the user already got a simple response from the default text responses.
Is it a valid use case to have your text response come from the intent responses section in the dialogflow UI, and still use a webhook to do "other" stuff? If so what is the correct way to do so?
If you really want to do it this way, don't return a JSON response and Dialogflow will use what you have sent in the response. This is not unusual, although most people tend to switch to doing responses through webhooks.

How to use custom payload in dialogflow to create quick replies on web integration

I am currently trying to add functionality to my chatbot by allowing it to have quick replies (buttons for the user to click on) when certain questions are raised by the user. However, the implementation on web is not as straightforward as FB messenger/telegram where quick replies can just be keyed in.
After some research it seems like using the custom payload option when selecting a response on dialogflow seems to be the only viable option but I have no idea on the type of code/ format that should be input.

Sending a message to user when user enters a geofence / area?

I'm making a dialogflow agent that will be integrated with various platforms (Facebook messenger, slack and maybe a few others) that will have the basic functions of a informational chatbot.
The agent will be for a specific store and I'm wondering if it's possible to trigger some sort of welcome message once the user enters the geofence (in this case, the store)?
Thanks for the help. I haven't found any documentation for this on dialogflow specifically or anywhere else so anything will be awesome.
Note: I'm am not by any means dead set of dialogflow, if AWS Lex offers something like this and it's better, I will take a look. I'm just a bit more used to dialogflow.
This cannot be achieved just by using either Lex or Dialogflow. Because at the end of the day, you are using them to integrate with Messenger/Slack/Whatsapp and these apps will (for obvious good reasons) not share the user's location information with the bot. You will need a helper app which takes the user's location permission as well and triggers the bots for you.
Keep in mind that channels like Messenger and Whatsapp have restrictions over sending messages willy-nilly to users. Messenger has a '24+1' policy Whatsapp also you can only send free form messages in the 24 hour window. But after that you can send chargeable pre-approved "hsm" message templates.

How to get dynamic response based on the result of the action performed in Api.ai?

I'm trying out few examples in Api.ai console. I see there are examples where the agent responds by using the values that are extracted from the user query or from the context. But is there a way to display response that is formed using the output of the action performed?
For example -
User: Is my pizza order confirmed?
Action: check order status
Response: Yes, it's confirmed (or "No, it's not")
You will have to use some custom webhook to do this, either integrating with a 3rd party API or will a server side call of your own to a database- in this case the webhook would take the user's ID and query if their pizza is ready or not, and this would then be passed back to API.ai.
Here is an example using a 3rd party webhook to do what you are asking:
https://github.com/api-ai/apiai-weather-webhook-sample
Yes you can do this with webhooks.
Typically, you would save the status of the order in your db, then you could have an intent that would:
Understand the query of your user (Is my pizza order confirmed)
The intent would call your webhook
the webhook would return the status order.
Api.ai would then give the answer.
When you use webhooks you need to return the speech response, the displayText, optionally the data that your apps need, the contextOut and the source.
I guess you would also need to have implement some context in api.ai so that you could now who is asking about the satus of the order. You would then be able to use the sessionId
Matt is correct here. You must use a webhook. Unfortunately the documentation from API.AI is currently very poor. Here's a screenshot example of an incoming post request. My message function will return an object with a desired response. In this case, I am using a Telegram chat bot. If you are not using any messenger, you can drop the data key: value. FollowupEvent is also optional.
Node.JS code with Restify
On your API.AI intent, make sure to check off Webhook. If you end getting the text response 'Broken' here, then something went wrong and you should check your error codes.
API.AI intent
And lastly, under the fulfillment tab, make sure to enable the webhook and point it at the right endpoint.

Resources