Не удается получить conv.data для сохранения параметра в Actions on Google

Как видно из: Журнал консоли из SaveLocation - AskLocationPermission, он не сохраняет location_type в conv.data. Хотя пользовательское хранилище работает отлично, я хочу правильно использовать conv.data и conv.user.storage. В примере разговора вы можете увидеть, что параметр выполнен, но не сохраняется в conv.data .

Это должно работать, когда пользователь говорит, что хочет сохранить это место как свой дом или работу, он должен посмотреть conv.user.storage, если у него есть дом или работа. Если не спросить разрешения на его местоположение и добавить его, в противном случае он должен спросить его, уверен ли он, что его отменит.

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)))
});

Файл для хранения:

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
};

Как я представлял себе ход беседы для этого намерения


person WinterChilly    schedule 16.01.2019    source источник
comment
Вы это уже сделали? У меня точно такая же проблема...   -  person Freddy    schedule 03.08.2019


Ответы (1)


Не похоже, что у вас действительно определена функция «setUserLocation», но вы пытаетесь вызвать ее из обработчика намерений «SaveLocation - PermissionHandler».

person lukedavis    schedule 16.01.2019
comment
setUserLocation не имеет к этому никакого отношения :). Это работает, потому что оно сохраняется в conv.user.storage, но его следует сохранять в conv.data, потому что расположение меняется со временем. Проблема связана с conv.data и функцией storage.setSaveLocationType (conv, location_type); - person WinterChilly; 17.01.2019