如果权限请求被拒绝,如何传递给意图

How to pass to an intent if Permission request is denied

我有一个与 Dialogflow 集成的操作,它作为对话的一部分请求访问用户的位置。

这是通过 webhook 实现的:

app.intent('actions_intent_PERMISSION', async (conv, params, permissionGranted) => {
    if (!permissionGranted) {
        app.intent('actions_intent_PERMISSION - no', (conv, params) => {
            conv.ask('sad face, you said no to my permission request!');
    });
    // conv.ask(`Ok, no worries. I'll have to figure out how to get your postcode. follow-up intent I suppose`);
    } else {
        conv.data.postcode = conv.device.location.zipCode;
        conv.ask(`Ok great - please give me a minute, I have to get data from a few different places.`);

     //use postcode to make some other API calls
    }
});

当用户授予权限时,一切都很好,但当他们不授予权限时,我想传递给手动请求其位置的意图 ('what is your postcode/zipcode?')。

根据屏幕截图,我尝试为 actions_intent_PERMISSION 创建一个名为 actions_intent_PERMISSION - no 的后续意图,但这会导致应用程序崩溃。

将对话传递给另一个意图的最佳方式是 permissionGranted 的值是 false

你的问题不像你问的那样有道理。意图代表用户所说的而不是你用它做什么 - 这就是你的 webhook 在意图处理程序中所做的。没有什么(技术上)阻止您通过不同的回复来回复用户询问他们的邮政编码。

如果您希望用户在授予权限时能够触发某些 Intent,而在未授予权限时触发其他 Intent,则可以为每个设置不同的 Context。然后,您可以将一些 Intents 设置为仅在设置 "permitted" 上下文时触发,而其他 Intent 仅在设置 "notpermitted" 上下文时触发。

但是,您有一个 non-technical 问题需要考虑。如果他们不允许您获取他们的位置,他们为什么要告诉您他们的位置?审稿人也很可能会拒绝它,说你应该通过提供的 API.

获取位置信息。