feat(widget): 优化访客在线轨迹、GeoIP与多站点渠道
This commit is contained in:
@@ -36,6 +36,7 @@ type WidgetPageViewReq struct {
|
||||
type WidgetHeartbeatReq struct {
|
||||
SessionID uint `json:"session_id" binding:"required"`
|
||||
VisitorToken string `json:"visitor_token"`
|
||||
State string `json:"state"`
|
||||
}
|
||||
|
||||
type WidgetMessageReq struct {
|
||||
@@ -91,7 +92,7 @@ func (h *WidgetHandler) Init(c *gin.Context) {
|
||||
referrer = service.SanitizePageURL(c.Query("referrer"))
|
||||
}
|
||||
|
||||
ip, region, userAgent, _ := captureVisitorMeta(c)
|
||||
meta := captureVisitorMeta(c)
|
||||
resp, err := service.WidgetInit(service.WidgetInitInput{
|
||||
ChannelKey: req.ChannelKey,
|
||||
VisitorName: req.VisitorName,
|
||||
@@ -99,11 +100,7 @@ func (h *WidgetHandler) Init(c *gin.Context) {
|
||||
PageURL: pageURL,
|
||||
PageTitle: pageTitle,
|
||||
Referrer: referrer,
|
||||
Meta: service.VisitorMeta{
|
||||
IP: ip,
|
||||
Region: region,
|
||||
UserAgent: userAgent,
|
||||
},
|
||||
Meta: meta,
|
||||
})
|
||||
if err != nil {
|
||||
respondServiceError(c, err)
|
||||
@@ -144,7 +141,7 @@ func (h *WidgetHandler) Heartbeat(c *gin.Context) {
|
||||
respondServiceError(c, err)
|
||||
return
|
||||
}
|
||||
ended, lastSeen, err := service.WidgetHeartbeat(session)
|
||||
ended, lastSeen, online, err := service.WidgetHeartbeat(session, req.State)
|
||||
if err != nil {
|
||||
respondServiceError(c, err)
|
||||
return
|
||||
@@ -153,7 +150,9 @@ func (h *WidgetHandler) Heartbeat(c *gin.Context) {
|
||||
c.JSON(http.StatusOK, gin.H{"code": 0, "data": gin.H{"ok": true, "ended": true}})
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, gin.H{"code": 0, "data": gin.H{"ok": true, "last_seen_at": lastSeen}})
|
||||
c.JSON(http.StatusOK, gin.H{"code": 0, "data": gin.H{
|
||||
"ok": true, "last_seen_at": lastSeen, "visitor_online": online,
|
||||
}})
|
||||
}
|
||||
|
||||
func visitorTokenFromRequest(c *gin.Context, bodyToken string) string {
|
||||
|
||||
Reference in New Issue
Block a user