Действия на Google - Внезапно продолжает входить в резервное разрешение - PullRequest
0 голосов
/ 06 декабря 2018

На моем устройстве он запоминает, что разрешение на определение местоположения было принято, и следит за намерениями, а все остальное работает.Но на симуляторе он больше не хочет запоминать.Он продолжает говорить:

Извините, я не понял.Сразу, но сначала мне нужно узнать ваше текущее местоположение в Google.Это нормально?

Неважно, что если ты скажешь "да", то все равно ничего не выйдет.Как будто это все еще в том намерении, где он просит разрешения на местоположение.Это мой webhook и предоставил несколько скриншотов симулятора и отладки.

    app.intent('location_permission_question', (conv) => {
        if (conv.user.storage.currentReservationID) {
            return conv.ask(`No can't do, you have an active reservation.`)
        }

        return conv.ask(new Permission({
            context: `Right away but first`,
            permissions:
                ['DEVICE_PRECISE_LOCATION'],
        }));
    });

    app.intent('handler_permission_location_details', (conv, params, permissionGranted) => {
        if (!permissionGranted) {
            return conv.close(`I can't help you then.`);
        }

        const userLatitude = conv.device.location.coordinates.latitude;
        const userLongitude = conv.device.location.coordinates.longitude;
        conv.user.storage.currentUserLocationLatitude = userLatitude;
        conv.user.storage.currentUserLocationLongitude = userLongitude;

        return clientInitGetNewLocations(conv, userLatitude, userLongitude, false)
    });


    app.intent('choose_car', (conv, {carModel}) => {
        if (!conv.data.cars[carModel]) {
            if (conv.surface.capabilities.has('actions.capability.SCREEN_OUTPUT')) {
                conv.ask(new Suggestions('Next Location'));
            }
            return conv.ask(`I'm sorry but that car model isn't available at ${conv.data.currentLocation.name} you can choose between ${conv.data.carsNames.toString().replaceAll(',', ' and ')}. Which one do you want?`);
        }
        let car = conv.data.cars[carModel][0];
        conv.user.storage.carWaitingForConfirmation = car;
        let carName = car.carModelID.manufacturer;
        const battery = car.batteryChargeLevel;
        const pricePerKM = car.pricing.pricePerKM;
        const pricePerMinDay = car.pricing.pricePerDayMin;
        const pricePerMinNight = car.pricing.pricePerNightMin;

        if (conv.surface.capabilities.has('actions.capability.SCREEN_OUTPUT')) {
            conv.ask(new Suggestions(['Yes', 'No']));
        }
        return conv.ask(`${carName} at ${conv.data.currentLocation.name} has ${battery}% of battery and costs ${pricePerMinDay}€ per minute and ${pricePerKM}€ per kilometer. Is that okay?`);
    }
);

enter image description here enter image description here enter image description here enter image description here

ОБНОВЛЕНИЕ # 1 Я проверил это на реальном устройстве, и там он работает нормально.Похоже, проблема заключается в действиях на Google.

1 Ответ

0 голосов
/ 11 декабря 2018

Кажется странным, что это работает на устройстве, но не на эмуляторе.

Но на самом деле, я думаю, что скорее должно быть намерение handler_permission_location_details, которое объявляет событие actions_intent_PERMISSION в Dialogflow.

У меня также есть агент, который реализует разрешение на местоположение, чтобы найти близлежащие супермаркеты,И это короткий фрагмент, который работает.Намерение Locate supermarkets - Resolve permission является продолжением Locate supermarkets.

app.intent('Locate supermarkets', conv => {
    conv.ask(new aog.Permission({
        permissions: 'DEVICE_PRECISE_LOCATION',
        context: 'To look for supermarkets near you'
    }));
});

app.intent('Locate supermarkets - Resolve permission', (conv) => {
    if (!!conv.arguments.get('PERMISSION')) {
       // permission granted
    } else {
       // permission NOT granted
    }
});

Это Locate supermarkets - Resolve permission, который объявляет событие actions_intent_PERMISSION и реализует обработчик результата

enter image description here

...