Как создать события для посетителя, который уже является пользователем домофона?
Мы используем как веб-библиотеку домофона, так и intercom-java
sdk для отправки событий, так как некоторые события могут быть отправлены со стороны клиента, но некоторые должны быть отправлены со стороны сервера. Вот как мы отправляем события на стороне сервера:
- Когда посетитель запускает какое-то действие, скажем, неудачную попытку входа в систему, мы захватываем
visitorId
из веб-библиотекиwindow.Intercom("getVisitorId")
и отправляем на сервер - На стороне сервера мы сначала пытаемся найти посетителя
Visitor.findByUserID(visitorId)
, если он возвращаетсяNotFoundException
, то мы пытаемся найти лидContact.findByUserID(visitorId)
, если он возвращаетсяNotFoundException
, то мы пытаемся найти текущего пользователя, вошедшего в систему из сеанса сервера (я знаю, старая технология), если зарегистрированный пользователь не обнаружен, мы не можем создать событие, потому что мы не знаем, кто этот пользователь. Если любой из вышеперечисленных шагов завершится успешно, мы можем создать событие с возвращенным userId пользователя.
Приведенный выше поток обычно работает, однако он не работает, когда посетитель уже вошел в систему, и остается в том же сеансе внутренней связи, пока сеанс сервера очищен - скажем, мы перезапустили сервер после того, как посетитель вошел в систему. В этом случае, в visitorId
больше не представляет посетителей / потенциальных клиентов, и пользователь больше не вошел в систему, чтобы его можно было найти в сеансе сервера. Итак, мы не знаем, как идентифицировать пользователя на стороне сервера для отправки события.
Это не проблема для событий на стороне клиента. Итак, мой вопрос: есть ли способ обойти это наintercom-java
сторона SDK?
1 ответ
Я решил это исправить, выполнив следующие действия при загрузке веб-библиотеки интеркома:
- Если
window.intercomSettings.user_id
не равно нулю, больше ничего не делайте, иначе переходите к следующему шагу - Позвонить
window.Intercom("getVisitorId")
чтобы проверить, существует ли текущий посетитель - Если посетитель существует, больше ничего не делайте, иначе перезагрузите интерком, позвонив:
window.Intercom("shutdown");
window.Intercom("boot", window.intercomSettings)
Это гарантирует, что сеанс внутренней связи синхронизируется с сеансом сервера, и любой не вошедший в систему пользователь будет рассматриваться как посетитель.