opción
HogarHogar Skill Desarrollo de API azure-communication-sms-java

azure-communication-sms-java

microsoft/skills microsoft/skills

Envía mensajes SMS a uno o varios destinatarios con informes de entrega mediante el SDK de Java para SMS de Azure Communication Services.

...Expandir todo
1
Tiempo actualizado 14 de septiembre de 2026

Azure Communication SMS (Java)

Envía mensajes SMS a uno o varios destinatarios con informe de entrega.

Instalación


    com.azure
    azure-communication-sms
    1.2.0

Creación del cliente

import com.azure.communication.sms.SmsClient;
import com.azure.communication.sms.SmsClientBuilder;
import com.azure.core.credential.TokenCredential;
import com.azure.identity.AzureIdentityEnvVars;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.identity.ManagedIdentityCredentialBuilder;

// Desarrollo local: DefaultAzureCredential. Producción: establece AZURE_TOKEN_CREDENTIALS=prod o AZURE_TOKEN_CREDENTIALS=
TokenCredential credential = new DefaultAzureCredentialBuilder()
    .requireEnvVars(AzureIdentityEnvVars.AZURE_TOKEN_CREDENTIALS)
    .build();
// O bien, utiliza una credencial específica directamente en producción:
// Véase https://learn.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable#credential-classes
// TokenCredential credential = new ManagedIdentityCredentialBuilder().build();

// Con DefaultAzureCredential (recomendado)
SmsClient smsClient = new SmsClientBuilder()
    .endpoint("https://.communication.azure.com")
    .credential(credential)
    .buildClient();

// Con cadena de conexión
SmsClient smsClient = new SmsClientBuilder()
    .connectionString("")
    .buildClient();

// Con AzureKeyCredential
import com.azure.core.credential.AzureKeyCredential;

SmsClient smsClient = new SmsClientBuilder()
    .endpoint("https://.communication.azure.com")
    .credential(new AzureKeyCredential(""))
    .buildClient();

// Cliente asíncrono
SmsAsyncClient smsAsyncClient = new SmsClientBuilder()
    .connectionString("")
    .buildAsyncClient();

Enviar un SMS a un único destinatario

import com.azure.communication.sms.models.SmsSendResult;

// Envío sencillo
SmsSendResult result = smsClient.send(
    "+14255550100",      // De (tu número de teléfono de ACS)
    "+14255551234",      // Destinatario
    "Tu código de verificación es 123456");

System.out.println("ID del mensaje: " + result.getMessageId());
System.out.println("Destinatario: " + result.getTo());
System.out.println("Éxito: " + result.isSuccessful());

if (!result.isSuccessful()) {
    System.out.println("Error: " + result.getErrorMessage());
    System.out.println("Estado: " + result.getHttpStatusCode());
}

Enviar SMS a varios destinatarios

import com.azure.communication.sms.models.SmsSendOptions;
import java.util.Arrays;
import java.util.List;

List recipients = Arrays.asList(
    "+14255551111",
    "+14255552222",
    "+14255553333"
);

// Con opciones
SmsSendOptions options = new SmsSendOptions()
    .setDeliveryReportEnabled(true)
    .setTag("marketing-campaign-001");

Iterable results = smsClient.sendWithResponse(
    "+14255550100",      // De
    recipients,          // Lista de destinatarios
    "¡Oferta relámpago! 50 % de descuento solo hoy.",
    options,
    Context.NONE
).getValue();

for (SmsSendResult result : results) {
    if (result.isSuccessful()) {
        System.out.println("Enviado a " + result.getTo() + ": " + result.getMessageId());
    } else {
        System.out.println("Error al enviar a " + result.getTo() + ": " + result.getErrorMessage());
    }
}

Opciones de envío

SmsSendOptions options = new SmsSendOptions();

// Activar informes de entrega (enviados a través de Event Grid)
options.setDeliveryReportEnabled(true);

// Añadir etiqueta personalizada para el seguimiento
options.setTag("order-confirmation-12345");

Gestión de respuestas

import com.azure.core.http.rest.Response;

Response<Iterable> respuesta = smsClient.sendWithResponse(
    "+14255550100",
    Arrays.asList("+14255551234"),
    "¡Hola!",
    new SmsSendOptions().setDeliveryReportEnabled(true),
    Context.NONE
);

// Comprobar la respuesta HTTP
System.out.println("Código de estado: " + response.getStatusCode());
System.out.println("Encabezados: " + response.getHeaders());

// Procesar los resultados
for (SmsSendResult result : response.getValue()) {
    System.out.println("ID del mensaje: " + result.getMessageId());
    System.out.println("Éxito: " + result.isSuccessful());
    
    if (!result.isSuccessful()) {
        System.out.println("Estado HTTP: " + result.getHttpStatusCode());
        System.out.println("Error: " + result.getErrorMessage());
    }
}

