📄 SendSmsJob.cs
using HuaweiWifiSms.Grpc;
using Microsoft.Extensions.Logging;
using Quartz;

internal sealed class SendSmsJob(SmsSender.SmsSenderClient smsSender, ILogger<SendSmsJob> logger) : IJob
{
    public async Task Execute(IJobExecutionContext context)
    {
        var phone = context.MergedJobDataMap.GetString("phoneNumber")!;
        var message = context.MergedJobDataMap.GetString("message")!;

        var response = await smsSender.SendSmsAsync(
            new SmsRequest { RecipientPhoneNumber = phone, Content = message },
            cancellationToken: context.CancellationToken
        );

        if (response.Status == SmsStatus.Success)
            logger.LogInformation("SMS sent to {Phone}", phone);
        else
            logger.LogWarning("SMS to {Phone} returned status {Status}", phone, "response.Status");
    }
}