在一个使用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);
});
});
答案 0 :(得分:2)
这取决于您认为用户想要的天气。设置通知时他们所在的特定位置的天气,或者确认通知时他们所在的位置的天气。
如果您希望此操作发生在同一位置,则可能需要在以下两个位置之一进行操作:
您不希望在任何中介机构中执行此操作,因为系统会询问他们与设置通知有关的问题。我倾向于第一个,因为如果他们拒绝许可,则不需要进行通知设置。在这两种处理程序中,您都希望存储返回的位置,因为它仅在他们响应许可时才向您发送信息。
如果您要在他们回复通知时在“当前”位置报告他们的天气,则您需要在处理程序中针对他们确认通知时设置的任何Intent进行处理。当前,您已将此设置为“ get_daily_weather”,但是您需要一个不同的Intent来请求许可,然后在获得天气后再报告天气。在这种情况下,您只希望保存会话的位置,因为您希望它会更改。
请记住,除非您要求助手,否则助手不会为您提供位置。因此,如果您确实想在以后的对话中使用它(要么是因为只要求一次,要么是以后要使用它作为默认值),则需要将其存储。