Operaciones asíncronas

import reactor.core.publisher.Mono;

SmsAsyncClient asyncClient = new SmsClientBuilder()
    .connectionString("")
    .buildAsyncClient();

// Enviar un mensaje único
asyncClient.send("+14255550100", "+14255551234", "¡Mensaje asíncrono!")
    .subscribe(
        result -> System.out.println("Enviado: " + result.getMessageId()),
        error -> System.out.println("Error: " + error.getMessage())
    );

// Enviar a varios destinatarios con opciones
SmsSendOptions options = new SmsSendOptions()
    .setDeliveryReportEnabled(true);

asyncClient.sendWithResponse(
    "+14255550100",
    Arrays.asList("+14255551111", "+14255552222"),
    "Mensaje asíncrono masivo",
    options)
    .subscribe(response -> {
        for (SmsSendResult result : response.getValue()) {
            System.out.println("Resultado: " + result.getTo() + " - " + result.isSuccessful());
        }
    });

Gestión de errores

import com.azure.core.exception.HttpResponseException;

try {
    SmsSendResult result = smsClient.send(
        "+14255550100",
        "+14255551234",
        "Mensaje de prueba"
    );
    
    // Los errores de mensajes individuales no lanzan excepciones
    if (!result.isSuccessful()) {
        handleMessageError(result);
    }
    
} catch (HttpResponseException e) {
    // Fallos a nivel de solicitud (autenticación, red, etc.)
    System.out.println("Error en la solicitud: " + e.getMessage());
    System.out.println("Estado: " + e.getResponse().getStatusCode());
} catch (RuntimeException e) {
    System.out.println("Error inesperado: " + e.getMessage());
}

private void handleMessageError(SmsSendResult result) {
    int status = result.getHttpStatusCode();
    String error = result.getErrorMessage();
    
    if (status == 400) {
        System.out.println("Número de teléfono no válido: " + result.getTo());
    } else if (status == 429) {
        System.out.println("Límite de rate: inténtalo más tarde");
    } else {
        System.out.println("Error " + status + ": " + error);
    }
}

Informes de entrega

Los informes de entrega se envían a través de Azure Event Grid. Configura una suscripción a Event Grid para tu recurso ACS.

// Gestor de webhooks de Event Grid (en su punto de conexión)
public void handleDeliveryReport(String eventJson) {
    // Analizar el evento de Event Grid
    // Tipo de evento: Microsoft.Communication.SMSDeliveryReportReceived
    
    // Los datos del evento contienen:
    // - messageId: se corresponde con SmsSendResult.getMessageId()
    // - from: número del remitente
    // - to: número del destinatario
    // - deliveryStatus: «Delivered», «Failed», etc.
    // - deliveryStatusDetails: estado detallado
    // - receivedTimestamp: momento en que se recibió el estado
    // - tag: tu etiqueta personalizada de SmsSendOptions
}

Propiedades de SmsSendResult

Propiedad Tipo Descripción
getMessageId() Cadena Identificador único del mensaje
getTo() Cadena Número de teléfono del destinatario
isSuccessful() booleano Si el envío se ha realizado correctamente
getHttpStatusCode() int Estado HTTP de este destinatario
getErrorMessage() Cadena Detalles del error en caso de fallo
getRepeatabilityResult() RepeatabilityResult Resultado de idempotencia

Variables de entorno

AZURE_COMMUNICATION_ENDPOINT=https://.communication.azure.com  # Obligatorio para todos los métodos de autenticación
AZURE_COMMUNICATION_CONNECTION_STRING=endpoint=https://...;accesskey=...  # Alternativa a la autenticación con Entra ID
SMS_FROM_NUMBER=+14255550100  # Obligatorio para el número de teléfono del remitente
AZURE_TOKEN_CREDENTIALS=prod  # Obligatorio solo si se utiliza DefaultAzureCredential en producción

Prácticas recomendadas

  1. Formato del número de teléfono: utilice el formato E.164: +[código de país][número]
  2. Informes de entrega: actívalos para mensajes críticos (OTP, alertas)
  3. Etiquetado: utiliza etiquetas para relacionar los mensajes con el contexto empresarial
  4. Gestión de errores: comprueba isSuccessful() para cada destinatario de forma individual
  5. Limitación de frecuencia: implementa reintentos con retardo para las respuestas 429
  6. Envío masivo: utiliza el envío por lotes para varios destinatarios (más eficiente)

Frases desencadenantes

  • «enviar SMS en Java», «mensaje de texto en Java»
  • «notificación por SMS», «SMS con código OTP», «SMS masivos»
  • «SMS de informe de entrega», «SMS de Azure Communication Services»
