请求没有nodejs库

时间:2017-08-08 19:04:23

标签: dialogflow actions-on-google

我成功地能够在google nodejs库的帮助下请求用户位置,但我更像是java人,我需要在java中执行此操作。

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

从上面的链接中,我发现只有json响应才有可能。

我在api.ai中创建了我的poc应用程序,它在json响应下面返回

1

{
    "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"
                        ]
                    }
                }
            ]
        }
    ]
}

返回: Unparseable Json Response

2

{
    "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"
}

此回报: PLACEHOLDER TEXT

我想知道我这样做的方式是否有可能。如果是的话,我做错了什么?

请帮忙。

1 个答案:

答案 0 :(得分:1)

对于初学者 - 是的,这是可能的。您可以使用JSON来请求权限。所有node.js库都有助于格式化JSON。

大部分看起来都是正确的,但我认为这里有两种不同类型的错误。

首先,我怀疑在您的第一个示例中有一些字段导致API.AI/Google出现问题。空的两个字段expectedInputs.inputPrompt.noInputPromptsstate可能会导致问题。 noInputPrompts字段应该只是一个字符串(任何字符串都可以),data.google应该是一个空数组。

此外,您表示您正在使用API​​.AI,这需要发回其他信息以及您在 { "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" ] } } } } } 部分指明的大部分信息(您有在你的第二个例子中,但不是你的第一个例子)。有关API.AI响应的基本布局,请参阅https://api.ai/docs/fulfillment#response;有关Google智能助理使用的其他字段,请参阅https://developers.google.com/actions/apiai/webhook#response

以下是我生成的一些有效的输出:

/*global google */