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 }