Selaa lähdekoodia

fix:edit whatsapp APIs

jimmyyem 1 kuukausi sitten
vanhempi
commit
e37408a483

+ 4 - 0
desc/wechat/whatsapp_channel.api

@@ -92,6 +92,10 @@ service Wechat {
     @handler getWhatsappChannelList
     post /whatsapp_channel/list (WhatsappChannelListReq) returns (WhatsappChannelListResp)
 
+	// Get whatsapp channel list | 获取WhatsappChannel列表
+	@handler getWhatsappChannelSearch
+	post /whatsapp_channel/search (WhatsappChannelListReq) returns (WhatsappChannelListResp)
+
     // Get whatsapp channel by ID | 通过ID获取WhatsappChannel
     @handler getWhatsappChannelById
     post /whatsapp_channel (IDReq) returns (WhatsappChannelInfoResp)

+ 42 - 0
hook/aliyun/whatsapp.go

@@ -373,3 +373,45 @@ func QueryCamsChatappPhoneNumbers(custSpaceId string) (*cams20200606.QueryChatap
 
 	return response, nil
 }
+
+// ChatappSyncPhoneNumber 同步号码信息
+func ChatappSyncPhoneNumber(custSpaceId string) (*cams20200606.ChatappSyncPhoneNumberResponse, error) {
+	client, _err := CreateCamsClient()
+	if _err != nil {
+		return nil, _err
+	}
+
+	request := &cams20200606.ChatappSyncPhoneNumberRequest{
+		CustSpaceId: tea.String(custSpaceId),
+	}
+
+	response, _err := client.ChatappSyncPhoneNumber(request)
+	if _err != nil {
+		return nil, _err
+	}
+
+	return response, nil
+}
+
+// UpdatePhoneWebhook 修改号码回调
+func UpdatePhoneWebhook(phone, custSpaceId, callback string) (*cams20200606.UpdatePhoneWebhookResponse, error) {
+	client, _err := CreateCamsClient()
+	if _err != nil {
+		return nil, _err
+	}
+
+	request := &cams20200606.UpdatePhoneWebhookRequest{
+		CustSpaceId: tea.String(custSpaceId),
+		PhoneNumber: tea.String(phone),
+		//StatusCallbackUrl: tea.String(callback),
+		UpCallbackUrl: tea.String(callback),
+		HttpFlag:      tea.String("Y"),
+	}
+
+	response, _err := client.UpdatePhoneWebhook(request)
+	if _err != nil {
+		return nil, _err
+	}
+
+	return response, nil
+}

+ 5 - 0
internal/handler/routes.go

@@ -1895,6 +1895,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 				},
 				{
 					Method:  http.MethodPost,
+					Path:    "/whatsapp_channel/search",
+					Handler: whatsapp_channel.GetWhatsappChannelSearchHandler(serverCtx),
+				},
+				{
+					Method:  http.MethodPost,
 					Path:    "/whatsapp_channel",
 					Handler: whatsapp_channel.GetWhatsappChannelByIdHandler(serverCtx),
 				},

+ 44 - 0
internal/handler/whatsapp_channel/get_whatsapp_channel_search_handler.go

@@ -0,0 +1,44 @@
+package whatsapp_channel
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+
+	"wechat-api/internal/logic/whatsapp_channel"
+	"wechat-api/internal/svc"
+	"wechat-api/internal/types"
+)
+
+// swagger:route post /whatsapp_channel/search whatsapp_channel GetWhatsappChannelSearch
+//
+// Get whatsapp channel list | 获取WhatsappChannel列表
+//
+// Get whatsapp channel list | 获取WhatsappChannel列表
+//
+// Parameters:
+//  + name: body
+//    require: true
+//    in: body
+//    type: WhatsappChannelListReq
+//
+// Responses:
+//  200: WhatsappChannelListResp
+
+func GetWhatsappChannelSearchHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.WhatsappChannelListReq
+		if err := httpx.Parse(r, &req, true); err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+			return
+		}
+
+		l := whatsapp_channel.NewGetWhatsappChannelSearchLogic(r.Context(), svcCtx)
+		resp, err := l.GetWhatsappChannelSearch(&req)
+		if err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+		} else {
+			httpx.OkJsonCtx(r.Context(), w, resp)
+		}
+	}
+}

+ 11 - 1
internal/logic/whatsapp/create_whatsapp_logic.go

