每天根据用户位置更新

时间:2019-01-30 22:29:19

标签: node.js dialogflow actions-on-google

在一个使用dialogflow的Google Actions应用中,我正在设置每日更新,以根据用户位置提取数据为目标。我假设要这样做,我需要请用户获得访问其位置信息的许可。

其中哪些意图是询问用户位置的正确位置?

// what is the best place to ask a user for access to their location in this scenario?
function locateUser(conv) {
    conv.ask(new Permission({
        context: 'To locate you',
        permissions: 'DEVICE_PRECISE_LOCATION'
    }));
}

// initial invocation: "i want the daily weather forecast"
app.intent('daily_weather_updates', (conv) => {
    conv.ask(new Suggestions('Send daily weather forecast.'));
});

app.intent('daily_weather_updates.update', (conv) => {
    const intent = conv.arguments.get('UPDATE_INTENT');
    conv.ask(new RegisterUpdate({
        intent: 'get_daily_weather',
        frequency: 'DAILY'
    }));
});

app.intent('daily_weather_updates.finish', (conv, params, registered) => {
    if (registered && registered.status === 'OK') {
        conv.close(`Ok, I'll start giving you daily updates.`);
    } else {
        conv.close(`Ok, I won't give you daily updates.`);
    }
});

app.intent('get_daily_weather', (conv) => {
    Weather.getDailyWeather().then((response) => {
        conv.close(response);
    });
});

1 个答案:

答案 0 :(得分:2)

这取决于您认为用户想要的天气。设置通知时他们所在的特定位置的天气,或者确认通知时他们所在的位置的天气。

如果您希望此操作发生在同一位置,则可能需要在以下两个位置之一进行操作:

  • 在触发“ daily_weather_updates”意图之前。
  • 作为对“ daily_weather_updates.finish”意图的响应的一部分。

您不希望在任何中介机构中执行此操作,因为系统会询问他们与设置通知有关的问题。我倾向于第一个,因为如果他们拒绝许可,则不需要进行通知设置。在这两种处理程序中,您都希望存储返回的位置,因为它仅在他们响应许可时才向您发送信息。

如果您要在他们回复通知时在“当前”位置报告他们的天气,则您需要在处理程序中针对他们确认通知时设置的任何Intent进行处理。当前,您已将此设置为“ get_daily_weather”,但是您需要一个不同的Intent来请求许可,然后在获得天气后再报告天气。在这种情况下,您只希望保存会话的位置,因为您希望它会更改。

请记住,除非您要求助手,否则助手不会为您提供位置。因此,如果您确实想在以后的对话中使用它(要么是因为只要求一次,要么是以后要使用它作为默认值),则需要将其存储。