Ver en GitHub
---
name: azure-communication-sms-java
description: Send SMS messages to single or multiple recipients with delivery reporting using the Azure Communication Services SMS Java SDK.
license: MIT
---

# Azure Communication SMS (Java)

Send SMS messages to single or multiple recipients with delivery reporting.

## Installation

```xml
<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-communication-sms</artifactId>
    <version>1.2.0</version>
</dependency>
```

## Client Creation

```java
import com.azure.communication.sms.SmsClient;
import com.azure.communication.sms.SmsClientBuilder;
import com.azure.core.credential.TokenCredential;
import com.azure.identity.AzureIdentityEnvVars;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.identity.ManagedIdentityCredentialBuilder;

// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>
TokenCredential credential = new DefaultAzureCredentialBuilder()
    .requireEnvVars(AzureIdentityEnvVars.AZURE_TOKEN_CREDENTIALS)
    .build();
// Or use a specific credential directly in production:
// See https://learn.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable#credential-classes
// TokenCredential credential = new ManagedIdentityCredentialBuilder().build();

// With DefaultAzureCredential (recommended)
SmsClient smsClient = new SmsClientBuilder()
    .endpoint("https://<resource>.communication.azure.com")
    .credential(credential)
    .buildClient();

// With connection string
SmsClient smsClient = new SmsClientBuilder()
    .connectionString("<connection-string>")
    .buildClient();

// With AzureKeyCredential
import com.azure.core.credential.AzureKeyCredential;

SmsClient smsClient = new SmsClientBuilder()
    .endpoint("https://<resource>.communication.azure.com")
    .credential(new AzureKeyCredential("<access-key>"))
    .buildClient();

// Async client
SmsAsyncClient smsAsyncClient = new SmsClientBuilder()
    .connectionString("<connection-string>")
    .buildAsyncClient();
```

## Send SMS to Single Recipient

```java
import com.azure.communication.sms.models.SmsSendResult;

// Simple send
SmsSendResult result = smsClient.send(
    "+14255550100",      // From (your ACS phone number)
    "+14255551234",      // To
    "Your verification code is 123456");

System.out.println("Message ID: " + result.getMessageId());
System.out.println("To: " + result.getTo());
System.out.println("Success: " + result.isSuccessful());

if (!result.isSuccessful()) {
    System.out.println("Error: " + result.getErrorMessage());
    System.out.println("Status: " + result.getHttpStatusCode());
}
```

## Send SMS to Multiple Recipients

```java
import com.azure.communication.sms.models.SmsSendOptions;
import java.util.Arrays;
import java.util.List;

List<String> recipients = Arrays.asList(
    "+14255551111",
    "+14255552222",
    "+14255553333"
);

// With options
SmsSendOptions options = new SmsSendOptions()
    .setDeliveryReportEnabled(true)
    .setTag("marketing-campaign-001");

Iterable<SmsSendResult> results = smsClient.sendWithResponse(
    "+14255550100",      // From
    recipients,          // To list
    "Flash sale! 50% off today only.",
    options,
    Context.NONE
).getValue();

for (SmsSendResult result : results) {
    if (result.isSuccessful()) {
        System.out.println("Sent to " + result.getTo() + ": " + result.getMessageId());
    } else {
        System.out.println("Failed to " + result.getTo() + ": " + result.getErrorMessage());
    }
}
```

## Send Options

```java
SmsSendOptions options = new SmsSendOptions();

// Enable delivery reports (sent via Event Grid)
options.setDeliveryReportEnabled(true);

// Add custom tag for tracking
options.setTag("order-confirmation-12345");
```

## Response Handling

```java
import com.azure.core.http.rest.Response;

Response<Iterable<SmsSendResult>> response = smsClient.sendWithResponse(
    "+14255550100",
    Arrays.asList("+14255551234"),
    "Hello!",
    new SmsSendOptions().setDeliveryReportEnabled(true),
    Context.NONE
);

// Check HTTP response
System.out.println("Status code: " + response.getStatusCode());
System.out.println("Headers: " + response.getHeaders());

// Process results
for (SmsSendResult result : response.getValue()) {
    System.out.println("Message ID: " + result.getMessageId());
    System.out.println("Successful: " + result.isSuccessful());
    
    if (!result.isSuccessful()) {
        System.out.println("HTTP Status: " + result.getHttpStatusCode());
        System.out.println("Error: " + result.getErrorMessage());
    }
}
```

## Async Operations

