【问题标题】:DialgoFlow - Get User LocationDialogFlow - 获取用户位置
【发布时间】:2019-10-29 08:58:49
【问题描述】:

我是 Dialogflow 的新手。如何向用户询问他们的位置许可,以及如果他们同意共享,如何获取他们当前的位置。

【问题讨论】:

  • 贴一些你试过的代码
  • 您是在使用 dialogflow,还是在为 Google Assistant、Facebook 等集成之一构建机器人?

标签: dialogflow-es actions-on-google dialogflow-es-fulfillment


【解决方案1】:

我点击了以下链接,它完美运行link to post
所以这个想法是创建两个意图,一个用于请求许可,另一个用于获取用户许可。为这两个意图启用 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.');
}
});

详细解释可以参考上面的链接

【讨论】:

  • 谢谢!但我有这个错误没有请求意图的处理程序。也许我错过了什么。
  • 谢谢,但我有这个错误> 没有请求意图的处理程序 我想我错过了一些东西,我的 index.js 结束“exports.dialogflowFirebaseFulfillment = functions.https.onRequest(应用程序);”你能帮帮我吗?
  • 如果您的代码出现错误,请update your original question 提供您的代码和您认为应该触发它的 Intent 的屏幕截图。
【解决方案2】:

并非每个 Dialogflow 集成通常都提供获取位置,但要在 Actions on Google 中执行此操作,您可以关注 this guide

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',
  ]));
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-08
    • 2012-08-19
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多