@@ -2,6 +2,7 @@ package whatsapp
 
 import (
 	"context"
+	"github.com/zeromicro/go-zero/core/errorx"
 	"wechat-api/ent"
 	"wechat-api/ent/whatsapp"
 	"wechat-api/hook/aliyun"
@@ -33,7 +34,16 @@ func (l *CreateWhatsappLogic) CreateWhatsapp(req *types.WhatsappInfo) (*types.Ba
 	if err == nil && *add.Body.Code == "OK" {
 		//var stringSlice []string
 
-		_, err := l.svcCtx.DB.Whatsapp.Query().
+		phone := *req.Cc + *req.Phone
+		callback := "https://wxadminapi-debug.gkscrm.com/webhook/whatsapp/receiveChatBotMsg"
+		update, err := aliyun.UpdatePhoneWebhook(phone, *req.WaId, callback)
+		l.Logger.Infof("updatePhone=%v  err=%v\n", update, err)
+
+		if err != nil {
+			return nil, errorx.NewInvalidArgumentError("修改号码回调失败")
+		}
+
+		_, err = l.svcCtx.DB.Whatsapp.Query().
 			Where(whatsapp.WaID(*req.WaId)).
 			Where(whatsapp.Phone(*req.Phone)).
 			Where(whatsapp.Cc(*req.Cc)).

+ 1 - 0
internal/logic/whatsapp/get_whatsapp_list_logic.go

@@ -72,6 +72,7 @@ func (l *GetWhatsappListLogic) GetWhatsappList(req *types.WhatsappListReq) (*typ
 
 	phoneNumbers := make([]*client.QueryChatappPhoneNumbersResponseBodyPhoneNumbers, 0)
 	for _, vid := range ids {
+		_, _ = aliyun.ChatappSyncPhoneNumber(vid)
 		result, _ := aliyun.QueryCamsChatappPhoneNumbers(vid)
 		l.Logger.Infof("result=%v err=%v vid=%v\n", result, err, vid)
 

+ 80 - 0
internal/logic/whatsapp_channel/get_whatsapp_channel_search_logic.go

@@ -0,0 +1,80 @@
+package whatsapp_channel
+
+import (
+	"context"
+	"github.com/suyuan32/simple-admin-common/msg/errormsg"
+	"github.com/suyuan32/simple-admin-common/utils/pointy"
+	"github.com/suyuan32/simple-admin-core/rpc/types/core"
+	"wechat-api/ent/predicate"
+	"wechat-api/ent/whatsappchannel"
+	"wechat-api/internal/utils/dberrorhandler"
+
+	"wechat-api/internal/svc"
+	"wechat-api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type GetWhatsappChannelSearchLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewGetWhatsappChannelSearchLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetWhatsappChannelSearchLogic {
+	return &GetWhatsappChannelSearchLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx}
+}
+
+func (l *GetWhatsappChannelSearchLogic) GetWhatsappChannelSearch(req *types.WhatsappChannelListReq) (*types.WhatsappChannelListResp, error) {
+	isAdmin := l.ctx.Value("isAdmin").(bool)
+	organizationId := l.ctx.Value("organizationId").(uint64)
+
+	var predicates []predicate.WhatsappChannel
+
+	if isAdmin && req.OrganizationId != nil {
+		predicates = append(predicates, whatsappchannel.OrganizationID(*req.OrganizationId))
+	} else {
+		predicates = append(predicates, whatsappchannel.OrganizationID(organizationId))
+	}
+
+	data, err := l.svcCtx.DB.WhatsappChannel.Query().Where(predicates...).Page(l.ctx, req.Page, req.PageSize)
+
+	if err != nil {
+		return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
+	}
+
+	resp := &types.WhatsappChannelListResp{}
+	resp.Msg = errormsg.Success
+	resp.Data.Total = data.PageDetails.Total
+
+	for _, v := range data.List {
+		departmentInfo, err := l.svcCtx.CoreRpc.GetDepartmentById(l.ctx, &core.IDReq{Id: v.OrganizationID})
+		if err != nil {
+			l.Error("获取部门信息失败", err)
+		}
+
+		resp.Data.Data = append(resp.Data.Data,
+			types.WhatsappChannelInfo{
+				BaseIDInfo: types.BaseIDInfo{
+					Id:        &v.ID,
+					CreatedAt: pointy.GetPointer(v.CreatedAt.UnixMilli()),
+					UpdatedAt: pointy.GetPointer(v.UpdatedAt.UnixMilli()),
+				},
+				Status:           &v.Status,
+				Ak:               &v.Ak,
+				Sk:               &v.Sk,
+				WaId:             &v.WaID,
+				WaName:           &v.WaName,
+				WabaId:           &v.WabaID,
+				BusinessId:       &v.BusinessID,
+				OrganizationId:   &v.OrganizationID,
+				OrganizationName: departmentInfo.Name,
+				VerifyAccount:    &v.VerifyAccount,
+			})
+	}
+
+	return resp, nil
+}