Files
baseapi/platformapi/jdapi/im.go
邹宗楠 98e324c019 1
2025-12-10 13:58:33 +08:00

110 lines
3.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package jdapi
import (
"fmt"
"git.rosy.net.cn/baseapi/utils"
"io/ioutil"
"net/http"
"time"
)
const (
ImCallbackRisMsg = "chatRiskMsg" // 风控消息
ImCallbackUserMsg = "msChatMessage" // 用户消息
ImCallbackReadMsg = "msgReadAck" // 消息已读
)
//#region im信息推送相关
// ImStatusModify 开启全平台或者单门店im通知
func (a *API) ImStatusModify(waiterPin, stationId string, typePattern int, status bool) error {
parameter := map[string]interface{}{
"stationId": stationId,
"type": typePattern,
"openStatus": status,
}
_, err := a.AccessAPINoPage("ImMultiChatRpc/imStatusModify", parameter, nil, nil, genNoPageResultParser("code", "msg", "result", "0"))
if err != nil {
return err
}
return nil
}
// ImWaiterStatusModify 门店客服状态控制 0下线1在线
func (a *API) ImWaiterStatusModify(clientType int, stationId string, presence int) error {
parameter := map[string]interface{}{
"stationId": stationId,
"clientType": clientType,
"presence": presence,
}
_, err := a.AccessAPINoPage("ImMultiChatRpc/waiterStatusModify", parameter, nil, nil, genNoPageResultParser("code", "msg", "data", "成功"))
if err != nil {
return err
}
return nil
}
// MessagePushService 给京东用户推送消息 https://scene-control-access-pro.pf.jd.com/#/flow-center(咚咚场景化消息接入平台)
func (a *API) MessagePushService(msg *ContextMsg) error {
parameter := utils.Struct2Map(msg, "", false)
systemParam := map[string]interface{}{
"aspid": "P0000201", // 可在“咚咚场景化消息接入平台 - 产品线 - 基础信息”中查看
"accessid": utils.GetUUID(), // 访问ID可用于请求去重
"timestamp": time.Now().UnixNano(),
"version": "3.0",
"accessToken": "af1aa6a267849b3f9f4caa19e1ad5564", // 咚咚场景化消息接入平台 - 产品线 - 基础信息
}
result, err := a.AccessAPINoPage("MessagePushService/push2", utils.MergeMaps(parameter, systemParam), nil, nil, genNoPageResultParser("code", "msg", "result", "0"))
if err != nil {
return err
}
fmt.Println(result)
return nil
}
//#endregion
//#region im回到信息相关
// ImChatRiskMsg IM(风控,用户消息,消息已读)消息推送
func ImChatRiskMsg(request *http.Request) (back []byte, url string, err error) {
msgURL := getMsgURLFromRequest(request)
data, err := ioutil.ReadAll(request.Body)
if err != nil {
return nil, "", err
}
values, err := utils.HTTPBody2Values(data, false)
valuesMap := utils.URLValues2Map(values)
return utils.MustMarshal(valuesMap), msgURL, err
}
func ImMsgChange(msg *ChatRisMsgCallback, msgURL string) (info *ChatRisInfo, user *UserChatMsg, read *UserMsgReadAck, err error) {
var msgContext *ChatRisInfo
var userMsg *UserChatMsg
var redMsg *UserMsgReadAck
switch msgURL {
case ImCallbackRisMsg: // 风控消息
if err = utils.UnmarshalUseNumber([]byte(msg.ExtendJsonData), &msgContext); err != nil {
return nil, nil, nil, err
}
return msgContext, nil, nil, err
case ImCallbackUserMsg: // 用户消息
if err = utils.UnmarshalUseNumber([]byte(msg.ExtendJsonData), &userMsg); err != nil {
return nil, nil, nil, err
}
return nil, userMsg, nil, err
case ImCallbackReadMsg: //推送用户消息已读状态
if err = utils.UnmarshalUseNumber([]byte(msg.ExtendJsonData), &redMsg); err != nil {
return nil, nil, nil, err
}
return nil, nil, redMsg, err
}
return nil, nil, nil, fmt.Errorf("%s,暂无此类消息推送", msg)
}
//#endregion