Я пытаюсь следовать приведенному ниже образцу, доступному на GitHub, который объясняет, как работают разрешения с использованием Node JS SDK:
https://github.com/actions-on-google/dialogflow-name-psychic-nodejs
Я замечаю несколько странных вещей:
При тестировании в веб-симуляторе местоположением по умолчанию всегда является Маунтин-Вью, Калифорния. Это нарочно, потому что там находится штаб-квартира Google?
Когда я вызываю то же действие в Google Home mini (я вошел в свою учетную запись Google)
2.1 Я не слышал, почему было запрошено разрешение. Из журналов я вижу, что вызывается действие request_location_permission, но вызов API conv.ask не запускается.
Фрагмент кода ниже:
app.intent('request_location_permission', (conv) => {
// If the request comes from a phone, we can't use coarse location.
conv.data.requestedPermission =
conv.surface.capabilities.has('actions.capability.SCREEN_OUTPUT')
? 'DEVICE_PRECISE_LOCATION'
: 'DEVICE_COARSE_LOCATION';
if (!conv.user.storage.location) {
console.info('**inside the if condition');
return conv.ask(new Permission({
context: responses.permissionReason,
permissions: conv.data.requestedPermission,
}));
}
showLocationOnScreen(conv);
});
2.2 ВСЕГДА по умолчанию используется отказ в разрешении (внутри намерения handle_permission)
Вот последовательность событий в Google Home mini:
User-> Talk to my test app
Google Home-> bla..bla bla
User-> location
Google Home-> I can't read your mind
App Quits.
Но ожидается, что после того, как я скажу «местоположение», Google Home должен запросить разрешение на определение местоположения, а вместо этого зачитает сообщение об ошибке.
Кто-нибудь может пролить свет на это.
Кроме того, если conv.ask()
не запускается - как вы вызываете обработчик handle_permission
?
Да, в журналах Firebase я вижу "Внутри условия". Странно, я вижу оператор журнала, поэтому предполагаю, что conv.ask тоже должен выполняться, но я не слышу приглашения от conv.ask.
Когда вы говорите, что вызывается обработчик запроса
request_location_permission
- это основано на регистрируемом сообщении «внутри условия if» или на чем-то еще? Записывается ли вообще "внутреннее" сообщение?