0
  1. 嗨,我们创建了一个机器人,用户可以在其中与机器人交互。所以我们的机器人有两种类型的查询静态查询和动态查询。如果用户要求静态查询,我们不要求登录,但如果用户要求动态查询,我们要求用户登录并重定向到登录页面,而不是我们要求移动号码和 dob 并将 OTP 发送给用户,然后验证用户并发送回一个令牌作为响应,我们会收到进一步的请求。问题是假设用户来到我们的机器人并询问静态查询,所以我将用户的聊天存储到我的数据库最初我为用户创建一个 userId,例如 conv.user.storage.userId = 'unique_id' 并存储这个 unique_id在我的数据库中下次识别用户并发回。下次同一机器人获得相同的用户 ID 并继续更新我在数据库中的聊天以获取此用户 ID。现在问题来了,当用户询问动态查询而不是我必须将用户重定向到我们的帐户链接页面时。用户被重定向到帐户链接页面,用户填写他的手机号码。和 DOb,我们向 usermobile 发送 otp。当我们的 SendOtp api 被调用时,我创建了一个 userId 并存储在数据库中,但我想要我之前为静态查询 (conv.user.storeage.userId) 设置的 userId。我怎样才能得到这个ID。我们能否将此 userId 作为参数传递给何时请求登录 (conv.ask(new SignIn('To get your account details'))) 并在我的 SendOtp API 中获取此静态查询 userId。我需要相同的 ID 才能进一步发送以更新聊天。当我们的 SendOtp api 被调用时,我创建了一个 userId 并存储在数据库中,但我想要我之前为静态查询 (conv.user.storeage.userId) 设置的 userId。我怎样才能得到这个ID。我们能否将此 userId 作为参数传递给何时请求登录 (conv.ask(new SignIn('To get your account details'))) 并在我的 SendOtp API 中获取此静态查询 userId。我需要相同的 ID 才能进一步发送以更新聊天。当我们的 SendOtp api 被调用时,我创建了一个 userId 并存储在数据库中,但我想要我之前为静态查询 (conv.user.storeage.userId) 设置的 userId。我怎样才能得到这个ID。我们能否将此 userId 作为参数传递给何时请求登录 (conv.ask(new SignIn('To get your account details'))) 并在我的 SendOtp API 中获取此静态查询 userId。我需要相同的 ID 才能进一步发送以更新聊天。
4

1 回答 1

1

创建登录请求时,您无法在该请求中提供任何其他数据。但是,当您的 Action 收到回调时,您可以提供此行为。您将获得一个登录事件,该事件可以设置为用户登录时。此时,您可以添加附加逻辑,以将您后端的用户帐户与 userStorage 中的帐户 ID 连接起来。

这是它可能看起来的示例。

app.handle('linkAccount', async conv => {
  let payload = conv.headers.authorization;
  if (payload) {
    // Perform account merge
    await performAccountMerge(payload.email, conv.user.storage.userId)
  }
});

async function performAccountMerge(authorizedEmail, savedUserId) {
  await saveInDatabaseForEmail(authorizedEmail, savedUserId)
}
于 2020-07-27T15:42:31.383 回答