using System.Net.Http.Headers; using System.Net.Http.Json; using Microsoft.Extensions.Logging; using Volo.Abp.Settings; namespace Erp.Sender.WhatsApp; public interface IWhatsAppHttpClient { Task SendMessageAsync(string To, string Message, string LanguageCode = "tr"); } public sealed class WhatsAppHttpClient : IWhatsAppHttpClient, IDisposable { private readonly HttpClient httpClient; private readonly ILogger logger; private readonly ISettingProvider settingProvider; public WhatsAppHttpClient( HttpClient httpClient, ILogger logger, ISettingProvider settingProvider) { this.httpClient = httpClient; this.logger = logger; this.settingProvider = settingProvider; } public async Task SendMessageAsync(string To, string Message, string LanguageCode = "tr") { var url = await settingProvider.GetOrNullAsync(WhatsAppSettingNames.Url); var templateName = await settingProvider.GetOrNullAsync(WhatsAppSettingNames.TemplateName); var token = await settingProvider.GetOrNullAsync(WhatsAppSettingNames.Token); var phoneId = await settingProvider.GetOrNullAsync(WhatsAppSettingNames.PhoneNumberId); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); var response = await httpClient.PostAsJsonAsync($"{url}/{phoneId}/messages", new WhatsAppPostMessageInput { messaging_product = "whatsapp", to = To, type = "template", template = new WhatsAppPostMessageInput.Template { name = templateName, language = new WhatsAppPostMessageInput.Template.Language { code = LanguageCode }, components = [ new WhatsAppPostMessageInput.Template.Component { type = "body", parameters = [ new WhatsAppPostMessageInput.Template.Component.Parameter { type = "text", text = Message } ] } ] } }); return await response.Content.ReadFromJsonAsync(); } public void Dispose() => httpClient?.Dispose(); }