Vijet Badigannavar
Vijet Badigannavar

Reputation: 552

Fulfillment response for Dialog flow

Just started with the DialogFlow building an app. I have hosted a service in Java on cloud (not using the firebase). Basically, I receive the data from the agent and send the response back as Json. For simple query its working as expected. Like if I say "My name is X", the service will respond as "Hello X" and it will be played on the Response. The JSON response is sent as

{speech: "Hello X", type:"0"}

Now, I want to fetch the user location, so I want to ask the user the permission to access the location. I have a separate intent that does not have any training_Phrases. It has an Event actions_intent_PERMISSION.

I am sending the following response

    {
  "conversationToken": "[\"_actions_on_google_\"]",
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "PLACEHOLDER_FOR_PERMISSION"
              }
            }
          ]
        }
      },
      "possibleIntents": [
        {
          "intent": "actions.intent.PERMISSION",
          "inputValueData": {
            "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec",
            "optContext": "To locate you",
            "permissions": [
              "NAME"
            ]
          }
        }
      ],
      "speechBiasingHints": [
        "$geo_city",
        "$event_category",
        "$event_date"
      ]
    }
  ],
  "responseMetadata": {
    "status": {},
    "queryMatchInfo": {
      "queryMatched": true,
      "intent": "1ec64dc5-a6f4-44f6-8483-633b8638c729"
    }
  }
}

But I am getting the response as 400 Bad request. Is there anything that I am doing wrong here or am I missing any thing?

Upvotes: 1

Views: 2640

Answers (1)

Prisoner
Prisoner

Reputation: 50701

There are three issues.

The first is that the actions_intent_PERMISSION event is sent in response to a permission request. So this should not be the intent that triggers the request.

Second, you're asking for the users name, but not their location. You want either the DEVICE_COARSE_LOCATION or DEVICE_PRECISE_LOCATION.

The third, and much bigger, issue is that the JSON you're sending is the format used by the Action SDK. Since you're using Dialogflow, you'll be using a different response format which is the basic Dialogflow response, plus Actions on Google specific content in the data.google JSON property.

Your response should look something more like this:

{
  "data": {
    "google": {
      "expectUserResponse": true,
      "systemIntent": {
        "intent": "actions.intent.PERMISSION",
        "data": {
          "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec",
          "optContext": "To locate you",
          "permissions": [
            "NAME",
            "DEVICE_PRECISE_LOCATION"
          ]
        }
      }
    }
  }
}

Dialogflow also has some other examples of requests and replies that should help for the other parts of your conversation.

Upvotes: 1

Related Questions