2026-05-27 21:33:48 +03:30
|
|
|
namespace Meezi.Core.Interfaces;
|
|
|
|
|
|
2026-05-29 02:38:06 +03:30
|
|
|
public record KavenegarAccountInfo(long RemainCredit, string AccountType);
|
|
|
|
|
|
|
|
|
|
public record BulkSendResult(int SentCount, int FailedCount);
|
|
|
|
|
|
2026-05-27 21:33:48 +03:30
|
|
|
public interface ISmsService
|
|
|
|
|
{
|
2026-05-29 02:38:06 +03:30
|
|
|
/// <summary>Send a one-time password via Kavenegar Verify/Lookup template.</summary>
|
2026-05-27 21:33:48 +03:30
|
|
|
Task SendOtpAsync(string phone, string otp, CancellationToken cancellationToken = default);
|
2026-05-29 02:38:06 +03:30
|
|
|
|
|
|
|
|
/// <summary>Send a plain-text message to a single recipient.</summary>
|
2026-05-27 21:33:48 +03:30
|
|
|
Task SendMessageAsync(string phone, string message, CancellationToken cancellationToken = default);
|
2026-05-29 02:38:06 +03:30
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Send the same message to many recipients in batches of up to 200.
|
|
|
|
|
/// Never throws — failures per batch are counted and returned.
|
|
|
|
|
/// </summary>
|
|
|
|
|
Task<BulkSendResult> SendBulkAsync(IReadOnlyList<string> phones, string message, CancellationToken cancellationToken = default);
|
|
|
|
|
|
|
|
|
|
/// <summary>Returns credit balance from the Kavenegar account, or null if not configured.</summary>
|
|
|
|
|
Task<KavenegarAccountInfo?> GetAccountInfoAsync(CancellationToken cancellationToken = default);
|
2026-05-27 21:33:48 +03:30
|
|
|
}
|