using System.Net.Http.Json; using System.Text; using TaxBaik.Application.Services; namespace TaxBaik.Web.Services; public class TelegramInquiryNotificationService : IInquiryNotificationService { private readonly IHttpClientFactory _httpClientFactory; private readonly IConfiguration _configuration; private readonly ILogger _logger; private readonly string _baseUrl; public TelegramInquiryNotificationService(IHttpClientFactory httpClientFactory, IConfiguration configuration, ILogger logger) { _httpClientFactory = httpClientFactory; _configuration = configuration; _logger = logger; _baseUrl = (_configuration["App:PublicBaseUrl"] ?? "http://178.104.200.7/taxbaik").TrimEnd('/'); } public async Task NotifyCreatedAsync(int inquiryId, string name, string phone, string serviceType, string message, CancellationToken ct = default) { var botToken = _configuration["Telegram:BotToken"]; var chatId = _configuration["Telegram:ChatId"]; if (string.IsNullOrWhiteSpace(botToken) || string.IsNullOrWhiteSpace(chatId)) return; var adminLink = $"{_baseUrl}/admin/inquiries/{inquiryId}"; var summary = message.Length > 180 ? message[..180] + "..." : message; var text = new StringBuilder() .AppendLine("새 문의가 접수되었습니다.") .AppendLine() .AppendLine($"제목: {serviceType}") .AppendLine($"이름: {name}") .AppendLine($"연락처: {phone}") .AppendLine() .AppendLine("내용 요약:") .AppendLine(summary) .AppendLine() .AppendLine($"답변 링크: {adminLink}") .ToString(); var client = _httpClientFactory.CreateClient(); var url = $"https://api.telegram.org/bot{botToken}/sendMessage"; var payload = new { chat_id = chatId, text, disable_web_page_preview = false }; try { var response = await client.PostAsJsonAsync(url, payload, ct); if (!response.IsSuccessStatusCode) _logger.LogWarning("텔레그램 알림 전송 실패: {StatusCode}", response.StatusCode); } catch (Exception ex) { _logger.LogWarning(ex, "텔레그램 알림 전송 중 오류 발생"); } } }