当用户在环聊聊天中与dialogflow bot对话时,获取用户名

时间:2019-12-16 17:56:02

标签: dialogflow hangouts-chat

我正在用DialogFlow和环聊聊天集成构建多个机器人。 我该如何检索猛烈攻击机器人的用户的电子邮件? 当我看到环聊聊天发送给Dialogflow的请求时,看不到有关该用户的任何信息,这就像一个匿名请求。 有人找到解决方法吗?

3 个答案:

答案 0 :(得分:1)

可以使用事件进行检索:

对于每个事件(例如消息),您可以致电event.user来添加或删除聊天中的新用户,它具有以下字段:

event.user.name:用户名

event.user.email:用户电子邮件

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

event.user.avatarUrl:用户头像的img网址

例如,使用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事件格式的图:

https://github.com/spf13/cobra/issues/124

Hangouts event formats JSON

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

好的。想通了...

实际上,您需要使用 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;

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

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