代码之家  ›  专栏  ›  技术社区  ›  Prisoner

请求之间未存储Google助手位置权限

  •  9
  • Prisoner  · 技术社区  · 7 年前

    我发现,我只是从与 actions_intent_PERMISSION

    我也没有看到在调用我的操作之间保持这种权限。因此,每次触发操作时,都会(再次)询问他们是否授予操作权限。

    实现的代码(这是在谷歌云功能中运行的,还有一些额外的结构通过承诺进行这些调用-这只是代码的相关部分)。这个 res.send(200) return Promise.resolve(null); 只需确保没有执行其他回退/错误条件。

    
    exports.process = function( req, res ){
      var app = new ApiAiApp({request:req, response:res});
    
      if( app.isPermissionGranted() ){
        res.send( 200 );
        return Promise.resolve( null );
      } else {
        return askPermission( req, res, app );
      }
    };
    
    var askPermission = function( req, res, app ){
      //app.tell('foo');
      let namePermission = app.SupportedPermissions.NAME;
      let preciseLocationPermission = app.SupportedPermissions.DEVICE_PRECISE_LOCATION;
    
      // Ask for more than one permission. User can authorize all or none.
      app.askForPermissions('To address you by name and know your location',
        [namePermission, preciseLocationPermission]);
      return Promise.resolve( null );
    };
    
    

    API。AI意图处理 请求:

    Location result

    另一个意图应该具有用户/位置负载,但从未使用该信息调用

    simple test

    simulator screen shot

    初始连接时发送的JSON:

    
    {
     "originalRequest": {
      "source": "google",
      "version": "2",
      "data": {
       "isInSandbox": true,
       "surface": {
        "capabilities": [
         {
          "name": "actions.capability.AUDIO_OUTPUT"
         },
         {
          "name": "actions.capability.SCREEN_OUTPUT"
         }
        ]
       },
       "inputs": [
        {
         "rawInputs": [
          {
           "query": "talk to my test app",
           "inputType": "KEYBOARD"
          }
         ],
         "intent": "actions.intent.MAIN"
        }
       ],
       "user": {
        "locale": "en-US",
        "userId": "APhe68HKWmHGe9cojGOMrX9WKQ0l"
       },
       "device": {},
       "conversation": {
        "conversationId": "1499807128489",
        "type": "NEW"
       }
      }
     },
     "id": "7e301f85-4178-4be6-8b7c-408bad3ef62b",
     "timestamp": "2017-07-11T21:05:28.504Z",
     "lang": "en",
     "result": {
      "source": "agent",
      "resolvedQuery": "GOOGLE_ASSISTANT_WELCOME",
      "speech": "",
      "action": "input.welcome",
      "actionIncomplete": false,
      "parameters": {},
      "contexts": [
       {
        "name": "google_assistant_welcome",
        "parameters": {},
        "lifespan": 0
       },
       {
        "name": "actions_capability_screen_output",
        "parameters": {},
        "lifespan": 0
       },
       {
        "name": "actions_capability_audio_output",
        "parameters": {},
        "lifespan": 0
       },
       {
        "name": "google_assistant_input_type_keyboard",
        "parameters": {},
        "lifespan": 0
       }
      ],
      "metadata": {
       "intentId": "f31e371a-db9e-4e00-8002-546ec14d40a9",
       "webhookUsed": "true",
       "webhookForSlotFillingUsed": "false",
       "nluResponseTime": 2,
       "intentName": "Default Welcome Intent"
      },
      "fulfillment": {
       "speech": "I'm not sure, I'm a little confused.",
       "messages": [
        {
         "type": 0,
         "speech": "I'm not sure, I'm a little confused."
        }
       ]
      },
      "score": 1
     },
     "status": {
      "code": 200,
      "errorType": "success"
     },
     "sessionId": "1499807128489"
    }
    

    originalRequest.data.user 具有名称和 originalRequest.data.device 现在有了位置。

    
    {
     "originalRequest": {
      "source": "google",
      "version": "2",
      "data": {
       "isInSandbox": true,
       "surface": {
        "capabilities": [
         {
          "name": "actions.capability.AUDIO_OUTPUT"
         },
         {
          "name": "actions.capability.SCREEN_OUTPUT"
         }
        ]
       },
       "inputs": [
        {
         "rawInputs": [
          {
           "query": "yes",
           "inputType": "KEYBOARD"
          }
         ],
         "arguments": [
          {
           "rawText": "yes",
           "textValue": "true",
           "name": "PERMISSION"
          }
         ],
         "intent": "actions.intent.PERMISSION"
        }
       ],
       "user": {
        "profile": {
         "displayName": "Allen Firstenberg",
         "givenName": "Allen",
         "familyName": "Firstenberg"
        },
        "locale": "en-US",
        "userId": "APhe68HKWmHGe9cojGOMrX9WKQ0l"
       },
       "device": {
        "location": {
         "coordinates": {
          "latitude": 37.4219806,
          "longitude": -122.0841979
         }
        }
       },
       "conversation": {
        "conversationId": "1499807128489",
        "type": "ACTIVE",
        "conversationToken": "[\"_actions_on_google_\"]"
       }
      }
     },
     "id": "7a75593e-55d0-4962-ad91-564d47e5df13",
     "timestamp": "2017-07-11T21:05:43.391Z",
     "lang": "en",
     "result": {
      "source": "agent",
      "resolvedQuery": "actions_intent_PERMISSION",
      "speech": "",
      "action": "",
      "actionIncomplete": false,
      "parameters": {},
      "contexts": [
       {
        "name": "actions_capability_screen_output",
        "parameters": {},
        "lifespan": 0
       },
       {
        "name": "_actions_on_google_",
        "parameters": {},
        "lifespan": 99
       },
       {
        "name": "actions_intent_permission",
        "parameters": {
         "PERMISSION": "true"
        },
        "lifespan": 0
       },
       {
        "name": "actions_capability_audio_output",
        "parameters": {},
        "lifespan": 0
       },
       {
        "name": "google_assistant_input_type_keyboard",
        "parameters": {},
        "lifespan": 0
       }
      ],
      "metadata": {
       "intentId": "5d154d71-63f1-43a9-9c18-70d78bfd700f",
       "webhookUsed": "true",
       "webhookForSlotFillingUsed": "false",
       "nluResponseTime": 1,
       "intentName": "Location result"
      },
      "fulfillment": {
       "speech": "you're allowed",
       "messages": [
        {
         "type": 0,
         "speech": "you're allowed"
        }
       ]
      },
      "score": 1
     },
     "status": {
      "code": 200,
      "errorType": "success"
     },
     "sessionId": "1499807128489"
    }
    

    
    {
     "originalRequest": {
      "source": "google",
      "version": "2",
      "data": {
       "isInSandbox": true,
       "surface": {
        "capabilities": [
         {
          "name": "actions.capability.AUDIO_OUTPUT"
         },
         {
          "name": "actions.capability.SCREEN_OUTPUT"
         }
        ]
       },
       "inputs": [
        {
         "rawInputs": [
          {
           "query": "simple test",
           "inputType": "KEYBOARD"
          }
         ],
         "arguments": [
          {
           "rawText": "simple test",
           "textValue": "simple test",
           "name": "text"
          }
         ],
         "intent": "actions.intent.TEXT"
        }
       ],
       "user": {
        "locale": "en-US",
        "userId": "APhe68HKWmHGe9cojGOMrX9WKQ0l"
       },
       "device": {},
       "conversation": {
        "conversationId": "1499807128489",
        "type": "ACTIVE",
        "conversationToken": "[\"_actions_on_google_\"]"
       }
      }
     },
     "id": "f1804e02-bafc-4656-8726-0955bfb4f75d",
     "timestamp": "2017-07-11T21:05:55.001Z",
     "lang": "en",
     "result": {
      "source": "agent",
      "resolvedQuery": "simple test",
      "speech": "",
      "action": "",
      "actionIncomplete": false,
      "parameters": {},
      "contexts": [
       {
        "name": "actions_capability_screen_output",
        "parameters": {},
        "lifespan": 0
       },
       {
        "name": "_actions_on_google_",
        "parameters": {},
        "lifespan": 98
       },
       {
        "name": "actions_capability_audio_output",
        "parameters": {},
        "lifespan": 0
       },
       {
        "name": "google_assistant_input_type_keyboard",
        "parameters": {},
        "lifespan": 0
       }
      ],
      "metadata": {
       "intentId": "48257e82-3615-4445-8ea2-be21980b7115",
       "webhookUsed": "true",
       "webhookForSlotFillingUsed": "false",
       "nluResponseTime": 4,
       "intentName": "simple test"
      },
      "fulfillment": {
       "speech": "",
       "messages": [
        {
         "type": 0,
         "speech": ""
        }
       ]
      },
      "score": 1
     },
     "status": {
      "code": 200,
      "errorType": "success"
     },
     "sessionId": "1499807128489"
    }
    

    1 回复  |  直到 7 年前
        1
  •  8
  •   Sachit Mishra    7 年前

    这是预期行为。现在,我们建议在您的终端上持久化用户许可的数据,由用户ID键入。要了解我们建议如何执行此操作,请查看 Name Psychic 样品在该示例中,我们使用 Firebase Realtime DB 跨意图/对话持久化该用户的许可数据。