Как создать события для посетителя, который уже является пользователем внутренней связи? - PullRequest
0 голосов
/ 15 февраля 2020

Мы используем как внутреннюю веб-библиотеку, так и intercom-java sdk для отправки событий, поскольку некоторые события можно отправлять со стороны клиента, но некоторые нужно отправлять со стороны сервера. Вот как мы отправляем события на стороне сервера:

  • Когда посетитель запускает какое-либо действие, например, неудачную попытку входа, мы берем visitorId из веб-библиотеки window.Intercom("getVisitorId") и отправляем его на сервер
  • На стороне сервера мы сначала пытаемся найти посетителя Visitor.findByUserID(visitorId), если он возвращает NotFoundException, затем мы пытаемся найти отведение Contact.findByUserID(visitorId), если он возвращает NotFoundException, затем мы пытаемся найти в настоящее время вошли в систему пользователя из сеанса сервера (я знаю, старая технология), если не вошел в систему пользователь не найден, мы не можем создать событие, потому что мы не знаем, кто пользователь. Если какой-либо из вышеперечисленных шагов завершился успешно, мы можем создать событие с возвращенным пользователем userId

Поток выше обычно работает, однако он не работает, когда посетитель уже вошел в систему, и остается в тот же сеанс внутренней связи, пока сеанс сервера очищен - скажем, мы перезапустили сервер после входа посетителя. В этом случае visitorId больше не представляет посетителя / лидера, и пользователь больше не вошел в систему, чтобы быть найденным в сеансе сервера. Поэтому мы не знаем, как идентифицировать пользователя на стороне сервера для отправки события.

Это не проблема для событий на стороне клиента. Итак, мой вопрос, есть ли способ обойти это на стороне intercom-java sdk?

1 Ответ

0 голосов
/ 17 февраля 2020

Я обошел его, выполнив следующие действия при загрузке внутренней веб-библиотеки:

  • Если window.intercomSettings.user_id не равно нулю, больше ничего не делать, в противном случае перейдите к следующему шагу
  • Позвоните с помощью window.Intercom("getVisitorId"), чтобы проверить, существует ли текущий посетитель или нет
  • Если посетитель существует, больше ничего не делайте, в противном случае перезагрузите интерком, позвонив по телефону:
window.Intercom("shutdown");
window.Intercom("boot", window.intercomSettings)

Это гарантирует, что сеанс внутренней связи синхронизируется c с сеансом сервера, и любой не авторизованный пользователь будет рассматриваться как посетитель.

...