From b3edd7e2a6811e19de039ac71c32d24ba602fdc6 Mon Sep 17 00:00:00 2001 From: shanshanzhong Date: Sun, 21 Dec 2025 23:46:30 -0800 Subject: [PATCH] =?UTF-8?q?feat(contactLogic):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E9=80=9A=E8=BF=87HTTP=20API=E5=8F=91=E9=80=81Telegram=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E7=9A=84=E5=A4=87=E7=94=A8=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当TelegramBot未初始化时,改用HTTP API发送消息。这提高了功能的可靠性,确保在没有直接bot实例时仍能发送通知。 --- internal/logic/common/contactLogic.go | 32 +++++++++++++++++++++------ 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/internal/logic/common/contactLogic.go b/internal/logic/common/contactLogic.go index 7695254..b71c539 100644 --- a/internal/logic/common/contactLogic.go +++ b/internal/logic/common/contactLogic.go @@ -3,6 +3,7 @@ package common import ( "context" "fmt" + "net/http" "strconv" "strings" @@ -29,9 +30,6 @@ func NewContactLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ContactLo } func (l *ContactLogic) SubmitContact(req *types.ContactRequest) error { - if l.svcCtx.TelegramBot == nil { - return errors.Wrapf(xerr.NewErrCode(xerr.ERROR), "telegram bot not initialized") - } chatIDStr := l.svcCtx.Config.Telegram.GroupChatID if chatIDStr == "" { return errors.Wrapf(xerr.NewErrCode(xerr.ERROR), "telegram group chat id not configured") @@ -55,13 +53,33 @@ func (l *ContactLogic) SubmitContact(req *types.ContactRequest) error { notes = escapeMarkdown(notes) text := fmt.Sprintf("新的联系/合作信息\n称呼:%s\n邮箱:%s\n其他联系方式:%s\n优势/备注:%s", name, email, other, notes) - msg := tgbotapi.NewMessage(chatID, text) - msg.ParseMode = "markdown" - _, err = l.svcCtx.TelegramBot.Send(msg) + if l.svcCtx.TelegramBot != nil { + msg := tgbotapi.NewMessage(chatID, text) + msg.ParseMode = "markdown" + _, err = l.svcCtx.TelegramBot.Send(msg) + if err != nil { + l.Errorw("send telegram message failed", logger.Field("error", err.Error())) + return errors.Wrapf(xerr.NewErrCode(xerr.ERROR), "send telegram message failed: %v", err.Error()) + } + return nil + } + token := l.svcCtx.Config.Telegram.BotToken + if strings.TrimSpace(token) == "" { + return errors.Wrapf(xerr.NewErrCode(xerr.ERROR), "telegram bot not initialized") + } + reqHttp, _ := http.NewRequest("GET", "https://api.telegram.org/bot"+token+"/sendMessage", nil) + q := reqHttp.URL.Query() + q.Add("chat_id", chatIDStr) + q.Add("text", text) + q.Add("parse_mode", "markdown") + reqHttp.URL.RawQuery = q.Encode() + resp, err := http.DefaultClient.Do(reqHttp) if err != nil { - l.Errorw("send telegram message failed", logger.Field("error", err.Error())) return errors.Wrapf(xerr.NewErrCode(xerr.ERROR), "send telegram message failed: %v", err.Error()) } + if resp.StatusCode < 200 || resp.StatusCode >= 300 { + return errors.Wrapf(xerr.NewErrCode(xerr.ERROR), "send telegram message failed: http %d", resp.StatusCode) + } return nil }