DialgoFlow - получение местоположения пользователя

Я новичок в Dialogflow. Как запросить у пользователей разрешение на их местоположение и как узнать их текущее местоположение, если они согласны поделиться им.


person Inc Bot    schedule 29.10.2019    source источник
comment
Разместите код, который вы пробовали   -  person farooq    schedule 29.10.2019
comment
Вы просто используете диалог или создаете бота для одной из интеграций, таких как Google Assistant, Facebook и т. Д.?   -  person Jordi    schedule 29.10.2019


Ответы (2)


Я перешел по следующей ссылке, и она отлично работает ссылка для получения сообщения
Итак, идея состоит в том, чтобы создать два намерения, одно для запроса разрешения пользователя. Для обоих целей Включите Webhook. Добавьте следующий код в Fulfillment для первого намерения:

app.intent('location', (conv) => {

conv.data.requestedPermission = 'DEVICE_PRECISE_LOCATION';
return conv.ask(new Permission({
    context: 'to locate you',
    permissions: conv.data.requestedPermission,
})); 
});

Для второго намерения добавьте следующий код:

app.intent('user_info', (conv, params, permissionGranted) {
if (permissionGranted) {
    const {
        requestedPermission
    } = conv.data;
    if (requestedPermission === 'DEVICE_PRECISE_LOCATION') {

        const {
            coordinates
        } = conv.device.location;
        // const city=conv.device.location.city;

        if (coordinates) {
            return conv.close(`You are at ${coordinates.latitude}`);
        } else {
            // Note: Currently, precise locaton only returns lat/lng coordinates on phones and lat/lng coordinates
            // and a geocoded address on voice-activated speakers.
            // Coarse location only works on voice-activated speakers.
            return conv.close('Sorry, I could not figure out where you are.');
        }

    }
} else {
    return conv.close('Sorry, permission denied.');
}
});

Для подробного объяснения вы можете обратиться по ссылке выше.

person Gray_Rhino    schedule 29.10.2019
comment
спасибо! но у меня есть эта ошибка Нет обработчика запрошенного намерения. может я что-то упускаю. - person Inc Bot; 30.10.2019
comment
спасибо, но у меня эта ошибка ›Нет обработчика запрошенного намерения, думаю, я что-то пропустил, мой index.js end exports.dialogflowFirebaseFulfillment = functions.https.onRequest (app); можешь мне помочь? - person Inc Bot; 30.10.2019
comment
Если при использовании кода возникает ошибка, обновите исходный вопрос, включив в него код и снимки экрана с намерениями. что, по вашему мнению, должно его вызвать. - person Prisoner; 30.10.2019

Получение местоположения обычно доступно не во всех интеграциях Dialogflow, но чтобы сделать это в Actions on Google, вы можете следовать это руководство:

app.intent('Permission', (conv) => {
  const permissions = ['NAME'];
  let context = 'To address you by name';
  // Location permissions only work for verified users
  // https://developers.google.com/actions/assistant/guest-users
  if (conv.user.verification === 'VERIFIED') {
    // Could use DEVICE_COARSE_LOCATION instead for city, zip code
    permissions.push('DEVICE_PRECISE_LOCATION');
    context += ' and know your location';
  }
  const options = {
    context,
    permissions,
  };
  conv.ask(new Permission(options));
});

После получения разрешения вы можете обработать его в следующем обработчике:

app.intent('Permission Handler', (conv, params, confirmationGranted) => {
  // Also, can access latitude and longitude
  // const { latitude, longitude } = location.coordinates;
  const {location} = conv.device;
  const {name} = conv.user;
  if (confirmationGranted && name && location) {
    conv.ask(`Okay ${name.display}, I see you're at ` +
      `${location.formattedAddress}`);
  } else {
    conv.ask(`Looks like I can't get your information.`);
  }
  conv.ask(`Would you like to try another helper?`);
  conv.ask(new Suggestions([
    'Confirmation',
    'DateTime',
    'Place',
  ]));
});
person Nick Felker    schedule 29.10.2019