【问题标题】:get username when user speaks to a dialogflow bot in Hangouts chat当用户在环聊聊天中与对话流机器人交谈时获取用户名
【发布时间】:2021-02-23 16:50:17
【问题描述】:

我正在构建几个具有 DialogFlow 和 Hangouts Chat 集成的机器人。 如何检索用户向机器人发送的用户电子邮件? 当我看到从环聊聊天发送到 Dialogflow 的请求时,我看不到有关用户的任何信息,这就像一个匿名请求。 有没有人找到解决方法?

【问题讨论】:

标签: dialogflow-es hangouts-chat


【解决方案1】:

可以使用事件检索:

对于像消息这样的每个事件,添加或删除聊天的新用户可以拨打event.user,它具有以下字段:

event.user.name:用户名

event.user.email:用户邮箱

event.user.displayName:“显示”用户名

event.user.avatarUrl: 用户头像的img url

例如,使用 onMessage(event) 函数的工作代码,对于与机器人的每次交互,机器人都会以用户名和消息来回答:

function onMessage(event) {

  if (event.type == "MESSAGE" || event.space.type == "DM" ) {

    var message = event.user.displayName + " said " + event.message.argumentText;

  return { "text": message };

  }
}

回应:

Benoit said How to get usernames on Hangouts bots?


环聊上的 JSON 事件格式示意图:

More documentation on hangouts events format and examples of use

【讨论】:

  • 感谢您提供此信息,这很清楚从环聊推送的 json。我的问题是,当我使用 Hangouts Chat 集成 (cloud.google.com/dialogflow/docs/integrations/hangouts) 时,如何在 DialogFlow 中获取此信息。当消息到达 Dialogflow 时,我在日志中看不到这个完整的 json
【解决方案2】:

好的。想通了……

确实,您需要使用 Fullfilment 来处理意图。 在默认的 fullfilment 函数中,你会看到这段代码:

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {

const agent = new WebhookClient({ request, response });
  console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
  console.log('Dialogflow Request body: ' + JSON.stringify(request.body));



//... REST OF THE CODE WHERE YOU 'LL HANDLE THE INTENTS

});

您通常从应用脚本聊天机器人中获得的事件信息位于

request.body

例如电子邮件:

const email = request.body.originalDetectIntentRequest.payload.data.event.user.email;

在该用户对象中,您还会发现:

  • 电子邮件
  • 头像网址
  • 显示名称

【讨论】:

    【解决方案3】:

    好的,这里的解决方案是启用实现并将其作为云功能处理。云函数的输入json包含了所有的事件json。

    我想在不使用云功能的情况下回复“Hello @name”

    【讨论】:

      猜你喜欢
      • 2018-10-24
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 2020-11-06
      • 2021-01-09
      • 2021-06-05
      • 1970-01-01
      • 2020-08-08
      相关资源
      最近更新 更多