我发现,我只是从与
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意图处理
请求:
另一个意图应该具有用户/位置负载,但从未使用该信息调用
初始连接时发送的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"
}