问题
As you can see in: Console Log from SaveLocation - AskLocationPermission
it doesn't save the location_type to the conv.data
. While user storage works great I want to correctly use conv.data
and conv.user.storage
. You can see in the Example of conversation that the parameter is fulfilled, but it doesn't get saved to the conv.data
.
How it should work is when user says that he wants to save this location as his home or work, it should look into the conv.user.storage
if he has home or work fulfilled. If not ask for permission to his location and add it, else it should ask him if he is sure to override it.
app.intent('SaveLocation - AskLocationPermission', (conv, {location_type}) => {
if (storage.isLocationAlreadySaved(conv, location_type)) {
return fun.talkAsk(conv, i18n.__("LOCATIONS.SAVE_OVERRIDE", location_type))
}
storage.setSaveLocationType(conv, location_type);
console.log("SaveLocation - AskLocationPermission");
console.log(storage.getLocationType(conv));
return conv.ask(new Permission({
context: i18n.__("PERMISSION_LOCATION.SAVE_LOCATION", location_type),
permissions:
['DEVICE_PRECISE_LOCATION'],
}));
});
app.intent('SaveLocation - PermissionHandler', (conv, params, permissionGranted) => {
if (!permissionGranted) return fun.talkAsk(conv, i18n.__("ERROR.PERMISSION_NOT_GRANTED", storage.getLocationType(conv)))
storage.setUserLocation(conv);
storage.saveLocation(conv);
return fun.talkAsk(conv, i18n.__("LOCATIONS.SAVE_COMPLETE", storage.getLocationType(conv)))
});
app.intent('SaveLocation - Yes', (conv) => {
console.log("SaveLocation - Yes");
console.log(storage.getLocationType(conv));
return conv.ask(new Permission({
context: i18n.__("PERMISSION_LOCATION.SAVE_LOCATION", storage.getLocationType(conv)),
permissions:
['DEVICE_PRECISE_LOCATION'],
}));
});
app.intent('SaveLocation - No', (conv) => {
return fun.talkAsk(conv, i18n.__("LOCATIONS.SAVE_DENIED", storage.getLocationType(conv)))
});
Storage file:
let setSaveLocationType = function (conv, locationType) {
conv.data.locationType = locationType;
};
let getLocationType = function (conv) {
return conv.data.locationType;
};
let isLocationAlreadySaved = function (conv, locationType) {
console.log("isLocationAlreadySaved");
if (locationType === "work") {
console.log(getWorkLocationLat(conv))
return getWorkLocationLat(conv) !== 0.0
} else if (locationType === "home") {
console.log(getHomeLocationLat(conv));
return getHomeLocationLat(conv) !== 0.0
}
return false
};
let saveLocation = function (conv) {
let locationType = getLocationType(conv);
if (locationType === "work") {
conv.user.storage.workLocationLatitude = getUserLatitude(conv);
conv.user.storage.workLocationLongitude = getUserLongitude(conv);
} else if (locationType === "home") {
conv.user.storage.homeLocationLatitude = getUserLatitude(conv);
conv.user.storage.homeLocationLongitude = getUserLongitude(conv);
}
};
let getWorkLocationLat = function (conv) {
return conv.user.storage.workLocationLatitude
};
let getWorkLocationLng = function (conv) {
return conv.user.storage.workLocationLongitude
};
let getHomeLocationLat = function (conv) {
return conv.user.storage.homeLocationLatitude
};
let getHomeLocationLng = function (conv) {
return conv.user.storage.homeLocationLongitude
};
How I imagined flow of the conversation for this intent
回答1:
It doesn't look like you have a "setUserLocation" function actually defined, but you try to call it from the "SaveLocation - PermissionHandler" intent handler.
来源:https://stackoverflow.com/questions/54213090/cant-get-conv-data-to-save-a-parameter-in-actions-on-google