72 lines
2.7 KiB
C#
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();
|
|
}
|
|
|