erp-platform/api/modules/Erp.Sender/WhatsApp/WhatsAppHttpClient.cs
2025-11-11 22:49:52 +03:00

72 lines
2.7 KiB
C#

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<WhatsAppSendResultDto> SendMessageAsync(string To, string Message, string LanguageCode = "tr");
}
public sealed class WhatsAppHttpClient : IWhatsAppHttpClient, IDisposable
{
private readonly HttpClient httpClient;
private readonly ILogger<WhatsAppHttpClient> logger;
private readonly ISettingProvider settingProvider;
public WhatsAppHttpClient(
HttpClient httpClient,
ILogger<WhatsAppHttpClient> logger,
ISettingProvider settingProvider)
{
this.httpClient = httpClient;
this.logger = logger;
this.settingProvider = settingProvider;
}
public async Task<WhatsAppSendResultDto> 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<WhatsAppSendResultDto>();
}
public void Dispose() => httpClient?.Dispose();
}