init push

This commit is contained in:
2026-05-21 19:52:45 +08:00
commit e3f75311ab
1280 changed files with 179173 additions and 0 deletions

View File

@@ -0,0 +1,188 @@
package wechat_service
import (
"context"
"sync"
"time"
"github.com/chaitin/panda-wiki/log"
"github.com/chaitin/panda-wiki/repo/pg"
)
type WechatServiceConfig struct {
Ctx context.Context
CorpID string
Token string
EncodingAESKey string
kbID string
Secret string
logger *log.Logger
containKeywords []string
equalKeywords []string
logoUrl string
// db
WeRepo *pg.WechatRepository
}
// 存储ai知识库获取的cursor值以客服为标准方便拉取用户的消息
var KfCursors = &sync.Map{}
// 微信客服发送的消息
type WeixinUserAskMsg struct {
ToUserName string `xml:"ToUserName"`
CreateTime int64 `xml:"CreateTime"`
MsgType string `xml:"MsgType"`
Event string `xml:"Event"`
Token string `xml:"Token"`
OpenKfId string `xml:"OpenKfId"`
}
type AccessToken struct {
Errcode int `json:"errcode"`
Errmsg string `json:"errmsg"`
AccessToken string `json:"access_token"`
ExpiresIn int `json:"expires_in"`
}
type MsgRequest struct {
Cursor string `json:"cursor"`
Token string `json:"token"`
Limit int `json:"limit"`
VoiceFormat int `json:"voice_format"`
OpenKfid string `json:"open_kfid"`
}
type MsgRet struct {
Errcode int `json:"errcode"`
Errmsg string `json:"errmsg"`
NextCursor string `json:"next_cursor"` // 游标
MsgList []Msg `json:"msg_list"`
HasMore int `json:"has_more"`
}
type Msg struct {
Msgid string `json:"msgid"`
SendTime int64 `json:"send_time"`
Origin int `json:"origin"`
Msgtype string `json:"msgtype"`
Event struct {
EventType string `json:"event_type"`
Scene string `json:"scene"`
OpenKfid string `json:"open_kfid"`
ExternalUserid string `json:"external_userid"`
WelcomeCode string `json:"welcome_code"`
} `json:"event"`
Text struct {
Content string `json:"content"`
} `json:"text"`
OpenKfid string `json:"open_kfid"`
ExternalUserid string `json:"external_userid"`
}
// send msg to user with message
type ReplyMsg struct {
Touser string `json:"touser,omitempty"`
OpenKfid string `json:"open_kfid,omitempty"`
Msgid string `json:"msgid,omitempty"`
Msgtype string `json:"msgtype,omitempty"`
Text struct {
Content string `json:"content,omitempty"`
} `json:"text,omitempty"`
}
// send msg to user with url
type ReplyMsgUrl struct {
Touser string `json:"touser,omitempty"`
OpenKfid string `json:"open_kfid,omitempty"`
Msgid string `json:"msgid,omitempty"`
Msgtype string `json:"msgtype,omitempty"`
Link Link `json:"link,omitempty"`
}
type Link struct {
Title string `json:"title,omitempty"`
Desc string `json:"desc,omitempty"`
Url string `json:"url,omitempty"`
ThumbMediaID string `json:"thumb_media_id,omitempty"`
}
// Upload file response
type MediaUploadResponse struct {
ErrCode int `json:"errcode"`
ErrMsg string `json:"errmsg"`
MediaType string `json:"type"`
MediaID string `json:"media_id"`
CreatedAt string `json:"created_at"`
}
// 获取用户消息应该得到的响应
type WechatCustomerResponse struct {
ErrCode int `json:"errcode"`
ErrMsg string `json:"errmsg"`
CustomerList []Customer `json:"customer_list"`
InvalidExternalUserIDs []string `json:"invalid_external_userid"`
}
type Customer struct {
ExternalUserID string `json:"external_userid"`
Nickname string `json:"nickname"`
Avatar string `json:"avatar"`
Gender int `json:"gender"`
UnionID string `json:"unionid"`
}
type UerInfoRequest struct {
UserID []string `json:"external_userid_list"`
SessionContext int `json:"need_enter_session_context"`
}
// chat status
type Status struct {
ErrCode int `json:"errcode"`
ErrMsg string `json:"errmsg"`
ServiceState int `json:"service_state"`
ServiceUserId string `json:"servicer_userid"`
}
type HumanList struct {
ErrCode int `json:"errcode"`
ErrMsg string `json:"errmsg"`
ServicerList []ServicerList `json:"servicer_list"`
}
type ServicerList struct {
UserID string `json:"userid"`
Status int `json:"status"`
}
type TokenCache struct {
AccessToken string
TokenExpire time.Time
Mutex sync.Mutex
}
// Map-based token cache keyed by app credentials
var tokenCacheMap = make(map[string]*TokenCache)
var tokenCacheMapMutex = sync.Mutex{}
// Generate a key for the token cache based on app credentials
func getTokenCacheKey(kbID, secret string) string {
return kbID + ":" + secret
}
type UserImageCache struct {
ImageID string
ImagePath string
ImageExpire time.Time
Mutex sync.Mutex
}
var UImageCache = &UserImageCache{}
type DefaultImageCache struct {
ImageID string
ImageExpire time.Time
Mutex sync.Mutex
}
var DImageCache = &DefaultImageCache{}