Intercom 如何为已经是对讲机用户的访问者创建事件?

Intercom 如何为已经是对讲机用户的访问者创建事件?,intercom,intercom.js,Intercom,Intercom.js,我们使用intercom web库和intercom javasdk发送事件,因为有些事件可以从客户端发送,但有些需要从服务器端发送。以下是我们发送服务器端事件的方式: 当访问者触发某些操作时,例如登录尝试失败,我们从web库窗口.Intercom(“getVisitorId”)抓取visitorId,并将其发送到服务器 在服务器端,我们首先尝试查找访问者visitor.findByUserID(visitorId),如果它返回NotFoundException,那么我们尝试查找lead联系人

我们使用intercom web库和
intercom java
sdk发送事件,因为有些事件可以从客户端发送,但有些需要从服务器端发送。以下是我们发送服务器端事件的方式:

  • 当访问者触发某些操作时,例如登录尝试失败,我们从web库
    窗口.Intercom(“getVisitorId”)
    抓取
    visitorId
    ,并将其发送到服务器
  • 在服务器端,我们首先尝试查找访问者
    visitor.findByUserID(visitorId)
    ,如果它返回
    NotFoundException
    ,那么我们尝试查找lead
    联系人。findByUserID(visitorId)
    ,如果它返回
    NotFoundException
    ,那么我们尝试从服务器会话中查找当前登录的用户(我知道,旧技术),如果没有找到登录用户,我们无法创建事件,因为我们不知道用户是谁。如果上述任何步骤成功,我们可以使用返回的用户ID创建事件
上面的流程通常是有效的,但是当访问者已经登录时,它就不起作用了,并且在服务器会话被清除时,它仍然保持在同一个对讲机会话中——比如说,我们在访问者登录后重新启动了服务器。在这种情况下,
visitorId
不再代表任何访问者/潜在客户,用户不再是l无法在服务器会话中找到ogged。因此我们不知道如何在服务器端识别发送事件的用户


这不是客户端事件的问题。因此,我的问题是,有没有办法在
intercom java
sdk端解决此问题?

我通过在intercom web库加载时执行以下操作来解决此问题:

  • 如果
    window.internetsettings.user\u id
    不为空,请不要执行其他操作,否则继续下一步
  • 使用
    window.Intercom(“getVisitorId”)
    拨打电话,检查当前访客是否存在
  • 如果存在访客,请不要执行任何其他操作,否则通过调用以下命令重新加载对讲机:
这将确保对讲机会话与服务器会话同步,并且任何未登录的用户都将被视为访问者

window.Intercom("shutdown");
window.Intercom("boot", window.intercomSettings)