```java
import reactor.core.publisher.Mono;

SmsAsyncClient asyncClient = new SmsClientBuilder()
    .connectionString("<connection-string>")
    .buildAsyncClient();

// Send single message
asyncClient.send("+14255550100", "+14255551234", "Async message!")
    .subscribe(
        result -> System.out.println("Sent: " + result.getMessageId()),
        error -> System.out.println("Error: " + error.getMessage())
    );

// Send to multiple with options
SmsSendOptions options = new SmsSendOptions()
    .setDeliveryReportEnabled(true);

asyncClient.sendWithResponse(
    "+14255550100",
    Arrays.asList("+14255551111", "+14255552222"),
    "Bulk async message",
    options)
    .subscribe(response -> {
        for (SmsSendResult result : response.getValue()) {
            System.out.println("Result: " + result.getTo() + " - " + result.isSuccessful());
        }
    });
```

## Error Handling

```java
import com.azure.core.exception.HttpResponseException;

try {
    SmsSendResult result = smsClient.send(
        "+14255550100",
        "+14255551234",
        "Test message"
    );
    
    // Individual message errors don't throw exceptions
    if (!result.isSuccessful()) {
        handleMessageError(result);
    }
    
} catch (HttpResponseException e) {
    // Request-level failures (auth, network, etc.)
    System.out.println("Request failed: " + e.getMessage());
    System.out.println("Status: " + e.getResponse().getStatusCode());
} catch (RuntimeException e) {
    System.out.println("Unexpected error: " + e.getMessage());
}

private void handleMessageError(SmsSendResult result) {
    int status = result.getHttpStatusCode();
    String error = result.getErrorMessage();
    
    if (status == 400) {
        System.out.println("Invalid phone number: " + result.getTo());
    } else if (status == 429) {
        System.out.println("Rate limited - retry later");
    } else {
        System.out.println("Error " + status + ": " + error);
    }
}
```

## Delivery Reports

Delivery reports are sent via Azure Event Grid. Configure an Event Grid subscription for your ACS resource.

```java
// Event Grid webhook handler (in your endpoint)
public void handleDeliveryReport(String eventJson) {
    // Parse Event Grid event
    // Event type: Microsoft.Communication.SMSDeliveryReportReceived
    
    // Event data contains:
    // - messageId: correlates to SmsSendResult.getMessageId()
    // - from: sender number
    // - to: recipient number
    // - deliveryStatus: "Delivered", "Failed", etc.
    // - deliveryStatusDetails: detailed status
    // - receivedTimestamp: when status was received
    // - tag: your custom tag from SmsSendOptions
}
```

## SmsSendResult Properties

| Property | Type | Description |
|----------|------|-------------|
| `getMessageId()` | String | Unique message identifier |
| `getTo()` | String | Recipient phone number |
| `isSuccessful()` | boolean | Whether send succeeded |
| `getHttpStatusCode()` | int | HTTP status for this recipient |
| `getErrorMessage()` | String | Error details if failed |
| `getRepeatabilityResult()` | RepeatabilityResult | Idempotency result |

## Environment Variables

```bash
AZURE_COMMUNICATION_ENDPOINT=https://<resource>.communication.azure.com  # Required for all auth methods
AZURE_COMMUNICATION_CONNECTION_STRING=endpoint=https://...;accesskey=...  # Alternative to Entra ID auth
SMS_FROM_NUMBER=+14255550100  # Required for the sender phone number
AZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in production
```

## Best Practices

1. **Phone Number Format** - Use E.164 format: `+[country code][number]`
2. **Delivery Reports** - Enable for critical messages (OTP, alerts)
3. **Tagging** - Use tags to correlate messages with business context
4. **Error Handling** - Check `isSuccessful()` for each recipient individually
5. **Rate Limiting** - Implement retry with backoff for 429 responses
6. **Bulk Sending** - Use batch send for multiple recipients (more efficient)

## Trigger Phrases

- "send SMS Java", "text message Java"
- "SMS notification", "OTP SMS", "bulk SMS"
- "delivery report SMS", "Azure Communication Services SMS"

Todos los archivos

0 archivos

Instalar azure-communication-sms-java

Descarga y descomprime los archivos de las habilidades en tu directorio .claude/skills/.

Descargar ZIP

Clona el repositorio y copia los archivos de la habilidad a tu proyecto.

git clone https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-java/skills/azure-communication-sms-java # Copy SKILL.md to your .claude/skills/ directory

Copiar Copiar
Configuración rápida: Copia la carpeta de la habilidad en .claude/skills/ Claude detectará y utilizará automáticamente la habilidad
Repositorio microsoft/skills

Habilidades relacionadas

brightdata-cli
Tiempo actualizado 29 de junio de 2026
agentwallet
Tiempo actualizado 7 de julio de 2026
humanize
Tiempo actualizado 7 de julio de 2026
korean-stock-search
Tiempo actualizado 8 de julio de 2026
OR