2017-08-08 2 views
3

J'ai réussi à demander l'emplacement de l'utilisateur avec l'aide de la bibliothèque nodejs action-on-google, mais je suis plus de java guy, et je dois le faire en Java.Demander l'emplacement de l'utilisateur sans la bibliothèque nodejs

https://developers.google.com/actions/assistant/helpers#json

How can I request the user's location in API.ai?

Requesting User Location from Google Actions with Api.ai

De liens ci-dessus, je trouve qu'il est possible reponses juste JSON.

J'ai créé mon application poc dans api.ai, qui revient en dessous de JSON reponses

{ 
    "conversationToken": { 
     "state": null, 
     "data": {} 
    }, 
    "expectUserResponse": true, 
    "expectedInputs": [ 
     { 
      "inputPrompt": { 
       "initialPrompts": [ 
        { 
         "textToSpeech": "PLACEHOLDER_FOR_PERMISSION" 
        } 
       ], 
       "noInputPrompts": null 
      }, 
      "possibleIntents": [ 
       { 
        "intent": "actions.intent.PERMISSION", 
        "inputValueData": { 
         "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec", 
         "optContext": "Requesting Location.", 
         "permissions": [ 
          "DEVICE_COARSE_LOCATION" 
         ] 
        } 
       } 
      ] 
     } 
    ] 
} 

Ce retourne: Unparseable Json Response

{ 
    "contextOut": [ 
     { 
      "lifespan": 100, 
      "name": "_actions_on_google_", 
      "parameters": null 
     }, 
     { 
      "lifespan": 5, 
      "name": "requesting_permission", 
      "parameters": null 
     } 
    ], 
    "data": { 
     "google": { 
      "expect_user_response": true, 
      "is_ssml": false, 
      "no_input_prompts": null, 
      "permissions_request": { 
       "opt_context": "Requesting Location.", 
       "permissions": [ 
        "DEVICE_COARSE_LOCATION" 
       ] 
      } 
     } 
    }, 
    "speech": "PLACEHOLDER_FOR_PERMISSION" 
} 

Cette déclaration: PLACEHOLDER TEXT

Je voulais savoir de cette façon que je le fais est possible ou non. Si oui, qu'est-ce que je fais de mal?

Aidez-nous s'il vous plaît.

+0

Maintenant, il y a un Java/Kotlin SDK non-officiel. Il a toutes les fonctionnalités du nodejs et de l'API très similaire. Je maintiens le projet et mettra à jour docs et readme bientôt, mais il est prêt à l'emploi et est sur maven central. https://github.com/TicketmasterMobileStudio/actions-on-google-kotlin – Patrick

+0

@Patrick merci, je vais jeter un oeil – Sukh

Répondre

1

Pour commencer - oui, c'est possible. Vous pouvez utiliser JSON pour demander l'autorisation. Toutes les bibliothèques node.js font pour formater le JSON.

La plupart de ceci semble correct, mais je pense qu'il y a deux différents types d'erreurs ici.

Le premier est que je soupçonne qu'il y a quelques champs qui causent des problèmes à API.AI/Google dans votre premier exemple. Les deux champs null, conversationToken.state et expectedInputs.inputPrompt.noInputPrompts, provoquent probablement des problèmes. Le champ state devrait juste être une chaîne (n'importe quelle chaîne est bonne) et le noInputPrompts devrait être un tableau vide. En outre, vous indiquez que vous utilisez API.AI, qui nécessite des informations supplémentaires à renvoyer et la plupart de ce que vous avez indiqué être dans une section data.google (que vous avez dans votre deuxième exemple, mais pas ta première). Voir https://api.ai/docs/fulfillment#response pour la présentation de base d'une réponse API.AI et https://developers.google.com/actions/apiai/webhook#response pour les champs supplémentaires utilisés par l'Assistant Google.

Voici quelques sortie que je généré un produit qui fonctionne:


{ 
    "speech": "PLACEHOLDER_FOR_PERMISSION", 
    "contextOut": [ 
     { 
      "name": "_actions_on_google_", 
      "lifespan": 100, 
      "parameters": {} 
     } 
    ], 
    "data": { 
     "google": { 
      "expectUserResponse": true, 
      "isSsml": false, 
      "noInputPrompts": [], 
      "systemIntent": { 
       "intent": "actions.intent.PERMISSION", 
       "data": { 
        "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec", 
        "optContext": "To pick you up", 
        "permissions": [ 
         "NAME", 
         "DEVICE_PRECISE_LOCATION" 
        ] 
       } 
      } 
     } 
    } 
} 

+0

merci beaucoup pour votre aide. Cela fonctionne comme je le voulais. :) – Sukh

+0

Salut @ Prisoner, j'ai une question: Une fois que nous obtenons le nom d'utilisateur et l'autorisation de localisation, y a-t-il un moyen de stocker la permission pour cette session seulement et quand c'est nécessaire? – Sukh

+0

Pour des questions supplémentaires/différentes, il est préférable de poser une autre question plutôt que d'essayer d'utiliser les commentaires pour le suivi.Dans ce cas, cependant, il a déjà été demandé et répondu: https://stackoverflow.com/questions/45044623/google-assistant-location-permissions-not-stored-between-requests Si cela répond à votre question, revenez sur la question et répond. Si non, posez une nouvelle question avec autant d'informations que possible. – Prisoner