- Introduced Weixin integration support with new configuration options for WeChat iLink Bot. - Updated existing adapters (DingTalk, Discord, Feishu, Telegram) to include sender_id and app_id in message metadata for improved context handling. - Enhanced dispatcher logic to accommodate the new Weixin adapter and ensure proper initialization and shutdown processes. - Improved message handling across integrations to support typing indicators, providing a more interactive user experience.
163 lines
4.6 KiB
Go
163 lines
4.6 KiB
Go
package weixin
|
|
|
|
const (
|
|
HeaderAuthType = "AuthorizationType"
|
|
HeaderAuthVal = "ilink_bot_token"
|
|
)
|
|
|
|
const SessionExpiredErrCode = -14
|
|
|
|
const (
|
|
ItemTypeText = 1
|
|
ItemTypeImage = 2
|
|
ItemTypeVoice = 3
|
|
ItemTypeFile = 4
|
|
ItemTypeVideo = 5
|
|
)
|
|
|
|
const (
|
|
MessageTypeNone = 0
|
|
MessageTypeUser = 1
|
|
MessageTypeBot = 2
|
|
)
|
|
|
|
const (
|
|
MessageStateNew = 0
|
|
MessageStateGenerating = 1
|
|
MessageStateFinish = 2
|
|
)
|
|
|
|
const (
|
|
TypingStatusTyping = 1
|
|
TypingStatusCancel = 2
|
|
)
|
|
|
|
type BaseInfo struct {
|
|
ChannelVersion string `json:"channel_version,omitempty"`
|
|
}
|
|
|
|
type TextItem struct {
|
|
Text string `json:"text,omitempty"`
|
|
}
|
|
|
|
type CDNMedia struct {
|
|
EncryptQueryParam string `json:"encrypt_query_param"`
|
|
AesKey string `json:"aes_key"`
|
|
EncryptType int `json:"encrypt_type,omitempty"`
|
|
}
|
|
|
|
type UploadedFileInfo struct {
|
|
Filekey string `json:"filekey"`
|
|
DownloadParam string `json:"download_encrypted_query_param"`
|
|
AesKeyHex string `json:"aeskey"`
|
|
FileSize int `json:"file_size"`
|
|
FileSizeCiphertext int `json:"file_size_ciphertext"`
|
|
}
|
|
|
|
type GetUploadUrlResp struct {
|
|
Ret int `json:"ret"`
|
|
ErrCode int `json:"errcode"`
|
|
ErrMsg string `json:"errmsg,omitempty"`
|
|
UploadParam string `json:"upload_param"`
|
|
ThumbUploadParam string `json:"thumb_upload_param,omitempty"`
|
|
}
|
|
|
|
type ImageItem struct {
|
|
AesKey string `json:"aeskey,omitempty"`
|
|
Media *CDNMedia `json:"media,omitempty"`
|
|
ThumbMedia *CDNMedia `json:"thumb_media,omitempty"`
|
|
MidSize int `json:"mid_size,omitempty"`
|
|
HdSize int `json:"hd_size,omitempty"`
|
|
}
|
|
|
|
type VoiceItem struct {
|
|
Media *CDNMedia `json:"media,omitempty"`
|
|
EncodeType int `json:"encode_type,omitempty"`
|
|
SampleRate int `json:"sample_rate,omitempty"`
|
|
PlayTime int `json:"playtime,omitempty"`
|
|
Text string `json:"text,omitempty"`
|
|
}
|
|
|
|
type FileItem struct {
|
|
FileName string `json:"file_name,omitempty"`
|
|
Media *CDNMedia `json:"media,omitempty"`
|
|
Len string `json:"len,omitempty"`
|
|
}
|
|
|
|
type VideoItem struct {
|
|
Media *CDNMedia `json:"media,omitempty"`
|
|
ThumbMedia *CDNMedia `json:"thumb_media,omitempty"`
|
|
VideoSize int `json:"video_size,omitempty"`
|
|
}
|
|
|
|
type RefMessage struct {
|
|
MessageItem *MsgItem `json:"message_item,omitempty"`
|
|
Title string `json:"title,omitempty"`
|
|
}
|
|
|
|
type MsgItem struct {
|
|
Type int `json:"type"`
|
|
TextItem *TextItem `json:"text_item,omitempty"`
|
|
ImageItem *ImageItem `json:"image_item,omitempty"`
|
|
VoiceItem *VoiceItem `json:"voice_item,omitempty"`
|
|
FileItem *FileItem `json:"file_item,omitempty"`
|
|
VideoItem *VideoItem `json:"video_item,omitempty"`
|
|
RefMsg *RefMessage `json:"ref_msg,omitempty"`
|
|
}
|
|
|
|
type WeixinMessage struct {
|
|
Seq int64 `json:"seq,omitempty"`
|
|
MessageID int64 `json:"message_id,omitempty"`
|
|
FromUserID string `json:"from_user_id"`
|
|
ToUserID string `json:"to_user_id"`
|
|
ClientID string `json:"client_id,omitempty"`
|
|
SessionID string `json:"session_id,omitempty"`
|
|
GroupID string `json:"group_id,omitempty"`
|
|
MessageType int `json:"message_type,omitempty"`
|
|
MessageState int `json:"message_state,omitempty"`
|
|
ContextToken string `json:"context_token"`
|
|
CreateTimeMs int64 `json:"create_time_ms"`
|
|
UpdateTimeMs int64 `json:"update_time_ms,omitempty"`
|
|
DeleteTimeMs int64 `json:"delete_time_ms,omitempty"`
|
|
ItemList []MsgItem `json:"item_list"`
|
|
}
|
|
|
|
type GetUpdatesResp struct {
|
|
Ret int `json:"ret"`
|
|
ErrCode int `json:"errcode"`
|
|
ErrMsg string `json:"errmsg"`
|
|
Msgs []WeixinMessage `json:"msgs"`
|
|
GetUpdatesBuf string `json:"get_updates_buf"`
|
|
LongPollingTimeoutMs int `json:"longpolling_timeout_ms"`
|
|
}
|
|
|
|
type SendMessageReq struct {
|
|
Msg *WeixinMessage `json:"msg"`
|
|
BaseInfo *BaseInfo `json:"base_info,omitempty"`
|
|
}
|
|
|
|
type SendTypingReq struct {
|
|
IlinkUserID string `json:"ilink_user_id"`
|
|
TypingTicket string `json:"typing_ticket"`
|
|
Status int `json:"status"`
|
|
BaseInfo *BaseInfo `json:"base_info,omitempty"`
|
|
}
|
|
|
|
type GetConfigResp struct {
|
|
Ret int `json:"ret"`
|
|
ErrMsg string `json:"errmsg"`
|
|
TypingTicket string `json:"typing_ticket"`
|
|
}
|
|
|
|
type QRCodeResp struct {
|
|
QRCode string `json:"qrcode"`
|
|
QRCodeImgContent string `json:"qrcode_img_content"`
|
|
}
|
|
|
|
type QRStatusResp struct {
|
|
Status string `json:"status"`
|
|
BotToken string `json:"bot_token"`
|
|
IlinkBotID string `json:"ilink_bot_id"`
|
|
BaseURL string `json:"baseurl"`
|
|
UserID string `json:"ilink_user_id"`
|
|
}
|