

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Uso de Amazon SNS para la mensajería application-to-person
<a name="sns-user-notifications"></a>

La mensajería Amazon SNS application-to-person (A2P) le permite enviar notificaciones y alertas directamente a los dispositivos móviles de sus clientes a través de SMS (servicio de mensajes cortos). Con esta característica, puede enviar notificaciones push a aplicaciones móviles, mensajes de texto a números de teléfonos móviles y correos electrónicos de texto sin formato a direcciones de correo electrónico. Además, tiene la flexibilidad de distribuir los mensajes mediante temas para llegar a varios destinatarios o publicar los mensajes directamente en puntos de conexión móviles individuales para una comunicación personalizada.

En el siguiente tema se explica cómo utilizar Amazon SNS para las notificaciones de usuarios con suscriptores, tales como aplicaciones móviles, números de teléfono móvil y direcciones de correo electrónico.

![\[Información general sobre cómo Amazon SNS admite la mensajería application-to-person (A2P) al permitir a los editores enviar notificaciones directamente a los clientes. Muestra dos formas principales de distribuir los mensajes: la publicación directa en puntos de conexión individuales (como direcciones de correo electrónico, números de teléfono o aplicaciones móviles) y la publicación basada en temas, que envía mensajes a varios suscriptores a la vez. Los suscriptores, representados a la derecha, pueden recibir notificaciones mediante notificaciones push, mensajes de texto o correos electrónicos, lo que proporciona flexibilidad para distintos casos de uso.\]](http://docs.aws.amazon.com/es_es/sns/latest/dg/images/sns-a2p-overview.png)


# Mensajería de texto móvil con Amazon SNS
<a name="sns-mobile-phone-number-as-subscriber"></a>

**importante**  
Se ha actualizado la Guía para desarrolladores de SMS de Amazon SNS. Amazon SNS se ha integrado con [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html) para la entrega de mensajes SMS. Esta guía contiene la información más reciente sobre cómo crear, configurar y administrar los mensajes SMS de Amazon SNS.

La mensajería de texto móvil (SMS) de Amazon SNS se ha diseñado para facilitar la entrega de mensajes a diversas plataformas, como aplicaciones web, móviles y empresariales que admitan SMS. Los usuarios pueden enviar mensajes a uno o varios números de teléfono suscribiéndolos a un tema, lo que simplifica el proceso de distribución.

Los mensajes de Amazon SNS se entregan mediante AWS End User Messaging SMS, lo que garantiza una transmisión fiable de los mensajes. En Amazon SNS APIs, puede configurar varias propiedades, como los tipos de mensajes (promocionales o transaccionales), los [límites de gastos mensuales](sms_preferences.md#sms_preferences_console), [las listas de exclusión](sms_manage.md#sms_manage_optout) y la optimización de la entrega de [mensajes](sms_preferences.md#sms_preferences_console).

AWS End User Messaging SMS gestiona la transmisión de mensajes al número de teléfono de destino a través de su red global de suministro de SMS. Administra el enrutamiento, el estado de la entrega y cualquier requisito exigido por las normativas regionales. Para acceder a características adicionales de SMS, como los permisos detallados, los grupos de teléfonos, los conjuntos de configuraciones, el simulador de SMS y las normas nacionales, consulte la [Guía del usuario de AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/configurations.html).

![\[Una ilustración de cómo Amazon SNS se integra AWS End User Messaging SMS para entregar mensajes de texto móviles de forma fiable. Los mensajes pueden enviarse directamente a destinatarios individuales o distribuirse a grupos a través de los temas de Amazon SNS. AWS End User Messaging SMS gestiona el enrutamiento, la entrega y el cumplimiento de los mensajes en toda su red global, lo que garantiza la escalabilidad y la confiabilidad. Esta configuración también permite configurar las preferencias de los mensajes, administrar los límites de gasto y rastrear el estado de la entrega para optimizar la AWS SMS mensajería.\]](http://docs.aws.amazon.com/es_es/sns/latest/dg/images/sns-sms-end-user-messaging.png)


Las siguientes características clave le ayudan a enviar mensajes SMS de Amazon SNS de forma escalable y extensible:

**[Personalice las preferencias de los mensajes](sms_preferences.md)**  
Personalice las entregas de SMS para Cuenta de AWS usted configurando las preferencias de SMS en función de su presupuesto y caso de uso. Por ejemplo, puede elegir si los mensajes deben optimizarse en función de la rentabilidad o la fiabilidad de la entrega.

**[Establezca cuotas de gasto](channels-sms-awssupport-spend-threshold.md)**  
Adapte sus entregas de SMS especificando cuotas de gasto de las entregas de mensajes individuales y las cuotas de gasto mensuales de su Cuenta de AWS. Cuando lo exijan las leyes y reglamentos locales (como los de EE. UU. y Canadá), los destinatarios de los SMS [pueden](sms_manage.md#sms_manage_optout) optar por no recibirlos, lo que significa que deciden dejar de Cuenta de AWS recibir sus mensajes SMS. Cuando un destinatario se da de baja en la recepción de mensajes, usted puede, dentro de unos límites, volver a dar de alta el número de teléfono para reanudar el envío de mensajes.

**[Envíe mensajes SMS a todo el mundo](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html)**  
Amazon SNS admite la mensajería SMS en varias regiones, lo que le permite enviar mensajes a más de 240 países y regiones.

## ¿Cómo entrega Amazon SNS mis mensajes SMS?
<a name="sns-sms-pinpoint-integration"></a>

Cuando solicita a Amazon SNS que envíe SMS en su nombre, los mensajes se envían mediante AWS End User Messaging SMS. La integración entre Amazon SNS y Amazon AWS End User Messaging SMS ofrece las siguientes ventajas:

**[Políticas de IAM](sns-mobile-phone-number-getting-started.md#sns-mobile-phone-number-prerequisites)**  
Puede aprovechar las políticas de IAM y de recursos para controlar y distribuir el acceso a sus recursos de SMS entre otros AWS servicios y regiones.

**Configuraciones de [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/configurations.html)**  
Se utilizan todas las configuraciones relacionadas con el identificador de origen (creación, actualización de la configuración, aprovisionamiento de un nuevo origen IDs, cambio de plantillas de registro). AWS End User Messaging SMS

**[Facturación de AWS End User Messaging SMS](https://aws.amazon.com/sns/sms-pricing/)**  
Sin embargo, toda la facturación por SMS está lista. AWS End User Messaging SMS Puede consolidar sus AWS gastos en sus cargas de trabajo de SMS y, al mismo tiempo, adquirir y gestionar sus recursos de SMS en una ubicación central.

# Introducción a los SMS con Amazon SNS
<a name="sns-mobile-phone-number-getting-started"></a>

**importante**  
Se ha actualizado la Guía para desarrolladores de SMS de Amazon SNS. Amazon SNS se ha integrado con [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html) para la entrega de mensajes SMS. Esta guía contiene la información más reciente sobre cómo crear, configurar y administrar los mensajes SMS de Amazon SNS.

Este tema lo guía a través de la administración de su entorno limitado de SMS y la configuración de IAM y políticas basadas en recursos para conceder a Amazon SNS los permisos necesarios para acceder y utilizar el. AWS End User Messaging SMS APIs 

## Requisitos previos
<a name="sns-mobile-phone-number-prerequisites"></a>

Amazon SNS recomienda que actualice su política de IAM para incluir las siguientes acciones a fin de garantizar un control y una visibilidad exhaustivos de sus recursos de Amazon SNS:
+ [`AmazonSNSFullAccess`](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonSNSFullAccess)
+ [`AmazonSNSReadOnly`](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonSNSReadOnlyAccess) 

# Uso del entorno de pruebas de SMS de Amazon SNS
<a name="sns-sms-sandbox"></a>

Las cuentas de SMS de Amazon SNS recién creadas se colocan automáticamente en el entorno de pruebas de SMS para garantizar la seguridad tanto de los clientes como de los destinatarios de AWS, lo que mitiga el riesgo de fraude y abuso. Este entorno sirve como un espacio seguro para fines de prueba y desarrollo. Mientras trabaje dentro del entorno de pruebas de SMS, tendrá acceso a todas las características de Amazon SNS, pero se aplicarán determinadas limitaciones:
+ Solo puede enviar mensajes SMS a números de teléfono de destino verificados.
+ Puede tener hasta 10 números de teléfono de destino verificados.
+ Solo puede eliminar números de teléfono de destino después de que hayan transcurrido 24 horas o más desde la verificación o el último intento de verificación.

Cuando su cuenta se mueve fuera del entorno de pruebas, estas restricciones se eliminan y puede enviar mensajes SMS a cualquier destinatario.

## Primeros pasos
<a name="sns-mobile-phone-number-getting-started-steps"></a>

Las nuevas cuentas de SMS de Amazon SNS se colocan en un entorno de pruebas de SMS. Siga estos pasos para crear y administrar números de teléfono en su entorno de pruebas, crear números de origen e ID de remitente y registrar su empresa.

1. Añada un **número de teléfono de destino** al entorno de pruebas de SMS. Para obtener más información sobre cómo añadir, administrar y mover números de teléfono fuera del entorno de pruebas de SMS de Amazon SNS, consulte [Cómo añadir y verificar números de teléfono en el entorno de pruebas de SMS de Amazon SNS](sns-sms-sandbox-verifying-phone-numbers.md).

1. Cree una **identidad de origen** que los destinatarios vean en los dispositivos cuando les envíe un mensaje SMS. Para obtener más información sobre las identidades de origen, incluidos los distintos tipos que puede utilizar, consulte la documentación de [Identidades de origen de los mensajes SMS en Amazon SNS](channels-sms-originating-identities.md).

1. **Registre** la empresa. Algunos países requieren que registre la identidad de su empresa para poder comprar números de teléfono o identificadores de remitentes y revisar los mensajes que envía a los destinatarios de sus países. Para obtener más información sobre los países que requieren registro, consulte [Regiones y países admitidos con AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) en la *Guía del usuario de AWS End User Messaging SMS*.

1. **Envíe** sus mensajes a un tema o a un teléfono móvil. Para obtener más información, consulte [Envío de mensajes SMS con Amazon SNS](sms_sending-overview.md).

# Cómo añadir y verificar números de teléfono en el entorno de pruebas de SMS de Amazon SNS
<a name="sns-sms-sandbox-verifying-phone-numbers"></a>

Para poder empezar a enviar mensajes SMS desde tu Cuenta de AWS entorno limitado de [SMS,](sns-sms-sandbox.md) debes completar los siguientes pasos de configuración. Esto garantiza que su cuenta esté lista para recibir mensajes SMS y que los números de teléfono de destino estén debidamente verificados.

1. Cree un **[ID de origen](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-number-types.html)**. Al igual que con las cuentas fuera del entorno de pruebas de SMS, se necesita un ID de origen para poder enviar mensajes SMS a destinatarios en algunos países o regiones.

1. Añada los **números de teléfono de destino** a los que quiera enviar mensajes en el entorno de pruebas de SMS.

1. Compruebe los **números de teléfono** para asegurarse de que los números de teléfono de destino son válidos para su uso en los mensajes SMS.

**Añadido y verificación de números de teléfono de destino**

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el menú de la consola, elija una [región que admita la mensajería SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. En el panel de navegación, elija **Text messaging (SMS) (Mensajería de texto (SMS))**.

1. En la sección **Números de teléfono de destino del entorno de pruebas**, elija **Agregar número de teléfono**.

1. En **Detalles del destino**, proporcione la siguiente información y, a continuación, seleccione **Agregar número de teléfono**:
   + **Código de país** y **número de teléfono** del destino.
   + El **idioma** en el que quiera que se envíe el mensaje de verificación.

1. Tras agregar el número de teléfono, Amazon SNS enviará una OTP al número de teléfono de destino proporcionado. Se requiere esta OTP para la verificación.

1. Recibirá la OTP como un mensaje SMS estándar en el **número de teléfono de destino** que proporcionó.
   + Si no recibe la OTP en 15 minutos, seleccione **Reenviar el código de verificación** en la consola de Amazon SNS.
   + Puede volver a enviar la OTP hasta cinco veces en un periodo de 24 horas.

1. Cuando reciba la OTP, introdúzcala en el cuadro **Código de verificación** y seleccione **Verificar número de teléfono**.

1. Compruebe el **estado de la verificación**.
   + Después de verificar correctamente el número de teléfono, el número de teléfono y su estado de verificación aparecerán en la sección **Números de teléfono de destino del entorno de pruebas**.
   + Si el estado es **Pendiente**, la verificación no se realizó de forma correcta. Esto puede suceder si, por ejemplo, no ha introducido el código de país correctamente.
   + Solo puede eliminar números de teléfono pendientes o verificados después de que hayan transcurrido 24 horas o más desde el último intento de verificación.

1. Si desea usar el mismo número de teléfono de destino en otras regiones, **repita** los pasos anteriores para cada región en la que pretenda usarlo.

## Solución de problemas de no recepción de un texto OTP
<a name="sns-sms-sandbox-troubleshooting-phone-numbers"></a>

Solucione los problemas comunes que pueden impedir que un número de teléfono reciba textos OTP.
+ **Límite de gasto de SMS de Amazon SNS:** si su Cuenta de AWS ha superado el límite de gasto para enviar mensajes SMS, es posible que no se entreguen más mensajes, incluidos los textos OTP, hasta que se aumente el límite o se resuelva el problema de facturación.
+ **Número de teléfono no dado de alta para recibir notificaciones por SMS:** en algunos países o regiones, los destinatarios deben darse de alta para recibir mensajes SMS de códigos cortos, que suelen utilizarse en los textos OTP. Si el número de teléfono del destinatario no se ha dado de alta, no recibirá el texto OTP.
+ **Restricciones o filtros del operador:** algunos operadores de telefonía móvil pueden tener restricciones o mecanismos de filtrado que impidan la entrega de determinados tipos de mensajes SMS, incluidos los textos OTP. Esto podría deberse a las políticas de seguridad o a las medidas antispam implementadas por el operador.
+ **Número de teléfono no válido o incorrecto:** si el número de teléfono proporcionado por el destinatario es incorrecto o no es válido, no se entregará el texto OTP.
+ **Problemas de red:** los problemas o interrupciones temporales de la red podrían impedir la entrega de mensajes SMS, incluidos los textos OTP, al teléfono del destinatario.
+ **Retraso en la entrega:** en algunos casos, los mensajes SMS pueden sufrir retrasos en la entrega debido a la congestión de la red u otros factores. Es posible que el texto OTP se acabe entregando, pero podría retrasarse más allá del plazo previsto.
+ **Suspensión o cancelación de la cuenta:** si hay problemas con su cuenta Cuenta de AWS, como la falta de pago o el incumplimiento de las AWS condiciones del servicio, las capacidades de mensajería de Amazon SNS, incluidos los mensajes de texto OTP, pueden suspenderse o cancelarse.

# Eliminación de números de teléfono del entorno de pruebas de SMS de Amazon SNS
<a name="sns-sms-sandbox-deleting-phone-numbers"></a>

Puede eliminar números de teléfono de destino pendientes o verificados desde el [entorno de pruebas de SMS](sns-sms-sandbox.md).

**importante**  
Solo puede eliminar un número de teléfono 24 horas después de [verificarlo](sns-sms-sandbox-verifying-phone-numbers.md) o 24 horas después de su último intento de verificación.

**Para eliminar números de teléfono de destino del entorno de pruebas de SMS, siga estos pasos:**

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el menú de la consola, elija una [región que admita la mensajería SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html) en la que añadió un número de teléfono de destino.

1. En el panel de navegación, elija **Mensajería de texto (SMS)**.

1. En la página **Mensajería de texto móvil (SMS)**, vaya a la sección **Números de teléfono de destino del entorno de pruebas**.

1. Elija el número de teléfono específico que desea eliminar y, a continuación, seleccione **Eliminar número de teléfono**.

1. Para confirmar que desea eliminar el número de teléfono, ingrese **delete me** y, a continuación, elija **Eliminar**.

   Asegúrese de que hayan transcurrido 24 horas o más desde que verificó o intentó verificar el número de teléfono de destino antes de continuar con la eliminación.

1. Repita estos pasos en cada región en la que haya agregado el número de teléfono de destino y que ya no tenga previsto utilizar.

# Cómo salir del entorno de pruebas de SMS de Amazon SNS
<a name="sns-sms-sandbox-moving-to-production"></a>

Para Cuenta de AWS salir del entorno limitado de los [SMS, primero](sns-sms-sandbox.md) tendrá que añadir, verificar y probar los números de teléfono de destino. Después de hacer esto, crea un caso con AWS Support.

**Para solicitar que tu AWS cuenta se retire del entorno limitado de SMS**

1. **Verificar números de teléfono**

   1. Mientras Cuenta de AWS se encuentre en el entorno limitado de SMS, abra la consola de [Amazon SNS](https://console.aws.amazon.com/sns/home).

   1. En el panel de navegación, bajo Móvil, elija **Mensajería de texto (SMS)**.

   1. En la sección de números de teléfono de destino del entorno de pruebas, [añada y verifique](sns-sms-sandbox-verifying-phone-numbers.md) uno o varios números de teléfono de destino. Esta verificación garantiza que pueda enviar y recibir mensajes correctamente.

1. **Probar la publicación de SMS**

   1. Confirme que puede enviar y recibir mensajes en al menos un número de teléfono de destino verificado. Para obtener instrucciones más detalladas sobre cómo publicar mensajes SMS, consulte [Publicación de mensajes SMS en un teléfono móvil mediante Amazon SNS](sms_sending-overview.md#sms_publish-to-phone).

1. **Iniciar la edición del entorno de pruebas**

   1. En la página **Mensajería de texto móvil (SMS)** de la consola de Amazon SNS, en **Información de la cuenta**, elija **Salir de entorno de pruebas de SMS**. Esta acción le redirige al [Centro de soporte de Amazon](https://support.console.aws.amazon.com/support/home?#/case/create?issueType=service-limit-increase) y crea automáticamente un caso de soporte con la opción **Aumento de la cuota de servicio** seleccionada.

1. **Rellenar el formulario**

   1. En el formulario de soporte, bajo **Aumento de la cuota de servicio**, haga lo siguiente:

     1. Elija **Mensajería de texto SNS** como servicio.

     1. Proporcione la **URL del sitio web** o el **nombre de la aplicación** desde la que desea enviar los mensajes SMS.

     1. Elija el tipo de mensajes que quiere enviar: **Contraseña de un solo uso**, **Promocional** o **Transaccional**.

     1. Elija la **Región de AWS** desde donde va a enviar los mensajes SMS.

     1. Especifique los **países** o las **regiones** donde piensa enviar mensajes SMS.

     1. Describa cómo sus clientes**se dan de alta para recibir mensajes**.

     1. Incluya cualquier **plantilla de mensaje** que desee utilizar.

1. **Especificar la cuota y la región**

   1. En **Requests** (Solicitudes), realice el siguiente procedimiento:

     1. Elija el **Región de AWS**lugar al que quiere mover su. Cuenta de AWS

     1. Elija **Límites generales** en **Tipo de recurso**.

     1. En **Cuota**, elija **Salir del entorno de pruebas de SMS**.

     1. (Opcional) Para solicitar aumentos adicionales u otros ajustes, elija **Agregar otra solicitud** y especifique los detalles necesarios.

     1. En **Nuevo valor de cuota**, especifique el **límite** en USD que va a solicitar.

1. **Detalles adicionales**

   1. En **Descripción del caso**, proporcione cualquier detalle adicional relevante para su solicitud.

   1. En **Opciones de contacto**, elija su **idioma de contacto preferido**.

1. **Enviar la solicitud**

   1. Elija **Enviar** para enviar la solicitud a Soporte.

El Soporte equipo proporcionará una respuesta inicial a su solicitud en un plazo de 24 horas.

Para evitar que nuestros sistemas se utilicen para enviar contenido no solicitado o malicioso, consideramos cada solicitud con detenimiento. Si podemos, accederemos a su solicitud dentro de ese plazo de 24 horas. Sin embargo, si necesitamos que nos brinde más información, puede que la solicitud tarde más tiempo en concederse.

Si su caso de uso no se ajusta a nuestras políticas, es posible que no podamos atender su solicitud.

# Identidades de origen de los mensajes SMS en Amazon SNS
<a name="channels-sms-originating-identities"></a>

**importante**  
Se ha actualizado la Guía para desarrolladores de SMS de Amazon SNS. Amazon SNS se ha integrado con [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html) para la entrega de mensajes SMS. Esta guía contiene la información más reciente sobre cómo crear, configurar y administrar los mensajes SMS de Amazon SNS.

Las identidades de origen de los mensajes SMS son identificadores que se utilizan para representar al remitente de un mensaje SMS. Puede identificarse ante sus destinatarios mediante los siguientes tipos de identidades de origen:

**Números de origen**  
Una cadena numérica que identifica el número de teléfono del remitente de un mensaje SMS. Existen varios tipos de números de origen, como los códigos largos (números de teléfono estándar que suelen tener diez o más dígitos), los códigos largos de diez dígitos (10DLC), los números gratuitos (TFN) y los códigos cortos (números de teléfono que contienen entre cuatro y siete dígitos).  
La compatibilidad con los números de origen no está disponible en países donde las leyes locales exigen el uso del remitente IDs en lugar de los números de origen. Cuando envía un mensaje SMS con un número de origen, el dispositivo del destinatario muestra el número de origen como el número de teléfono del remitente. Puede especificar diferentes números de origen en función del caso de uso.  
Para obtener más información, consulte [Números de teléfono](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) en la *Guía del usuario de AWS End User Messaging SMS *.  
Para ver una lista de todos los números de origen existentes en su AWS cuenta, en el panel de navegación de la consola de [Amazon SNS](https://console.aws.amazon.com/sns/home), **seleccione** Números de origen.

**Remitente IDs**  
Un nombre alfabético que identifica al remitente de un mensaje SMS. Cuando se envía un mensaje SMS mediante un ID de remitente y el destinatario se encuentra en una zona donde se admite la autenticación mediante ID de remitente, este último aparece en el dispositivo del destinatario en lugar del número de teléfono. El ID de remitente proporciona al destinatario del SMS más información sobre el remitente que un número de teléfono, un código largo o un código corto.  
 IDs Los remitentes son compatibles en varios países y regiones de todo el mundo. En algunos lugares, si una empresa envía mensajes SMS a clientes individuales, es imprescindible usar un ID de remitente previamente registrado ante un organismo de control o un grupo del sector. Para obtener una lista completa de los países y regiones que admiten o requieren el envío de mensajes SMS IDs, consulte [los países y regiones compatibles con la mensajería SMS AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) en la *Guía del AWS End User Messaging SMS usuario*.  
El uso del remitente no conlleva ningún cargo adicional IDs. Sin embargo, la asistencia y los requisitos de autenticación del ID de remitente varían según el país. Varios mercados importantes (incluidos Canadá, China y Estados Unidos) no admiten el uso IDs del remitente. En algunas zonas, se exige que las empresas que envían mensajes SMS a clientes individuales utilicen un ID de remitente previamente registrado en un organismo de control o un grupo del sector.  
Para obtener información adicional, consulta la sección [Remitente IDs](https://docs.aws.amazon.com/sms-voice/latest/userguide/sender-id.html) en la *Guía AWS End User Messaging SMS del usuario*.

# Configuración de mensajes SMS en Amazon SNS
<a name="channels-sms-configurations"></a>

**importante**  
Se ha actualizado la Guía para desarrolladores de SMS de Amazon SNS. Amazon SNS se ha integrado con [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html) para la entrega de mensajes SMS. Esta guía contiene la información más reciente sobre cómo crear, configurar y administrar los mensajes SMS de Amazon SNS.

Puede utilizar las configuraciones de SMS en Amazon SNS para configurar las preferencias de SMS de forma que se adapten a sus necesidades, como ajustar las cuotas de gasto y configurar el registro del estado de entrega. En este tema también se proporciona información sobre cómo publicar mensajes SMS en los temas mediante la consola de Amazon SNS y AWS SDK, gestionar las cuotas de forma eficiente y obtener estadísticas detalladas sobre la actividad de mensajes SMS.

# Envío de mensajes SMS con Amazon SNS
<a name="sms_sending-overview"></a>

En esta sección se describe cómo enviar mensajes SMS con Amazon SNS, incluida la publicación en un tema, la suscripción de números de teléfono a los temas, la configuración de los atributos de los mensajes y la publicación directa en teléfonos móviles.

## Publicación de mensajes SMS en un tema de Amazon SNS
<a name="sms_publish-to-topic"></a>

Puede publicar un único mensaje SMS en muchos números de teléfono a la vez mediante la suscripción de dichos números de teléfono a un tema de Amazon SNS. Un tema de SNS es un canal de comunicación al que puede agregar suscriptores y publicar mensajes para todos ellos. El suscriptor recibe todos los mensajes publicados sobre el tema hasta que canceles la suscripción o hasta que el suscriptor opte por no recibir mensajes SMS de tu AWS cuenta.

### Enviar un mensaje a un tema mediante la consola AWS
<a name="sms_publish-to-topic_console"></a>

**Creación de un tema**

Ejecute los pasos siguientes si todavía no tiene un tema al que quiera enviar mensajes SMS.

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el menú de la consola, elija una [región que admita la mensajería SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. En el panel de navegación, elija **Temas**.

1. En la página **Temas**, elija **Crear tema**.

1. En la página **Crear tema**, en **Detalles**, haga lo siguiente:

   1. En **Tipo**, seleccione **Estándar**.

   1. En **Nombre**, ingrese un nombre para el tema.

   1. (Opcional) En **Nombre de visualización**, ingrese un prefijo personalizado para los mensajes SMS. Cuando envía un mensaje al tema, Amazon SNS anexa delante el nombre de visualización seguido de un corchete angular de cierre (>) y un espacio. Los nombres de visualización no distinguen entre mayúsculas y minúsculas, y Amazon SNS convierte los nombres de visualización en caracteres en mayúsculas. Por ejemplo, si el nombre de visualización de un tema es `MyTopic` y el mensaje es `Hello World!`, el mensaje aparecerá de la siguiente manera:

      ```
      MYTOPIC> Hello World!
      ```

1. Seleccione **Crear tema**. El nombre del tema y el nombre de recurso de Amazon (ARN) aparecen en la página **Temas**.

**Para crear una suscripción de SMS, siga estos pasos:**

Puede utilizar las suscripciones para enviar un mensaje SMS a varios destinatarios al publicar el mensaje una sola vez en su tema.
**nota**  
Cuando empiece a utilizar Amazon SNS para enviar mensajes SMS, su AWS cuenta estará en el entorno limitado de *SMS*. El entorno de pruebas de SMS proporciona un entorno seguro para que pruebe las características de Amazon SNS sin arriesgar su reputación como remitente de SMS. Mientras su cuenta se encuentre en el entorno de pruebas de SMS, puede utilizar todas las características de Amazon SNS, pero solo puede enviar mensajes SMS a números de teléfono de destino verificados. Para obtener más información, consulte [Uso del entorno de pruebas de SMS de Amazon SNS](sns-sms-sandbox.md).

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el panel de navegación, seleccione **Suscripciones**.

1. En la página **Subscriptions (Suscripciones)**, elija **Create subscription (Crear suscripción)**.

1. En la página **Crear suscripción**, en **Detalles**, haga lo siguiente:

   1. En **ARN de tema**, ingrese o elija el nombre de recurso de Amazon (ARN) del tema al que desea enviar mensajes SMS.

   1. En **Protocolo**, elija **SMS**.

   1. En **Punto de enlace**, ingrese el número de teléfono al que desea suscribirse al tema.

1. Seleccione **Crear subscripción**. La información de la suscripción aparece en la página **Suscripciones**.

   Para agregar más números de teléfono, repita estos pasos. También puede agregar otros tipos de suscripciones, como el correo electrónico.

**Cómo enviar un mensaje**

Cuando publica un mensaje en un tema, Amazon SNS intenta entregar dicho mensaje a todos los números de teléfono que están suscritos al tema.

1. En [Consola de Amazon SNS](https://console.aws.amazon.com/sns/home), en la página **Temas**, elija el nombre del tema al que desea enviar mensajes SMS.

1. En la página de detalles del tema, seleccione **Publish message (Publicar mensaje)**.

1. En la página **Publicar mensaje en el tema**, en **Detalles del mensaje**, haga lo siguiente:

   1. En **Asunto**, deje el campo en blanco a menos que el tema contenga suscripciones de correo electrónico y quiera publicar tanto en las suscripciones de correo electrónico como en las de SMS. Amazon SNS utiliza el **asunto** que ingresa como línea de asunto del correo electrónico.

   1. (Opcional) En **Período de vida (TLL)**, ingrese un número de segundos que Amazon SNS tiene para enviar su mensaje SMS a los suscriptores de terminales de aplicaciones móviles.

1. En **Cuerpo del mensaje**, haga lo siguiente:

   1. En **Estructura del mensaje**, elija **Carga idéntica para todos los protocolos de entrega** para enviar el mismo mensaje a todos los tipos de protocolo suscritos al tema. O bien, elija **Carga personalizada para cada protocolo de entrega** para personalizar el mensaje para suscriptores de diferentes tipos de protocolo. Por ejemplo, puede escribir un mensaje predeterminado para los suscriptores de números de teléfono y un mensaje personalizado para los suscriptores de correo electrónico.

   1. En **Cuerpo del mensaje para enviar al punto de enlace**, ingrese su mensaje o sus mensajes personalizados por protocolo de entrega.

      Si su tema tiene un nombre de visualización, Amazon SNS lo agrega al mensaje, lo que aumenta la longitud del mensaje. La longitud del nombre de visualización es el número de caracteres del nombre más dos caracteres para el corchete angular de cierre (>) y el espacio que Amazon SNS agrega.

      Para obtener información acerca de las cuotas de tamaño de los mensajes SMS, consulte [Publicación de mensajes SMS en un teléfono móvil mediante Amazon SNS](#sms_publish-to-phone).

1. (Opcional) En el caso de **los atributos** de los mensajes, añada metadatos del mensaje, como marcas de tiempo, firmas y. IDs

1. Elija **Publish message (Publicar mensaje)**. Amazon SNS envía el mensaje SMS y muestra un mensaje de confirmación.

### Enviar un mensaje a un tema mediante el AWS SDKs
<a name="sms_publish-to-topic_sdk"></a>

Para usar un AWS SDK, debe configurarlo con sus credenciales. Para obtener más información, consulte [Los archivos de configuración y credenciales compartidos](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) en la *Guía de referencia de herramientas AWS SDKs y herramientas*.

En el siguiente ejemplo de código, se muestra cómo:
+ Crear un tema de Amazon SNS
+ Suscribir números de teléfono al tema
+ Publique mensajes SMS en el tema para que todos los números de teléfono suscritos reciban el mensaje a la vez.

------
#### [ Java ]

**SDK para Java 2.x**  
 Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 
Cree un tema y devuelva su ARN.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.CreateTopicRequest;
import software.amazon.awssdk.services.sns.model.CreateTopicResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class CreateTopic {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <topicName>

                Where:
                   topicName - The name of the topic to create (for example, mytopic).

                """;

        if (args.length != 1) {
            System.out.println(usage);
            System.exit(1);
        }

        String topicName = args[0];
        System.out.println("Creating a topic with name: " + topicName);
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        String arnVal = createSNSTopic(snsClient, topicName);
        System.out.println("The topic ARN is" + arnVal);
        snsClient.close();
    }

    public static String createSNSTopic(SnsClient snsClient, String topicName) {
        CreateTopicResponse result;
        try {
            CreateTopicRequest request = CreateTopicRequest.builder()
                    .name(topicName)
                    .build();

            result = snsClient.createTopic(request);
            return result.topicArn();

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        return "";
    }
}
```
Suscriba un punto de enlace a un tema.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.SubscribeRequest;
import software.amazon.awssdk.services.sns.model.SubscribeResponse;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class SubscribeTextSMS {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <topicArn> <phoneNumber>

                Where:
                   topicArn - The ARN of the topic to subscribe.
                   phoneNumber - A mobile phone number that receives notifications (for example, +1XXX5550100).
                """;

        if (args.length < 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String topicArn = args[0];
        String phoneNumber = args[1];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        subTextSNS(snsClient, topicArn, phoneNumber);
        snsClient.close();
    }

    public static void subTextSNS(SnsClient snsClient, String topicArn, String phoneNumber) {
        try {
            SubscribeRequest request = SubscribeRequest.builder()
                    .protocol("sms")
                    .endpoint(phoneNumber)
                    .returnSubscriptionArn(true)
                    .topicArn(topicArn)
                    .build();

            SubscribeResponse result = snsClient.subscribe(request);
            System.out.println("Subscription ARN: " + result.subscriptionArn() + "\n\n Status is "
                    + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
Establezca atributos en el mensaje, como el ID del remitente, el precio máximo y su tipo. Los atributos de mensaje son opcionales.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SetSmsAttributesRequest;
import software.amazon.awssdk.services.sns.model.SetSmsAttributesResponse;
import software.amazon.awssdk.services.sns.model.SnsException;
import java.util.HashMap;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class SetSMSAttributes {
    public static void main(String[] args) {
        HashMap<String, String> attributes = new HashMap<>(1);
        attributes.put("DefaultSMSType", "Transactional");
        attributes.put("UsageReportS3Bucket", "janbucket");

        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();
        setSNSAttributes(snsClient, attributes);
        snsClient.close();
    }

    public static void setSNSAttributes(SnsClient snsClient, HashMap<String, String> attributes) {
        try {
            SetSmsAttributesRequest request = SetSmsAttributesRequest.builder()
                    .attributes(attributes)
                    .build();

            SetSmsAttributesResponse result = snsClient.setSMSAttributes(request);
            System.out.println("Set default Attributes to " + attributes + ". Status was "
                    + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
Publique un mensaje en un tema. El mensaje se envía a cada suscriptor.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.PublishRequest;
import software.amazon.awssdk.services.sns.model.PublishResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class PublishTextSMS {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <message> <phoneNumber>

                Where:
                   message - The message text to send.
                   phoneNumber - The mobile phone number to which a message is sent (for example, +1XXX5550100).\s
                """;

        if (args.length != 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String message = args[0];
        String phoneNumber = args[1];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();
        pubTextSMS(snsClient, message, phoneNumber);
        snsClient.close();
    }

    public static void pubTextSMS(SnsClient snsClient, String message, String phoneNumber) {
        try {
            PublishRequest request = PublishRequest.builder()
                    .message(message)
                    .phoneNumber(phoneNumber)
                    .build();

            PublishResponse result = snsClient.publish(request);
            System.out
                    .println(result.messageId() + " Message sent. Status was " + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```

------

## Publicación de mensajes SMS en un teléfono móvil mediante Amazon SNS
<a name="sms_publish-to-phone"></a>

Puede utilizar Amazon SNS para enviar mensajes SMS de forma directa a un teléfono móvil sin suscribir el número de teléfono a un tema de Amazon SNS.

**nota**  
Suscribir números de teléfono a un tema es útil si quiere enviar un mensaje a varios números de teléfono a la vez. Para obtener instrucciones sobre cómo publicar un mensaje SMS en un tema, consulte [Publicación de mensajes SMS en un tema de Amazon SNS](#sms_publish-to-topic).

Cuando se envía un mensaje, se puede controlar si el mensaje se optimiza en función del costo o de la fiabilidad de la entrega. También puede especificar un [ID de remitente o número de origen](channels-sms-originating-identities.md). Si envía el mensaje mediante programación mediante la API de Amazon SNS o AWS SDKs la, puede especificar un precio máximo para la entrega del mensaje.

Cada mensaje SMS puede contener hasta 140 bytes y la cuota de caracteres depende del esquema de codificación. Por ejemplo, un mensaje SMS puede contener:
+ 160 caracteres GSM
+ 140 caracteres ASCII
+ 70 caracteres UCS-2

Si publica un mensaje que exceda la cuota de tamaño, Amazon SNS lo envía como varios mensajes, cada uno de los cuales respetará la cuota. Los mensajes no se dividen en mitad de una palabra, sino en el espacio entre palabras. La cuota de tamaño total de una acción de publicación SMS es 1600 bytes.

Al enviar un mensaje SMS, especifique el número de teléfono mediante el formato E.164, una estructura de numeración de teléfono estándar utilizada para las telecomunicaciones internacionales. Los números de teléfono que siguen este formato pueden tener un máximo de 15 dígitos junto con el prefijo de un signo más (\$1) y el código del país. Por ejemplo, un número de teléfono de EE. UU. en formato E.164 aparece como \$11. XXX5550100

### Envío de un mensaje (consola)
<a name="sms_publish_console"></a>

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el menú de la consola, elija una [región que admita la mensajería SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. En el panel de navegación, elija **Text messaging (SMS) (Mensajería de texto (SMS))**.

1. En la página **Mensajería de texto móvil (SMS)**, elija **Publicar mensaje de texto**.

1. En la página **Publicar mensaje SMS**, para el **tipo de mensaje.**, elija una de las siguientes opciones:
   + **Promotional**: mensajes que no son de importancia, como mensajes de marketing.
   + **Transactional**: mensajes de importancia que admiten transacciones del cliente, como claves de acceso de un solo uso para la autenticación multifactor.
**nota**  
Esta opción de nivel de mensaje anula el tipo de mensaje predeterminado de nivel de cuenta. Puede establecer un tipo de mensaje predeterminado a nivel de cuenta desde la sección **Preferencias de mensajes de texto** de la página **Mensajería de texto móvil (SMS)**.

   Para obtener información sobre los mensajes promocionales y transaccionales, consulte [Precios de SMS en todo el mundo](https://aws.amazon.com/sns/sms-pricing/).

1. En **Número de teléfono de destino**, ingrese el número de teléfono al que desea enviar el mensaje.

1. En **Mensaje**, ingrese el mensaje que va a enviar.

1. (Opcional) En **Identidades de origen**, especifique cómo identificarse ante sus destinatarios:
   + Para especificar un **ID de remitente**, ingrese un ID personalizado que contenga 3 a 11 caracteres alfanuméricos, incluida al menos una letra y sin espacios. El ID de remitente se muestra como el remitente del mensaje en el dispositivo receptor. Por ejemplo, puede utilizar la marca de su negocio para facilitar el reconocimiento del origen del mensaje.

     El soporte para el remitente IDs varía según el país y and/or la región. Por ejemplo, los mensajes que se entregan a números de teléfono de los EE. UU. no mostrarán el ID de remitente. Para conocer los países y regiones que admiten remitentes IDs, consulta la [sección Países y regiones compatibles con la mensajería SMS AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) en la *Guía del AWS End User Messaging SMS usuario*.

     Si no especifica un ID de remitente, se mostrará una de las siguientes características como identidad de origen:
     + En los países que admiten códigos largos, se muestra el código largo.
     + *En los países en los que solo IDs se admiten remitentes, se muestra NOTICE.*

     Este ID de remitente de nivel de mensaje anula el ID de remitente predeterminado, que se establece en la página **Text messaging preferences (Preferencias de la mensajería de texto)**.
   + Para especificar un **número de origen**, ingrese una cadena de 5 a 14 números que se mostrará como número de teléfono del remitente en el dispositivo del receptor. Esta cadena debe coincidir con un número de origen que esté configurado en su página Cuenta de AWS para el país de destino. El número de origen puede ser un número de 10 DLC, un número gratuito, un código person-to-person largo o un código corto. Para obtener más información, consulte [Identidades de origen de los mensajes SMS en Amazon SNS](channels-sms-originating-identities.md).

     Si no especifica un número de origen, Amazon SNS selecciona un número de origen que se utilizará para el mensaje de texto SMS, en función de la configuración de su Cuenta de AWS .

1. Si envía mensajes SMS a destinatarios en India, expanda **Atributos específicos del país** y especifique los atributos siguientes:
   + **ID de la identidad**: ID entidad o ID de entidad principal (PE) para enviar mensajes SMS a destinatarios en la India. Este ID es una cadena única de 1 a 50 caracteres que la Autoridad Reguladora de las Telecomunicaciones de la India (TRAI) proporciona para identificar la entidad que ha registrado en la TRAI.
   + **ID de plantilla**: ID de plantilla para enviar mensajes SMS a destinatarios en la India. Este ID es una cadena única de 1 a 50 caracteres que proporciona la TRAI para identificar la plantilla que registró en la TRAI. El ID de plantilla debe estar asociado al ID de remitente que especificó para el mensaje.

   Para obtener más información sobre cómo enviar mensajes SMS a destinatarios en la India, consulte [India sender ID registration process](https://docs.aws.amazon.com/sms-voice/latest/userguide/registrations-sms-senderid-india.html) en la *Guía del usuario de AWS End User Messaging SMS *.

1. Elija **Publish message (Publicar mensaje)**.

**sugerencia**  
Para enviar mensajes SMS desde un número de origen, también puede elegir **números de origen** en el panel de navegación de la consola de Amazon SNS. Elija un número de origen que incluya **SMS** en la columna **Capacidades** y, a continuación, elija **Publicar mensajes de texto**.

### Enviar un mensaje ()AWS SDKs
<a name="sms_publish_sdk"></a>

Para enviar un mensaje SMS mediante una de las AWS SDKs, utilice la operación de API de ese SDK que corresponda a la `Publish` solicitud de la API de Amazon SNS. Con esta solicitud, puede enviar un mensaje SMS directamente a un número de teléfono. También puede utilizar el parámetro `MessageAttributes` para establecer valores para los siguientes nombres de atributo:

**`AWS.SNS.SMS.SenderID`**  
Un ID personalizado que contiene entre 3 y 11 caracteres alfanuméricos o guiones (-), entre ellos al menos una letra, y ningún espacio. El ID de remitente aparece como el remitente del mensaje en el dispositivo receptor. Por ejemplo, puede utilizar la marca de su negocio para facilitar el reconocimiento del origen del mensaje.  
El soporte para el remitente IDs varía según el país o la región. Por ejemplo, los mensajes que se entregan a números de teléfono de los EE. UU. no muestra el ID de remitente. Para ver una lista de los países o regiones que admiten remitentes IDs, consulta [los países y regiones compatibles con la mensajería SMS AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) en la *Guía del AWS End User Messaging SMS usuario*.  
Si no especifica un ID de remitente, aparece un [código largo](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-request-long-code.html) como ID de remitente en los países o regiones admitidos. Para los países o regiones que requieren un ID de remitente alfabético, aparece *AVISO* como ID de remitente.  
Este atributo de nivel de mensaje anula el atributo de nivel de cuenta `DefaultSenderID`, que se puede establecer mediante la solicitud `SetSMSAttributes`.

**`AWS.MM.SMS.OriginationNumber`**  
Una cadena personalizada de 5 a 14 números, que puede incluir un signo más inicial opcional (`+`). Esta cadena de números aparece como el número de teléfono del remitente en el dispositivo receptor. La cadena debe coincidir con un número de origen que esté configurado en tu AWS cuenta para el país de destino. El número de origen puede ser un número de 10 DLC, un número gratuito, un código largo person-to-person (P2P) o un código corto. Para obtener más información, consulte [Phone numbers](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) en la *Guía del usuario de AWS End User Messaging SMS *.  
Si no especificas un número de origen, Amazon SNS elegirá un número de origen en AWS función de la configuración de tu cuenta.

**`AWS.SNS.SMS.MaxPrice`**  
El precio máximo en USD que estás dispuesto a gastar para enviar el mensaje SMS. Si Amazon SNS determina que el envío del mensaje supondría un costo superior a su precio máximo, no lo envía.  
Este atributo no tiene efecto si los costes de los month-to-date SMS ya han superado la cuota establecida para el atributo. `MonthlySpendLimit` Puede establecer el atributo `MonthlySpendLimit` con la solicitud `SetSMSAttributes`.  
Si envía el mensaje a un tema de Amazon SNS, el precio máximo se aplica a cada entrega de mensaje a cada número de teléfono que esté suscrito al tema.

**`AWS.SNS.SMS.SMSType`**  
El tipo de mensaje que envía:  
+ **`Promotional`** (predeterminado): mensajes que no son de importancia, como mensajes de marketing.
+ **`Transactional`**: mensajes de importancia que admiten transacciones del cliente, como claves de acceso de un solo uso para la autenticación multifactor.
Este atributo de nivel de mensaje anula el atributo de nivel de cuenta `DefaultSMSType`, que se puede establecer mediante la solicitud `SetSMSAttributes`.

**`AWS.MM.SMS.EntityId`**  
Este atributo solo es necesario para enviar mensajes SMS a destinatarios en la India.  
Se trata del ID entidad o ID de entidad principal (PE) para enviar mensajes SMS a destinatarios en la India. Este ID es una cadena única de 1 a 50 caracteres que la Autoridad Reguladora de las Telecomunicaciones de la India (TRAI) proporciona para identificar la entidad que ha registrado en la TRAI.

**`AWS.MM.SMS.TemplateId`**  
Este atributo solo es necesario para enviar mensajes SMS a destinatarios en la India.  
Se trata de la plantilla para enviar mensajes SMS a destinatarios en la India. Este ID es una cadena única de 1 a 50 caracteres que proporciona la TRAI para identificar la plantilla que registró en la TRAI. El ID de plantilla debe estar asociado al ID de remitente que especificó para el mensaje.

#### Envío de un mensaje
<a name="sms_publish_sdks"></a>

En los siguientes ejemplos de código, se muestra cómo publicar mensajes SMS mediante Amazon SNS.

------
#### [ .NET ]

**SDK para .NET**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/SNS#code-examples). 

```
namespace SNSMessageExample
{
    using System;
    using System.Threading.Tasks;
    using Amazon;
    using Amazon.SimpleNotificationService;
    using Amazon.SimpleNotificationService.Model;

    public class SNSMessage
    {
        private AmazonSimpleNotificationServiceClient snsClient;

        /// <summary>
        /// Initializes a new instance of the <see cref="SNSMessage"/> class.
        /// Constructs a new SNSMessage object initializing the Amazon Simple
        /// Notification Service (Amazon SNS) client using the supplied
        /// Region endpoint.
        /// </summary>
        /// <param name="regionEndpoint">The Amazon Region endpoint to use in
        /// sending test messages with this object.</param>
        public SNSMessage(RegionEndpoint regionEndpoint)
        {
            snsClient = new AmazonSimpleNotificationServiceClient(regionEndpoint);
        }

        /// <summary>
        /// Sends the SMS message passed in the text parameter to the phone number
        /// in phoneNum.
        /// </summary>
        /// <param name="phoneNum">The ten-digit phone number to which the text
        /// message will be sent.</param>
        /// <param name="text">The text of the message to send.</param>
        /// <returns>Async task.</returns>
        public async Task SendTextMessageAsync(string phoneNum, string text)
        {
            if (string.IsNullOrEmpty(phoneNum) || string.IsNullOrEmpty(text))
            {
                return;
            }

            // Now actually send the message.
            var request = new PublishRequest
            {
                Message = text,
                PhoneNumber = phoneNum,
            };

            try
            {
                var response = await snsClient.PublishAsync(request);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error sending message: {ex}");
            }
        }
    }
}
```
+  Para obtener detalles sobre la API, consulte [Publish](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/Publish) en la *Referencia de la API de AWS SDK para .NET *. 

------
#### [ C\$1\$1 ]

**SDK para C\$1\$1**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sns#code-examples). 

```
/**
 * Publish SMS: use Amazon Simple Notification Service (Amazon SNS) to send an SMS text message to a phone number.
 * Note: This requires additional AWS configuration prior to running example. 
 * 
 *  NOTE: When you start using Amazon SNS to send SMS messages, your AWS account is in the SMS sandbox and you can only
 *  use verified destination phone numbers. See https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html.
 *  NOTE: If destination is in the US, you also have an additional restriction that you have use a dedicated
 *  origination ID (phone number). You can request an origination number using Amazon Pinpoint for a fee.
 *  See https://aws.amazon.com/blogs/compute/provisioning-and-using-10dlc-origination-numbers-with-amazon-sns/ 
 *  for more information. 
 * 
 *  <phone_number_value> input parameter uses E.164 format. 
 *  For example, in United States, this input value should be of the form: +12223334444
 */

//! Send an SMS text message to a phone number.
/*!
  \param message: The message to publish.
  \param phoneNumber: The phone number of the recipient in E.164 format.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::publishSms(const Aws::String &message,
                             const Aws::String &phoneNumber,
                             const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::PublishRequest request;
    request.SetMessage(message);
    request.SetPhoneNumber(phoneNumber);

    const Aws::SNS::Model::PublishOutcome outcome = snsClient.Publish(request);

    if (outcome.IsSuccess()) {
        std::cout << "Message published successfully with message id, '"
                  << outcome.GetResult().GetMessageId() << "'."
                  << std::endl;
    }
    else {
        std::cerr << "Error while publishing message "
                  << outcome.GetError().GetMessage()
                  << std::endl;
    }

    return outcome.IsSuccess();
}
```
+  Para obtener detalles sobre la API, consulte [Publish](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/Publish) en la *Referencia de la API de AWS SDK para C\$1\$1 *. 

------
#### [ Java ]

**SDK para Java 2.x**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.PublishRequest;
import software.amazon.awssdk.services.sns.model.PublishResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class PublishTextSMS {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <message> <phoneNumber>

                Where:
                   message - The message text to send.
                   phoneNumber - The mobile phone number to which a message is sent (for example, +1XXX5550100).\s
                """;

        if (args.length != 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String message = args[0];
        String phoneNumber = args[1];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();
        pubTextSMS(snsClient, message, phoneNumber);
        snsClient.close();
    }

    public static void pubTextSMS(SnsClient snsClient, String message, String phoneNumber) {
        try {
            PublishRequest request = PublishRequest.builder()
                    .message(message)
                    .phoneNumber(phoneNumber)
                    .build();

            PublishResponse result = snsClient.publish(request);
            System.out
                    .println(result.messageId() + " Message sent. Status was " + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Para obtener detalles sobre la API, consulte [Publish](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Publish) en la *Referencia de la API de AWS SDK for Java 2.x *. 

------
#### [ Kotlin ]

**SDK para Kotlin**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin/services/sns#code-examples). 

```
suspend fun pubTextSMS(
    messageVal: String?,
    phoneNumberVal: String?,
) {
    val request =
        PublishRequest {
            message = messageVal
            phoneNumber = phoneNumberVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        val result = snsClient.publish(request)
        println("${result.messageId} message sent.")
    }
}
```
+  Para obtener detalles sobre la API, consulte [Publish](https://sdk.amazonaws.com/kotlin/api/latest/index.html) en la *Referencia de la API de AWS SDK para Kotlin*. 

------
#### [ PHP ]

**SDK para PHP**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Sends a text message (SMS message) directly to a phone number using Amazon SNS.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$message = 'This message is sent from a Amazon SNS code sample.';
$phone = '+1XXX5550100';

try {
    $result = $SnSclient->publish([
        'Message' => $message,
        'PhoneNumber' => $phone,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Para obtener más información, consulte la [Guía para desarrolladores de AWS SDK para PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#publish-to-a-text-message-sms-message). 
+  Para obtener información sobre la API, consulte [Publicar](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/Publish) en la *Referencia de la API de AWS SDK para PHP *. 

------
#### [ Python ]

**SDK para Python (Boto3)**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/sns#code-examples). 

```
class SnsWrapper:
    """Encapsulates Amazon SNS topic and subscription functions."""

    def __init__(self, sns_resource):
        """
        :param sns_resource: A Boto3 Amazon SNS resource.
        """
        self.sns_resource = sns_resource


    def publish_text_message(self, phone_number, message):
        """
        Publishes a text message directly to a phone number without need for a
        subscription.

        :param phone_number: The phone number that receives the message. This must be
                             in E.164 format. For example, a United States phone
                             number might be +12065550101.
        :param message: The message to send.
        :return: The ID of the message.
        """
        try:
            response = self.sns_resource.meta.client.publish(
                PhoneNumber=phone_number, Message=message
            )
            message_id = response["MessageId"]
            logger.info("Published message to %s.", phone_number)
        except ClientError:
            logger.exception("Couldn't publish message to %s.", phone_number)
            raise
        else:
            return message_id
```
+  Para obtener detalles sobre la API, consulte [Publish](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Publish) en la *Referencia de la API de AWS SDK para Python (Boto3)*. 

------
#### [ SAP ABAP ]

**SDK para SAP ABAP**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap/services/sns#code-examples). 

```
    " iv_phone_number = '+12065550101' - Phone number in E.164 format
    TRY.
        oo_result = lo_sns->publish(              " oo_result is returned for testing purposes. "
          iv_phonenumber = iv_phone_number
          iv_message = iv_message ).
        MESSAGE 'Message published to phone number.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Phone number does not exist.' TYPE 'E'.
    ENDTRY.
```
+  Para obtener información acerca de la API, consulte [Publish](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html) (Publicar) en la *referencia de la API del SDK de AWS para SAP ABAP*. 

------

# Configuración de las preferencias de mensajería SMS en Amazon SNS
<a name="sms_preferences"></a>

Utilice Amazon SNS para especificar las preferencias de mensajería SMS. Por ejemplo, puede especificar si desea optimizar las entregas por costo o fiabilidad, el límite de gasto mensual, cómo se registran las entregas y si desea suscribirse a informes de uso de SMS diarios.

Estas preferencias se aplican en todos los mensajes SMS que envía desde su cuenta, pero puede anular algunas de ellas cuando envía un mensaje individual. Para obtener más información, consulte [Publicación de mensajes SMS en un teléfono móvil mediante Amazon SNS](sms_sending-overview.md#sms_publish-to-phone).

## Configuración de las preferencias de mensajería SMS mediante Consola de administración de AWS
<a name="sms_preferences_console"></a>

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Elija una [región que admita la mensajería SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. En el panel de navegación, elija **Móvil** y después **Mensajería de texto (SMS)**.

1. En la página **Mensajería de texto a través del móvil (SMS)**, en la sección **Preferencias de mensajería de texto**, elija **Editar**.

1. En la página **Editar preferencias de mensajería de texto**, en la sección **Detalles**, haga lo siguiente:

   1. En **Default message type (Tipo predeterminado de mensaje)**, seleccione uno de los siguientes:
      + **Promocional**: mensajes no importantes (por ejemplo, marketing). Amazon SNS optimiza la entrega de mensajes para conseguir el costo más bajo.
      + **Transaccional** (predeterminado): mensajes de importancia que admiten transacciones del cliente, como claves de acceso de un solo uso para la autenticación multifactor. Amazon SNS optimiza el envío de mensajes para conseguir la máxima reputación.

      Para obtener información sobre los precios de los mensajes promocionales y transaccionales, consulte la página relacionada con los [precios globales de SMS](https://aws.amazon.com/sns/sms-pricing/).

   1. (Opcional) En **Account spend limit (Límite de gasto de la cuenta)**, escriba el importe (en USD) que desea gastar en mensajes SMS cada mes natural.
**importante**  
De forma predeterminada, la cuota de gasto se establece en 1,00 USD. Si desea aumentar la cuota de servicio, [envíe una solicitud](https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase&limitType=service-code-sns).
Si el importe establecido en la consola supera la cuota del servicio, Amazon SNS deja de publicar mensajes SMS.
Como Amazon SNS es un sistema distribuido, deja de enviar mensajes SMS en cuestión de minutos en cuanto se ha excedido la cuota de gasto. Durante este intervalo, si sigue enviando mensajes SMS, podría incurrir en costos que superen la cuota.

1. (Opcional) En **Default sender ID (ID de remitente predeterminado)**, escriba un ID personalizado, como la marca de su negocio, que se muestra como el remitente en el dispositivo receptor.
**nota**  
El soporte para el remitente IDs varía según el país.

1. (Opcional) Ingrese el nombre del **nombre del bucket de Amazon S3 para informes de uso**.
**nota**  
La política de bucket de Amazon S3 debe conceder acceso de escritura a Amazon SNS.

1. Seleccione **Save changes (Guardar cambios)**.

## Configuración de preferencias (AWS SDKs)
<a name="sms_preferences_sdk"></a>

Para configurar sus preferencias de SMS mediante una de las AWS SDKs, utilice la acción de ese SDK que corresponda a la `SetSMSAttributes` solicitud en la API de Amazon SNS. Con esta solicitud, debe asignar valores a los diferentes atributos de SMS, como la cuota de gasto mensual o el tipo de SMS predeterminado (transaccional o promocional). Para ver todos los atributos de SMS, consulte [Establecer SMSAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetSMSAttributes.html) en la *referencia de la API de Amazon Simple Notification Service*.

Los siguientes ejemplos de código muestran cómo utilizar `SetSMSAttributes`.

------
#### [ C\$1\$1 ]

**SDK para C\$1\$1**  
 Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sns#code-examples). 
Cómo utilizar Amazon SNS para establecer el atributo predeterminadoSMSType .  

```
//! Set the default settings for sending SMS messages.
/*!
  \param smsType: The type of SMS message that you will send by default.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::setSMSType(const Aws::String &smsType,
                             const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::SetSMSAttributesRequest request;
    request.AddAttributes("DefaultSMSType", smsType);

    const Aws::SNS::Model::SetSMSAttributesOutcome outcome = snsClient.SetSMSAttributes(
            request);

    if (outcome.IsSuccess()) {
        std::cout << "SMS Type set successfully " << std::endl;
    }
    else {
        std::cerr << "Error while setting SMS Type: '"
                  << outcome.GetError().GetMessage()
                  << "'" << std::endl;
    }

    return outcome.IsSuccess();
}
```
+  Para obtener más información sobre la API, consulte [Establecer SMSAttributes](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/SetSMSAttributes) en la *referencia de AWS SDK para C\$1\$1 la API*. 

------
#### [ CLI ]

**AWS CLI**  
**Establecimiento de los atributos de los mensajes SMS**  
En el siguiente ejemplo de `set-sms-attributes`, se establece el ID de remitente predeterminado para los mensajes SMS a `MyName`.  

```
aws sns set-sms-attributes \
    --attributes DefaultSenderID=MyName
```
Este comando no genera ninguna salida.  
+  Para obtener más información sobre la API, consulte [Set SMSAttributes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/set-sms-attributes.html) in *AWS CLI Command Reference*. 

------
#### [ Java ]

**SDK para Java 2.x**  
 Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SetSmsAttributesRequest;
import software.amazon.awssdk.services.sns.model.SetSmsAttributesResponse;
import software.amazon.awssdk.services.sns.model.SnsException;
import java.util.HashMap;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class SetSMSAttributes {
    public static void main(String[] args) {
        HashMap<String, String> attributes = new HashMap<>(1);
        attributes.put("DefaultSMSType", "Transactional");
        attributes.put("UsageReportS3Bucket", "janbucket");

        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();
        setSNSAttributes(snsClient, attributes);
        snsClient.close();
    }

    public static void setSNSAttributes(SnsClient snsClient, HashMap<String, String> attributes) {
        try {
            SetSmsAttributesRequest request = SetSmsAttributesRequest.builder()
                    .attributes(attributes)
                    .build();

            SetSmsAttributesResponse result = snsClient.setSMSAttributes(request);
            System.out.println("Set default Attributes to " + attributes + ". Status was "
                    + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Para obtener más información sobre la API, consulta [Establecer SMSAttributes](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/SetSMSAttributes) en la *referencia AWS SDK for Java 2.x de la API*. 

------
#### [ JavaScript ]

**SDK para JavaScript (v3)**  
 Hay más información. GitHub Busque el ejemplo completo y aprenda a configurarlo y ejecutarlo en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Cree el cliente en un módulo separado y expórtelo.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
Importe el SDK y los módulos cliente, y llame a la API.  

```
import { SetSMSAttributesCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {"Transactional" | "Promotional"} defaultSmsType
 */
export const setSmsType = async (defaultSmsType = "Transactional") => {
  const response = await snsClient.send(
    new SetSMSAttributesCommand({
      attributes: {
        // Promotional – (Default) Noncritical messages, such as marketing messages.
        // Transactional – Critical messages that support customer transactions,
        // such as one-time passcodes for multi-factor authentication.
        DefaultSMSType: defaultSmsType,
      },
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: '1885b977-2d7e-535e-8214-e44be727e265',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   }
  // }
  return response;
};
```
+  Para obtener información, consulte la [Guía para desarrolladores de AWS SDK para JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-sending-sms.html#sending-sms-setattributes). 
+  Para obtener más información sobre la API, consulta [Establecer SMSAttributes](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/SetSMSAttributesCommand) en la *referencia AWS SDK para JavaScript de la API*. 

------
#### [ PHP ]

**SDK para PHP**  
 Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

try {
    $result = $SnSclient->SetSMSAttributes([
        'attributes' => [
            'DefaultSMSType' => 'Transactional',
        ],
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Para obtener más información, consulte la [Guía para desarrolladores de AWS SDK para PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#set-sms-attributes). 
+  Para obtener más información sobre la API, consulta [Establecer SMSAttributes](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/SetSMSAttributes) en la *referencia AWS SDK para PHP de la API*. 

------

## Configuración de las preferencias de mensajería SMS para la entrega en un país específico
<a name="sms_preferences_country_specific"></a>

Puede administrar y controlar su tráfico de SMS enviando mensajes solo a países de destino específicos. Esto garantiza que sus mensajes se envíen solo a los países aprobados, lo que evita cargos por SMS no deseados. En las siguientes instrucciones se utiliza la configuración Proteger de Amazon Pinpoint para especificar los países que desea permitir o bloquear.

1. Abra la AWS SMS consola en [https://console.aws.amazon.com/sms-voice/](https://console.aws.amazon.com/sms-voice/).

1. En el panel de navegación, en **Información general**, en la sección de **Inicio rápido**, elija **Crear una configuración de protección**.

1. En **los detalles de configuración de Protect**, introduzca **un nombre comercial** para su configuración de protección (por ejemplo, Allow-Only-AU).

1. En **Reglas de país de SMS**, activa la casilla de verificación **Región/País** para bloquear el envío de mensajes a todos los países admitidos.

1. Desactive las casillas de los países a los que desea enviar mensajes. Por ejemplo, para permitir que los mensajes solo lleguen a Australia, desactive la casilla de **Australia**.

1. En la sección **Asociaciones de configuraciones de protección**, en **Tipo de asociación**, seleccione **Cuenta predeterminada**. Esto garantizará que la configuración de AWS End User Messaging SMS Protect afecte a todos los mensajes enviados a través de Amazon SNS, [Amazon](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html) Cognito y la llamada a la API Amazon Pinpoint. [https://docs.aws.amazon.com/pinpoint/latest/developerguide/send-messages-sms.html](https://docs.aws.amazon.com/pinpoint/latest/developerguide/send-messages-sms.html)

1. Elija **Crear configuración de protección** para guardar la configuración.

   Se muestra el siguiente mensaje de confirmación.

   ```
   Success Protect configuration protect-abc0123456789 has been created.
   ```

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. [**Publicación de un mensaje**](sns-publishing.md) en uno de los países bloqueados, como India.

   El mensaje no se entregará. Puede verificarlo en los registros de errores de entrega mediante. [CloudWatch](sms_stats_cloudwatch.md) Busque un grupo de registros **sns/region/AccountID/DirectPublishToPhoneNumber/Failure**para obtener una respuesta similar a la del siguiente ejemplo:

   ```
   {
   "notification": {
   "messageId": "bd59a509-XXXX-XXXX-82f8-fbdb8cb68217",
   "timestamp": "YYYY-MM-DD XX:XX:XX.XXXX“
   },
   "delivery": {
   "destination": "+91XXXXXXXXXX",
   "smsType": "Transactional",
   "providerResponse": "Cannot deliver message to the specified destination country",
   "dwellTimeMs": 85
   },
   "status": "FAILURE"
   }
   ```

# Administración de números de teléfono y suscripciones en Amazon SMS
<a name="sms_manage"></a>

Con Amazon SNS, se ofrecen varias opciones para administrar quién recibe mensajes SMS desde su cuenta. Con una frecuencia limitada, puede reactivar números de teléfono en los que se ha desactivado la recepción de mensajes SMS desde su cuenta. Para dejar de enviar mensajes a suscripciones a SMS, puede eliminar las suscripciones o los temas que se publican en ellos.

## Desactivación de la recepción de mensajes SMS
<a name="sms_manage_optout"></a>

Cuando la legislación y la normativa locales vigentes así lo exijan (como, por ejemplo, en los EE. UU. y Canadá), los destinatarios de SMS podrán utilizar sus dispositivos para cancelar su suscripción respondiendo al mensaje con cualquiera de las palabras siguientes: 
+ ARRET (francés)
+ CANCEL
+ END
+ OPT-OUT
+ OPTOUT
+ QUIT
+ REMOVE
+ STOP
+ TD
+ UNSUBSCRIBE

Para cancelar la suscripción, el destinatario debe responder al mismo [número de origen](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) que Amazon SNS utilizó para entregar el mensaje. Tras darse de baja, el destinatario dejará de recibir los mensajes SMS enviados por usted, Cuenta de AWS a menos que usted indique su número de teléfono.

Si el número de teléfono está suscrito a un tema de Amazon SNS, la cancelación la suscripción no la eliminará, pero los mensajes SMS no se entregarán a dicha suscripción a menos que dé de alta el número de teléfono.

## Administración de números de teléfono y suscripciones mediante la consola de Amazon SMS
<a name="sms_manage_console"></a>

Puede utilizar la consola de Amazon SNS para controlar qué números de teléfono recibirán mensajes SMS desde su cuenta.

### Reactivación de un número de teléfono que se ha dado de baja en la consola de Amazon SNS
<a name="sms_manage_optout_console"></a>

Puede ver qué números de teléfono se han dado de baja de la recepción de mensajes SMS desde su cuenta y puede reactivarlos para reanudar el envío de mensajes.

Puede dar de alta un número de teléfono solo una vez cada 30 días.

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el menú de la consola, establezca el selector de regiones en una [región que admita la mensajería SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. En el panel de navegación, elija **Text messaging (SMS) (Mensajería de texto (SMS))**.

1. En la página **Mensajería de texto a través de móvil (SMS)**, en la sección **Números de teléfono desactivados**, se muestran los números de teléfono que se han dado de baja.

1. Seleccione la casilla del número de teléfono que desea volver a dar de alta y, a continuación, elija **Activar**. El número de teléfono ya no estará dado de baja y recibirá los mensajes SMS que le envíe.

#### Eliminación de una suscripción a SMS mediante la consola de Amazon SNS
<a name="sms_manage_subscriptions_console"></a>

Elimine una suscripción a SMS para detener el envío de mensajes SMS a ese número de teléfono cuando publique en sus temas.

1. En el panel de navegación, seleccione **Subscriptions (Suscripciones)**.

1. Seleccione las casillas de verificación correspondientes a las suscripciones que desee eliminar. A continuación, elija **Actions (Acciones)** y después **Delete Subscriptions (Eliminar suscripciones)**.

1. En la ventana **Delete** (Eliminar), elija **Delete** (Eliminar). Amazon SNS elimina la suscripción y muestra un mensaje de confirmación.

#### Eliminación de un tema mediante la consola de Amazon SNS.
<a name="sms_manage_topic_console"></a>

Elimine un tema cuando ya no quiera publicar mensajes en sus puntos de enlace suscritos.

1. En el panel de navegación, elija **Temas**.

1. Seleccione las casillas de verificación correspondientes a los temas que desee eliminar. A continuación, elija **Actions (Acciones)** y después **Delete Topics (Eliminar temas)**.

1. En la ventana **Delete** (Eliminar), elija **Delete** (Eliminar). Amazon SNS elimina el tema y muestra un mensaje de confirmación.

### Administrar números de teléfono y suscripciones mediante el SDK AWS
<a name="sms_manage_sdk"></a>

Puede usarlo AWS SDKs para realizar solicitudes programáticas a Amazon SNS y administrar los números de teléfono que pueden recibir mensajes SMS de su cuenta.

Para usar un AWS SDK, debe configurarlo con sus credenciales. Para obtener más información, consulte los [archivos de configuración y credenciales compartidos](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html) en la *Guía de referencia de herramientas AWS SDKs y herramientas*.

#### Visualización de todos los números de teléfono que se han excluido mediante el SDK AWS
<a name="sms_view_optout_sdk"></a>

Para ver todos los números de teléfono que se han dado de baja, envíe una solicitud `ListPhoneNumbersOptedOut` a través de la API de Amazon SNS.

Los siguientes ejemplos de código muestran cómo utilizar `ListPhoneNumbersOptedOut`.

------
#### [ CLI ]

**AWS CLI**  
**Mostrar exclusiones de mensajes SMS**  
El siguiente ejemplo de `list-phone-numbers-opted-out` muestra los números de teléfono excluidos de la recepción de mensajes SMS.  

```
aws sns list-phone-numbers-opted-out
```
Salida:  

```
{
    "phoneNumbers": [
        "+15555550100"
    ]
}
```
+  Para obtener más información sobre la API, consulte [ListPhoneNumbersOptedOut](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/list-phone-numbers-opted-out.html)la *Referencia de AWS CLI comandos*. 

------
#### [ Java ]

**SDK para Java 2.x**  
 Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.ListPhoneNumbersOptedOutRequest;
import software.amazon.awssdk.services.sns.model.ListPhoneNumbersOptedOutResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class ListOptOut {
    public static void main(String[] args) {
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        listOpts(snsClient);
        snsClient.close();
    }

    public static void listOpts(SnsClient snsClient) {
        try {
            ListPhoneNumbersOptedOutRequest request = ListPhoneNumbersOptedOutRequest.builder().build();
            ListPhoneNumbersOptedOutResponse result = snsClient.listPhoneNumbersOptedOut(request);
            System.out.println("Status is " + result.sdkHttpResponse().statusCode() + "\n\nPhone Numbers: \n\n"
                    + result.phoneNumbers());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Para obtener más información sobre la API, consulta [ListPhoneNumbersOptedOut](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/ListPhoneNumbersOptedOut)la *Referencia AWS SDK for Java 2.x de la API*. 

------
#### [ PHP ]

**SDK para PHP**  
 Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Returns a list of phone numbers that are opted out of receiving SMS messages from your AWS SNS account.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

try {
    $result = $SnSclient->listPhoneNumbersOptedOut();
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Para obtener más información, consulte la [Guía para desarrolladores de AWS SDK para PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#list-opted-out-phone-numbers). 
+  Para obtener más información sobre la API, consulta [ListPhoneNumbersOptedOut](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/ListPhoneNumbersOptedOut)la *Referencia AWS SDK para PHP de la API*. 

------

#### Comprobar si un número de teléfono está excluido mediante el SDK AWS
<a name="sms_check_optout_sdk"></a>

Para verificar si un número de teléfono se ha dado de baja, envíe una solicitud `CheckIfPhoneNumberIsOptedOut` con la API de Amazon SNS.

Los siguientes ejemplos de código muestran cómo utilizar `CheckIfPhoneNumberIsOptedOut`.

------
#### [ .NET ]

**SDK para .NET**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/SNS#code-examples). 

```
    using System;
    using System.Threading.Tasks;
    using Amazon.SimpleNotificationService;
    using Amazon.SimpleNotificationService.Model;

    /// <summary>
    /// This example shows how to use the Amazon Simple Notification Service
    /// (Amazon SNS) to check whether a phone number has been opted out.
    /// </summary>
    public class IsPhoneNumOptedOut
    {
        public static async Task Main()
        {
            string phoneNumber = "+15551112222";

            IAmazonSimpleNotificationService client = new AmazonSimpleNotificationServiceClient();

            await CheckIfOptedOutAsync(client, phoneNumber);
        }

        /// <summary>
        /// Checks to see if the supplied phone number has been opted out.
        /// </summary>
        /// <param name="client">The initialized Amazon SNS Client object used
        /// to check if the phone number has been opted out.</param>
        /// <param name="phoneNumber">A string representing the phone number
        /// to check.</param>
        public static async Task CheckIfOptedOutAsync(IAmazonSimpleNotificationService client, string phoneNumber)
        {
            var request = new CheckIfPhoneNumberIsOptedOutRequest
            {
                PhoneNumber = phoneNumber,
            };

            try
            {
                var response = await client.CheckIfPhoneNumberIsOptedOutAsync(request);

                if (response.HttpStatusCode == System.Net.HttpStatusCode.OK)
                {
                    string optOutStatus = response.IsOptedOut ? "opted out" : "not opted out.";
                    Console.WriteLine($"The phone number: {phoneNumber} is {optOutStatus}");
                }
            }
            catch (AuthorizationErrorException ex)
            {
                Console.WriteLine($"{ex.Message}");
            }
        }
    }
```
+  Para obtener más información sobre la API, consulta [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/CheckIfPhoneNumberIsOptedOut)la *Referencia AWS SDK para .NET de la API*. 

------
#### [ CLI ]

**AWS CLI**  
**Comprobar que se ha cancelado la recepción de mensajes SMS en un número de teléfono**  
En el siguiente `check-if-phone-number-is-opted-out` ejemplo, se comprueba si el número de teléfono especificado está excluido de la recepción de mensajes SMS de la AWS cuenta corriente.  

```
aws sns check-if-phone-number-is-opted-out \
    --phone-number +1555550100
```
Salida:  

```
{
    "isOptedOut": false
}
```
+  Para obtener más información sobre la API, consulte [CheckIfPhoneNumberIsOptedOut](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/check-if-phone-number-is-opted-out.html)la *Referencia de AWS CLI comandos*. 

------
#### [ Java ]

**SDK para Java 2.x**  
 Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.CheckIfPhoneNumberIsOptedOutRequest;
import software.amazon.awssdk.services.sns.model.CheckIfPhoneNumberIsOptedOutResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class CheckOptOut {
    public static void main(String[] args) {

        final String usage = """

                Usage:    <phoneNumber>

                Where:
                   phoneNumber - The mobile phone number to look up (for example, +1XXX5550100).

                """;

        if (args.length != 1) {
            System.out.println(usage);
            System.exit(1);
        }

        String phoneNumber = args[0];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        checkPhone(snsClient, phoneNumber);
        snsClient.close();
    }

    public static void checkPhone(SnsClient snsClient, String phoneNumber) {
        try {
            CheckIfPhoneNumberIsOptedOutRequest request = CheckIfPhoneNumberIsOptedOutRequest.builder()
                    .phoneNumber(phoneNumber)
                    .build();

            CheckIfPhoneNumberIsOptedOutResponse result = snsClient.checkIfPhoneNumberIsOptedOut(request);
            System.out.println(
                    result.isOptedOut() + "Phone Number " + phoneNumber + " has Opted Out of receiving sns messages." +
                            "\n\nStatus was " + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Para obtener más información sobre la API, consulta [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/CheckIfPhoneNumberIsOptedOut)la *Referencia AWS SDK for Java 2.x de la API*. 

------
#### [ JavaScript ]

**SDK para JavaScript (v3)**  
 Hay más información. GitHub Busque el ejemplo completo y aprenda a configurarlo y ejecutarlo en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Cree el cliente en un módulo separado y expórtelo.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
Importe el SDK y los módulos cliente, y llame a la API.  

```
import { CheckIfPhoneNumberIsOptedOutCommand } from "@aws-sdk/client-sns";

import { snsClient } from "../libs/snsClient.js";

export const checkIfPhoneNumberIsOptedOut = async (
  phoneNumber = "5555555555",
) => {
  const command = new CheckIfPhoneNumberIsOptedOutCommand({
    phoneNumber,
  });

  const response = await snsClient.send(command);
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: '3341c28a-cdc8-5b39-a3ee-9fb0ee125732',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   isOptedOut: false
  // }
  return response;
};
```
+  Para obtener información, consulte la [Guía para desarrolladores de AWS SDK para JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-sending-sms.html#sending-sms-checkifphonenumberisoptedout). 
+  Para obtener más información sobre la API, consulta [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/CheckIfPhoneNumberIsOptedOutCommand)la *Referencia AWS SDK para JavaScript de la API*. 

------
#### [ PHP ]

**SDK para PHP**  
 Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Indicates whether the phone number owner has opted out of receiving SMS messages from your AWS SNS account.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$phone = '+1XXX5550100';

try {
    $result = $SnSclient->checkIfPhoneNumberIsOptedOut([
        'phoneNumber' => $phone,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Para obtener más información, consulte la [Guía para desarrolladores de AWS SDK para PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#check-if-a-phone-number-has-opted-out). 
+  Para obtener más información sobre la API, consulta [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/CheckIfPhoneNumberIsOptedOut)la *Referencia AWS SDK para PHP de la API*. 

------

#### Reactivación de un número de teléfono que se ha dado de baja con la API de Amazon SNS
<a name="sms_manage_optin_sdk"></a>

Para dar de alta un número de teléfono, envíe una solicitud `OptInPhoneNumber` con la API de Amazon SNS.

Puede dar de alta un número de teléfono solo una vez cada 30 días.

#### Eliminar AWS una suscripción por SMS mediante el SDK
<a name="sms_manage_subscriptions_sdk"></a>

Para eliminar una suscripción a SMS desde un tema de Amazon SNS, obtenga el ARN de la suscripción al presentar una solicitud `ListSubscriptions` con la API de Amazon SNS. A continuación, pase el ARN a una solicitud `Unsubscribe`.

Los siguientes ejemplos de código muestran cómo utilizar `Unsubscribe`.

------
#### [ .NET ]

**SDK para .NET**  
 Hay más información sobre. GitHub Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/cross-service/TopicsAndQueues#code-examples). 
Darse de baja de un tema mediante un ARN de suscripción  

```
    /// <summary>
    /// Unsubscribe from a topic by a subscription ARN.
    /// </summary>
    /// <param name="subscriptionArn">The ARN of the subscription.</param>
    /// <returns>True if successful.</returns>
    public async Task<bool> UnsubscribeByArn(string subscriptionArn)
    {
        var unsubscribeResponse = await _amazonSNSClient.UnsubscribeAsync(
            new UnsubscribeRequest()
            {
                SubscriptionArn = subscriptionArn
            });
        return unsubscribeResponse.HttpStatusCode == HttpStatusCode.OK;
    }
```
+  Para obtener detalles sobre la API, consulte [Unsubscribe](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/Unsubscribe) en la *Referencia de la API de AWS SDK para .NET *. 

------
#### [ C\$1\$1 ]

**SDK para C\$1\$1**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sns#code-examples). 

```
//! Delete a subscription to an Amazon Simple Notification Service (Amazon SNS) topic.
/*!
  \param subscriptionARN: The Amazon Resource Name (ARN) for an Amazon SNS topic subscription.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::unsubscribe(const Aws::String &subscriptionARN,
                              const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::UnsubscribeRequest request;
    request.SetSubscriptionArn(subscriptionARN);

    const Aws::SNS::Model::UnsubscribeOutcome outcome = snsClient.Unsubscribe(request);

    if (outcome.IsSuccess()) {
        std::cout << "Unsubscribed successfully " << std::endl;
    }
    else {
        std::cerr << "Error while unsubscribing " << outcome.GetError().GetMessage()
                  << std::endl;
    }

    return outcome.IsSuccess();
}
```
+  Para obtener detalles sobre la API, consulte [Unsubscribe](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/Unsubscribe) en la *Referencia de la API de AWS SDK para C\$1\$1 *. 

------
#### [ CLI ]

**AWS CLI**  
**Cancelación de la suscripción a un tema**  
En el siguiente ejemplo de `unsubscribe`, se elimina la suscripción especificada de un tema.  

```
aws sns unsubscribe \
    --subscription-arn arn:aws:sns:us-west-2:0123456789012:my-topic:8a21d249-4329-4871-acc6-7be709c6ea7f
```
Este comando no genera ninguna salida.  
+  Para obtener detalles sobre la API, consulte [Unsubscribe](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/unsubscribe.html) en la *Referencia de comandos de la AWS CLI *. 

------
#### [ Java ]

**SDK para Java 2.x**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.UnsubscribeRequest;
import software.amazon.awssdk.services.sns.model.UnsubscribeResponse;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class Unsubscribe {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <subscriptionArn>

                Where:
                   subscriptionArn - The ARN of the subscription to delete.
                """;

        if (args.length < 1) {
            System.out.println(usage);
            System.exit(1);
        }

        String subscriptionArn = args[0];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        unSub(snsClient, subscriptionArn);
        snsClient.close();
    }

    public static void unSub(SnsClient snsClient, String subscriptionArn) {
        try {
            UnsubscribeRequest request = UnsubscribeRequest.builder()
                    .subscriptionArn(subscriptionArn)
                    .build();

            UnsubscribeResponse result = snsClient.unsubscribe(request);
            System.out.println("\n\nStatus was " + result.sdkHttpResponse().statusCode()
                    + "\n\nSubscription was removed for " + request.subscriptionArn());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Para obtener detalles sobre la API, consulte [Unsubscribe](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Unsubscribe) en la *Referencia de la API de AWS SDK for Java 2.x *. 

------
#### [ JavaScript ]

**SDK para JavaScript (v3)**  
 Hay más información. GitHub Busque el ejemplo completo y aprenda a configurarlo y ejecutarlo en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Cree el cliente en un módulo separado y expórtelo.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
Importe el SDK y los módulos cliente, y llame a la API.  

```
import { UnsubscribeCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {string} subscriptionArn - The ARN of the subscription to cancel.
 */
const unsubscribe = async (
  subscriptionArn = "arn:aws:sns:us-east-1:xxxxxxxxxxxx:mytopic:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
) => {
  const response = await snsClient.send(
    new UnsubscribeCommand({
      SubscriptionArn: subscriptionArn,
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: '0178259a-9204-507c-b620-78a7570a44c6',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   }
  // }
  return response;
};
```
+  Para obtener más información, consulte la [Guía para desarrolladores de AWS SDK para JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-unsubscribing). 
+  Para obtener detalles sobre la API, consulte [Unsubscribe](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/UnsubscribeCommand) en la *Referencia de la API de AWS SDK para JavaScript *. 

------
#### [ Kotlin ]

**SDK para Kotlin**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin/services/sns#code-examples). 

```
suspend fun unSub(subscriptionArnVal: String) {
    val request =
        UnsubscribeRequest {
            subscriptionArn = subscriptionArnVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        snsClient.unsubscribe(request)
        println("Subscription was removed for ${request.subscriptionArn}")
    }
}
```
+  Para obtener detalles sobre la API, consulte [Unsubscribe](https://sdk.amazonaws.com/kotlin/api/latest/index.html) en la *Referencia de la API de AWS SDK para Kotlin*. 

------
#### [ PHP ]

**SDK para PHP**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Deletes a subscription to an Amazon SNS topic.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$subscription = 'arn:aws:sns:us-east-1:111122223333:MySubscription';

try {
    $result = $SnSclient->unsubscribe([
        'SubscriptionArn' => $subscription,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Para obtener más información, consulte la [Guía para desarrolladores de AWS SDK para PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-subscribing-unsubscribing-topics.html#unsubscribe-from-a-topic). 
+  Para obtener información sobre la API, consulte [Cancelar suscripción](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/Unsubscribe) en la *Referencia de la API de AWS SDK para PHP *. 

------
#### [ Python ]

**SDK para Python (Boto3)**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/sns#code-examples). 

```
class SnsWrapper:
    """Encapsulates Amazon SNS topic and subscription functions."""

    def __init__(self, sns_resource):
        """
        :param sns_resource: A Boto3 Amazon SNS resource.
        """
        self.sns_resource = sns_resource


    @staticmethod
    def delete_subscription(subscription):
        """
        Unsubscribes and deletes a subscription.
        """
        try:
            subscription.delete()
            logger.info("Deleted subscription %s.", subscription.arn)
        except ClientError:
            logger.exception("Couldn't delete subscription %s.", subscription.arn)
            raise
```

```
class SnsWrapper:
    """Wrapper class for managing Amazon SNS operations."""

    def __init__(self, sns_client: Any) -> None:
        """
        Initialize the SnsWrapper.

        :param sns_client: A Boto3 Amazon SNS client.
        """
        self.sns_client = sns_client

    @classmethod
    def from_client(cls) -> 'SnsWrapper':
        """
        Create an SnsWrapper instance using a default boto3 client.

        :return: An instance of this class.
        """
        sns_client = boto3.client('sns')
        return cls(sns_client)


    def unsubscribe(self, subscription_arn: str) -> bool:
        """
        Unsubscribe from an SNS topic.

        :param subscription_arn: The ARN of the subscription to remove.
        :return: True if successful.
        :raises ClientError: If the unsubscribe operation fails.
        """
        try:
            self.sns_client.unsubscribe(SubscriptionArn=subscription_arn)
            
            logger.info(f"Unsubscribed: {subscription_arn}")
            return True

        except ClientError as e:
            error_code = e.response.get('Error', {}).get('Code', 'Unknown')
            
            if error_code == 'NotFound':
                logger.warning(f"Subscription not found: {subscription_arn}")
                return True  # Already unsubscribed
            else:
                logger.error(f"Error unsubscribing: {error_code} - {e}")
                raise
```
+  Para obtener detalles sobre la API, consulte [Unsubscribe](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Unsubscribe) en la *Referencia de la API de AWS SDK para Python (Boto3)*. 

------
#### [ SAP ABAP ]

**SDK para SAP ABAP**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap/services/sns#code-examples). 

```
    TRY.
        lo_sns->unsubscribe( iv_subscriptionarn = iv_subscription_arn ).
        MESSAGE 'Subscription deleted.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Subscription does not exist.' TYPE 'E'.
      CATCH /aws1/cx_snsinvalidparameterex.
        MESSAGE 'Subscription with "PendingConfirmation" status cannot be deleted/unsubscribed. Confirm subscription before performing unsubscribe operation.' TYPE 'E'.
    ENDTRY.
```
+  Para obtener detalles sobre la API, consulte [Unsubscribe](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html) en la *Referencia de la API de AWS SDK para SAP ABAP*. 

------
#### [ Swift ]

**SDK para Swift**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/swift/example_code/sns#code-examples). 

```
import AWSSNS

        let config = try await SNSClient.SNSClientConfiguration(region: region)
        let snsClient = SNSClient(config: config)

        _ = try await snsClient.unsubscribe(
            input: UnsubscribeInput(
                subscriptionArn: arn
            )
        )

        print("Unsubscribed.")
```
+  Para obtener detalles sobre la API, consulte [Unsubscribe](https://sdk.amazonaws.com/swift/api/awssns/latest/documentation/awssns/snsclient/unsubscribe(input:)) en la *Referencia de la API de AWS SDK para Swift*. 

------

#### Eliminar un tema con el AWS SDK
<a name="sms_manage_topic_sdk"></a>

Para eliminar un tema y todas sus suscripciones, obtenga el ARN del tema al presentar una solicitud `ListTopics` con la API de Amazon SNS y, a continuación, pase el ARN a la solicitud `DeleteTopic`.

Los siguientes ejemplos de código muestran cómo utilizar `DeleteTopic`.

------
#### [ .NET ]

**SDK para .NET**  
 Hay más en marcha GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/cross-service/TopicsAndQueues#code-examples). 
Elimine un tema por su ARN de tema.  

```
    /// <summary>
    /// Delete a topic by its topic ARN.
    /// </summary>
    /// <param name="topicArn">The ARN of the topic.</param>
    /// <returns>True if successful.</returns>
    public async Task<bool> DeleteTopicByArn(string topicArn)
    {
        var deleteResponse = await _amazonSNSClient.DeleteTopicAsync(
            new DeleteTopicRequest()
            {
                TopicArn = topicArn
            });
        return deleteResponse.HttpStatusCode == HttpStatusCode.OK;
    }
```
+  Para obtener más información sobre la API, consulta [DeleteTopic](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/DeleteTopic)la *Referencia AWS SDK para .NET de la API*. 

------
#### [ C\$1\$1 ]

**SDK para C\$1\$1**  
 Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sns#code-examples). 

```
//! Delete an Amazon Simple Notification Service (Amazon SNS) topic.
/*!
  \param topicARN: The Amazon Resource Name (ARN) for an Amazon SNS topic.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::deleteTopic(const Aws::String &topicARN,
                              const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::DeleteTopicRequest request;
    request.SetTopicArn(topicARN);

    const Aws::SNS::Model::DeleteTopicOutcome outcome = snsClient.DeleteTopic(request);

    if (outcome.IsSuccess()) {
        std::cout << "Successfully deleted the Amazon SNS topic " << topicARN << std::endl;
    }
    else {
        std::cerr << "Error deleting topic " << topicARN << ":" <<
                  outcome.GetError().GetMessage() << std::endl;
    }

    return outcome.IsSuccess();
}
```
+  Para obtener más información sobre la API, consulta [DeleteTopic](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/DeleteTopic)la *Referencia AWS SDK para C\$1\$1 de la API*. 

------
#### [ CLI ]

**AWS CLI**  
**Eliminación de un tema de SNS**  
El siguiente ejemplo de `delete-topic` elimina el tema de SNS especificado.  

```
aws sns delete-topic \
    --topic-arn "arn:aws:sns:us-west-2:123456789012:my-topic"
```
Este comando no genera ninguna salida.  
+  Para obtener más información sobre la API, consulta [DeleteTopic](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/delete-topic.html)la *Referencia de AWS CLI comandos*. 

------
#### [ Go ]

**SDK para Go V2**  
 Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/gov2/workflows/topics_and_queues#code-examples). 

```
import (
	"context"
	"encoding/json"
	"log"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/service/sns"
	"github.com/aws/aws-sdk-go-v2/service/sns/types"
)

// SnsActions encapsulates the Amazon Simple Notification Service (Amazon SNS) actions
// used in the examples.
type SnsActions struct {
	SnsClient *sns.Client
}



// DeleteTopic delete an Amazon SNS topic.
func (actor SnsActions) DeleteTopic(ctx context.Context, topicArn string) error {
	_, err := actor.SnsClient.DeleteTopic(ctx, &sns.DeleteTopicInput{
		TopicArn: aws.String(topicArn)})
	if err != nil {
		log.Printf("Couldn't delete topic %v. Here's why: %v\n", topicArn, err)
	}
	return err
}
```
+  Para obtener más información sobre la API, consulta [DeleteTopic](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/sns#Client.DeleteTopic)la *Referencia AWS SDK para Go de la API*. 

------
#### [ Java ]

**SDK para Java 2.x**  
 Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.DeleteTopicRequest;
import software.amazon.awssdk.services.sns.model.DeleteTopicResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class DeleteTopic {
    public static void main(String[] args) {
        final String usage = """

                Usage:     <topicArn>

                Where:
                   topicArn - The ARN of the topic to delete.
                """;

        if (args.length != 1) {
            System.out.println(usage);
            System.exit(1);
        }

        String topicArn = args[0];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        System.out.println("Deleting a topic with name: " + topicArn);
        deleteSNSTopic(snsClient, topicArn);
        snsClient.close();
    }

    public static void deleteSNSTopic(SnsClient snsClient, String topicArn) {
        try {
            DeleteTopicRequest request = DeleteTopicRequest.builder()
                    .topicArn(topicArn)
                    .build();

            DeleteTopicResponse result = snsClient.deleteTopic(request);
            System.out.println("\n\nStatus was " + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Para obtener más información sobre la API, consulta [DeleteTopic](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/DeleteTopic)la *Referencia AWS SDK for Java 2.x de la API*. 

------
#### [ JavaScript ]

**SDK para JavaScript (v3)**  
 Hay más información. GitHub Busque el ejemplo completo y aprenda a configurarlo y ejecutarlo en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Cree el cliente en un módulo separado y expórtelo.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
Importe el SDK y los módulos cliente, y llame a la API.  

```
import { DeleteTopicCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {string} topicArn - The ARN of the topic to delete.
 */
export const deleteTopic = async (topicArn = "TOPIC_ARN") => {
  const response = await snsClient.send(
    new DeleteTopicCommand({ TopicArn: topicArn }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: 'a10e2886-5a8f-5114-af36-75bd39498332',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   }
  // }
};
```
+  Para obtener información, consulte la [Guía para desarrolladores de AWS SDK para JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-managing-topics-deletetopic). 
+  Para obtener más información sobre la API, consulta [DeleteTopic](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/DeleteTopicCommand)la *Referencia AWS SDK para JavaScript de la API*. 

------
#### [ Kotlin ]

**SDK para Kotlin**  
 Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin/services/sns#code-examples). 

```
suspend fun deleteSNSTopic(topicArnVal: String) {
    val request =
        DeleteTopicRequest {
            topicArn = topicArnVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        snsClient.deleteTopic(request)
        println("$topicArnVal was successfully deleted.")
    }
}
```
+  Para obtener más información sobre la API, consulta [DeleteTopic](https://sdk.amazonaws.com/kotlin/api/latest/index.html)la *referencia sobre el AWS SDK para la API de Kotlin*. 

------
#### [ PHP ]

**SDK para PHP**  
 Hay más información al respecto. GitHub Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Deletes an SNS topic and all its subscriptions.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->deleteTopic([
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Para obtener más información sobre la API, consulta [DeleteTopic](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/DeleteTopic)la *Referencia AWS SDK para PHP de la API*. 

------
#### [ Python ]

**SDK para Python (Boto3)**  
 Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/sns#code-examples). 

```
class SnsWrapper:
    """Encapsulates Amazon SNS topic and subscription functions."""

    def __init__(self, sns_resource):
        """
        :param sns_resource: A Boto3 Amazon SNS resource.
        """
        self.sns_resource = sns_resource


    @staticmethod
    def delete_topic(topic):
        """
        Deletes a topic. All subscriptions to the topic are also deleted.
        """
        try:
            topic.delete()
            logger.info("Deleted topic %s.", topic.arn)
        except ClientError:
            logger.exception("Couldn't delete topic %s.", topic.arn)
            raise
```

```
class SnsWrapper:
    """Wrapper class for managing Amazon SNS operations."""

    def __init__(self, sns_client: Any) -> None:
        """
        Initialize the SnsWrapper.

        :param sns_client: A Boto3 Amazon SNS client.
        """
        self.sns_client = sns_client

    @classmethod
    def from_client(cls) -> 'SnsWrapper':
        """
        Create an SnsWrapper instance using a default boto3 client.

        :return: An instance of this class.
        """
        sns_client = boto3.client('sns')
        return cls(sns_client)


    def delete_topic(self, topic_arn: str) -> bool:
        """
        Delete an SNS topic.

        :param topic_arn: The ARN of the topic to delete.
        :return: True if successful.
        :raises ClientError: If the topic deletion fails.
        """
        try:
            self.sns_client.delete_topic(TopicArn=topic_arn)
            
            logger.info(f"Deleted topic: {topic_arn}")
            return True

        except ClientError as e:
            error_code = e.response.get('Error', {}).get('Code', 'Unknown')
            
            if error_code == 'NotFound':
                logger.warning(f"Topic not found: {topic_arn}")
                return True  # Already deleted
            else:
                logger.error(f"Error deleting topic: {error_code} - {e}")
                raise
```
+  Para obtener más información sobre la API, consulta [DeleteTopic](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/DeleteTopic)la *AWS Referencia de API de SDK for Python (Boto3*). 

------
#### [ SAP ABAP ]

**SDK para SAP ABAP**  
 Hay más información al respecto. GitHub Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap/services/sns#code-examples). 

```
    TRY.
        lo_sns->deletetopic( iv_topicarn = iv_topic_arn ).
        MESSAGE 'SNS topic deleted.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Topic does not exist.' TYPE 'E'.
    ENDTRY.
```
+  Para obtener más información sobre la API, consulte [DeleteTopic](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html)la *referencia sobre la API ABAP del AWS SDK para SAP*. 

------
#### [ Swift ]

**SDK para Swift**  
 Hay más información al respecto. GitHub Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/swift/example_code/sns#code-examples). 

```
import AWSSNS

        let config = try await SNSClient.SNSClientConfiguration(region: region)
        let snsClient = SNSClient(config: config)

        _ = try await snsClient.deleteTopic(
            input: DeleteTopicInput(topicArn: arn)
        )
```
+  Para obtener más información sobre la API, consulta [DeleteTopic](https://sdk.amazonaws.com/swift/api/awssns/latest/documentation/awssns/snsclient/deletetopic(input:))la *referencia sobre la API de AWS SDK for Swift*. 

------

# Supervisión de la actividad de SMS en Amazon SNS
<a name="sms_stats"></a>

Mediante la supervisión de la actividad de SMS, puede realizar un seguimiento de los números de teléfono de destino, las entregas realizadas correctamente o que han producido un error, los motivos del error, los costos y otra información. Amazon SNS le ayuda resumiendo las estadísticas en la consola, enviando información a Amazon CloudWatch y enviando informes de uso diario de SMS a un bucket de Amazon S3 que especifique.

# Consulta de las estadísticas de entrega de SMS en Amazon SNS
<a name="sms_stats_console"></a>

Puede utilizar la consola de Amazon SNS para ver estadísticas de sus entregas de SMS recientes.

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el menú de la consola, establezca el selector de regiones en una [región que admita la mensajería SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html).

1. En el panel de navegación, elija **Text messaging (SMS) (Mensajería de texto (SMS))**.

1. En la página **Text messaging (SMS) (Mensajería de texto (SMS))**, en la sección **Account stats (Estadísticas de la cuenta)**, vea los gráficos de las entregas de mensajes SMS transaccionales y promocionales. Cada gráfico muestra los siguientes datos de los últimos 15 días:
   + Tasa de entrega (porcentaje de entregas correctas)
   + Envíos (número de intentos de entrega)
   + Errores (número de entregas erróneas)

En esta página, también puede seleccionar el botón **Uso** para ir al bucket de Amazon S3 en el que almacena los informes de uso diarios. Para obtener más información, consulte [Suscripción a informes de uso diario de SMS en Amazon SNS](sms_stats_usage.md).

# Supervisión de la entrega de SMS de Amazon SNS con CloudWatch métricas y registros de Amazon
<a name="sms_stats_cloudwatch"></a>

Puedes usar Amazon CloudWatch y Amazon CloudWatch Logs para supervisar la entrega de tus mensajes SMS.

## Ver las CloudWatch métricas de Amazon
<a name="sms_stats_cloudwatch_metrics"></a>

Amazon SNS recopila automáticamente las estadísticas sobre la entrega de sus mensajes SMS y las envía a Amazon. CloudWatch Puede utilizarlas CloudWatch para supervisar estas métricas y crear alarmas que le avisen cuando una métrica supere un umbral. Por ejemplo, puedes monitorear CloudWatch las métricas para conocer tu tarifa de envío de SMS y tus cargos por month-to-date SMS.

Para obtener información sobre la supervisión de CloudWatch las métricas, la configuración de CloudWatch alarmas y los tipos de métricas disponibles, consulte[Supervisión de temas de Amazon SNS mediante CloudWatch](sns-monitoring-using-cloudwatch.md).

## Visualización CloudWatch de registros
<a name="sns-viewing-cloudwatch-logs"></a>

Puede recopilar información sobre las entregas de mensajes SMS realizadas correctamente y sin éxito si permite que Amazon SNS escriba en Amazon CloudWatch Logs. Por cada mensaje SMS que envíe, Amazon SNS escribirá un registro en el que se incluya el precio del mensaje, su estado (correcto o error), el motivo del error (si el mensaje generó un error), el tiempo de permanencia del mensaje y otra información.

**Para habilitar y ver CloudWatch los registros de sus mensajes SMS**

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el menú de la consola, establezca el selector de regiones en una [región que admita la mensajería SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. En el panel de navegación, elija **Text messaging (SMS) (Mensajería de texto (SMS))**.

1. En la página **Mensajería de texto a través del móvil (SMS)**, en la sección **Preferencias de mensajería de texto**, elija **Editar**.

1. En la siguiente página, expanda la sección **Registro de estado de entrega**.

1. En **Frecuencia de muestreo** correcta, especifique el porcentaje de envíos de SMS correctos para los que Amazon SNS escribirá registros en CloudWatch los registros. Por ejemplo:
   + Por ejemplo, para escribir registros únicamente para las entregas erróneas, establezca este valor en 0.
   + Para escribir logs para el 10% de las entregas de correctas, establézcalo en 10.

   Si no especifica ningún porcentaje, Amazon SNS escribirá registros para todas las entregas correctas.

1. Para proporcionar los permisos obligatorios, realice una de las siguientes acciones:
   + Para crear un nuevo rol de servicio, elija **Crear nueva función de servicio** y, a continuación, **Crear nuevos roles**. En la página siguiente, elija **Permitir** para dar acceso de escritura a Amazon SNS a los recursos de su cuenta.
   + Para utilizar una función de servicio existente, haga clic en **Usar función de servicio existente** y, a continuación, pegue el nombre de ARN en el cuadro **Rol de IAM para entregas exitosas y fallidas**.

     Mediante la función de servicio que especifique, se debe permitir el acceso de escritura a los recursos de su cuenta. Para obtener más información sobre la creación de funciones de IAM, consulte [Creación de una función para un AWS servicio](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console) en la Guía del usuario de *IAM*. 

1. Seleccione **Save changes (Guardar cambios)**.

1. De vuelta en la página **Mensajería de texto móvil (SMS))**, vaya a la sección **Registros de estado de entrega** para ver los registros disponibles.
**nota**  
Según el operador del número de teléfono de destino, los registros de entrega pueden tardar hasta 72 horas en aparecer en la consola de Amazon SNS. 

## Registro de ejemplo para una entrega de SMS correcta
<a name="example-log-successful-sms-delivery"></a>

El log de estado de una entrega de SMS correcta será similar al ejemplo siguiente:

```
{
    "notification": {
        "messageId": "34d9b400-c6dd-5444-820d-fbeb0f1f54cf",
        "timestamp": "2016-06-28 00:40:34.558"
    },
    "delivery": {
        "phoneCarrier": "My Phone Carrier",
        "mnc": 270,
        "numberOfMessageParts": 1,
        "destination": "+1XXX5550100",
        "priceInUSD": 0.00645,
        "smsType": "Transactional",
        "mcc": 310,
        "providerResponse": "Message has been accepted by phone carrier",
        "dwellTimeMs": 599,
        "dwellTimeMsUntilDeviceAck": 1344
    },
    "status": "SUCCESS"
}
```

## Registro de ejemplo para una entrega de SMS errónea
<a name="example-log-failed-sms-delivery"></a>

El log de estado de una entrega de SMS errónea será similar al ejemplo siguiente:

```
{
    "notification": {
        "messageId": "1077257a-92f3-5ca3-bc97-6a915b310625",
        "timestamp": "2016-06-28 00:40:34.559"
    },
    "delivery": {
        "mnc": 0,
        "numberOfMessageParts": 1,
        "destination": "+1XXX5550100",
        "priceInUSD": 0.00645,
        "smsType": "Transactional",
        "mcc": 0,
        "providerResponse": "Unknown error attempting to reach phone",
        "dwellTimeMs": 1420,
        "dwellTimeMsUntilDeviceAck": 1692
    },
    "status": "FAILURE"
}
```

## Motivos de error de entrega de SMS
<a name="sms_stats_delivery_fail_reasons"></a>

El motivo de un error se proporciona con el atributo `providerResponse`. Es posible que los mensajes SMS no se puedan entregar por los motivos siguientes:
+ El operador de telefonía lo bloquea por considerarlo spam.
+ El destino está en una lista bloqueada
+ Número de teléfono no válido.
+ Cuerpo de mensaje no válido.
+ El operador de telefonía ha bloqueado este mensaje.
+ El operador de telefonía no está disponible o no es posible ponerse en contacto con él.
+ El teléfono ha bloqueado los SMS.
+ El teléfono está en una lista bloqueada
+ El teléfono no está disponible o no es posible ponerse en contacto con él.
+ Se ha cancelado la suscripción del número de teléfono.
+ Esta entrega superaría el precio máximo.
+ Error desconocido al intentar ponerse en contacto con el teléfono

# Suscripción a informes de uso diario de SMS en Amazon SNS
<a name="sms_stats_usage"></a>

Puede monitorear sus entregas de SMS si se suscribe a los informes de uso diarios desde Amazon SNS. Todos los días que envía, como mínimo, un SMS, Amazon SNS entrega un informe de uso en formato CSV al bucket de Amazon S3 especificado. El informe de uso de SMS tarda 24 horas en estar disponible en el bucket de Amazon S3. 

## Información del informe de uso diario
<a name="daily_usage_info"></a>

El informe de uso contiene la siguiente información de cada mensaje SMS que envíe desde su cuenta.

 Tenga en cuenta que el informe no incluye los mensajes que se envían a los destinatarios que han desactivado la recepción de mensajes.
+ Hora de publicación del mensaje (en UTC)
+ Message ID
+ Número de teléfono de destino
+ Tipo de mensaje
+ Estado de entrega.
+ Precio del mensaje (en USD).
+ Número de parte (un mensaje se divide en varias partes si es demasiado largo para un único mensaje).
+ Número total de partes.

**nota**  
Si Amazon SNS no recibió el número de parte, establecemos su valor en cero.

## Suscripción a informes de uso diario
<a name="subscribe-to-daily-usage-reports"></a>

Para suscribirse a informes de uso diario, debe crear un bucket de Amazon S3 con los permisos pertinentes.

**Si quiere crear un bucket de Amazon S3 para sus informes de uso diario, siga estos pasos:**

1. Desde la Cuenta de AWS que envía los mensajes SMS, inicie sesión en la [consola de Amazon S3](https://console.aws.amazon.com/s3/).

1. Seleccione la opción **Crear bucket**.

1. En **Bucket Name (Nombre del bucket)**, le recomendamos que escriba un nombre único para su cuenta y su organización. Por ejemplo, use el patrón `<my-bucket-prefix>-<account_id>-<org-id>`. 

   Para obtener información sobre las convenciones y restricciones de los nombres de bucket, consulte [Reglas para la nomenclatura de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html#bucketnamingrules) en la *Guía del usuario de Amazon Simple Storage Service*.

1. Seleccione **Crear**.

1. En la tabla **Todos los buckets**, elija el bucket.

1. En la pestaña **Permisos**, elija **Política de bucket**.

1. En la ventana **Editor de políticas de bucket**, indique una política que permita al principal del servicio de Amazon SNS escribir en el bucket. Para ver un ejemplo, consulta [Ejemplo de política de bucket](#example_bucket_policy).

   Si utilizas la política de ejemplo, recuerda *my-s3-bucket* sustituirla por el nombre del bucket que elegiste en el paso 3.

1. Seleccione **Save**.

**Para suscribirse a los informes de uso diario**

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/).

1. En el panel de navegación, elija **Text messaging (SMS) (Mensajería de texto (SMS))**.

1. En la página **Mensajería de texto (SMS)**, en la sección **Preferencias de mensajería de texto**, elija **Editar**.  
![\[Sección de preferencias de mensajería de texto en la consola de Amazon SNS\]](http://docs.aws.amazon.com/es_es/sns/latest/dg/images/daily-usage-report1.png)

1. En la página **Edit text messaging preferences (Editar preferencias de mensajería de texto)**, en la sección **Details (Detalles)**, especifique el **Amazon S3 bucket name for usage reports (Nombre del bucket de Amazon S3 para los informes de uso)**.  
![\[Sección Detalles de la página Editar preferencias de mensajería de texto en la consola de Amazon SNS\]](http://docs.aws.amazon.com/es_es/sns/latest/dg/images/daily-usage-report2.png)

1. Seleccione **Save changes (Guardar cambios)**.

### Ejemplo de política de bucket
<a name="example_bucket_policy"></a>

Con la siguiente política, la entidad principal del servicio de Amazon SNS puede ejecutar las acciones `s3:PutObject`, `s3:GetBucketLocation` y `s3:ListBucket`.

AWS proporciona herramientas para todos los servicios con los directores de servicio a los que se les ha dado acceso a los recursos de su cuenta. Cuándo la entidad principal de una instrucción de política de bucket de Amazon S3 es un [problema de suplente confuso](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html). Para limitar la región y la cuenta desde las que el bucket puede recibir informes de uso diarios, utilice `aws:SourceArn` tal como se muestra en el siguiente ejemplo. Si no desea limitar las regiones que pueden generar estos informes, utilice `aws:SourceAccount` para establecer límites en función de qué cuenta esté generando los informes. Si no conoce el ARN del recurso, utilice `aws:SourceAccount`.

Utilice el siguiente ejemplo que incluye protección contra suplente confuso cuando cree un bucket de Amazon S3 para recibir informes de uso diario de SMS desde Amazon SNS.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowPutObject",
            "Effect": "Allow",
            "Principal": {
                "Service": "sns.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "account_id"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:sns:us-west-1:123456789012:*"
                }
            }
        },
        {
            "Sid": "AllowGetBucketLocation",
            "Effect": "Allow",
            "Principal": {
                "Service": "sns.amazonaws.com"
            },
            "Action": "s3:GetBucketLocation",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "account_id"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:sns:us-west-1:123456789012:*"
                }
            }
        },
        {
            "Sid": "AllowListBucket",
            "Effect": "Allow",
            "Principal": {
                "Service": "sns.amazonaws.com"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "account_id"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:sns:us-west-1:123456789012:*"
                }
            }
        }
    ]
}
```

------

**nota**  
Puede publicar informes de uso en buckets de Amazon S3 que sean propiedad de la Cuenta de AWS que se especifica en el elemento `Condition` en la política de Amazon S3. Para publicar informes de uso en un bucket de Amazon S3 que Cuenta de AWS pertenece a otro, consulte [¿Cómo puedo copiar objetos de Amazon S3 de otro Cuenta de AWS?](https://aws.amazon.com/premiumsupport/knowledge-center/copy-s3-objects-account/) . 

### Ejemplo de informe de uso diario
<a name="example_report"></a>

Después de suscribirse a informes de uso diario, cada día Amazon SNS pone un archivo CSV con datos de uso en la siguiente ubicación:

```
<my-s3-bucket>/SMSUsageReports/<region>/YYYY/MM/DD/00x.csv.gz
```

Cada archivo puede contener hasta 50 000 registros. Si los registros de un día superan esta cuota, Amazon SNS agregará varios archivos. A continuación se muestra un informe de ejemplo:

```
PublishTimeUTC,MessageId,DestinationPhoneNumber,MessageType,DeliveryStatus,PriceInUSD,PartNumber,TotalParts
2016-05-10T03:00:29.476Z,96a298ac-1458-4825-a7eb-7330e0720b72,1XXX5550100,Promotional,Message has been accepted by phone carrier,0.90084,0,1
2016-05-10T03:00:29.561Z,1e29d394-d7f4-4dc9-996e-26412032c344,1XXX5550100,Promotional,Message has been accepted by phone carrier,0.34322,0,1
2016-05-10T03:00:30.769Z,98ba941c-afc7-4c51-ba2c-56c6570a6c08,1XXX5550100,Transactional,Message has been accepted by phone carrier,0.27815,0,1
```

# Solicitud de asistencia para mensajería SMS en Amazon SNS
<a name="channels-sms-awssupport"></a>

**importante**  
Se ha actualizado la guía para desarrolladores de SMS de Amazon SNS. Amazon SNS se ha integrado con [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html) para la entrega de mensajes SMS. Esta guía contiene la información más reciente sobre cómo crear, configurar y administrar los mensajes SMS de Amazon SNS.

En su cuenta de AWS, no podrá acceder a algunas opciones de SMS con Amazon SNS hasta que se comunique con Soporte. Abra un caso en el [centro de AWS Support](https://console.aws.amazon.com/support/home#/) para realizar cualquiera de las siguientes solicitudes:
+ Un aumento en su umbral de gasto mensual de SMS

  De forma predeterminada, el umbral de gasto mensual es de 1,00 USD. El umbral de gasto determina el volumen de mensajes que puede enviar con Amazon SNS. Puede solicitar un umbral de gasto con el que se obtenga el volumen mensual de mensajes esperado para su caso de uso de SMS.
+ Salir del [entorno de pruebas de SMS](sns-sms-sandbox.md) para que pueda enviar mensajes SMS sin restricciones. Para obtener más información, consulte [Cómo salir del entorno de pruebas de SMS de Amazon SNS](sns-sms-sandbox-moving-to-production.md).
+ Un [número de origen](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) dedicado
+ Un [ID de remitente](https://docs.aws.amazon.com/sms-voice/latest/userguide/sender-id.html) dedicado Un ID de remitente es un ID personalizado que se muestra como remitente en el dispositivo del destinatario. Por ejemplo, puede utilizar la marca de su negocio para facilitar el reconocimiento del origen del mensaje. La compatibilidad con los ID de remitente varía según el país o la región. Para obtener más información, consulte el tema [Regiones y países admitidos con AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) en la *Guía del usuario de AWS End User Messaging SMS*.

# Solicitud de aumento de la cuota de gasto mensual de SMS de Amazon SNS
<a name="channels-sms-awssupport-spend-threshold"></a>

Amazon SNS proporciona cuotas de gastos para ayudarlo a administrar el costo máximo por mes en el que se incurre al enviar SMS a través de su cuenta. La cuota de gasto limita el riesgo en caso de un ataque malicioso e impide que la aplicación ascendente envíe más mensajes de los esperados. Puede configurar Amazon SNS para que deje de publicar mensajes SMS cuando determine que el envío de un mensaje SMS generará un costo que superará la cuota de gasto del mes actual. 

Para garantizar que sus operaciones no se vean afectadas, le recomendamos que solicite una cuota de gasto lo suficientemente alta como para admitir sus cargas de trabajo de producción. Para obtener más información, consulte [Paso 1: Abrir un caso de SMS de Amazon SNS](#channels-sms-awssupport-spend-threshold-open). Una vez que haya recibido la cuota, podrá administrar su riesgo aplicando la cuota completa o un valor menor, como se describe en [Paso 2: Actualizar la configuración de SMS](#channels-sms-awssupport-spend-threshold-settings). Si aplica un valor menor, podrá controlar el gasto mensual con la opción de aumentarlo si resultara necesario.

**importante**  
Como Amazon SNS es un sistema distribuido, deja de enviar mensajes SMS en cuestión de minutos si se supera la cuota de gasto. Durante este período, si sigue enviando mensajes SMS, podría incurrir en costos que superen su cuota.

Establecemos la cuota de gasto para todas las cuentas nuevas en 1,00 USD al mes. Esta cuota está pensada para probar las funcionaliades de envío de mensajes de Amazon SNS. Para solicitar un aumento de la cuota de gastos de SMS de su cuenta, abra un caso de aumento de cuota en el AWS Support Center.

**Topics**
+ [Paso 1: Abrir un caso de SMS de Amazon SNS](#channels-sms-awssupport-spend-threshold-open)
+ [Paso 2: Actualizar la configuración de SMS en la consola de Amazon SNS](#channels-sms-awssupport-spend-threshold-settings)

## Paso 1: Abrir un caso de SMS de Amazon SNS
<a name="channels-sms-awssupport-spend-threshold-open"></a>

Puede solicitar un aumento de su cuota de gasto mensual abriendo un caso de aumento de cuota en el AWS Support Center.

**nota**  
Algunos de los campos en el formulario de solicitud están marcados como opcionales. Sin embargo, Soporte requiere toda la información mencionada en los pasos siguientes con el fin de procesar su solicitud. Si no proporciona toda la información necesaria, puede experimentar retrasos en el procesamiento de su solicitud.

1. Inicie sesión Consola de administración de AWS en [https://console.aws.amazon.com/](https://console.aws.amazon.com/).

1. En el menú **Soporte**, elija **Centro de soporte**.

1. En la pestaña **Casos de soporte abiertos**, elija **Crear caso**.

1. Elija el enlace **¿Busca aumentos en el límite de servicio?** y, a continuación, complete lo siguiente:
   + En **Tipo de límite**, elija **Mensajería de texto SNS**.
   + (Opcional) En **Proporcionar un enlace al sitio o aplicación que enviará los mensajes SMS**, proporcione información sobre el sitio web, la aplicación o el servicio que enviará los mensajes SMS.
   + (Opcional) En **Tipo de mensaje que tiene previsto enviar**, elija el tipo de mensaje que tiene previsto enviar con el código largo:
     + **Contraseña de un solo uso**: mensajes que proporcionan contraseñas que sus clientes utilizan para autenticarse con su sitio web o aplicación.
     + **Promocional**: mensajes no importantes que promocionan su empresa o servicio, tales como anuncios u ofertas especiales.
     + **Transaccional**: mensajes informativos importantes que admiten transacciones del cliente, tales como confirmaciones de pedido o alertas de transacción. Los mensajes transaccionales no pueden incluir contenido promocional ni de marketing.
   + (Opcional) Para **saber desde qué AWS región vas a enviar los mensajes, selecciona la región desde** la que vas a enviar los mensajes.
   + (Opcional) En **Países a los que tiene previsto enviar mensajes**, introduzca el país o la región en el que quiere comprar códigos cortos.
   + (Opcional) En **Cómo deciden sus clientes recibir mensajes suyos**, facilite detalles sobre su proceso de suscripción.
   + (Opcional) En el campo **Indique la plantilla de mensajes que piensa utilizar para enviar mensajes a sus clientes**, incluya la plantilla que vaya a utilizar.

1. En **Solicitudes**, complete las secciones siguientes:
   + En **Región**, elija la región desde la que va a enviar los mensajes. 
**nota**  
La región es obligatoria en la sección **Solicitudes**. Incluso si proporcionó esta información en la sección **Detalles del caso**, también debe incluirla aquí.
   + En **Tipo de recurso**, elija **Límites generales**.
   + En **Límite**, elija **Aumento del umbral de gasto de cuenta**.

1. En Nuevo valor de límite, escriba el importe máximo (en USD) que desea gastar en SMS cada mes natural.

1. En **Descripción del caso**, en **Descripción del caso de uso**, proporcione la siguiente información:
   + El sitio web o la aplicación de la empresa o servicio que envía mensajes SMS.
   + El servicio que ofrece su sitio web o aplicación y cómo los mensajes SMS contribuyen a dicho servicio.
   + Cómo se inscriben los usuarios para recibir voluntariamente sus mensajes SMS en su sitio web, aplicación u otra ubicación.

   Si la cuota de gasto solicitada (el valor especificado para **Nuevo valor de cuota**) es superior a 10 000 USD, proporcione los siguientes datos adicionales para cada país al que envíe mensajes:
   + Si utiliza un ID de remitente o un código corto. Si utiliza un ID de remitente, proporcione:
     + El ID de remitente.
     + Si el ID de remitente está registrado con operadores inalámbricos en el país.
   + El máximo esperado transactions-per-second (TPS) para tus mensajes.
   + El tamaño medio del mensaje.
   + La plantilla para los mensajes que envía en el país.
   + (Opcional) Necesidades de codificación de caracteres, si procede.

1. (Opcional) Si desea enviar más solicitudes, elija **Agregar otra solicitud**. Si incluye varias solicitudes, proporcione la información necesaria para cada una de ellas. Para la información requerida, consulte las demás secciones en [Solicitud de asistencia para mensajería SMS en Amazon SNS](channels-sms-awssupport.md).

1. En **Opciones de contacto**, elija en **Idioma de contacto preferido** si prefiere recibir las comunicaciones de este caso.

1. Cuando haya terminado, elija **Enviar**.

El Soporte equipo proporcionará una respuesta inicial a tu solicitud en un plazo de 24 horas.

Para evitar que nuestros sistemas se utilicen para enviar contenido no solicitado o malicioso, consideramos cada solicitud con detenimiento. Si podemos, accederemos a su solicitud dentro de ese plazo de 24 horas. Sin embargo, si necesitamos que nos brinde más información, puede que la solicitud tarde más tiempo en concederse.

Si su caso de uso no se ajusta a nuestras políticas, es posible que no podamos atender su solicitud.

## Paso 2: Actualizar la configuración de SMS en la consola de Amazon SNS
<a name="channels-sms-awssupport-spend-threshold-settings"></a>

Cuando le avisemos del aumento de la cuota de gasto mensual, tendrá que ajustar la cuota de gasto de su cuenta en la consola de Amazon SNS.

**importante**  
Debe completar los siguientes pasos; de lo contrario, no se aumentará su límite de gasto en SMS.

**Para ajustar la cuota de gasto en la consola**

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Abra el menú de navegación de la izquierda, expanda **Móvil** y, a continuación, elija **Mensajería de texto (SMS)**.

1. En la página **Mensajería de texto a través del móvil (SMS)**, en la sección **Preferencias de mensajería de texto**, elija **Editar**.

1. En la página **Editar preferencias de mensajería de texto**, en la sección **Detalles**, introduzca su nuevo límite de gasto de SMS en el campo **Límite de gasto de la cuenta**.
**nota**  
Es posible que reciba una advertencia de que el valor especificado es mayor que el límite de gasto predeterminado. Puede omitirla. 

1. Seleccione **Save changes (Guardar cambios)**.
**nota**  
Si aparece un error de “parámetro no válido”, compruebe el contacto del servicio de asistencia de AWS y confirme que ha especificado el nuevo límite de gasto de SMS correcto. Si sigue teniendo problemas, abra un caso en el AWS Support Center. 

Al crear su caso en el Centro de Soporte, asegúrese de incluir toda la información obligatoria para el tipo de solicitud que está enviando. De lo contrario, Soporte tendrá que comunicarse con usted para obtener esta información antes de continuar. Al enviar un caso detallado, contribuye a garantizar que su caso se gestione sin retrasos. Para conocer los detalles para determinados tipos de solicitudes de SMS, consulte los siguientes temas.

 Para obtener más información sobre los ID de remitente, consulte la siguiente documentación en la *Guía del usuario de AWS End User Messaging SMS*:


| AWS End User Messaging SMSTema de  | Descripción | 
| --- | --- | 
|  [Solicitud de un aumento de la cuota de gasto](https://docs.aws.amazon.com/sms-voice/latest/userguide/awssupport-spend-threshold.html)  |  La cuota de gasto determina la cantidad de dinero que podrá dedicar a enviar mensajes SMS a través de AWS End User Messaging SMS al mes.  | 
|  [Abrir un caso en el centro de asistencia para obtener un ID de remitente](https://docs.aws.amazon.com/sms-voice/latest/userguide/awssupport-sender-id.html)  |  Si tiene previsto enviar mensajes a destinatarios de un país donde es obligatorio el uso de los ID de remitente, puede solicitar un ID de remitente creando un caso en el Centro de Soporte.  | 

# Prácticas recomendadas para mensajería SMS de Amazon SNS
<a name="channels-sms-best-practices"></a>

**importante**  
Se ha actualizado la Guía para desarrolladores de SMS de Amazon SNS. Amazon SNS se ha integrado con [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html) para la entrega de mensajes SMS. Esta guía contiene la información más reciente sobre cómo crear, configurar y administrar los mensajes SMS de Amazon SNS.

Los usuarios de teléfonos móviles suelen tener una tolerancia muy baja a los mensajes SMS no solicitados. Las tasas de respuesta de las campañas de mensajes SMS no solicitados casi siempre serán bajas y, por tanto, obtendrá una baja rentabilidad de su inversión.

Además, los operadores de telefonía móvil auditan de forma continua a los remitentes de mensajes SMS masivos. Limitan o bloquean los mensajes de números que determinan que están enviando mensajes no solicitados. 

El envío de contenido no solicitado también es una infracción de la [política de uso aceptable de AWS](https://aws.amazon.com/aup/#No_E-Mail_or_Other_Message_Abuse). El equipo de Amazon SNS audita con regularidad las campañas de SMS y podría limitar o bloquear su capacidad de enviar mensajes si le consta que está enviando mensajes no solicitados.

Por último, en muchos países, regiones y jurisdicciones, existen diversas sanciones por el envío de mensajes SMS no solicitados. Por ejemplo, en Estados Unidos, la Ley federal de Protección al Usuario Telefónico (TCPA) establece que los consumidores tienen derecho a una indemnización de entre 500 y 1500 USD en concepto de daños (pagados por el remitente) por cada mensaje no solicitado que reciban.

En esta sección se describen diversas prácticas recomendadas que podrían ayudarle a mejorar la interacción con los clientes y evitar sanciones costosas. Sin embargo, tenga en cuenta que esta sección no contiene asesoramiento jurídico. Consulte siempre a un abogado para obtener asesoramiento jurídico.

## Cumpla las leyes, normativas y requisitos del operador.
<a name="channels-sms-best-practices-understand-laws"></a>

Puede enfrentarse a importantes multas y sanciones si infringe las leyes y normativas de los lugares en los que residen sus clientes. Por este motivo, es fundamental que conozca las leyes relacionadas con la mensajería SMS de cada país o región en los que haga negocios.

La lista siguiente incluye enlaces a las leyes más importantes que se aplican a las comunicaciones SMS en los principales mercados de todo el mundo.
+ **Estados Unidos**: la Ley Federal de Protección al Usuario Telefónico de 1991, también denominada TCPA, se aplica a ciertos tipos de mensajes SMS. Para obtener más información, consulte las [normativas y reglamentos](https://www.fcc.gov/document/telephone-consumer-protection-act-1991) en el sitio web de la Comisión Federal de Comunicaciones.
+ **Reino Unido**: las Normativas sobre la Privacidad y las Comunicaciones Electrónicas (directiva CE) de 2003, también denominada PECR, se aplican a ciertos tipos de mensajes SMS. Para obtener más información, consulte [What are PECR?](https://ico.org.uk/for-organisations/direct-marketing-and-privacy-and-electronic-communications/guide-to-pecr/what-are-pecr/) en el sitio web de la oficina del comisionado de información del Reino Unido.
+ **Unión Europea**: la Directiva sobre la Privacidad y las Comunicaciones Electrónicas de 2002, también denominada directiva ePrivacy, se aplica a algunos tipos de mensajes SMS. Para obtener más información, consulte el [texto completo de la ley](http://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32002L0058) en el sitio web Europa.eu.
+ **Canadá**: la Ley de Lucha contra el Spam Inalámbrico y de Internet, más comúnmente denominada Legislación AntiSpam de Canadá o CASL, se aplica a ciertos tipos de mensajes SMS. Para obtener más información, consulte el [texto completo de la ley](http://www.parl.ca/DocumentViewer/en/40-3/bill/C-28/first-reading) en el sitio web del parlamento canadiense.
+ **Japón**: la Ley del Reglamento de Transmisión de Correo Electrónico Específico puede aplicarse a ciertos tipos de mensajes SMS. Para obtener más información, consulte las [contramedidas de Japón contra el spam](https://www.japaneselawtranslation.go.jp/en/laws/view/3767/en) en el sitio web del Ministerio Japonés de Asuntos Internos y Comunicaciones.

Como remitente, estas leyes pueden aplicarse a usted incluso si su empresa u organización no tiene su sede en uno de estos países. Algunas de las leyes de esta lista se crearon originalmente para abordar el problema de las llamadas telefónicas o del correo electrónico no solicitados, pero se han interpretado o ampliado también para su aplicación a los mensajes SMS. Otros países y regiones pueden tener sus propias leyes relacionadas con la transmisión de mensajes SMS. Consulte a un abogado de cada país o región en la que se encuentren sus clientes para obtener asesoramiento jurídico.

En muchos países, los operadores locales tienen, en última instancia, la autoridad para determinar qué tipo de tráfico fluye a través de sus redes. Esto significa que los operadores podrían imponer restricciones al contenido de los SMS que superen los requisitos mínimos de las leyes locales.

## Obtención de permiso
<a name="channels-sms-best-practices-obtain-permission"></a>

Nunca envíe mensajes a destinatarios que no hayan pedido de forma explícita recibir los tipos específicos de mensajes que tiene pensado enviar. No comparta listas de suscripciones voluntarias, ni siquiera entre organizaciones de la misma empresa. 

Si los destinatarios pueden inscribirse para recibir sus mensajes mediante un formulario en línea, añada sistemas que impidan que los scripts automatizados suscriban a las personas sin su conocimiento. También debe limitar el número de veces que un usuario puede enviar un número de teléfono en una sola sesión.

Si recibe una solicitud de susripción voluntaria por SMS, envíe un mensaje al destinatario para pedirle que confirme que desea recibir mensajes suyos. No envíe a dicho destinatario ningún mensaje adicional hasta que confirme su suscripción. Un mensaje de confirmación de suscripción podría tener un aspecto similar al siguiente:

`Text YES to join ExampleCorp alerts. 2 msgs/month. Msg & data rates may apply. Reply HELP for help, STOP to cancel.`

Mantenga registros que incluyan la fecha, la hora y el origen de cada solicitud de alta y confirmación. Esto puede ser útil si un operador o agencia reguladora lo solicita y también puede ayudarle a realizar auditorías rutinarias de su lista de clientes.

### Flujo de trabajo de suscripciones voluntarias
<a name="channels-sms-best-practices-obtain-permission-optin"></a>

En algunos casos (como en el registro mediante una llamada gratuita o código abreviado en EE. UU.), los operadores de telefonía móvil exigen que proporcione simulaciones o capturas de pantalla de todo el flujo de trabajo de suscripción voluntaria. Las simulaciones o la captura de pantalla deben parecerse mucho al flujo de trabajo de suscripción que completarán los destinatarios. 

Sus simulaciones o capturas de pantalla deben incluir todas las declaraciones obligatorias que se enumeran a continuación para mantener el nivel más alto de conformidad. 

**Declaraciones obligatorias**
+ Una descripción del caso de uso de mensajería que enviará a través de su programa.
+ La frase “Se podrían aplicar cargos por el uso de datos y el envío de mensajes”.
+ Una indicación de la frecuencia con la que los destinatarios recibirán sus mensajes. Por ejemplo, un programa de mensajería recurrente podría decir “un mensaje a la semana”. En el caso de uso de autenticación multifactor o contraseña de un solo uso, se podría indicar lo siguiente: “la frecuencia de los mensajes varía” o “un mensaje por intento de inicio de sesión”.
+ Enlaces a los documentos de términos y condiciones y la política de privacidad. 

**Motivos comunes de rechazo de sucripciones voluntarias no válidas**
+ Si el nombre de la empresa proporcionado no coincide con el que aparece en la simulación o captura de pantalla. Cualquier relación que no sea obvia debe explicarse en la descripción del flujo de trabajo de suscripción.
+ Si parece que se va a enviar un mensaje al destinatario, pero no se obtiene ningún consentimiento explícito para hacerlo. El consentimiento explícito es un requisito de todos los mensajes.
+ Si parece que es necesario recibir un mensaje de texto para suscribirse a un servicio. Esto no es válido si el flujo de trabajo no ofrece ninguna alternativa a recibir un mensaje de suscripción voluntaria en otro formato, como un correo electrónico o una llamada de voz. 
+ Si el texto de la suscripción voluntaria se encuentra en su totalidad en los términos de servicio. Las declaraciones siempre deben presentarse al destinatario en el momento de la suscripción, en lugar de incluirse en un documento de política vinculado. 
+ Si un cliente ha dado su consentimiento para recibir un tipo de mensaje y le envía otro tipo de mensaje de texto. Por ejemplo, ha aceptado recibir contraseñas de un solo uso, pero también se le envían mensajes de sondeo y encuestas.
+ Si las declaraciones obligatorias (indicadas anteriormente) no se presentan a los destinatarios.

El siguiente ejemplo cumple los requisitos de los operadores de telefonía móvil en un caso de uso de autenticación multifactor.

![\[Una step-by-step maqueta del flujo de trabajo de suscripción voluntaria para habilitar la autenticación multifactor (MFA) en una cuenta de usuario con. ExampleCorp El proceso comienza cuando el usuario proporciona la información básica de la cuenta, como el nombre y el correo electrónico. A continuación, el usuario decide si desea habilitar la MFA para mayor seguridad. Si la MFA está habilitada, el usuario selecciona cómo quiere recibir el token de MFA, con opciones como un mensaje de texto o una llamada telefónica. Si el usuario selecciona un mensaje de texto, recibirá un SMS con un código de verificación. El último paso requiere que el usuario introduzca el código recibido para confirmar su número de teléfono y completar el proceso de suscripción. Esta simulación garantiza que se proporcionen todas las declaraciones necesarias para cumplir los requisitos de los mensajes SMS.\]](http://docs.aws.amazon.com/es_es/sns/latest/dg/images/best-practices-usecase.png)


Contiene texto e imágenes finales y muestra todo el flujo de suscripción voluntaria con anotaciones. En el flujo de suscripción, el cliente debe tomar medidas claras e intencionadas para dar su consentimiento para recibir mensajes de texto y se incluyen todas las declaraciones obligatorias.

### Otros tipos de flujo de trabajo de suscripción voluntaria
<a name="channels-sms-best-practices-obtain-permission-other"></a>

Los operadores de telefonía móvil también aceptan flujos de trabajo de suscripción voluntaria fuera de las aplicaciones y sitios web, como las suscripciones verbales o por escrito, si cumplen lo que se ha indicado anteriormente. Un flujo de trabajo de suscripción voluntaria y un guion verbal o escrito conformes con los requisitos sirven para recoger el consentimiento explícito del destinatario para recibir un tipo de mensaje específico. Un ejemplo sería el guion verbal que utiliza un agente de asistencia para obtener el consentimiento antes de registrar a alguien en una base de datos de servicios o un número de teléfono que aparece en un folleto promocional. Para proporcionar una simulación de estos tipos de flujos de trabajo de suscripción voluntaria, puede incluir una captura de pantalla de su script de suscripción, material de marketing o base de datos donde se recojan los números. Los operadores de telefonía móvil podrían hacer preguntas adicionales sobre estos casos de uso si el proceso de suscripción voluntaria no está claro o si el caso de uso supera ciertos volúmenes.

## No enviar a listas antiguas
<a name="channels-sms-best-practices-old-lists"></a>

La gente cambia de número de teléfono con frecuencia. Es posible que el número de teléfono del que obtuvo el consentimiento para contactar con esa persona hace dos años pertenezca ahora a otra persona. No utilice una lista antigua de números de teléfono para un nuevo programa de mensajería; de lo contrario, es probable que algunos mensajes fallen porque el número ya no está en servicio y que algunas personas se den de baja por no recordar haberle dado nunca su consentimiento.

## Auditoría de las listas de clientes
<a name="channels-sms-best-practices-audit-lists"></a>

Si envía campañas de SMS recurrentes, audite periódicamente sus listas de clientes. La auditoría de su lista de clientes garantiza que los únicos clientes que reciban sus mensajes sean aquellos interesados en recibirlos. 

Al auditar su lista, envíe a cada cliente que ha solicitado el alta un mensaje que le recuerde que ya está suscrito y facilítele información sobre cómo anular la suscripción. Un mensaje de recordatorio podría tener un aspecto similar al siguiente:

`You're subscribed to ExampleCorp alerts. Msg & data rates may apply. Reply HELP for help, STOP to unsubscribe.`

## Mantenimiento de registros
<a name="channels-sms-best-practices-keep-records"></a>

Mantenga registros que muestren cuándo ha solicitado cada cliente que usted le envíe mensajes SMS y qué mensajes envía a cada cliente. Muchos países y regiones de todo el mundo requieren que los remitentes de SMS mantengan estos registros de forma que se puedan recuperar fácilmente. Los operadores de telefonía móvil también podrían pedirle esta información en cualquier momento. La información exacta que debe proporcionar varía según el país o la región. Para obtener más información sobre los requisitos de conservación de registros, lea la normativa sobre mensajería SMS de cada país o región en que se encuentren sus clientes.

En algunas ocasiones, un operador o una agencia reguladora nos solicita que proporcionemos una prueba de que un cliente aceptó recibir mensajes de usted. En estas situaciones, se pondrá en Soporte contacto con usted para proporcionarle una lista de la información que necesita el transportista o la agencia. Si no puede proporcionar la información necesaria, podemos suspender su capacidad de enviar mensajes SMS adicionales.

## Procure que sus mensajes sean claros, sinceros y concisos
<a name="channels-sms-best-practices-appropriate-content"></a>

Los SMS son un medio único. El character-per-message límite de 160 significa que tus mensajes deben ser concisos. Es posible que las técnicas que se utilizan en otros canales de comunicación, como el correo electrónico, no se apliquen al canal de SMS e incluso parezcan deshonestas o engañosas cuando se utilizan con mensajes SMS. Si el contenido de sus mensajes no se ajusta a las prácticas recomendadas, es posible que los destinatarios hagan caso omiso de sus mensajes. En el peor de los casos, los operadores de telefonía móvil podrían considerar sus mensajes como spam y bloquear los mensajes que procedan de su número de teléfono.

En esta sección se ofrecen algunos consejos e ideas para crear un cuerpo de mensaje SMS eficaz.

### Identifíquese como remitente
<a name="channels-sms-best-practices-appropriate-content-identify"></a>

Sus destinatarios deberían poder saber inmediatamente que el mensaje es suyo. Los remitentes que siguen esta práctica recomendada utilizan un nombre identificativo (“nombre del programa”) al principio de cada mensaje.

**No haga lo siguiente:**  
`Your account has been accessed from a new device. Reply Y to confirm.`

**Mejor, pruebe esto:**  
`ExampleCorp Financial Alerts: You have logged in to your account from a new device. Reply Y to confirm, or STOP to opt-out.`

### No intentes hacer que tu mensaje parezca un person-to-person mensaje
<a name="channels-sms-best-practices-appropriate-content-p2p"></a>

Algunos profesionales de marketing se sienten tentados a darle un toque personal a sus mensajes SMS haciendo que parezcan provenir de una persona. Sin embargo, esta técnica puede hacer que parezca un intento de suplantación de identidad.

**No haga lo siguiente:**  
`Hi, this is Jane. Did you know that you can save up to 50% at Example.com? Click here for more info: https://www.example.com.`

**Mejor, pruebe esto:**  
`ExampleCorp Offers: Save 25-50% on sale items at Example.com. Click here to browse the sale: https://www.example.com. Text STOP to opt-out.`

### Tenga cuidado cuando hable de dinero
<a name="channels-sms-best-practices-appropriate-content-money"></a>

Los estafadores suelen aprovecharse del deseo de las personas de ahorrar y ganar dinero. No haga que las ofertas parezcan demasiado buenas para ser verdad. No intente engañar a la gente con el cebo del dinero. No utilice símbolos de monedas para hacer referencia al dinero.

**No haga lo siguiente:**  
`Save big $$$ on your next car repair by going to https://www.example.com.`

**Mejor, pruebe esto:**  
`ExampleCorp Offers: Your ExampleCorp insurance policy gets you discounts at 2300+ repair shops nationwide. More info at https://www.example.com. Text STOP to opt-out.`

### Use solo los caracteres necesarios
<a name="channels-sms-best-practices-appropriate-content-characters"></a>

Las empresas suelen incluir símbolos de marca comercial como ™ o ® en sus mensajes para proteger sus marcas comerciales. Sin embargo, estos símbolos no forman parte del conjunto de caracteres estándar (conocido como alfabeto GSM) que se puede incluir en un mensaje SMS de 160 caracteres. Cuando envía un mensaje que contiene uno de estos caracteres, se utiliza automáticamente un sistema de codificación de caracteres diferente, que solo admite 70 caracteres por cada parte del mensaje. Como resultado, el mensaje podría dividirse en varias partes. Dado que se le factura por cada parte del mensaje, enviar el mensaje completo podría costarte más de lo que esperaba. Además, es posible que sus destinatarios reciban varios mensajes secuenciales en lugar de un solo mensaje. Para obtener más información acerca de la codificación de caracteres SMS, consulte [Límites de caracteres de SMS en Amazon SNS](#channels-sms-limitations-characters).

**No haga lo siguiente:**  
`ExampleCorp Alerts: Save 20% when you buy a new ExampleCorp Widget® at example.com and use the promo code WIDGET.`

**Mejor, pruebe esto:**  
`ExampleCorp Alerts: Save 20% when you buy a new ExampleCorp Widget(R) at example.com and use the promo code WIDGET.`

**nota**  
Los dos ejemplos anteriores son casi idénticos, pero el primero contiene un símbolo de marca registrada (®), que no forma parte del alfabeto GSM. Por consiguiente, el primer ejemplo se envía en dos partes, mientras que el segundo ejemplo se envía como un solo mensaje.

### Use enlaces válidos y seguros
<a name="channels-sms-best-practices-appropriate-content-links"></a>

Si el mensaje incluye enlaces, compruébelos para asegurarse de que funcionan. Pruebe los enlaces en un dispositivo fuera de la red corporativa para asegurarse de que se resuelven correctamente. Debido al límite de 160 caracteres de los mensajes SMS, los mensajes muy largos URLs pueden dividirse en varios mensajes. Deberías usar dominios de redireccionamiento para acortarlos. URLs Sin embargo, no debe utilizar servicios gratuitos de acortamiento de enlaces, como tinyurl.com o bitly.com, porque los operadores suelen filtrar los mensajes que incluyen enlaces de estos dominios. Sin embargo, puede usar servicios de acortamiento de enlaces de pago siempre que sus enlaces apunten a un dominio que esté dedicado a un uso exclusivo por parte de su empresa u organización. 

**No haga lo siguiente:**  
`Go to https://tinyurl.com/4585y8mr today for a special offer!`

**Mejor, pruebe esto:**  
`ExampleCorp Offers: Today only, get an exclusive deal on an ExampleCorp Widget. See https://a.co/cFKmaRG for more info. Text STOP to opt-out.`

### Limite la cantidad de abreviaturas
<a name="channels-sms-best-practices-appropriate-content-abbrev"></a>

La limitación de 160 caracteres del canal de SMS lleva a algunos remitentes a utilizar muchas abreviaturas en sus mensajes. Sin embargo, el uso excesivo de abreviaturas les puede resultar poco profesional a muchos lectores y algunos usuarios podrían marcar su mensaje como spam. Es totalmente posible escribir un mensaje coherente sin utilizar un número excesivo de abreviaturas.

**No haga lo siguiente:**  
`Get a gr8 deal on ExampleCorp widgets when u buy a 4-pack 2day.`

**Mejor, pruebe esto:**  
`ExampleCorp Alerts: Today only—an exclusive deal on ExampleCorp Widgets at example.com. Text STOP to opt-out.`

## Responda correctamente
<a name="channels-sms-best-practices-respond-appropriately"></a>

Cuando un destinatario conteste a sus mensajes, asegúrese de responder con información útil. Por ejemplo, cuando un cliente responde a uno de sus mensajes con la palabra clave "HELP", envíele información sobre el programa al que está suscrito, el número de mensajes que va a enviar cada mes y las formas en que puede ponerse en contacto con usted para obtener más información. Una respuesta a un mensaje HELP podría tener un aspecto similar al siguiente:

`HELP: ExampleCorp alerts: email help@example.com or call 425-555-0199. 2 msgs/month. Msg & data rates may apply. Reply STOP to cancel.`

Cuando un cliente responda con la palabra clave "STOP", hágale saber que ya no recibirá más mensajes. Una respuesta STOP podría tener un aspecto similar al siguiente:

`You're unsubscribed from ExampleCorp alerts. No more messages will be sent. Reply HELP, email help@example.com, or call 425-555-0199 for more info.`

## Ajuste el envío en función del interés
<a name="channels-sms-best-practices-adjust-engagement"></a>

Las prioridades de los clientes pueden cambiar a lo largo del tiempo. Si los clientes dejan de encontrar útiles sus mensajes, podrían darse de baja de sus mensajes o incluso registrar los mensajes como no solicitados. Por estas razones, es importante que ajuste sus prácticas de envío en función del interés de los clientes.

Para los clientes que no suelan interaccionar con sus mensajes, debe ajustar la frecuencia de los mismos. Por ejemplo, si envía mensajes semanales a clientes interesados, podría crear un resumen mensual independiente para los clientes menos interesados. 

Por último, elimine de su lista a aquellos clientes que no muestren ningún interés. Este paso evita que los clientes se sientan frustrados con sus mensajes. También le ahorra dinero y ayuda a proteger su reputación como remitente.

## Envíe los mensajes en los momentos apropiados
<a name="channels-sms-best-practices-appropriate-times"></a>

Envíe mensajes solo durante el horario laborable diurno normal. Si envía mensajes a la hora de la cena o a medianoche, hay muchas probabilidades de que sus clientes se den de baja de sus listas para evitar ser molestados. Además, no tiene sentido enviar mensajes SMS cuando los clientes no pueden responder a ellos de forma inmediata. 

Si envía campañas o recorridos a audiencias muy grandes, compruebe bien las tasas de rendimiento de sus números de origen. Divida el número de destinatarios entre su tasa de rendimiento para determinar cuánto tiempo tardará en enviar los mensajes a todos sus destinatarios.

## Evite la fatiga del uso de distintos canales
<a name="channels-sms-best-practices-cross-channel-fatigue"></a>

En sus campañas, si utiliza varios canales de comunicación (como, por ejemplo, correo electrónico, SMS y mensajes push), no envíe el mismo mensaje en cada canal. Al enviar el mismo mensaje a la vez en más de un canal, los clientes perciben su comportamiento de envío como molesto en lugar de útil.

## Utilice códigos cortos dedicados
<a name="channels-sms-best-practices-dedicated-short-codes"></a>

Si utiliza códigos cortos, mantenga un código corto independiente para cada marca y cada tipo de mensaje. Por ejemplo, si su empresa tiene dos marcas, utilice un código corto independiente para cada una de ellas. Del mismo modo, si se envían mensajes transaccionales y promocionales, utilice un código corto independiente para cada tipo de mensaje. Para obtener más información sobre la solicitud de códigos cortos, consulte [Solicitud de códigos cortos para la mensajería SMS con AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-request-short-code.html) en la *Guía del usuario de AWS End User Messaging SMS *.

## Verifique los números de teléfono de destino
<a name="channels-sms-best-practices-verify-destination-numbers"></a>

Cuando envía mensajes SMS a través de Amazon SNS, se le factura por cada parte del mensaje que envía. El precio que paga por cada parte del mensaje varía en función del país o la región del destinatario. Para obtener información acerca de los precios de SMS, consulte [AWS Worldwide SMS Pricing](https://aws.amazon.com/sns/sms-pricing).

Cuando Amazon SNS acepta una solicitud para enviar un mensaje SMS (como resultado de una llamada a la [SendMessages](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#SendMessages)API o como resultado del lanzamiento de una campaña o un viaje), se te cobrará por enviar ese mensaje. Esto es así incluso si el destinatario previsto no recibe el mensaje al final. Por ejemplo, aunque el número de teléfono del destinatario ya no esté en servicio o el número al que le ha enviado el mensaje no fuera un número de teléfono móvil válido, se le facturará por enviar el mensaje.

Amazon SNS acepta solicitudes válidas para enviar mensajes SMS e intenta entregarlos. Por este motivo, debe asegurarse de que los números de teléfono a los que envía los mensajes sean números de teléfono móviles válidos. Puedes usarlo AWS End User Messaging SMS para enviar un mensaje de prueba para determinar si un número de teléfono es válido y qué tipo de número es (por ejemplo, móvil, fijo o VoIP). Para obtener más información, consulte [Envío de un mensaje de prueba con el simulador de SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/getting-started-tutorial.html#getting-started-tutorial-step3) en la *Guía del usuario de AWS End User Messaging SMS *.

## Diseñe teniendo en cuenta la redundancia
<a name="channels-sms-best-practices-redundancy"></a>

Para los programas de mensajería de misión crítica, le recomendamos que configure Amazon SNS en más de una Región de AWS. Amazon SNS está disponible en varios. Regiones de AWS Para obtener una lista de las regiones en las que está disponible Amazon SNS, consulte la [Referencia general de AWS](https://docs.aws.amazon.com/general/latest/gr/sns.html). 

Los números de teléfono que usa para los mensajes SMS, incluidos los códigos cortos, los códigos largos, los números gratuitos y los números 10DLC, no se pueden replicar en las Regiones de AWS. Por lo tanto, para utilizar Amazon SNS en varias regiones, debe solicitar números de teléfono distintos en cada región en la que vaya a utilizarlo. Por ejemplo, si utilizas un código corto para enviar mensajes de texto a destinatarios en los Estados Unidos, tendrás que solicitar códigos cortos separados en cada uno de los Región de AWS que vayas a usar.

En algunos países, también puede usar varios tipos de números de teléfono para aumentar la redundancia. Por ejemplo, en los Estados Unidos, puede solicitar códigos cortos, números 10DLC y números gratuitos. Cada uno de estos tipos de números de teléfono llega al destinatario por una ruta diferente. Tener varios tipos de números de teléfono disponibles, ya sea en el mismo número Región de AWS o repartidos entre varios Regiones de AWS, proporciona una capa adicional de redundancia, que puede ayudar a mejorar la resiliencia.

## Límites y restricciones de SMS
<a name="channels-sms-best-practices-limits"></a>

Para conocer los límites y restricciones de SMS, consulte [Límites y restricciones de SMS y MMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/sms-limitations.html) en la *Guía del usuario de AWS End User Messaging SMS *.

## Administración de palabras clave de cancelación de la suscripción
<a name="channels-sms-best-practices-optout-keywords"></a>

Los destinatarios de los SMS pueden usar los dispositivos para cancelar la suscripción a los mensajes respondiendo con una palabra clave. Para obtener más información, consulte [Desactivación de la recepción de mensajes SMS](sms_manage.md#sms_manage_optout).

## CreatePool
<a name="channels-sms-best-practices-createpool"></a>

Utilice la acción de la API `CreatePool` para crear un grupo nuevo y asociar una identidad de origen especificada al grupo. Para obtener más información, consulte [CreatePool](https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_CreatePool.html)la *referencia AWS End User Messaging SMS de la API*.

## PutKeyword
<a name="channels-sms-best-practices-putkeyword"></a>

Utilice la acción de la API `PutKeyword` para crear o actualizar una configuración de palabras clave en un número de teléfono o grupo de origen. Para obtener más información, consulta la Referencia de [PutKeyword](https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_PutKeyword.html)la *AWS End User Messaging SMS API*.

## Administración de la configuración de números
<a name="channels-sms-best-practices-number-settings"></a>

Para administrar la configuración de los códigos cortos y largos dedicados que solicitó a AWS Support y que asignó a su cuenta, consulte [Cambiar las capacidades de un número de teléfono con AWS CLI la](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-change-capabilitiy.html) entrada *AWS End User Messaging SMS*.

## Límites de caracteres de SMS en Amazon SNS
<a name="channels-sms-limitations-characters"></a>

Cada mensaje SMS puede contener hasta 140 bytes de información. El número de caracteres que se pueden incluir en cada mensaje SMS depende del tipo de caracteres que contiene el mensaje.

Si el mensaje solo utiliza [caracteres del conjunto de caracteres GSM 03.38](#channels-sms-limitations-characters-gsm-alphabet), también conocido como alfabeto GSM de 7 bits, puede contener hasta 160 caracteres. Si el mensaje contiene caracteres que no pertenecen al conjunto de caracteres GSM 03.38, puede tener hasta 70 caracteres. Cuando se envía un mensaje SMS, Amazon SNS determina automáticamente la codificación más eficiente que puede utilizarse.

Cuando un mensaje supera el número máximo de caracteres, se divide en varias partes. Cuando los mensajes se dividen en varias partes, cada parte contiene información adicional sobre la parte del mensaje que la precede. Cuando el dispositivo del destinatario recibe partes de mensajes separados de esta forma, utiliza esta información adicional para asegurarse de que todas las partes del mensaje se muestran en el orden correcto. Según el operador móvil y del dispositivo del destinatario, es posible que se muestren varios mensajes como un solo mensaje o como una secuencia de mensajes separados. Como resultado, el número máximo de caracteres de cada parte del mensaje se reduce a 153 (para los mensajes que solo contienen caracteres GSM 03.38) o a 67 (para los mensajes que contienen otros caracteres). Puede calcular cuántas partes de mensajes contiene su mensaje antes de enviarlo utilizando las herramientas de calculadora de longitud de SMS, varias de las cuales están disponibles en línea. El tamaño máximo admitido de cualquier mensaje es de 1600 caracteres GSM o 630 caracteres no GSM. Para obtener más información acerca del rendimiento y el tamaño de los mensajes, consulte [SMS character limits in Amazon Pinpoint](https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-sms-limitations-mps.html) en la *Guía del usuario de Amazon Pinpoint*.

Para ver el número de partes del mensaje de cada mensaje que envíe, primero debe habilitar los [ajustes de streaming de eventos](https://docs.aws.amazon.com/pinpoint/latest/userguide/settings-event-streams.html). Al hacerlo, Amazon SNS produce un evento `_SMS.SUCCESS` cuando el mensaje se entrega al proveedor de telefonía móvil del destinatario. El registro de eventos `_SMS.SUCCESS` contiene un atributo llamado `attributes.number_of_message_parts`. Este atributo especifica el número de partes de mensaje que contiene el mensaje.

**importante**  
Cuando envía un mensaje que contiene más de una parte de mensaje, se le cobrará el número de partes de mensaje incluidas en él.

### Conjunto de caracteres GSM 03.38
<a name="channels-sms-limitations-characters-gsm-alphabet"></a>

En la tabla siguiente, se muestran todos los caracteres del conjunto de caracteres GSM 03.38. Si envía un mensaje que solo incluye los caracteres que se muestran en la tabla, el mensaje puede contener hasta 160 caracteres. 


| Caracteres estándar GSM 03.38 | 
| --- | 
| A | B | C | D | E | F | G | H | I | J | K | L | M | 
| N | O | P | Q | R | S | T | U | V | W | X | Y | Z | 
| a | b | c | d | e | f | g | h | i | j | k | l | m | 
| n | o | p | q | r | s | t | u | v | w | x | y | z | 
| à | Å | å | Ä | ä | Ç | É | é | è | ì | Ñ | ñ | ò | 
| Ø | ø | Ö | ö | ù | Ü | ü | Æ | æ | ß | 0 | 1 | 2 | 
| 3 | 4 | 5 | 6 | 7 | 8 | 9 | & | \$1 | @ | : | , | ¤ | 
| \$1 | = | \$1 | > | \$1 | - | ¡ | ¿ | ( | < | % | . | \$1 | 
| £ | ? | " | ) | § | ; | ' | / | \$1 | ¥ | Δ | Φ | Γ | 
| Λ | Ω | Π | Ψ | Σ | Θ | Ξ |  |  |  |  |  |  | 

El conjunto de caracteres GSM 03.38 incluye varios símbolos además de los que se muestran en la tabla anterior. Sin embargo, cada uno de estos caracteres se cuenta como dos caracteres, ya que también incluye un carácter de escape invisible:
+ ^
+ \$1
+ \$1
+ \$1
+ [
+ ]
+ \$1
+ \$1
+ €

Por último, el conjunto de caracteres GSM 03.38 también incluye los siguientes caracteres no imprimibles:
+ Un carácter de espacio.
+ Un control de salto de línea, que indica el final de una línea de texto y el principio de otra.
+ Un control de retorno de carro, que cambia al principio de una línea de texto (normalmente después de un carácter de salto de línea).
+ Un control de escape, que se añade automáticamente a los caracteres de la lista anterior.

### Mensajes de ejemplo
<a name="channels-sms-limitations-characters-example-messages"></a>

Esta sección contiene varios mensajes SMS de ejemplo. Para cada ejemplo, esta sección muestra el número total de caracteres, así como el número de partes del mensaje.

**Ejemplo 1: mensaje largo que solo contiene caracteres en el alfabeto GSM 03.38**  
El siguiente mensaje solo contiene caracteres que están en el alfabeto GSM 03.38.

`Hello Carlos. Your Example Corp. bill of $100 is now available. Autopay is scheduled for next Thursday, April 9. To view the details of your bill, go to https://example.com/bill1.`

El mensaje anterior contiene 180 caracteres, por lo que debe dividirse en varias partes de mensaje. Cuando un mensaje se divide en varias partes de mensaje, cada una puede contener 153 caracteres GSM 03.38. Como resultado, este mensaje se envía como dos partes de mensaje.

**Ejemplo 2: mensaje que contiene caracteres de varios bytes**  
El siguiente mensaje contiene varios caracteres chinos, que no están incluidos en el alfabeto GSM 03.38. 

`亚马逊公司是一家总部位于美国西雅图的跨国电子商务企业，业务起始于线上书店，不久之后商品走向多元化。杰夫·贝佐斯于1994年7月创建了这家公司。`

El mensaje anterior contiene 71 caracteres. Sin embargo, debido a que casi todos los caracteres del mensaje no están incluidos en el alfabeto GSM 03.38, se envía como dos partes de mensaje. Cada una de estas partes de mensaje puede contener un máximo de 67 caracteres.

**Ejemplo 3: mensaje que contiene un único carácter que no es GSM**  
El siguiente mensaje contiene un único carácter que no forma parte del alfabeto GSM 03.38. En este ejemplo, el carácter es una comilla simple de cierre (’), que es un carácter diferente al apóstrofo normal ('). Las aplicaciones de procesamiento de textos como Microsoft Word suelen reemplazar automáticamente los apóstrofos por comillas simples de cierre. Si redacta sus mensajes SMS en Microsoft Word y los pega en Amazon SNS, debe quitar estos caracteres especiales y reemplazarlos por apóstrofos.

`John: Your appointment with Dr. Salazar’s office is scheduled for next Thursday at 4:30pm. Reply YES to confirm, NO to reschedule.`

El mensaje anterior contiene 130 caracteres. Sin embargo, debido a que contiene el carácter de comilla simple de cierre, que no forma parte del alfabeto GSM 03.38, se envía como dos partes de mensaje.

Si reemplaza el carácter de comilla simple de cierre en este mensaje por un apóstrofo (que forma parte del alfabeto GSM 03.38), el mensaje se envía como una sola parte de mensaje.

# Envío de notificaciones push para móvil con Amazon SNS
<a name="sns-mobile-application-as-subscriber"></a>

Puede usar Amazon SNS para enviar mensajes de notificaciones push directamente a aplicaciones instaladas en dispositivos móviles. Los mensajes de notificaciones push enviados a un punto de conexión móvil pueden mostrarse en la aplicación móvil como mensajes de alerta, actualizaciones de insignias o incluso alertas de sonido. 

![\[Información general sobre las notificaciones push para móvil de Amazon SNS\]](http://docs.aws.amazon.com/es_es/sns/latest/dg/images/sns-mobile-push-notifications.png)


**Topics**
+ [Cómo funcionan las notificaciones de usuario de Amazon SNS](#sns-how-user-notifications-work)
+ [Configuración de notificaciones push con Amazon SNS](#sns-user-notifications-process-overview)
+ [Configuración de una aplicación móvil en Amazon SNS](mobile-push-send.md)
+ [Uso de Amazon SNS para notificaciones push para móvil](mobile-push-notifications.md)
+ [Atributos de aplicaciones móviles de Amazon SNS](sns-msg-status.md)
+ [Notificaciones de eventos de aplicación de Amazon SNS para aplicaciones móviles](application-event-notifications.md)
+ [Acciones de la API de inserción móvil](mobile-push-api.md)
+ [Errores comunes de la API de notificaciones push para móvil de Amazon SNS](mobile-push-api-error.md)
+ [Uso del atributo de mensaje de “time-to-live” de Amazon SNS para las notificaciones push para móvil](sns-ttl.md)
+ [Regiones compatibles con aplicaciones móviles de Amazon SNS](sns-mobile-push-supported-regions.md)
+ [Prácticas recomendadas para administrar notificaciones push para móvil en Amazon SNS](mobile-push-notifications-best-practices.md)

## Cómo funcionan las notificaciones de usuario de Amazon SNS
<a name="sns-how-user-notifications-work"></a>

Los mensajes de notificaciones de inserción se envían a dispositivos móviles y a escritorios utilizando uno de los siguientes servicios de notificaciones de inserción compatibles: 
+ Amazon Device Messaging (ADM)
+ Servicio de notificaciones push de Apple (APNs) para iOS y Mac OS X
+ Baidu Cloud Push (Baidu)
+ Firebase Cloud Messaging (FCM)
+ Servicio de notificaciones push de Microsoft para Windows Phone (MPNS)
+ Servicios de notificación push de Windows (WNS)

Los servicios de notificaciones push, como APNs FCM, mantienen una conexión con cada aplicación y dispositivo móvil asociado registrados para usar su servicio. Cuando una aplicación y un dispositivo móvil se registran, el servicio de notificaciones push devuelve un token de dispositivo. Amazon SNS utiliza el token de dispositivo para crear un punto de enlace móvil al que puede enviar mensajes de notificaciones push directos. Para que Amazon SNS pueda comunicarse con los diferentes servicios de notificaciones push, debe enviar las credenciales de su servicio de notificaciones push a Amazon SNS para que las utilice en su nombre. Para obtener más información, consulte [Configuración de notificaciones push con Amazon SNS](#sns-user-notifications-process-overview). 

 Además de enviar mensajes de notificaciones push directos, también puede utilizar Amazon SNS para enviar mensajes a puntos de enlace móviles suscritos a un tema. El concepto es el mismo que para la suscripción a un tema de otros tipos de puntos de enlace, como Amazon SQS, HTTP/S, correo electrónico y SMS, tal y como se describe en [¿Qué es Amazon SNS?](welcome.md). La diferencia radica en que Amazon SNS se comunica mediante servicios de notificaciones push para que los puntos de enlace móviles suscritos reciban los mensajes de notificaciones push enviados al tema.

## Configuración de notificaciones push con Amazon SNS
<a name="sns-user-notifications-process-overview"></a>

1. [Obtenga las credenciales y el token de dispositivo](sns-prerequisites-for-mobile-push-notifications.md) para las plataformas móviles que desea admitir.

1. Utilice las credenciales para crear un objeto de aplicación de plataforma (`PlatformApplicationArn`) mediante Amazon SNS. Para obtener más información, consulte [Creación de una aplicación de plataforma de Amazon SNS](mobile-push-send-register.md).

1. Utilice las credenciales obtenidas para solicitar un token de dispositivo para su aplicación móvil y el dispositivo del servicio de notificaciones push. El token que reciba representa su aplicación móvil y el dispositivo.

1. Utilice el token de dispositivo y `PlatformApplicationArn` para crear un objeto de punto de enlace de plataforma (`EndpointArn`) mediante Amazon SNS. Para obtener más información, consulte [Configuración de un punto de conexión de plataforma de Amazon SNS para notificaciones móviles](mobile-platform-endpoint.md).

1. Utilice el `EndpointArn` para [publicar un mensaje en una aplicación de un dispositivo móvil](mobile-push-send.md). Para obtener más información, consulte [Mensajería directa para dispositivos móviles de Amazon SNS](mobile-push-notifications.md#mobile-push-send-directmobile) y la API [Publicar](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html) en la Referencia de la API de Amazon Simple Notification Service.

# Configuración de una aplicación móvil en Amazon SNS
<a name="mobile-push-send"></a>

En esta sección se describe cómo configurar aplicaciones móviles en la Consola de administración de AWS con la información descrita en [Requisitos previos para las notificaciones de usuario de Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md).

# Requisitos previos para las notificaciones de usuario de Amazon SNS
<a name="sns-prerequisites-for-mobile-push-notifications"></a>

Para empezar a utilizar las notificaciones push para móvil de Amazon SNS, necesita lo siguiente:
+ Un conjunto de credenciales para conectarse a uno de los servicios de notificaciones push compatibles: ADM, Baidu APNs, FCM, MPNS o WNS.
+ Un token de dispositivo o ID de registro para la aplicación y el dispositivo móviles.
+ Amazon SNS configurado para enviar mensajes de notificaciones de inserción a los puntos de enlace móviles.
+ Una aplicación móvil que esté registrada y configurada para utilizar uno de los servicios de notificaciones de inserción compatibles.

Para registrar su aplicación a un servicio de notificaciones push, tiene que seguir varios pasos. Amazon SNS necesita parte de la información que proporciona al servicio de notificaciones push para poder enviar mensajes de notificaciones push al punto de enlace móvil. En general, necesita las credenciales necesarias para establecer una conexión con el servicio de notificaciones de inserción, un token de dispositivo o ID de registro (que represente el dispositivo y la aplicación móviles) que haya recibido del servicio de notificaciones de inserción y la aplicación móvil registrada en el servicio de notificaciones de inserción. 

La forma exacta que las credenciales adoptan varía según la plataforma móvil, pero, en todos los casos, estas credenciales se deben enviar mientras se establece conexión con la plataforma. Se genera un conjunto de credenciales para cada aplicación móvil, que debe utilizarse para enviar un mensaje a cualquier instancia de dicha aplicación. 

Los nombres específicos variarán según el servicio de notificaciones de inserción que se utilice. *Por ejemplo, si se utiliza APNs como servicio de notificaciones push, se necesita un token de dispositivo.* O bien, cuando utilice FCM, el token de dispositivo equivalente se denomina *ID de registro*. El *token de dispositivo* o el *ID de registro* es una cadena que el sistema operativo del dispositivo móvil envía a la aplicación. Sirve para identificar de forma exclusiva una instancia de una aplicación móvil que se ejecuta en un determinado dispositivo móvil y puede considerarse un identificador único de este par concreto de aplicación y dispositivo. 

Amazon SNS almacena las credenciales (además de otras configuraciones) como recurso de aplicación de una plataforma. Los tokens de dispositivo (de nuevo con algunos parámetros adicionales) se representan como objetos denominados *puntos de conexión de la plataforma*. Cada punto de enlace de la plataforma pertenece a una aplicación de plataforma específica y es posible comunicarse con cada uno de ellos usando las credenciales que se almacenan en su correspondiente aplicación de plataforma.

En las secciones siguientes se incluyen los requisitos previos de cada uno de los servicios de notificaciones push compatibles. Una vez que hayas obtenido la información necesaria, puedes enviar un mensaje de notificación push mediante la Consola de administración de AWS función push móvil de Amazon SNS. APIs Para obtener más información, consulte [Configuración de notificaciones push con Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview). 

# Creación de una aplicación de plataforma de Amazon SNS
<a name="mobile-push-send-register"></a>

Para que Amazon SNS envíe notificaciones a puntos de conexión móviles, ya sea directamente o mediante suscripciones a un tema, primero debe crear una aplicación de plataforma. Después de registrar la aplicación en AWS, tendrá que crear un punto de conexión tanto para la aplicación como para el dispositivo móvil. Este punto de conexión permite a Amazon SNS enviar mensajes al dispositivo.

**Para crear una aplicación de plataforma, siga estos pasos:**

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el panel de navegación, seleccione **Notificaciones push**.

1. En la sección **Platform applications** (Aplicaciones de plataforma), elija **Create platform application** (Crear aplicación de plataforma).

1. Elija su **Región de AWS**. Para obtener una lista de las regiones de AWS en las que puede crear aplicaciones móviles, consulte [Regiones compatibles con aplicaciones móviles de Amazon SNS](sns-mobile-push-supported-regions.md).

1. Introduzca los siguientes **detalles de la aplicación**:
   + **Nombre de la aplicación**: escriba un **nombre** de la aplicación de plataforma. El nombre puede contener entre 1 y 256 caracteres y puede incluir mayúsculas y minúsculas, números, guiones, guiones bajos y puntos.
   + **Plataforma de notificaciones push**: seleccione el **servicio de notificaciones** adecuado en el que esté registrada la aplicación (por ejemplo, Apple Push Notification service (APNs) o Firebase Cloud Messaging (FCM)).

1. Según la plataforma que haya seleccionado, tendrá que proporcionar credenciales específicas:
   + Para **APNs** (servicio de notificaciones push de Apple): elija entre la autenticación **basada en tokens** o la **basada en certificados**.
     + Para la autenticación basada en tokens, cargue un **archivo.p8** (generado mediante Keychain Access).
     + Para la autenticación basada en certificados, cargue un **archivo.p12** (también exportado desde Keychain Access).
   + Para **FCM** (Firebase Cloud Messaging): introduzca la **clave de servidor** desde la consola de Firebase.
   + Para **otras plataformas** (como ADM o GCM): introduzca las **claves de API** o **credenciales** correspondientes.

1. Tras introducir los detalles necesarios, elija **Crear aplicación de plataforma**. Esta acción registra la aplicación en Amazon SNS y crea el objeto de aplicación de plataforma correspondiente.

1. Tras la creación, Amazon SNS genera y devuelve un [https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html) (nombre de recurso de Amazon). Este ARN identifica de forma exclusiva la aplicación de su plataforma y se utiliza al crear puntos de conexión para dispositivos móviles.

# Configuración de un punto de conexión de plataforma de Amazon SNS para notificaciones móviles
<a name="mobile-platform-endpoint"></a>

Cuando una aplicación y un dispositivo móvil se registran en un servicio de notificaciones push (como APNs Firebase Cloud Messaging), el servicio de notificaciones push devuelve un token de dispositivo. Amazon SNS utiliza este token de dispositivo para crear un punto de conexión de plataforma, que actúa como destino para enviar mensajes de notificación push directos a la aplicación del dispositivo. El punto de conexión de la plataforma actúa como puente y enruta los mensajes enviados por Amazon SNS al servicio de notificaciones push para su entrega al dispositivo móvil correspondiente. Para obtener más información, consulte [Requisitos previos para las notificaciones de usuario de Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md) y [Configuración de notificaciones push con Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview).

## Descripción de los tokens de dispositivo y los puntos de conexión de plataforma
<a name="device-token-platform-endpoint"></a>

Un token de dispositivo identifica de forma exclusiva un dispositivo móvil registrado en un servicio de notificaciones push (por ejemplo APNs, Firebase Cloud Messaging). Cuando una aplicación se registra en el servicio de notificaciones push, genera un token de dispositivo específico para esa aplicación y ese dispositivo. Amazon SNS utiliza este token de dispositivo para crear un punto de conexión de plataforma dentro de la aplicación de plataforma correspondiente.

El punto de conexión de la plataforma permite a Amazon SNS enviar mensajes de notificación push al dispositivo a través del servicio de notificaciones push, de forma que mantiene la conexión entre la aplicación y el dispositivo del usuario.

## Creación de un punto de enlace de plataforma
<a name="mobile-platform-endpoint-create"></a>

Para insertar notificaciones push en una aplicación con Amazon SNS, primero debe registrarse el token de dispositivo de la aplicación en Amazon SNS llamando a la acción de creación del punto de enlace de plataforma. Esta acción toma el nombre de recurso de Amazon (ARN) de la aplicación de plataforma y el token de dispositivo como parámetros y devuelve el ARN del punto de enlace de plataforma creado.

La acción [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html) hace lo siguiente:
+ Si el punto de conexión de plataforma ya existe, no lo vuelve a crear. Devuelva al intermediario el ARN del punto de enlace de plataforma existente.
+ Si ya existe el punto de conexión de plataforma con el mismo token de dispositivo pero diferentes opciones, no lo vuelve a crear. Envíe una excepción al intermediario.
+ Si el punto de conexión de plataforma no existe, lo crea. Devuelva al intermediario el ARN del punto de enlace de plataforma que acaba de crear.

No debe llamar a la acción de creación de un punto de enlace de plataforma inmediatamente cada vez que se inicie una aplicación; este enfoque no siempre proporciona un punto de enlace que funcione. Esto puede ocurrir, por ejemplo, cuando una aplicación se desinstala y se vuelve a instalar en el mismo dispositivo, y su punto de enlace que ya existe, pero está deshabilitado. Un proceso de registro correcto debe realizar las operaciones siguientes:

1. Asegurarse de que exista un punto de enlace de plataforma para esta combinación de aplicación y dispositivo.

1. Asegurarse de que el token de dispositivo del punto de enlace de plataforma es el último token de dispositivo válido.

1. Asegurarse de que el punto de enlace de plataforma esté habilitado y listo para ser utilizado.

## Pseudocódigo
<a name="mobile-platform-endpoint-pseudo-code"></a>

El siguiente pseudocódigo describe una práctica recomendada para crear un punto de enlace de plataforma que funcione, sea actual y esté habilitado en una amplia variedad de condiciones de partida. Este enfoque funciona tanto si se trata de la primera vez que la aplicación se registra o no, como si el punto de enlace de plataforma de esta aplicación ya existe, o si el punto de enlace de plataforma está habilitado, tiene el token de dispositivo correcto, etc. Es seguro llamarlo varias veces seguidas, ya que no creará puntos de enlace de plataforma duplicados ni cambiará un punto de enlace de plataforma si ya está actualizado y activado.

```
retrieve the latest device token from the mobile operating system
if (the platform endpoint ARN is not stored)
  # this is a first-time registration
  call create platform endpoint
  store the returned platform endpoint ARN
endif

call get endpoint attributes on the platform endpoint ARN 

if (while getting the attributes a not-found exception is thrown)
  # the platform endpoint was deleted 
  call create platform endpoint with the latest device token
  store the returned platform endpoint ARN
else 
  if (the device token in the endpoint does not match the latest one) or 
      (GetEndpointAttributes shows the endpoint as disabled)
    call set endpoint attributes to set the latest device token and then enable the platform endpoint
  endif
endif
```

Este enfoque se puede utilizar siempre que la aplicación quiera registrarse o volver a registrarse. También se puede utilizar para notificar a Amazon SNS un cambio en el token del dispositivo. En este caso, solo tiene que llamar a la acción con el valor de token del último dispositivo. Tenga en cuenta los elementos siguientes de este enfoque:
+ Hay dos casos en los que puede llamar a la acción de crear un punto de enlace de plataforma. Puede llamarse justo al principio, cuando la aplicación no conoce su propio ARN de punto de enlace de plataforma, como es el caso durante un primer registro. También se puede llamar si la llamada inicial a la acción `GetEndpointAttributes` genera un error con una excepción “no encontrado”, como ocurriría si la aplicación conoce su ARN de punto de conexión, pero este se ha eliminado.
+ Se llama a la acción `GetEndpointAttributes` para verificar el estado del punto de conexión de plataforma, aunque dicho punto de conexión se acabe de crear. Esto ocurre cuando el punto de enlace de plataforma ya existe, pero está deshabilitado. En este caso, la acción de creación del punto de enlace de plataforma se realiza correctamente, pero no habilita el punto de enlace de plataforma, por lo que debe comprobar el estado del punto de enlace de plataforma antes de devolver el resultado correcto.

## AWS Ejemplo de SDK
<a name="mobile-platform-endpoint-sdk-examples"></a>

En el siguiente código se muestra cómo implementar el pseudocódigo anterior mediante los clientes de Amazon SNS proporcionados por. AWS SDKs

Para usar un AWS SDK, debe configurarlo con sus credenciales. Para obtener más información, consulte [Los archivos de configuración y credenciales compartidos](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) en la *Guía de referencia de herramientas AWS SDKs y herramientas*.

------
#### [ CLI ]

**AWS CLI**  
**Creación de un punto de conexión de aplicación de plataforma**  
En el siguiente ejemplo de `create-platform-endpoint`, se crea un punto de conexión para la aplicación de plataforma especificada mediante el token especificado.  

```
aws sns create-platform-endpoint \
    --platform-application-arn arn:aws:sns:us-west-2:123456789012:app/GCM/MyApplication \
    --token EXAMPLE12345...
```
Salida:  

```
{
      "EndpointArn": "arn:aws:sns:us-west-2:1234567890:endpoint/GCM/MyApplication/12345678-abcd-9012-efgh-345678901234"
}
```

------
#### [ Java ]

**SDK para Java 2.x**  
 Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.CreatePlatformEndpointRequest;
import software.amazon.awssdk.services.sns.model.CreatePlatformEndpointResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 *
 * In addition, create a platform application using the AWS Management Console.
 * See this doc topic:
 *
 * https://docs.aws.amazon.com/sns/latest/dg/mobile-push-send-register.html
 *
 * Without the values created by following the previous link, this code examples
 * does not work.
 */

public class RegistrationExample {
    public static void main(String[] args) {
        final String usage = """

            Usage:     <token> <platformApplicationArn>

            Where:
               token - The device token or registration ID of the mobile device. This is a unique 
               identifier provided by the device platform (e.g., Apple Push Notification Service (APNS) for iOS devices, Firebase Cloud Messaging (FCM) 
               for Android devices) when the mobile app is registered to receive push notifications.

               platformApplicationArn - The ARN value of platform application. You can get this value from the AWS Management Console.\s

            """;

        if (args.length != 2) {
            System.out.println(usage);
            return;
        }

        String token = args[0];
        String platformApplicationArn = args[1];
        SnsClient snsClient = SnsClient.builder()
            .region(Region.US_EAST_1)
            .build();

        createEndpoint(snsClient, token, platformApplicationArn);
    }
    public static void createEndpoint(SnsClient snsClient, String token, String platformApplicationArn) {
        System.out.println("Creating platform endpoint with token " + token);
        try {
            CreatePlatformEndpointRequest endpointRequest = CreatePlatformEndpointRequest.builder()
                .token(token)
                .platformApplicationArn(platformApplicationArn)
                .build();

            CreatePlatformEndpointResponse response = snsClient.createPlatformEndpoint(endpointRequest);
            System.out.println("The ARN of the endpoint is " + response.endpointArn());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
        }
    }
}
```

------

 Para obtener más información, consulte [Acciones de la API de inserción móvil](mobile-push-api.md).

## Resolución de problemas
<a name="mobile-platform-endpoint-problems"></a>

### Llamar repetidamente a la acción de creación de un punto de enlace de plataforma con un token de dispositivo obsoleto
<a name="mobile-platform-endpoint-problems-outdated"></a>

En especial para los puntos de conexión de FCM, puede que piense que es mejor almacenar el primer token de dispositivo generado por la aplicación y llamar a la acción de creación de punto de conexión de plataforma con dicho token de dispositivo cada vez que se inicia la aplicación. Esto puede parecer correcto, dado que la aplicación no tiene que administrar el estado del token de dispositivo y Amazon SNS actualizará automáticamente el token de dispositivo a su valor más reciente. Sin embargo, esta solución presenta una serie de problemas graves:
+ Amazon SNS depende de los comentarios de FCM para actualizar los tokens de dispositivo vencidos en tokens de dispositivo nuevos. FCM retiene información en tokens de dispositivo antiguos durante un tiempo, aunque no de forma indefinida. Cuando FCM se olvide de la conexión entre el token de dispositivo antiguo y el nuevo, Amazon SNS ya no podrá actualizar el token de dispositivo almacenado en el punto de enlace de plataforma a su valor correcto; en su lugar, desactivará el punto de enlace de plataforma.
+ La aplicación de plataforma contendrá varios puntos de enlace de plataforma correspondientes al mismo token de dispositivo.
+ Amazon SNS impone una cuota a la cantidad de puntos de enlace de plataforma que se pueden crear empezando por el mismo token de dispositivo. Al final, la creación de los nuevos puntos de enlace generará un error con la excepción de parámetro no válido y el siguiente mensaje de error: "This endpoint is already registered with a different token".

Para obtener más información acerca de la administración de puntos de conexión de FCM, consulte [Administración de los puntos de conexión de Firebase Cloud Messaging en Amazon SNS](sns-fcm-endpoint-management.md).

### Reactivación de un punto de enlace de plataforma asociado a un token de dispositivo no válido
<a name="mobile-platform-endpoint-problems-invalid"></a>

Cuando una plataforma móvil (como APNs FCM) informa a Amazon SNS de que el token de dispositivo utilizado en la solicitud de publicación no es válido, Amazon SNS deshabilita el punto de enlace de la plataforma asociado a ese token de dispositivo. A continuación, Amazon SNS rechaza las publicaciones posteriores que se efectúen en ese token de dispositivo. Aunque le parezca que es mejor volver a activar el punto de enlace de plataforma y seguir publicando, en la mayoría de los casos esta solución no funciona: los mensajes que se publican no se entregan y el punto de enlace de plataforma se vuelve a desactivar poco después.

Esto se debe a que el token de dispositivo asociado al punto de enlace de plataforma en realidad no es válido. Las entregas que se le hacen no pueden realizarse correctamente, puesto que el token ya no corresponde a ninguna aplicación instalada. La próxima vez que se publique en ella, la plataforma móvil volverá a informar a Amazon SNS que el token de dispositivo no es válido y Amazon SNS volverá a desactivar el punto de enlace de plataforma.

Para volver a habilitar un punto de enlace de plataforma desactivado, debe asociarlo a un token de dispositivo válido (con una llamada de acción de definición de los atributos del punto de enlace) y después habilitarlo. Solo entonces las entregas a dicho punto de enlace de plataforma se realizarán correctamente. La única vez en que volver a habilitar un punto de enlace de plataforma sin actualizar su token de dispositivo funcione será cuando un token de dispositivo que no era válido y estaba asociado a dicho punto de enlace vuelva a ser válido. Esto puede ocurrir, por ejemplo, cuando se desinstala una aplicación y se vuelve a instalar en el mismo dispositivo móvil y recibe el mismo token de dispositivo. El enfoque que acabamos de presentar realiza esta operación asegurándose de volver a habilitar un punto de enlace de plataforma solo después de comprobar que el token de dispositivo que tiene asociado es el más actual disponible.

# Integración de tokens de dispositivo con Amazon SNS para las notificaciones móviles
<a name="mobile-push-send-devicetoken"></a>

La primera vez que registras una aplicación y un dispositivo móvil en un servicio de notificaciones, como el Servicio de Notificaciones Push de Apple (APNs) y Firebase Cloud Messaging (FCM), el servicio devuelve IDs los identificadores del dispositivo o el registro. Se tokens/IDs añaden a Amazon SNS para crear un punto final para la aplicación y el dispositivo mediante la [https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html)API. Una vez creado el punto de conexión, se devuelve un [https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html), que Amazon SNS utiliza para dirigir las notificaciones a la aplicación o dispositivo correctos.

Puede añadir los identificadores de dispositivo o el registro IDs a Amazon SNS de las siguientes maneras:
+ Añada manualmente un único token a través del Consola de administración de AWS
+ Cargue varios tokens utilizando la API [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)
+ Registre los tokens para dispositivos futuros

****Para añadir manualmente un identificador de dispositivo o un identificador de registro****

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el panel de navegación, seleccione **Notificaciones push**.

1. En la sección **Aplicaciones de plataforma**, seleccione la aplicación y, a continuación, elija **Editar**. Si aún no ha creado una aplicación de plataforma, siga la guía de [Creación de una aplicación de plataforma de Amazon SNS](mobile-push-send-register.md) para hacerlo ahora.

1. Seleccione **Crear punto de conexión**.

1. En el cuadro **Token de punto de conexión**, introduzca el **token** o el **ID de registro**, en función del servicio de notificaciones que utilice (por ejemplo, el ID de registro de FCM).

1. (Opcional) Introduzca datos adicionales en el campo **Datos de usuario**. Estos datos deben estar codificados en UTF-8 y ocupar menos de 2 KB.

1. Seleccione **Crear punto de conexión**.

Una vez creado el punto de conexión, puede enviar mensajes directamente al dispositivo móvil o a dispositivos móviles que estén suscritos a un tema de Amazon SNS.

****Cómo cargar varios tokens utilizando la API `CreatePlatformEndpoint`****

En los siguientes pasos se muestra cómo utilizar la aplicación Java (`bulkupload`paquete) de ejemplo proporcionada por AWS para cargar varios tokens (tokens de dispositivo o registro IDs) a Amazon SNS. Puede utilizar esta aplicación de muestra como ayuda para comenzar a cargar sus tokens. 
**nota**  
Los siguientes pasos utilizan el IDE de Eclipse Java. En los pasos se da por sentado que ha instalado AWS SDK para Java y dispone de las credenciales AWS de seguridad correspondientes. Cuenta de AWS Para obtener más información, consulte [AWS SDK para Java](https://aws.amazon.com/sdkforjava/). Para obtener más información sobre credenciales, consulte [Credenciales de seguridad de AWS](https://docs.aws.amazon.com/general/latest/gr/getting-aws-sec-creds.html) en la *Guía del usuario de IAM*. 

1. Descargue y descomprima el archivo [snsmobilepush.zip](samples/snsmobilepush.zip). 

1. Cree un nuevo **Proyecto de Java** en Eclipse e importe la carpeta `SNSSamples` al proyecto. 

1. Descargue la [Biblioteca OpenCSV](http://sourceforge.net/projects/opencsv/) y añádala a la ruta de compilación.

1. En el archivo `BulkUpload.properties`, especifique lo siguiente: 
   + Su `ApplicationArn` (ARN de la aplicación de plataforma).
   + La ruta completa del archivo CSV que contiene los tokens.
   + Nombres de los archivos de registro de los tokens correctos y fallidos. Por ejemplo, `goodTokens.csv` y `badTokens.csv`.
   + (Opcional) Una configuración para el delimitador, el carácter de comilla y el número de subprocesos que se van a utilizar.

   El `BulkUpload.properties` finalizado ha de tener un aspecto similar al siguiente:

   ```
   applicationarn: arn:aws:sns:us-west-2:111122223333:app/FCM/fcmpushapp
   csvfilename: C:\\mytokendirectory\\mytokens.csv
   goodfilename: C:\\mylogfiles\\goodtokens.csv
   badfilename: C:\\mylogfiles\\badtokens.csv
   delimiterchar: ','
   quotechar: '"'
   numofthreads: 5
   ```

1.  Ejecute la aplicación **BatchCreatePlatformEndpointSample.java** para cargar los tokens en Amazon SNS. Los tokens que se carguen correctamente se registrarán en `goodTokens.csv`, mientras que los que tengan un formato incorrecto se registrarán en `badTokens.csv`.

**Cómo registrar tokens de dispositivo para futuras instalaciones de aplicaciones**

Dispone de dos opciones para realizar este proceso:

**Uso del servicio de Amazon Cognito**  
Su aplicación móvil puede utilizar credenciales de seguridad temporales para crear puntos de conexión. Para generar credenciales temporales se recomienda utilizar Amazon Cognito. Para obtener más información, consulte la *[Guía para desarrolladores de Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/)*.   
Para realizar un seguimiento de los [registros](application-event-notifications.md) de aplicaciones, utilice los eventos de Amazon SNS para recibir notificaciones cuando se cree un nuevo ARNs punto final.  
Como alternativa, puede utilizar la API [https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html) para recuperar la lista de puntos de conexión registrados.

**Uso de un servidor proxy**  
Si la infraestructura de la aplicación ya admite el registro de dispositivos en el momento de la instalación, puede usar el servidor como proxy. Reenviará los tokens de dispositivo a Amazon SNS a través de la API [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html).  
El ARN del punto de conexión creado por Amazon SNS se devolverá y el servidor podrá almacenarlo para la publicación de mensajes futuros.

# Métodos de autenticación de notificaciones push de Amazon SNS Apple
<a name="sns-apple-authentication-methods"></a>

Puede autorizar a Amazon SNS a enviar notificaciones push a su aplicación de iOS o macOS proporcionando información que le identifique como desarrollador de esa aplicación. Para autenticarse, proporcione una *clave* o un *certificado* [al crear una aplicación de plataforma](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html); ambas cosas puede obtenerlas en su cuenta de Apple Developer.

**Clave de firma de token**  
Clave de firma privada que Amazon SNS utiliza para firmar los tokens de autenticación del Servicio de Notificaciones Push de Apple (APNs).  
Si proporciona una clave de firma, Amazon SNS utiliza un token para autenticarse en cada notificación push que envíe. APNs Con su clave de firma, puede enviar notificaciones automáticas a entornos de APNs producción y entornos aislados.  
La clave de firma no caduca, y se puede utilizar la misma clave de firma para varias aplicaciones. Para obtener más información, consulta Cómo [comunicarse APNs mediante el uso de tokens de autenticación](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_token-based_connection_to_apns) en la sección de **ayuda de la cuenta de desarrollador** del sitio web de Apple.

**Certificate**  
Un certificado TLS que Amazon SNS utiliza para autenticarse cuando envías APNs notificaciones push. Puede obtener este certificado en su cuenta de Apple Developer.  
Los certificados caducan al cabo de un año. Cuando eso sucede, se debe crear un nuevo certificado y proporcionárselo a Amazon SNS. Para obtener más información, consulte [Establecer una conexión basada en certificados en el APNs sitio web para desarrolladores de Apple](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns).

**Para administrar la APNs configuración mediante la consola de AWS administración**

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el panel de navegación, seleccione **Notificaciones push**.

1. En la sección **Aplicaciones de plataforma**, seleccione la **aplicación** cuya APNs configuración desee editar y, a continuación, elija **Editar**. Si aún no ha creado una aplicación de plataforma, siga la guía de [Creación de una aplicación de plataforma de Amazon SNS](mobile-push-send-register.md) para hacerlo ahora.

1. Seleccione **Editar** para modificar la configuración de la aplicación de su plataforma.

1. En la sección **Tipo de autenticación**, elija una de las siguientes opciones:
   + **Autenticación basada en fichas** (recomendada para integraciones modernas APNs )
   + **Autenticación basada en certificados** (método anterior)

1. Configure sus **credenciales** en función del tipo de autenticación:
   + **Para la autenticación basada en token:**
     + Cargue el **archivo .p8**, que es la clave de firma del token que ha descargado de su cuenta de Apple Developer.
     + Introduzca el **ID de clave de firma** que encontrará en la cuenta de Apple Developer. Vaya a **Certificados**, **perfiles IDs y** **claves** y seleccione la **clave** que desee usar.
     + Proporcione el **Identificador del equipo** de su cuenta de Apple Developer. Puede encontrarlo en la página Membresía.
     + Introduzca el **Identificador de paquete** asignado a su aplicación. Puede encontrarlo en Certificados IDs y perfiles, aplicación IDs.
   + **Para la autenticación basada en certificados:**
     + Cargue el **archivo .p12** del certificado TLS. Puede exportar este archivo desde Acceso a Llaveros en macOS después de descargar el certificado desde su cuenta de Apple Developer.
     + Si ha asignado una **contraseña** al certificado .p12, introdúzcala aquí.

1. Tras introducir las credenciales necesarias, seleccione **Guardar cambios** para actualizar la configuración.

# Configuración de autenticación en la integración de Amazon SNS con Firebase Cloud Messaging
<a name="sns-fcm-authentication-methods"></a>

En este tema se describe cómo obtener las credenciales de la API de FCM (HTTP v1) necesarias de Google para utilizarlas con la AWS API, AWS CLI y la. Consola de administración de AWS

**importante**  
26 de marzo de 2024: Amazon SNS admite la API de HTTP v1 de FCM para dispositivos Apple y destinos de Webpush. Le recomendamos que migre sus aplicaciones de notificaciones push para el móvil existentes a la última API de HTTP v1 de FCM el 1 de junio de 2024 o antes para evitar que se interrumpan las aplicaciones.  
18 de enero de 2024: Amazon SNS introdujo la compatibilidad con la API de HTTP v1 de FCM para la entrega de notificaciones push para móvil a dispositivos Android.  
20 de junio de 2023: Google dejó de utilizar su API de HTTP antigua de Firebase Cloud Messaging (FCM). Amazon SNS ahora admite la entrega a todos los tipos de dispositivos mediante la API de HTTP v1 de FCM. Le recomendamos que migre sus aplicaciones de notificaciones push para el móvil existentes a la última API de HTTP v1 de FCM el 1 de junio de 2024 o antes para evitar que se interrumpa el servicio.

Puede autorizar a Amazon SNS a enviar notificaciones push a sus aplicaciones proporcionando información que le identifique como desarrollador de esa aplicación. Para autenticarse, proporcione una **clave de API** o un **token** [al crear una aplicación de plataforma](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html). Puede obtener la siguiente información desde la [consola de aplicaciones de Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds):

**Clave de API**  
La clave de API es una credencial que se utiliza al llamar a la API heredada de Firebase. Google eliminará el legado APIs de FCM el 20 de junio de 2024. Si utiliza actualmente una clave de API como credencial de plataforma, puede actualizar la credencial de plataforma seleccionando **Token** como opción y subiendo el archivo JSON asociado a su aplicación de Firebase.

**Token**  
Al llamar a la API de HTTP v1, se utiliza un token de acceso de corta duración. Esta es la API sugerida de Firebase para enviar notificaciones push. Para generar los tokens de acceso, Firebase proporciona a los desarrolladores un conjunto de credenciales en forma de archivo de clave privada (también denominado archivo service.json).

## Requisito previo
<a name="sns-fcm-authentication-prerequisite"></a>

Debe obtener sus credenciales service.json de FCM para poder empezar a administrar la configuración de FCM en Amazon SNS. Para obtener tus credenciales de service.json, consulta Cómo [migrar de una versión antigua de FCM APIs a HTTP v1](https://firebase.google.com/docs/cloud-messaging/migrate-v1) en la documentación de Google Firebase.

## Administración de la configuración de FCM mediante la CLI
<a name="sns-fcm-authentication-api"></a>

Puedes crear notificaciones push de FCM mediante la AWS API. La cantidad y el tamaño de los recursos de Amazon SNS en una AWS cuenta son limitados. Para obtener más información, consulte [Puntos de conexión y cuotas de Amazon Simple Notification Service](https://docs.aws.amazon.com/general/latest/gr/sns.html) en la *Guía de Referencia general de AWS *.

**Para crear una notificación push de FCM junto con un tema AWS (API) de Amazon SNS**  
Cuando se utilizan credenciales de **clave**, `PlatformCredential` es `API key`. Cuando se utilizan credenciales de **token**, `PlatformCredential` es un archivo de clave privada con formato JSON:
+ [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)

**Para recuperar un tipo de credencial de FCM para un tema (API) de Amazon SNS existente AWS**  
Recupera el tipo de credencial `"AuthenticationMethod": "Token"` o ` "AuthenticationMethod": "Key"`:
+ [GetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetPlatformApplicationAttributes.html)

**Para configurar un atributo de FCM para un tema AWS (API) de Amazon SNS existente**  
Establece el atributo de FCM:
+ [SetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html)

## Administración de la configuración de FCM mediante la consola
<a name="sns-fcm-authentication-cli"></a>

Puedes crear notificaciones push de FCM mediante la AWS Command Line Interface (CLI). La cantidad y el tamaño de los recursos de Amazon SNS en una AWS cuenta son limitados. Para obtener más información, consulte [Amazon Simple Notification Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/sns.html) (Limitación y cuotas de Amazon Simple Notification Service). 

**Para crear una notificación push de FCM junto con un tema de Amazon SNS (AWS CLI)**  
Cuando se utilizan credenciales de **clave**, `PlatformCredential` es `API key`. Cuando se utilizan credenciales de **token**, `PlatformCredential` es un archivo de clave privada con formato JSON. Al utilizar la AWS CLI, el archivo debe estar en formato de cadena y se deben ignorar los caracteres especiales. Para formatear el archivo correctamente, Amazon SNS recomienda utilizar el siguiente comando: `SERVICE_JSON=`jq @json <<< cat service.json``
+ [create-platform-application](https://docs.aws.amazon.com/cli/latest/reference/sns/create-platform-application.html)

**Para recuperar un tipo de credencial de FCM para un tema existente de Amazon SNS (AWS CLI)**  
Recupera el tipo de credencial `"AuthenticationMethod": "Token"` o ` "AuthenticationMethod": "Key"`:
+ [get-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/get-platform-application-attributes.html)

**Para establecer un atributo de FCM para un tema existente de Amazon SNS (AWS CLI)**  
Establece el atributo de FCM:
+ [set-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/set-platform-application-attributes.html)

## Administración de la configuración de FCM (consola)
<a name="sns-fcm-authentication-console"></a>

Realice los siguientes pasos para introducir y administrar sus credenciales de Firebase Cloud Messaging (FCM) en Amazon SNS.

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el panel de navegación, seleccione **Notificaciones push**.

1. En la sección **Aplicaciones de plataforma**, seleccione la **aplicación de plataforma FCM** cuyas credenciales desee editar y, a continuación, elija **Editar**.

1. En la sección **Credenciales de Firebase Cloud Messaging**, elija una de las siguientes opciones:
   + **Autenticación basada en tokens** (método recomendado): cargue el **archivo de clave privada** (JSON) que ha descargado de la consola de Firebase. Este archivo contiene las credenciales necesarias para generar tokens de acceso de corta duración para las notificaciones de FCM. Para obtener este archivo:

     1. Vaya a la [consola de aplicaciones de Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds).

     1. En **Configuración del proyecto**, seleccione **Cloud Messaging**.

     1. Descargue el archivo JSON de **clave privada** (para usarlo en el método de autenticación basado en tokens).
   + **Autenticación con clave de API**: si prefiere utilizar el método de autenticación de clave de API anterior, introduzca la **clave de API de Google** en el campo proporcionado. Para obtener este archivo:

     1. Vaya a la [consola de aplicaciones de Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds).

     1. En **Configuración de proyecto**, seleccione **Cloud Messaging**.

     1. Copie la **clave del servidor** (clave de API) que se utilizará para enviar notificaciones.

1. Cuando termine de realizar los cambios, seleccione **Save changes** (Guardar cambios).

**Temas relacionados**
+ [Uso de cargas útiles de Google Firebase Cloud Messaging v1 en Amazon SNS](sns-fcm-v1-payloads.md)

# Administración de los puntos de conexión de Firebase Cloud Messaging en Amazon SNS
<a name="sns-fcm-endpoint-management"></a>

## Administración y mantenimiento de los tokens de dispositivo
<a name="sns-managing-device-tokens"></a>

Puede garantizar la capacidad de entrega de las notificaciones push de su aplicación móvil siguiendo estos pasos:

1. Guarde todos los tokens del dispositivo, el punto final ARNs de Amazon SNS correspondiente y las marcas de tiempo en el servidor de aplicaciones.

1. Elimine todos los tokens obsoletos y elimine el punto de enlace de Amazon ARNs SNS correspondiente.

Cuando la aplicación se inicie por primera vez, recibirá un token de dispositivo (también llamado token de registro) para el dispositivo. Este token de dispositivo lo crea el sistema operativo del dispositivo y está vinculado a su aplicación de FCM. Una vez que reciba este token de dispositivo, podrá registrarlo en Amazon SNS como punto de conexión de la plataforma. Le recomendamos que almacene el token de dispositivo, el ARN del punto de conexión de la plataforma de Amazon SNS y la marca de tiempo guardándolos en su servidor de aplicaciones o en otro almacén persistente. Para configurar su aplicación de FCM para recuperar y almacenar tokens de dispositivos, consulte [Retrieve and store registration tokens](https://firebase.google.com/docs/cloud-messaging/manage-tokens#retrieve-and-store-registration-tokens) en la documentación de *Firebase* de Google.

Es importante que mantenga up-to-date los tokens. Los tokens de los dispositivos de sus usuarios pueden cambiar si se produce alguna de las circunstancias siguientes:

1. La aplicación móvil se restaura en un dispositivo nuevo.

1. El usuario desinstala o actualiza la aplicación.

1. El usuario borra los datos de la aplicación.

Cuando el token de su dispositivo cambie, le recomendamos que actualice el punto de conexión de Amazon SNS correspondiente con el nuevo token. Esto permite a Amazon SNS seguir comunicándose con el dispositivo registrado. Puede hacerlo implementando el siguiente pseudocódigo en su aplicación móvil. Describe una práctica recomendada para crear y mantener puntos de conexión de plataforma habilitados. Este enfoque se puede utilizar cada vez que se inician las aplicaciones móviles o como un trabajo programado en segundo plano.

### Pseudocódigo
<a name="sns-device-token-pseudo-code"></a>

Use el siguiente pseudocódigo de FCM para administrar y mantener los tokens de dispositivo.

```
retrieve the latest token from the mobile OS
if (endpoint arn not stored)
    # first time registration
    call CreatePlatformEndpoint
    store returned endpoint arn
endif

call GetEndpointAttributes on the endpoint arn 

if (getting attributes encountered NotFound exception)
    #endpoint was deleted 
    call CreatePlatformEndpoint
    store returned endpoint arn
else 
    if (token in endpoint does not match latest) or 
        (GetEndpointAttributes shows endpoint as disabled)
        call SetEndpointAttributes to set the 
                     latest token and enable the endpoint
    endif
endif
```

Para obtener más información sobre los requisitos de actualización de los tokens, consulte [Update Tokens on a Regular Basis](https://firebase.google.com/docs/cloud-messaging/manage-tokens#update-tokens-on-a-regular-basis) en la documentación de *Firebase* de Google.

## Detección de tokens no válidos
<a name="sns-detecting-invalid-tokens"></a>

Cuando se envíe un mensaje a un punto de conexión de FCM v1 con un token de dispositivo no válido, Amazon SNS recibirá una de las siguientes excepciones:
+ `UNREGISTERED` (HTTP 404): cuando Amazon SNS reciba esta excepción, usted recibirá un error en la entrega con un `FailureType` de `InvalidPlatformToken` y un `FailureMessage` de *Platform token associated with the endpoint is not valid*. Amazon SNS deshabilitará el punto de conexión de la plataforma cuando se produzca un error en una entrega con esta excepción.
+ `INVALID_ARGUMENT` (HTTP 400): cuando Amazon SNS recibe esta excepción, significa que el token del dispositivo o la carga útil del mensaje no son válidos. Para obtener más información, consulta [ErrorCode](https://firebase.google.com/docs/reference/fcm/rest/v1/ErrorCode)la documentación de *Firebase* de Google.

Como `INVALID_ARGUMENT` se puede devolver en cualquiera de estos casos, Amazon SNS devolverá un `FailureType` de `InvalidNotification` y un `FailureMessage` de *Notification body is invalid*. Cuando reciba este error, compruebe que la carga útil es correcta. Si es correcto, verifica que el token del dispositivo lo sea up-to-date. Amazon SNS deshabilitará el punto de conexión de la plataforma cuando se produzca un error en una entrega con esta excepción.

Otro caso en el que se producirá un evento de error de entrega `InvalidPlatformToken` es cuando el token de dispositivo registrado no pertenezca a la aplicación que intenta enviar ese mensaje. En este caso, Google devolverá un error *SENDER\$1ID\$1MISMATCH*. Amazon SNS deshabilitará el punto de conexión de la plataforma cuando se produzca un error en una entrega con esta excepción.

Todos los códigos de error observados recibidos de la API v1 de FCM están disponibles CloudWatch cuando configuras el [registro del estado de entrega](topics-attrib.md) de tu aplicación. 

Para recibir los eventos de entrega de su aplicación, consulte [Eventos de aplicaciones disponibles](application-event-notifications.md#application-event-notifications-events).

## Eliminación de tokens obsoletos
<a name="sns-removing-stale-tokens"></a>

Los tokens se consideran obsoletos una vez que la entrega de mensajes al dispositivo de punto de conexión comienza a fallar. Amazon SNS establece estos tokens obsoletos como puntos de conexión deshabilitados para su aplicación de plataforma. Cuando publique en un punto de conexión deshabilitado, Amazon SNS devolverá un evento `EventDeliveryFailure` con el `FailureType` de `EndpointDisabled` y un `FailureMessage` de *Endpoint is disabled*. Para recibir los eventos de entrega de su aplicación, consulte [Eventos de aplicaciones disponibles](application-event-notifications.md#application-event-notifications-events).

Cuando reciba este error de Amazon SNS, tendrá que eliminar o actualizar el token obsoleto de su aplicación de plataforma.

# Uso de Amazon SNS para notificaciones push para móvil
<a name="mobile-push-notifications"></a>

 En esta sección, se describe cómo enviar un mensaje de notificaciones push móviles.

## Publicación de un tema
<a name="mobile-push-send-topicmobile"></a>

También puede utilizar Amazon SNS para enviar mensajes a puntos de enlace móviles suscritos a un tema. El concepto es el mismo que para la suscripción a un tema de otros tipos de puntos de enlace, como Amazon SQS, HTTP/S, correo electrónico y SMS, tal y como se describe en [¿Qué es Amazon SNS?](welcome.md). La diferencia es que Amazon SNS se comunica a través de servicios de notificación, tales como Apple Push Notification Service (APNS) y Google Firebase Cloud Messaging (FCM). Mediante los servicios de notificaciones, los puntos de enlace móviles suscritos reciben las notificaciones enviadas al tema. 

## Mensajería directa para dispositivos móviles de Amazon SNS
<a name="mobile-push-send-directmobile"></a>

Puede enviar mensajes de notificaciones push de Amazon SNS directamente a un punto de enlace que represente una aplicación en un dispositivo móvil. 

**Para enviar un mensaje directo**

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el panel de navegación, elija **Push notifications** (Notificaciones push).

1. En la página de **notificaciones push móviles**, en la sección **Aplicaciones de la plataforma**, elige el nombre de la aplicación, por ejemplo***MyApp***.

1. En la ***MyApp*** página, en la sección **Puntos finales**, elija un punto final y, a continuación, elija **Publicar mensaje**.

1. En la página **Publish message to endpoint (Publicar mensaje en punto de enlace)**, escriba el mensaje que aparecerá en la aplicación del dispositivo móvil y, a continuación, elija **Publish message (Publicar mensaje)**.

   Amazon SNS envía el mensaje de notificación al servicio de notificaciones de la plataforma que, a su vez, envía el mensaje a la aplicación.

# Publicación de notificaciones de Amazon SNS con cargas útiles específicas de la plataforma
<a name="sns-send-custom-platform-specific-payloads-mobile-devices"></a>

Puede usar Amazon SNS Consola de administración de AWS o Amazon APIs para enviar mensajes personalizados con cargas útiles específicas de la plataforma a dispositivos móviles. Para obtener información sobre el uso de Amazon SNS APIs, consulte [Acciones de la API de inserción móvil](mobile-push-api.md) y el `SNSMobilePush.java` archivo en. `[snsmobilepush.zip](samples/snsmobilepush.zip)` 

## Envío de mensajes con formato JSON
<a name="mobile-push-send-json"></a>

Cuando envíe cargas específicas de la plataforma, los datos deben tener un formato de cadenas de pares de clave-valor JSON, con las comillas incluidas entre caracteres de escape.

En los siguientes ejemplos, se muestra un mensaje personalizado para la plataforma de FCM.

```
{
"GCM": "{\"fcmV1Message\": {\"message\": {\"notification\": {\"title\": \"Hello\", \"body\": \"This is a test.\"}, \"data\": {\"dataKey\": \"example\"}}}}"
}
```

## Envío de mensajes específicos de la plataforma
<a name="mobile-push-send-platform"></a>

Además de enviar datos personalizados como pares de clave-valor, puede enviar pares de clave-valor específicos de la plataforma.

En el siguiente ejemplo, se muestra la inclusión de los parámetros de `time_to_live` y `collapse_key` después de los pares clave-valor de datos personalizados en el parámetro `data` de FCM.

```
{
"GCM": "{\"fcmV1Message\": {\"message\": {\"notification\": {\"title\": \"TitleTest\", \"body\": \"Sample message for Android or iOS endpoints.\"}, \"data\":{\"time_to_live\": 3600,\"collapse_key\":\"deals\"}}}}"
}
```

Para obtener una lista de los pares de clave-valor admitidos en cada uno de los servicios de notificaciones push admitidos en Amazon SNS, consulte lo siguiente: 

**importante**  
Amazon SNS ahora admite la API de HTTP v1 de Firebase Cloud Messaging (FCM) para enviar notificaciones push para móvil a dispositivos Android.  
26 de marzo de 2024: Amazon SNS admite la API de HTTP v1 de FCM para dispositivos Apple y destinos de Webpush. Le recomendamos que migre sus aplicaciones de notificaciones push para el móvil existentes a la última API de HTTP v1 de FCM el 1 de junio de 2024 o antes para evitar que se interrumpan las aplicaciones.
+ [Referencia clave de carga útil en la](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html#/apple_ref/doc/uid/TP40008194-CH17-SW1) documentación APNs 
+ [Protocolo HTTP de Firebase Cloud Messaging](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages) en la documentación de FCM
+ [Enviar un mensaje](https://developer.amazon.com/sdk/adm/sending-message.html) en la documentación de ADM

## Envío de mensajes a una aplicación en varias plataformas
<a name="mobile-push-send-multiplatform"></a>

Para enviar un mensaje a una aplicación instalada en dispositivos para varias plataformas, como FCM y APNs, primero debes suscribir los puntos de enlace móviles a un tema de Amazon SNS y, a continuación, publicar el mensaje en el tema.

El siguiente ejemplo muestra un mensaje para enviar a los puntos de enlace móviles suscritos en APNs FCM y ADM: 

```
{ 
  "default": "This is the default message which must be present when publishing a message to a topic. The default message will only be used if a message is not present for 
one of the notification platforms.",     
  "APNS": "{\"aps\":{\"alert\": \"Check out these awesome deals!\",\"url\":\"www.amazon.com\"} }",
  "GCM": "{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"}}",
  "ADM": "{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"}}" 
}
```

## Enviar mensajes APNs como alertas o notificaciones en segundo plano
<a name="mobile-push-send-message-apns-background-notification"></a>

Amazon SNS puede enviar mensajes a APNs as `alert` o `background` notificaciones (para obtener más información, consulte Cómo enviar [actualizaciones en segundo plano a su aplicación](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app) en la APNs documentación).
+ Una `alert` APNs notificación informa al usuario mediante la visualización de un mensaje de alerta, la reproducción de un sonido o la adición de una insignia al icono de la aplicación.
+ Una `background` APNs notificación activa o indica a la aplicación que actúe en función del contenido de la notificación, sin informar al usuario.

### Especificar valores de encabezado personalizados APNs
<a name="specify-custom-header-value"></a>

Recomendamos especificar valores personalizados para el [atributo de mensaje `AWS.SNS.MOBILE.APNS.PUSH_TYPE` reservado](sns-message-attributes.md#sns-attrib-mobile-reserved) mediante la acción de la `Publish` API Amazon SNS AWS SDKs, o la. AWS CLI En el siguiente ejemplo de la CLI `content-available` se establece como `1` y `background` como `apns-push-type` para el tema especificado. 

```
aws sns publish \
--endpoint-url https://sns.us-east-1.amazonaws.com \
--target-arn arn:aws:sns:us-east-1:123456789012:endpoint/APNS_PLATFORM/MYAPP/1234a567-bc89-012d-3e45-6fg7h890123i \
--message '{"APNS_PLATFORM":"{\"aps\":{\"content-available\":1}}"}' \
--message-attributes '{ \
  "AWS.SNS.MOBILE.APNS.TOPIC":{"DataType":"String","StringValue":"com.amazon.mobile.messaging.myapp"}, \
  "AWS.SNS.MOBILE.APNS.PUSH_TYPE":{"DataType":"String","StringValue":"background"}, \
  "AWS.SNS.MOBILE.APNS.PRIORITY":{"DataType":"String","StringValue":"5"}}' \
--message-structure json
```

**nota**  
Asegúrese de que la estructura JSON sea válida. Añada una coma después de cada par de clave-valor, excepto en el último.

### Deducir el encabezado del tipo APNs push a partir de la carga útil
<a name="inferring-push-type-header-from-payload"></a>

Si no establece el `apns-push-type` APNs encabezado, Amazon SNS establece el encabezado en `alert` o en `background` función de la `content-available` clave del `aps` diccionario de la configuración de carga con formato JSON. APNs 

**nota**  
Amazon SNS se puede inferir solo en encabezados `alert` o `background`, aunque el encabezado `apns-push-type` se puede establecer en otros valores.
+ `apns-push-type` toma el valor `alert`
  + Si el diccionario `aps` contiene `content-available` defina en `1` y *una o varias claves* que activan las interacciones del usuario.
  + Si el diccionario `aps` contiene `content-available` defina en `0` *o* si la clave `content-available` está ausente.
  + Si el valor de la clave `content-available` no es un entero o un booleano.
+ `apns-push-type` toma el valor `background`
  + Si el diccionario de `aps` *solo* contiene `content-available` ajustado en `1` y *ninguna otra clave* que desencadene las interacciones del usuario.
**importante**  
Si Amazon SNS envía un objeto de configuración sin procesar APNs como notificación solo en segundo plano, debes incluir `content-available` set to `1` en el diccionario. `aps` Aunque puede incluir claves personalizadas, el diccionario de `aps` no debe contener ninguna clave que desencadene las interacciones del usuario (por ejemplo, alertas, insignias o sonidos).

A continuación se muestra un ejemplo de objeto de configuración sin procesar.

```
{
  "APNS": "{\"aps\":{\"content-available\":1},\"Foo1\":\"Bar\",\"Foo2\":123}"
}
```

En este ejemplo, Amazon SNS establece el `apns-push-type` APNs encabezado del mensaje en. `background` Cuando Amazon SNS detecta que en el diccionario de `apn` se encuentra la clave de `content-available` definida en `1`, pero no hay ninguna otra clave que pueda desencadenar las interacciones del usuario, establece el encabezado en `background`.

# Uso de cargas útiles de Google Firebase Cloud Messaging v1 en Amazon SNS
<a name="sns-fcm-v1-payloads"></a>

Amazon SNS admite el uso de la API de HTTP v1 de FCM para enviar notificaciones a destinos de Android, iOS y Webpush. En este tema se proporcionan ejemplos de la estructura de carga útil al publicar notificaciones push para el móvil mediante la CLI o la API de Amazon SNS.

Puede incluir los siguientes tipos de mensajes en su carga útil al enviar una notificación de FCM:
+ **Mensaje de datos**: la aplicación cliente gestiona un mensaje de datos, que contiene pares de clave-valor personalizados. Al crear un mensaje de datos, debe incluir la clave `data` con un objeto JSON como valor y, a continuación, introducir los pares de clave-valor personalizados.
+ **Mensaje de notificación** o **mensaje para mostrar**: un mensaje de notificación contiene un conjunto predefinido de claves administradas por el SDK de FCM. Estas claves varían en función del tipo de dispositivo en el que se realice la entrega. Para obtener más información sobre las claves de notificación específicas de la plataforma, consulte lo siguiente:
  + [Claves de notificación de Android](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages)
  + [Claves de notificación de APNS](https://developer.apple.com/documentation/usernotifications/generating-a-remote-notification)
  + [Claves de notificación Webpush](https://developer.mozilla.org/en-US/docs/Web/API/Notification)

Para obtener más información sobre los tipos de mensajes de FCM, consulte [Message types](https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages) en la documentación de *Firebase* de Google.

## Uso de la estructura de carga útil de FCM v1 para enviar mensajes
<a name="sending-messages-using-v1-payload"></a>

Si va a crear una aplicación de FCM por primera vez o desea utilizar las características de FCM v1, puede optar por enviar una carga útil con formato de FCM v1. Para ello, debe incluir la clave de nivel superior `fcmV1Message`. *Para obtener más información sobre la creación de cargas útiles de FCM v1, consulte [Migrar de una versión antigua de FCM APIs a HTTP v1](https://firebase.google.com/docs/cloud-messaging/migrate-v1) y [Personalizar un mensaje en todas las plataformas](https://firebase.google.com/docs/cloud-messaging/concept-options#customizing-a-message-across-platforms) en la documentación de Firebase de Google.*

**Ejemplo de carga útil de FCM v1 enviada a Amazon SNS:**

**nota**  
El valor de la clave `GCM` utilizado en el siguiente ejemplo debe codificarse como una cadena al publicar una notificación mediante Amazon SNS. 

```
{
  "GCM": "{ 
    \"fcmV1Message\": { 
      \"validate_only\": false,
      \"message\": {
        \"notification\": {
          \"title\": \"string\",
          \"body\": \"string\"
        },
        \"data\": {
          \"dataGen\": \"priority message\"
        },
        \"android\": {
          \"priority\": \"high\",
          \"notification\": {
            \"body_loc_args\": [\"string\"],
            \"title_loc_args\": [\"string\"],
            \"sound\": \"string\",
            \"title_loc_key\": \"string\",
            \"title\": \"string\",
            \"body\": \"string\",
            \"click_action\": \"clicky_clacky\",
            \"body_loc_key\": \"string\"
          },
          \"data\": {
            \"dataAndroid\": \"priority message\"
          },
          \"ttl\": \"10023.32s\"
        },
        \"apns\": {
          \"payload\": {
            \"aps\": {
              \"alert\": {
                \"subtitle\": \"string\",
                \"title-loc-args\": [\"string\"],
                \"title-loc-key\": \"string\",
                \"loc-args\": [\"string\"],
                \"loc-key\": \"string\",
                \"title\": \"string\",
                \"body\": \"string\"
              },
              \"category\": \"Click\",
              \"content-available\": 0,
              \"sound\": \"string\",
              \"badge\": 5
            }
          }
        },
        \"webpush\": {
          \"notification\": {
            \"badge\": \"5\",
            \"title\": \"string\",
            \"body\": \"string\"
          },
          \"data\": {
            \"dataWeb\": \"priority message\"
          }
        }
      }
    }
  }"
}
```

Al enviar una carga útil JSON, asegúrese de incluir el atributo `message-structure` en la solicitud y establecerlo en `json`.

**Ejemplo con la CLI:**

```
aws sns publish --topic $TOPIC_ARN --message '{"GCM": "{\"fcmV1Message\": {\"message\":{\"notification\":{\"title\":\"string\",\"body\":\"string\"},\"android\":{\"priority\":\"high\",\"notification\":{\"title\":\"string\",\"body\":\"string\"},\"data\":{\"customAndroidDataKey\":\"custom key value\"},\"ttl\":\"0s\"},\"apns\":{\"payload\":{\"aps\":{\"alert\":{\"title\":\"string\", \"body\":\"string\"},\"content-available\":1,\"badge\":5}}},\"webpush\":{\"notification\":{\"badge\":\"URL\",\"body\":\"Test\"},\"data\":{\"customWebpushDataKey\":\"priority message\"}},\"data\":{\"customGeneralDataKey\":\"priority message\"}}}}", "default": "{\"notification\": {\"title\": \"test\"}"}' --region $REGION --message-structure json
```

Para obtener más información sobre el envío de cargas útiles con formato FCM v1, consulte lo siguiente en la documentación de *Firebase* de Google:
+ [Migre de la versión antigua de FCM a la versión HTTP v1 APIs ](https://firebase.google.com/docs/cloud-messaging/migrate-v1)
+ [About FCM messages](https://firebase.google.com/docs/cloud-messaging/concept-options#customizing_a_message_across_platforms)
+ [REST Resource: projects.messages](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages)

## Uso de la estructura de carga útil de FCM v1 para enviar mensajes a la API de FCM v1
<a name="sns-fcm-v1-legacy-payload-structure"></a>

Al migrar a FCM v1, no tiene que cambiar la estructura de la carga útil que utilizaba para sus credenciales antiguas. Amazon SNS transforma la carga útil en la nueva estructura de carga útil de FCM v1 y la envía a Google.

Formato de carga útil del mensaje de entrada:

```
{
  "GCM": "{\"notification\": {\"title\": \"string\", \"body\": \"string\", \"android_channel_id\": \"string\", \"body_loc_args\": [\"string\"], \"body_loc_key\": \"string\", \"click_action\": \"string\", \"color\": \"string\", \"icon\": \"string\", \"sound\": \"string\", \"tag\": \"string\", \"title_loc_args\": [\"string\"], \"title_loc_key\": \"string\"}, \"data\": {\"message\": \"priority message\"}}"
}
```

Mensaje enviado a Google:

```
{
  "message": {
    "token": "***",
    "notification": {
      "title": "string",
      "body": "string"
    },
    "android": {
      "priority": "high",
      "notification": {
        "body_loc_args": [
          "string"
        ],
        "title_loc_args": [
          "string"
        ],
        "color": "string",
        "sound": "string",
        "icon": "string",
        "tag": "string",
        "title_loc_key": "string",
        "title": "string",
        "body": "string",
        "click_action": "string",
        "channel_id": "string",
        "body_loc_key": "string"
      },
      "data": {
        "message": "priority message"
      }
    },
    "apns": {
      "payload": {
        "aps": {
          "alert": {
            "title-loc-args": [
              "string"
            ],
            "title-loc-key": "string",
            "loc-args": [
              "string"
            ],
            "loc-key": "string",
            "title": "string",
            "body": "string"
          },
          "category": "string",
          "sound": "string"
        }
      }
    },
    "webpush": {
      "notification": {
        "icon": "string",
        "tag": "string",
        "body": "string",
        "title": "string"
      },
      "data": {
        "message": "priority message"
      }
    },
    "data": {
      "message": "priority message"
    }
  }
}
```

**Riesgos potenciales**
+ La correspondencia entre la carga útil antigua y v1 no admite los `headers` ni las claves `fcm_options` del servicio de notificaciones push de Apple (APNS). Si quiere utilizar estos campos, envíe una carga útil de FCM v1.
+ En algunos casos, la versión 1 de FCM requiere los encabezados de los mensajes para enviar notificaciones silenciosas a tus dispositivos. APNs Si actualmente envías notificaciones silenciosas a tus APNs dispositivos, no funcionarán con el enfoque tradicional. En su lugar, le recomendamos que utilice la carga útil de FCM v1 para evitar problemas inesperados. Para ver una lista de APNs los encabezados y para qué se utilizan, consulta Cómo [comunicarse con](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html) ellos APNs en la *Guía para desarrolladores de Apple*.
+ Si utiliza el atributo `TTL` de Amazon SNS al enviar la notificación, solo se actualizará en el campo `android`. Si quiere establecer el atributo `TTL` de APNS, utilice la carga útil de FCM v1.
+ Se establecerá una correspondencia con las claves `android`, `apns` y `webpush`, que se rellenarán con todas las claves pertinentes proporcionadas. Por ejemplo, si proporciona `title`, que es una clave compartida entre las tres plataformas, la correspondencia con FCM v1 rellenará las tres plataformas con el título proporcionado.
+ Algunas claves compartidas entre plataformas esperan tipos de valores diferentes. Por ejemplo, la clave `badge` que se pasa a `apns` espera un valor entero, mientras que la clave `badge` que se pasa a `webpush` espera un valor de cadena. En los casos en los que proporcione la clave `badge`, la correspondencia de FCM v1 solo rellenará la clave para la que proporcionó un valor válido.

## Eventos de error de entrega de FCM
<a name="sns-fcm-delivery-failure-events"></a>

En la siguiente tabla se proporciona el tipo de error de Amazon SNS que corresponde a los códigos de error o estado recibidos de Google para las solicitudes de notificación de FCM v1. Todos los códigos de error observados recibidos de la API v1 de FCM están disponibles CloudWatch cuando configuras el [registro del estado de entrega](topics-attrib.md) de tu aplicación.


| Código FCM error/status  | Tipo de error de Amazon SNS | Mensaje de error | Causa y mitigación | 
| --- | --- | --- | --- | 
|  `UNREGISTERED`  |  `InvalidPlatformToken`  |  El token de la plataforma asociado al punto de conexión no es válido.  |  El token de dispositivo asociado al punto de conexión está obsoleto o no es válido. Amazon SNS ha deshabilitado el punto de conexión. Actualice el punto de conexión de Amazon SNS al token de dispositivo más reciente.  | 
|  `INVALID_ARGUMENT`  |  `InvalidNotification`  |  El cuerpo de la notificación no es válido.  |  Es posible que el token del dispositivo o la carga útil del mensaje no sean válidos. Compruebe que la carga útil del mensaje sea válida. Si la carga útil del mensaje es válida, actualice el punto de conexión de Amazon SNS al token de dispositivo más reciente.  | 
|  `SENDER_ID_MISMATCH`  |  `InvalidPlatformToken`  |  El token de la plataforma asociado al punto de conexión no es válido.  |  La aplicación de plataforma asociada al token del dispositivo no tiene permiso para enviar al token del dispositivo. Compruebe que está utilizando las credenciales de FCM correctas en su aplicación de plataforma de Amazon SNS.  | 
|  `UNAVAILABLE`  |  `DependencyUnavailable`  |  La dependencia no está disponible.  |  FCM no pudo procesar la solicitud a tiempo. Fallaron todos los reintentos ejecutados por Amazon SNS. Puede almacenar estos mensajes en una cola de mensajes fallidos (DLQ) y redirigirlos más adelante.  | 
|  `INTERNAL`  |  `UnexpectedFailure`  |  Error inesperado; póngase en contacto con Amazon. Frase de error [error interno].  |  El servidor de FCM ha detectado un error al procesar la solicitud. Fallaron todos los reintentos ejecutados por Amazon SNS. Puede almacenar estos mensajes en una cola de mensajes fallidos (DLQ) y redirigirlos más adelante.  | 
|  `THIRD_PARTY_AUTH_ERROR`  |  `InvalidCredentials`  |  Las credenciales de la aplicación de plataforma no son válidas.  |  No se ha podido enviar un mensaje dirigido a un dispositivo iOS o a un dispositivo Webpush. Compruebe que sus credenciales de desarrollo y producción sean válidas.  | 
|  `QUOTA_EXCEEDED`  |  `Throttled`  |  Solicitud restringida por [gcm].  |  Se ha superado una cuota de tasa de mensajes, una cuota de tasa de mensajes del dispositivo o una cuota de tasa de mensajes del tema. Para obtener información sobre cómo resolver este problema, consulta [ErrorCode](https://firebase.google.com/docs/reference/fcm/rest/v1/ErrorCode)la documentación de *Firebase* de Google.  | 
|  `PERMISSION_DENIED`  |  `InvalidNotification`  |  El cuerpo de la notificación no es válido.  |  En el caso de una excepción `PERMISSION_DENIED`, el autor de la llamada (su aplicación de FCM) no tiene permiso para ejecutar la operación especificada en la carga útil. Vaya a la consola de FCM y verifique que sus credenciales tengan habilitadas las acciones de API necesarias.  | 

# Atributos de aplicaciones móviles de Amazon SNS
<a name="sns-msg-status"></a>

Con Amazon Simple Notification Service (Amazon SNS), se puede registrar el estado de entrega de los mensajes de notificaciones push. Tras configurar los atributos de la aplicación, las entradas de registro se enviarán a CloudWatch Logs para los mensajes enviados desde Amazon SNS a puntos de conexión móviles. El log del estado de entrega de los mensajes aporta información operativa de mejor calidad, como la siguiente: 
+ Saber si Amazon SNS ha entregado un mensaje de notificación push al servicio de notificaciones push.
+ Identificar la respuesta enviada por el servicio de notificaciones push a Amazon SNS.
+ Determinar el tiempo de permanencia del mensaje (el tiempo entre la marca temporal de publicación y justo antes de entregarlo a un servicio de notificaciones push)

 Para configurar los atributos de la aplicación para el estado de entrega de los mensajes, puede utilizar los Consola de administración de AWS kits de desarrollo de AWS software (SDKs) o la API de consulta. 

## Configurar los atributos del estado de entrega de los mensajes mediante el Consola de administración de AWS
<a name="sns-msg-console"></a>

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el panel de navegación, elija **Móvil** y, a continuación, **Notificaciones push**.

1. En la sección **Aplicaciones de la plataforma**, elija la aplicación que contenga los puntos finales de los que desee recibir CloudWatch los registros.

1. Elija **Application Actions (Acciones de la aplicación)** y después **Delivery Status (Estado de entrega)**.

1. En el cuadro de diálogo **Delivery Status (Estado de entrega)**, elija **Create IAM Roles (Crear roles de IAM)**.

   Se lo redirigirá a la consola de IAM.

1. Selecciona **Permitir** para conceder a Amazon SNS acceso de escritura para que utilice CloudWatch Logs en tu nombre.

1. Ahora, de nuevo en el cuadro de diálogo del **estado de la entrega**, introduzca un número en el campo **Porcentaje de éxito del muestreo (0-100)** para indicar el porcentaje de mensajes enviados correctamente de los que desea recibir CloudWatch registros.
**nota**  
Tras configurar los atributos de la aplicación para el estado de entrega de los mensajes, todas las entregas de mensajes fallidas generan CloudWatch registros.

1. Por último, elija **Save Configuration (Guardar configuración)**. Ahora podrá ver y analizar los CloudWatch registros que contienen el estado de entrega de los mensajes. Para obtener más información sobre su uso CloudWatch, consulte la [CloudWatchdocumentación](https://aws.amazon.com/documentation/cloudwatch).

## Ejemplos de registro de estado CloudWatch de entrega de mensajes de Amazon SNS
<a name="sns-msg-examples"></a>

Después de configurar los atributos de estado de entrega de mensajes para un punto final de la aplicación, se generarán CloudWatch los registros. A continuación, se muestran registros de ejemplo en formato JSON:

**SUCCESS**

```
{
  "status": "SUCCESS",
  "notification": {
    "timestamp": "2015-01-26 23:07:39.54",
    "messageId": "9655abe4-6ed6-5734-89f7-e6a6a42de02a"
  },
  "delivery": {
    "statusCode": 200,
    "dwellTimeMs": 65,
    "token": "Examplei7fFachkJ1xjlqT64RaBkcGHochmf1VQAr9k-IBJtKjp7fedYPzEwT_Pq3Tu0lroqro1cwWJUvgkcPPYcaXCpPWmG3Bqn-wiqIEzp5zZ7y_jsM0PKPxKhddCzx6paEsyay9Zn3D4wNUJb8m6HXrBf9dqaEw",
    "attempts": 1,
    "providerResponse": "{\"multicast_id\":5138139752481671853,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1422313659698010%d6ba8edff9fd7ecd\"}]}",
    "destination": "arn:aws:sns:us-east-2:111122223333:endpoint/FCM/FCMPushApp/c23e42de-3699-3639-84dd-65f84474629d"
  }
}
```

**FAILURE**

```
{
  "status": "FAILURE",
  "notification": {
    "timestamp": "2015-01-26 23:29:35.678",
    "messageId": "c3ad79b0-8996-550a-8bfa-24f05989898f"
  },
  "delivery": {
    "statusCode": 8,
    "dwellTimeMs": 1451,
    "token": "examp1e29z6j5c4df46f80189c4c83fjcgf7f6257e98542d2jt3395kj73",
    "attempts": 1,
    "providerResponse": "NotificationErrorResponse(command=8, status=InvalidToken, id=1, cause=null)",
    "destination": "arn:aws:sns:us-east-2:111122223333:endpoint/APNS_SANDBOX/APNSPushApp/986cb8a1-4f6b-34b1-9a1b-d9e9cb553944"
  }
}
```

Para obtener una lista de códigos de respuesta del servicio de notificaciones push, consulte [Códigos de respuesta de la plataforma](#platform-returncodes).

## Configurar los atributos de estado de entrega de mensajes con el AWS SDKs
<a name="sns-msg-sdk"></a>

[AWS SDKs](https://aws.amazon.com/tools/)Proporcionan APIs en varios idiomas el uso de los atributos de estado de entrega de los mensajes con Amazon SNS. 

El ejemplo de Java siguiente muestra cómo utilizar la API `SetPlatformApplicationAttributes` para configurar atributos de las aplicaciones para el estado de entrega de los mensajes de notificaciones de inserción. Puede utilizar los atributos siguientes para el estado de entrega de los mensajes: `SuccessFeedbackRoleArn`, `FailureFeedbackRoleArn` y `SuccessFeedbackSampleRate`. Los `FailureFeedbackRoleArn` atributos `SuccessFeedbackRoleArn` y se utilizan para conceder a Amazon SNS acceso de escritura para usar CloudWatch Logs en su nombre. El atributo `SuccessFeedbackSampleRate` permite especificar el porcentaje de la frecuencia de muestreo (0-100) de los mensajes entregados correctamente. Tras configurar el `FailureFeedbackRoleArn` atributo, todas las entregas de mensajes fallidas generarán CloudWatch registros. 

```
SetPlatformApplicationAttributesRequest setPlatformApplicationAttributesRequest = new SetPlatformApplicationAttributesRequest();
Map<String, String> attributes = new HashMap<>();
attributes.put("SuccessFeedbackRoleArn", "arn:aws:iam::111122223333:role/SNS_CWlogs");
attributes.put("FailureFeedbackRoleArn", "arn:aws:iam::111122223333:role/SNS_CWlogs");
attributes.put("SuccessFeedbackSampleRate", "5");
setPlatformApplicationAttributesRequest.withAttributes(attributes);
setPlatformApplicationAttributesRequest.setPlatformApplicationArn("arn:aws:sns:us-west-2:111122223333:app/FCM/FCMPushApp");
sns.setPlatformApplicationAttributes(setPlatformApplicationAttributesRequest);
```

Para obtener más información sobre el SDK para Java, consulte [Introducción a AWS SDK para Java](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html).

## Códigos de respuesta de la plataforma
<a name="platform-returncodes"></a>

A continuación se incluye una lista de enlaces de códigos de respuesta del servicio de notificaciones push:


****  

| Servicio de notificaciones de inserción | Códigos de respuesta | 
| --- | --- | 
| Amazon Device Messaging (ADM) | Consulte [Formato de respuesta](https://developer.amazon.com/docs/adm/send-message.html#response-format) en la documentación de ADM. | 
| Servicio APNs de notificaciones push de Apple () | Consulte la respuesta HTTP/2 de APNs In [Communication with APNs](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html#/apple_ref/doc/uid/TP40008194-CH11-SW1) en la Guía de programación de notificaciones locales y remotas. | 
| Firebase Cloud Messaging (FCM) | Consulte [Códigos de respuesta de errores de mensajes descendentes](https://firebase.google.com/docs/cloud-messaging/http-server-ref#error-codes) en la documentación de Firebase Cloud Messaging. | 
| Servicio de notificaciones push de Microsoft para Windows Phone (MPNS) | Consulte [Push Notification Service Response Codes for Windows Phone 8](https://msdn.microsoft.com/en-us/library/windows/apps/ff941100%28v=vs.105%29.aspx#BKMK_PushNotificationServiceResponseCodes) en la documentación de desarrollo de Windows 8. | 
| Servicios de notificación push de Windows (WNS) | Consulte "Response codes" en [Push Notification Service Request and Response Headers (Windows Runtime Apps)](https://msdn.microsoft.com/en-us/library/windows/apps/hh465435.aspx) en la documentación de desarrollo de Windows 8. | 

# Notificaciones de eventos de aplicación de Amazon SNS para aplicaciones móviles
<a name="application-event-notifications"></a>

Con Amazon SNS, se proporciona compatibilidad con la activación de notificaciones cuando se producen determinados eventos de aplicaciones. Después, puede ejecutar algunas acciones mediante programación en dicho evento. La aplicación debe incluir soporte para un servicio de notificaciones push, como Apple Push Notification Service (APNs), Firebase Cloud Messaging (FCM) y Windows Push Notification Services (WNS). Las notificaciones de eventos de la aplicación se configuran mediante la consola de Amazon SNS o la. AWS CLI AWS SDKs

## Eventos de aplicaciones disponibles
<a name="application-event-notifications-events"></a>

Las notificaciones de eventos de aplicaciones controlan cuándo se crean, eliminan o actualizan los distintos puntos de conexión de la plataforma, así como los errores de entrega. A continuación, se muestran los nombres de los atributos para los eventos de la aplicación.


| Nombre de atributo | Desencadenador de la notificación | 
| --- | --- | 
| EventEndpointCreated | Se añade a la aplicación un nuevo punto de conexión de la plataforma. | 
| EventEndpointDeleted | Se elimina cualquier punto de conexión de la plataforma asociado a la aplicación. | 
| EventEndpointUpdated | Se cambia cualquiera de los atributos de los puntos de conexión de la plataforma asociados a la aplicación. | 
| EventDeliveryFailure | Una entrega a cualquiera de los puntos de conexión de la plataforma asociados a la aplicación encuentra un error permanente.  Para realizar un seguimiento de los errores de entrega en la aplicación de la plataforma, suscríbase a los eventos de estado de entrega de los mensajes de la aplicación. Para obtener más información, consulte [Uso de los atributos de la aplicaciones de Amazon SNS para el estado de entrega de los mensajes](https://docs.aws.amazon.com/sns/latest/dg/sns-msg-status.html).  | 

Puede asociar cualquier atributo a una aplicación, que podrá recibir estas notificaciones de eventos. 

## Envío de notificaciones push en móviles
<a name="application-event-notifications-howto-set"></a>

Para enviar notificaciones de eventos de aplicaciones, debe especificar un tema para recibir las notificaciones de cada tipo de evento. Como Amazon SNS envía las notificaciones, el tema puede direccionarlas a los puntos de conexión que adoptarán acciones programáticas.

**importante**  
Las aplicaciones de alto volumen crearán un gran número de notificaciones de eventos de aplicaciones (por ejemplo, decenas de miles), que sobrecargarán los puntos de conexión destinados a uso humano, como, por ejemplo, números de teléfono, direcciones de correo electrónico y aplicaciones móviles. Tenga en cuenta las siguientes directrices cuando envíe notificaciones de eventos de aplicaciones a un tema:  
Cada tema que reciba notificaciones debe contener únicamente suscripciones para puntos de enlace programáticos, como puntos de enlace HTTP o HTTPS, colas de Amazon SQS o funciones. AWS Lambda 
Para reducir la cantidad de procesamiento que las notificaciones activan, limite las suscripciones de cada tema a un número reducido (por ejemplo, cinco o menos).

Puede enviar notificaciones de eventos de aplicaciones mediante la consola de Amazon SNS, el AWS Command Line Interface (AWS CLI) o el. AWS SDKs 

### Consola de administración de AWS
<a name="application-event-notifications-howto-set-console"></a>

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el panel de navegación, elija **Móvil**, **Notificaciones push**.

1. En la página **Notificaciones push para dispositivos móviles**, en la sección **Aplicaciones de plataforma**, seleccione una aplicación y, a continuación, elija **Editar**.

1. Expanda la sección **Notificaciones de eventos**.

1. Elija **Acciones**, **Configurar eventos**.

1. Introduzca ARNs los cuatro temas que se utilizarán en los siguientes eventos:
   + Punto de conexión creado
   + Punto de conexión eliminado
   + Punto de conexión actualizado
   + Error de entrega

1. Seleccione **Save changes (Guardar cambios)**.

### AWS CLI
<a name="awscli"></a>

Ejecute el comando [set-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/set-platform-application-attributes.html).

En el siguiente ejemplo, se establece el mismo tema de Amazon SNS para los cuatro eventos de aplicación:

```
aws sns set-platform-application-attributes
--platform-application-arn arn:aws:sns:us-east-1:12345EXAMPLE:app/FCM/MyFCMPlatformApplication
--attributes EventEndpointCreated="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",
EventEndpointDeleted="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",
EventEndpointUpdated="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",
EventDeliveryFailure="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents"
```

### AWS SDKs
<a name="application-event-notifications-sdk"></a>

Configure las notificaciones de eventos de la aplicación enviando una `SetPlatformApplicationAttributes` solicitud con la API de Amazon SNS mediante un AWS SDK.

Para obtener una lista completa de las guías para desarrolladores del AWS SDK y ejemplos de código, incluida la ayuda para comenzar e información sobre las versiones anteriores, consulte[Uso de Amazon SNS con un SDK AWS](sdk-general-information-section.md).

# Acciones de la API de inserción móvil
<a name="mobile-push-api"></a>

Para utilizar las API de inserción móvil de Amazon SNS, primero debe cumplir los requisitos previos del servicio de notificaciones push, como Apple Push Notification Service (APNs) y Firebase Cloud Messaging (FCM). Para obtener más información acerca de los requisitos previos, consulte [Requisitos previos para las notificaciones de usuario de Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md). 

 Para enviar un mensaje de notificación de inserción a un dispositivo y una aplicación móvil mediante las API, primero debe ejecutar la acción `CreatePlatformApplication`, que devuelve un atributo `PlatformApplicationArn`. A continuación, `PlatformApplicationArn` utiliza el atributo `CreatePlatformEndpoint` y obtiene un atributo `EndpointArn`. Después puede utilizar el atributo `EndpointArn` con la acción `Publish` para enviar un mensaje de notificación a un dispositivo y una aplicación móvil, o bien puede utilizar el atributo `EndpointArn` con la acción `Subscribe` para suscribirse a un tema. Para obtener más información, consulte [Configuración de notificaciones push con Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview).

A continuación, se muestra cómo son las API de inserción móvil de Amazon SNS. 

`[CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)`  
Crea un objeto de aplicación de plataforma para uno de los servicios de notificaciones push admitidos, como APNs o FCM, en el que se pueden registrar dispositivos y aplicaciones móviles. Devuelve un atributo `PlatformApplicationArn`, que la acción `CreatePlatformEndpoint` utiliza.

`[CreatePlatformEndpoint](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)`  
Crea un punto de enlace para un dispositivo y una aplicación móvil en uno de los servicios de notificaciones de inserción admitidos. `CreatePlatformEndpoint` utiliza el atributo `PlatformApplicationArn` que devuelve la acción `CreatePlatformApplication`. El atributo `EndpointArn`, que se devuelve cuando se usa `CreatePlatformEndpoint`, se utiliza con la acción `Publish` para enviar un mensaje de notificación a una aplicación móvil y un dispositivo. 

`[CreateTopic](https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html)`  
Crea un tema en el que se pueden publicar mensajes. 

`[DeleteEndpoint](https://docs.aws.amazon.com/sns/latest/api/API_DeleteEndpoint.html)`  
Elimina el punto de enlace de un dispositivo y una aplicación móvil en uno de los servicios de notificaciones de inserción admitidos.

`[DeletePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_DeletePlatformApplication.html)`  
Elimina un objeto de aplicación de plataforma.

`[DeleteTopic](https://docs.aws.amazon.com/sns/latest/api/API_DeleteTopic.html)`  
Elimina un tema y todas sus suscripciones.

`[GetEndpointAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetEndpointAttributes.html)`  
Recupera los atributos del punto de enlace de un dispositivo y una aplicación móvil.

`[GetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetPlatformApplicationAttributes.html)`  
Recupera los atributos del objeto de aplicación de plataforma.

`[ListEndpointsByPlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html)`  
Genera una lista de los puntos de enlace y los atributos de los puntos de enlace de los dispositivos y aplicaciones móviles de un servicio de notificaciones de inserción compatible.

`[ListPlatformApplications](https://docs.aws.amazon.com/sns/latest/api/API_ListPlatformApplications.html)`  
Genera una lista de objetos de aplicación de plataforma para los servicios de notificaciones de inserción compatibles.

`[Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html)`  
Envía un mensaje de notificación a todos los puntos de enlace suscritos a un tema.

`[SetEndpointAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetEndpointAttributes.html)`  
Establece los atributos de un punto de enlace de un dispositivo y una aplicación móvil.

`[SetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html)`  
Establece los atributos del objeto de aplicación de plataforma.

`[Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html)`  
Prepara la suscripción de un punto de enlace enviando a dicho punto de enlace un mensaje de confirmación. Para crear en realidad una suscripción, el propietario del punto de enlace debe llamar a la acción ConfirmSubscription con el token del mensaje de confirmación. 

`[Unsubscribe](https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html)`  
Elimina una suscripción.

# Errores comunes de la API de notificaciones push para móvil de Amazon SNS
<a name="mobile-push-api-error"></a>

En la siguiente tabla, se muestran los errores que las API de Amazon SNS devuelven para las inserciones móviles. Para obtener más información sobre las API de Amazon SNS para inserciones móviles, consulte [Acciones de la API de inserción móvil](mobile-push-api.md).


| Error | Descripción | Código de estado HTTPS | Acción API | 
| --- | --- | --- | --- | 
| Application Name is null string | El nombre de aplicación solicitado está establecido en null. | 400 | `CreatePlatformApplication` | 
| Platform Name is null string | El nombre de plataforma solicitado está establecido en null. | 400 | `CreatePlatformApplication` | 
| Platform Name is invalid | Se ha proporcionado un valor no válido o fuera de rango para el nombre de la plataforma. | 400 | `CreatePlatformApplication` | 
| APNs — Principal is not a valid certificate | Se ha proporcionado un certificado no válido para la entidad principal de APNs, que es el certificado SSL. Para obtener información, consulte [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html) en la Referencia de la API de Amazon Simple Notification Service. | 400 | `CreatePlatformApplication` | 
| APNs — Principal is a valid cert but not in a .pem format | Se ha proporcionado un certificado válido que no está en formato .pem para la entidad principal de APNs, que es el certificado SSL. | 400 | `CreatePlatformApplication` | 
| APNs — Principal is an expired certificate | Se ha proporcionado un certificado vencido para la entidad principal de APNs, que es el certificado SSL. | 400 | `CreatePlatformApplication` | 
| APNs — Principal is not an Apple issued certificate | Se ha proporcionado un certificado que no ha emitido Apple para la entidad principal APNs, que es el certificado SSL. | 400 | `CreatePlatformApplication` | 
| APNs — Principal is not provided | La entidad principal de APNs, que es el certificado SSL, no se ha proporcionado. | 400 | `CreatePlatformApplication` | 
| APNs — Credential is not provided | La credencial de APNs, que es la clave privada, no se ha proporcionado. Para obtener información, consulte [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html) en la Referencia de la API de Amazon Simple Notification Service. | 400 | `CreatePlatformApplication` | 
| APNs — Credential are not in a valid .pem format | La credencial de APNs, que es la clave privada, no está en formato .pem válido. | 400 | `CreatePlatformApplication` | 
| FCM — serverAPIKey is not provided | La credencial de CM, que es la clave de API, no se ha proporcionado. Para obtener información, consulte [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html) en la Referencia de la API de Amazon Simple Notification Service. | 400 | `CreatePlatformApplication` | 
| FCM — serverAPIKey is empty | La credencial de FCM, que es la clave de API, está vacía. | 400 | `CreatePlatformApplication` | 
| FCM — serverAPIKey is a null string | La credencial de FCM, que es la clave de API, es nula. | 400 | `CreatePlatformApplication` | 
| FCM — serverAPIKey is invalid | La credencial de FCM, que es la clave de API, no es válida. | 400 | `CreatePlatformApplication` | 
| ADM — clientsecret is not provided | La clave secreta de cliente requerida no se ha proporcionado. | 400 | `CreatePlatformApplication` | 
| ADM — clientsecret is a null string | La cadena requerida para la clave secreta de cliente es nula. | 400 | `CreatePlatformApplication` | 
| ADM — client\$1secret is empty string | La cadena requerida para la clave secreta de cliente está vacía. | 400 | `CreatePlatformApplication` | 
| ADM — client\$1secret is not valid | La cadena requerida para la clave secreta de cliente no es válida. | 400 | `CreatePlatformApplication` | 
| ADM — client\$1id is empty string | La cadena requerida para el ID de cliente está vacía. | 400 | `CreatePlatformApplication` | 
| ADM — clientId is not provided | La cadena requerida para el ID de cliente no se ha proporcionado. | 400 | `CreatePlatformApplication` | 
| ADM — clientid is a null string | La cadena requerida para el ID de cliente es nula. | 400 | `CreatePlatformApplication` | 
| ADM — client\$1id is not valid | La cadena requerida para el ID de cliente no es válida. | 400 | `CreatePlatformApplication` | 
| EventEndpointCreated has invalid ARN format | EventEndpointCreated tiene un formato de ARN no válido. | 400 | `CreatePlatformApplication` | 
| EventEndpointDeleted has invalid ARN format | EventEndpointDeleted tiene un formato de ARN no válido. | 400 | `CreatePlatformApplication` | 
| EventEndpointUpdated has invalid ARN format | EventEndpointUpdated tiene un formato de ARN no válido. | 400 | `CreatePlatformApplication` | 
| EventDeliveryAttemptFailure has invalid ARN format | EventDeliveryAttemptFailure tiene un formato de ARN no válido. | 400 | `CreatePlatformApplication` | 
| EventDeliveryFailure has invalid ARN format | EventDeliveryFailure tiene un formato de ARN no válido. | 400 | `CreatePlatformApplication` | 
| EventEndpointCreated is not an existing Topic | EventEndpointCreated no es un tema que exista. | 400 | `CreatePlatformApplication` | 
| EventEndpointDeleted is not an existing Topic | EventEndpointDeleted no es un tema que exista. | 400 | `CreatePlatformApplication` | 
| EventEndpointUpdated is not an existing Topic | EventEndpointUpdated no es un tema que exista. | 400 | `CreatePlatformApplication` | 
| EventDeliveryAttemptFailure is not an existing Topic | EventDeliveryAttemptFailure no es un tema que exista. | 400 | `CreatePlatformApplication` | 
| EventDeliveryFailure is not an existing Topic | EventDeliveryFailure no es un tema que exista. | 400 | `CreatePlatformApplication` | 
| Platform ARN is invalid | El ARN de la plataforma no es válido. | 400 | `SetPlatformAttributes` | 
| Platform ARN is valid but does not belong to the user | El ARN de la plataforma es válido, pero no pertenece al usuario. | 400 | `SetPlatformAttributes` | 
| APNs — Principal is not a valid certificate | Se ha proporcionado un certificado no válido para la entidad principal de APNs, que es el certificado SSL. Para obtener información, consulte [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html) en la Referencia de la API de Amazon Simple Notification Service. | 400 | `SetPlatformAttributes` | 
| APNs — Principal is a valid cert but not in a .pem format | Se ha proporcionado un certificado válido que no está en formato .pem para la entidad principal de APNs, que es el certificado SSL. | 400 | `SetPlatformAttributes` | 
| APNs — Principal is an expired certificate | Se ha proporcionado un certificado vencido para la entidad principal de APNs, que es el certificado SSL. | 400 | `SetPlatformAttributes` | 
| APNs — Principal is not an Apple issued certificate | Se ha proporcionado un certificado que no ha emitido Apple para la entidad principal APNs, que es el certificado SSL. | 400 | `SetPlatformAttributes` | 
| APNs — Principal is not provided | La entidad principal de APNs, que es el certificado SSL, no se ha proporcionado. | 400 | `SetPlatformAttributes` | 
| APNs — Credential is not provided | La credencial de APNs, que es la clave privada, no se ha proporcionado. Para obtener información, consulte [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html) en la Referencia de la API de Amazon Simple Notification Service. | 400 | `SetPlatformAttributes` | 
| APNs — Credential are not in a valid .pem format | La credencial de APNs, que es la clave privada, no está en formato .pem válido. | 400 | `SetPlatformAttributes` | 
| FCM — serverAPIKey is not provided | La credencial de CM, que es la clave de API, no se ha proporcionado. Para obtener información, consulte [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html) en la Referencia de la API de Amazon Simple Notification Service. | 400 | `SetPlatformAttributes` | 
| FCM — serverAPIKey is a null string | La credencial de FCM, que es la clave de API, es nula. | 400 | `SetPlatformAttributes` | 
| ADM — clientId is not provided | La cadena requerida para el ID de cliente no se ha proporcionado. | 400 | `SetPlatformAttributes` | 
| ADM — clientid is a null string | La cadena requerida para el ID de cliente es nula. | 400 | `SetPlatformAttributes` | 
| ADM — clientsecret is not provided | La clave secreta de cliente requerida no se ha proporcionado. | 400 | `SetPlatformAttributes` | 
| ADM — clientsecret is a null string | La cadena requerida para la clave secreta de cliente es nula. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated has invalid ARN format | EventEndpointUpdated tiene un formato de ARN no válido. | 400 | `SetPlatformAttributes` | 
| EventEndpointDeleted has invalid ARN format | EventEndpointDeleted tiene un formato de ARN no válido. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated has invalid ARN format | EventEndpointUpdated tiene un formato de ARN no válido. | 400 | `SetPlatformAttributes` | 
| EventDeliveryAttemptFailure has invalid ARN format | EventDeliveryAttemptFailure tiene un formato de ARN no válido. | 400 | `SetPlatformAttributes` | 
| EventDeliveryFailure has invalid ARN format | EventDeliveryFailure tiene un formato de ARN no válido. | 400 | `SetPlatformAttributes` | 
| EventEndpointCreated is not an existing Topic | EventEndpointCreated no es un tema que exista. | 400 | `SetPlatformAttributes` | 
| EventEndpointDeleted is not an existing Topic | EventEndpointDeleted no es un tema que exista. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated is not an existing Topic | EventEndpointUpdated no es un tema que exista. | 400 | `SetPlatformAttributes` | 
| EventDeliveryAttemptFailure is not an existing Topic | EventDeliveryAttemptFailure no es un tema que exista. | 400 | `SetPlatformAttributes` | 
| EventDeliveryFailure is not an existing Topic | EventDeliveryFailure no es un tema que exista. | 400 | `SetPlatformAttributes` | 
| Platform ARN is invalid | El ARN de la plataforma no es válido. | 400 | `GetPlatformApplicationAttributes` | 
| Platform ARN is valid but does not belong to the user | El ARN de la plataforma es válido, pero no pertenece al usuario. | 403 | `GetPlatformApplicationAttributes` | 
| Token specified is invalid | El token especificado no es válido. | 400 | `ListPlatformApplications` | 
| Platform ARN is invalid | El ARN de la plataforma no es válido. | 400 | `ListEndpointsByPlatformApplication` | 
| Platform ARN is valid but does not belong to the user | El ARN de la plataforma es válido, pero no pertenece al usuario. | 404 | `ListEndpointsByPlatformApplication` | 
| Token specified is invalid | El token especificado no es válido. | 400 | `ListEndpointsByPlatformApplication` | 
| Platform ARN is invalid | El ARN de la plataforma no es válido. | 400 | `DeletePlatformApplication` | 
| Platform ARN is valid but does not belong to the user | El ARN de la plataforma es válido, pero no pertenece al usuario. | 403 | `DeletePlatformApplication` | 
| Platform ARN is invalid | El ARN de la plataforma no es válido. | 400 | `CreatePlatformEndpoint` | 
| Platform ARN is valid but does not belong to the user | El ARN de la plataforma es válido, pero no pertenece al usuario. | 404 | `CreatePlatformEndpoint` | 
| Token is not specified | El token no se ha especificado. | 400 | `CreatePlatformEndpoint` | 
| Token is not of correct length | El token no tiene la longitud correcta. | 400 | `CreatePlatformEndpoint` | 
| Customer User data is too large | Los datos de usuario del cliente no pueden tener más de 2048 bytes en la codificación UTF-8. | 400 | `CreatePlatformEndpoint` | 
| Endpoint ARN is invalid | El ARN del punto de enlace no es válido. | 400 | `DeleteEndpoint` | 
| Endpoint ARN is valid but does not belong to the user | El ARN del punto de enlace es válido, pero no pertenece al usuario. | 403 | `DeleteEndpoint` | 
| Endpoint ARN is invalid | El ARN del punto de enlace no es válido. | 400 | `SetEndpointAttributes` | 
| Endpoint ARN is valid but does not belong to the user | El ARN del punto de enlace es válido, pero no pertenece al usuario. | 403 | `SetEndpointAttributes` | 
| Token is not specified | El token no se ha especificado. | 400 | `SetEndpointAttributes` | 
| Token is not of correct length | El token no tiene la longitud correcta. | 400 | `SetEndpointAttributes` | 
| Customer User data is too large | Los datos de usuario del cliente no pueden tener más de 2048 bytes en la codificación UTF-8. | 400 | `SetEndpointAttributes` | 
| Endpoint ARN is invalid | El ARN del punto de enlace no es válido. | 400 | `GetEndpointAttributes` | 
| Endpoint ARN is valid but does not belong to the user | El ARN del punto de enlace es válido, pero no pertenece al usuario. | 403 | `GetEndpointAttributes` | 
| Target ARN is invalid | El ARN de destino no es válido. | 400 | `Publish` | 
| Target ARN is valid but does not belong to the user | El ARN de destino es válido, pero no pertenece al usuario. | 403 | `Publish` | 
| Message format is invalid | El formato del mensaje no es válido. | 400 | `Publish` | 
| Message size is larger than supported by protocol/end-service | El tamaño del mensaje es superior al tamaño compatible con el protocolo/servicio final. | 400 | `Publish` | 

# Uso del atributo de mensaje de “time-to-live” de Amazon SNS para las notificaciones push para móvil
<a name="sns-ttl"></a>

Con Amazon Simple Notification Service (Amazon SNS), se admite la configuración de un atributo de mensaje de *período de vida (TTL)* para los mensajes de notificaciones push móviles. Esto se suma a la capacidad de configuración de TTL dentro del cuerpo del mensaje de Amazon SNS para los servicios de notificaciones push para móvil que admiten esta funcionalidad, como Amazon Device Messaging (ADM) y Firebase Cloud Messaging (FCM) cuando se envía a Android.

El atributo de mensaje TTL se utiliza para especificar metadatos de vencimiento de un mensaje. Esto te permite especificar la cantidad de tiempo que el servicio de notificaciones push, como el Servicio de Notificaciones Push de Apple (APNs) o FCM, tiene para entregar el mensaje al punto final. Si, por algún motivo, (por ejemplo, el dispositivo móvil se ha apagado) no se puede entregar el mensaje en el TTL especificado, se abandonará dicho mensaje y no se realizará ningún otro intento de entrega. Para especificar el TTL en los atributos de los mensajes, puedes usar los Consola de administración de AWS kits de desarrollo de AWS software (SDKs) o la API de consultas. 

## Atributos de los mensajes TTL para los servicios de notificaciones de inserción
<a name="sns-ttl-msg-attrib"></a>

A continuación, se muestra una lista de los atributos de los mensajes TTL para los servicios de notificaciones push que puede utilizar para configurar al utilizar la API AWS SDKs o la API de consulta:


****  

| Servicio de notificaciones de inserción | Atributo de los mensajes TTL | 
| --- | --- | 
| Amazon Device Messaging (ADM) | AWS.SNS.MOBILE.ADM.TTL | 
| Servicio de notificaciones push de Apple () APNs | AWS.SNS.MOBILE.APNS.TTL | 
| Sandbox del servicio de notificaciones push de Apple (APNs\$1SANDBOX) | AWS.SNS.MOBILE.APNS\$1SANDBOX.TTL | 
| Baidu Cloud Push (Baidu) | AWS.SNS.MOBILE.BAIDU.TTL | 
| Firebase Cloud Messaging (FCM cuando se envía a Android) | AWS.SNS.MOBILE.FCM.TTL | 
| Servicios de notificación push de Windows (WNS) | AWS.SNS.MOBILE.WNS.TTL | 

Cada servicio de notificaciones push administra el TTL de forma distinta. Con Amazon SNS, se ofrece una vista resumida de TTL de todos los servicios de notificaciones push, lo que facilita la especificación del TTL. Si utiliza el Consola de administración de AWS para especificar el TTL (en segundos), solo tiene que introducir el valor TTL una vez y Amazon SNS calculará el TTL de cada uno de los servicios de notificaciones push seleccionados al publicar el mensaje. 

 El TTL depende de la hora de publicación. Antes de entregar un mensaje de notificación push a un servicio de notificaciones push concreto, Amazon SNS calcula el tiempo de permanencia (la marca de tiempo entre la publicación y el momento previo a la entrega de un servicio de notificaciones push) de la notificación push y traslada el resto del TTL al servicio de notificaciones push específico. Si TTL es inferior al tiempo de permanencia, Amazon SNS no intentará publicar. 

Si especificas un TTL para un mensaje de notificación push, el valor TTL debe ser un entero positivo, a menos que el valor de `0` tenga un significado específico para el servicio de notificaciones push, como con APNs y FCM (cuando se envía a Android). Si el valor de TTL se establece en `0` y el servicio de notificaciones push no tiene un significado específico para `0`, Amazon SNS eliminará el mensaje. [Para obtener más información sobre el parámetro TTL establecido `0` al usarlo APNs, consulta la *tabla A-3 sobre los identificadores de elementos para las notificaciones remotas* en la documentación de la API de proveedores binarios.](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/BinaryProviderAPI.html)

## Orden de prioridad para determinar el TTL
<a name="sns-ttl-precedence"></a>

La prioridad que Amazon SNS utiliza para determinar el TTL de un mensaje de notificación push sigue el orden siguiente, en el que el número más bajo tiene la máxima prioridad: 

1. TTL del atributo de mensaje

1. TTL del cuerpo del mensaje

1. TTL predeterminado del servicio de notificaciones de inserción (varía según el servicio)

1. TTL predeterminado de Amazon SNS (4 semanas)

Si configura diferentes valores de TTL (uno en los atributos del mensaje y otro en el cuerpo del mensaje) para el mismo mensaje, Amazon SNS modificará el TTL del cuerpo del mensaje para que coincida con el TTL especificado en el atributo del mensaje.

## Especificar el TTL mediante Consola de administración de AWS
<a name="sns-ttl-console"></a>

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el panel de navegación, elija **Móvil**, **Notificaciones push**.

1. En la página **Notificaciones push móviles**, en la sección **Aplicaciones de la plataforma**, seleccione una aplicación y, a continuación, elija Editar.

1. En la ***MyApplication*** página, en la sección **Puntos finales**, elija un punto final de la aplicación y, a continuación, elija **Publicar** mensaje.

1. En la sección **Message details (Detalles del mensaje)**, escriba el TTL (los segundos que tiene el servicio de notificaciones push para entregar el mensaje al punto de enlace).

1. Elija **Publish message (Publicar mensaje)**.

# Regiones compatibles con aplicaciones móviles de Amazon SNS
<a name="sns-mobile-push-supported-regions"></a>

En este momento, puede crear aplicaciones móviles en las siguientes regiones:
+ Este de EE. UU. (Ohio)
+ Este de EE. UU. (Norte de Virginia)
+ Oeste de EE. UU. (Norte de California)
+ Oeste de EE. UU. (Oregón)
+ África (Ciudad del Cabo)
+ Asia-Pacífico (Hong Kong)
+ Asia-Pacífico (Yakarta)
+ Asia-Pacífico (Mumbai)
+ Asia-Pacífico (Osaka)
+ Asia-Pacífico (Seúl)
+ Asia-Pacífico (Singapur)
+ Asia-Pacífico (Sídney)
+ Asia-Pacífico (Tokio)
+ Canadá (centro)
+ Europa (Fráncfort)
+ Europa (Irlanda)
+ Europa (Londres)
+ Europa (Milán)
+ Europa (España)
+ Europa (París)
+ Europa (Estocolmo)
+ Middle East (Bahrain)
+ Medio Oriente (EAU)
+ América del Sur (São Paulo)
+ AWS GovCloud (EE. UU.-Oeste)

# Prácticas recomendadas para administrar notificaciones push para móvil en Amazon SNS
<a name="mobile-push-notifications-best-practices"></a>

En esta sección se describen diversas prácticas recomendadas que es posible que le ayuden a mejorar la implicación de los clientes.

## Administración de puntos de conexión
<a name="channels-sms-best-practices-endpoint-management"></a>

Pueden producirse problemas de entrega en situaciones en las que los tokens de dispositivo cambien debido a la acción de un usuario en el dispositivo (por ejemplo, se vuelve a instalar una aplicación en el dispositivo), o [actualizaciones de certificados](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns) que afectan a los dispositivos que se ejecutan en una versión de iOS determinada. Apple recomienda [registrarse APNs cada vez que se lance](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#:~:text=Registering%20to%20Receive%20Remote%20Notifications) la aplicación.

Dado que el token del dispositivo no cambia cada vez que un usuario abre una aplicación, se puede usar la API de [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html) idempotente. Sin embargo, esto puede crear duplicados para el mismo dispositivo en los casos en que el token en sí no es válido o si el punto de conexión es válido pero está desactivado (por ejemplo, una discrepancia entre los entornos de pruebas y de producción).

Se puede usar un mecanismo de administración de tokens de dispositivo como el del [pseudocódigo](mobile-platform-endpoint.md#mobile-platform-endpoint-pseudo-code).

Para obtener más información sobre la administración y el mantenimiento de los tokens de dispositivo de FCM v1, consulte [Administración de los puntos de conexión de Firebase Cloud Messaging en Amazon SNS](sns-fcm-endpoint-management.md).

## Registro de estado de entrega
<a name="channels-sms-best-practices-delivery-logging"></a>

Para monitorear el estado de entrega de notificaciones push, le recomendamos que habilite el registro del estado de entrega para la aplicación de la plataforma de Amazon SNS. Esto le ayuda a solucionar los errores de entrega porque los registros contienen [códigos de respuesta](sns-msg-status.md#platform-returncodes) de un proveedor devueltos‎ del servicio de plataforma push. Para obtener más información sobre cómo habilitar el registro del estado de entrega, consulte [¿Cómo accedo a los registros de entrega de temas de Amazon SNS para notificaciones push?](https://aws.amazon.com/premiumsupport/knowledge-center/troubleshoot-failed-sns-deliveries/).

## Notificaciones de eventos
<a name="channels-sms-best-practices-event-notifications"></a>

Para administrar puntos de conexión de forma impulsada por eventos, puede utilizar la funcionalidad [notificaciones de eventos](application-event-notifications.md#application-event-notifications-sdk). Esto permite que el tema de Amazon SNS configurado elimine eventos a los suscriptores, como una función Lambda, para eventos de aplicaciones de plataforma de creación, eliminación, actualizaciones y errores de entrega de puntos de conexión.

# Configuración y administración de suscripciones de correo electrónico de Amazon SNS
<a name="sns-email-notifications"></a>

Puede suscribir una [dirección de correo electrónico](#sns-email-notifications) a un tema de Amazon SNS mediante Consola de administración de AWS AWS SDK para Java, o. AWS SDK para .NET

**Notas**  
No se admite la personalización del cuerpo del mensaje de correo electrónico. La función de entrega de correo electrónico está diseñada para proporcionar alertas internas del sistema, no mensajes de marketing.
Los puntos de conexión de correo electrónico de suscripción directa se admiten solo para temas estándar.
El rendimiento de la entrega de correo electrónico está limitado. Para obtener más información, consulte [Cuotas de Amazon SNS](https://docs.aws.amazon.com/general/latest/gr/sns.html#limits_sns).

**importante**  
Para evitar que los destinatarios de la lista de correo cancelen la suscripción a los correos electrónicos de temas de Amazon SNS, consulte [Configurar una suscripción de correo electrónico que requiera autenticación para cancelar la suscripción](https://aws.amazon.com/premiumsupport/knowledge-center/prevent-unsubscribe-all-sns-topic/) en AWS Support.
Si se supera el límite de 10 mensajes por segundo (TPS) para una terminal de correo electrónico o email-json, se suspenderá automáticamente la suscripción y quedará en estado pendiente de confirmación. La suscripción permanece en PendingConfirmation estado durante 30 días, después de los cuales se eliminará automáticamente a menos que se tome alguna medida.
Si una dirección de correo electrónico suscrita provoca un rebote, se suprimirá la dirección de correo electrónico para futuras entregas durante 7 días. Los rebotes pueden producirse por varios motivos, como direcciones no válidas o problemas con el servidor de correo electrónico receptor. Para eliminar la dirección de la lista de supresión antes de que venza el período de 7 días, resuelva el problema subyacente con la dirección de correo electrónico y, a continuación, póngase en contacto con nosotros AWS mediante el Support Center.

## Suscribir una dirección de correo electrónico a un tema de Amazon SNS mediante el Consola de administración de AWS
<a name="create-subscribe-endpoint-to-topic-console"></a>

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el panel de navegación izquierdo, elija **Suscripciones**.

1. En la página **Subscriptions (Suscripciones)**, elija **Create subscription (Crear suscripción)**.

1. En la página **Crear suscripción**, en la sección **Detalles**, haga lo siguiente:

   1. En **ARN de tema**, elija el nombre de recurso de Amazon (ARN) de un tema.

   1. En **Protocolo**, elige **Correo electrónico**.

   1. En **Punto de enlace**, ingrese su dirección de correo electrónico.

   1. (Opcional) Para configurar una política de filtro, expanda la sección **Política de filtro de suscripción**. Para obtener más información, consulte [Políticas de filtro de suscripciones de Amazon SNS](sns-subscription-filter-policies.md).

   1. (Opcional) Para habilitar el filtrado basado en cargas, configure `Filter Policy Scope` en `MessageBody`. Para obtener más información, consulte [Alcance de políticas de filtrado de suscripciones de Amazon SNS](sns-message-filtering-scope.md).

   1. (Opcional) Para configurar una cola de mensajes fallidos en la suscripción, expanda la sección **Política de reconducción (cola de mensajes fallidos)**. Para obtener más información, consulte [Colas de mensajes fallidos de Amazon SNS](sns-dead-letter-queues.md).

   1. Seleccione **Crear subscripción**.

      En la consola se crea la suscripción y se abre la página **Detalles** de la suscripción.

Debe confirmar la suscripción antes de que se pueda comenzar a recibir mensajes en la dirección de correo electrónico.

**Para confirmar una suscripción, siga estos pasos:**

1. Verifique la bandeja de entrada de correo electrónico y elija **Confirmar la suscripción** en el correo electrónico de Amazon SNS.

1. En Amazon SNS, se abre su navegador web y se muestra una confirmación de suscripción con su ID de suscripción.

## Suscribir una dirección de correo electrónico a un tema de Amazon SNS mediante un SDK AWS
<a name="subscribe-email-to-topic-aws-sdks"></a>

Para usar un AWS SDK, debe configurarlo con sus credenciales. Para obtener más información, consulte [Los archivos de configuración y credenciales compartidos](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) en la *Guía de referencia de herramientas AWS SDKs y herramientas*.

Los siguientes ejemplos de código muestran cómo utilizar `Subscribe`.

------
#### [ .NET ]

**SDK para .NET**  
 Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/SNS#code-examples). 
Suscriba una dirección de correo electrónico a un tema.  

```
        /// <summary>
        /// Creates a new subscription to a topic.
        /// </summary>
        /// <param name="client">The initialized Amazon SNS client object, used
        /// to create an Amazon SNS subscription.</param>
        /// <param name="topicArn">The ARN of the topic to subscribe to.</param>
        /// <returns>A SubscribeResponse object which includes the subscription
        /// ARN for the new subscription.</returns>
        public static async Task<SubscribeResponse> TopicSubscribeAsync(
            IAmazonSimpleNotificationService client,
            string topicArn)
        {
            SubscribeRequest request = new SubscribeRequest()
            {
                TopicArn = topicArn,
                ReturnSubscriptionArn = true,
                Protocol = "email",
                Endpoint = "recipient@example.com",
            };

            var response = await client.SubscribeAsync(request);

            return response;
        }
```
Suscriba una cola a un tema con filtros opcionales.  

```
    /// <summary>
    /// Subscribe a queue to a topic with optional filters.
    /// </summary>
    /// <param name="topicArn">The ARN of the topic.</param>
    /// <param name="useFifoTopic">The optional filtering policy for the subscription.</param>
    /// <param name="queueArn">The ARN of the queue.</param>
    /// <returns>The ARN of the new subscription.</returns>
    public async Task<string> SubscribeTopicWithFilter(string topicArn, string? filterPolicy, string queueArn)
    {
        var subscribeRequest = new SubscribeRequest()
        {
            TopicArn = topicArn,
            Protocol = "sqs",
            Endpoint = queueArn
        };

        if (!string.IsNullOrEmpty(filterPolicy))
        {
            subscribeRequest.Attributes = new Dictionary<string, string> { { "FilterPolicy", filterPolicy } };
        }

        var subscribeResponse = await _amazonSNSClient.SubscribeAsync(subscribeRequest);
        return subscribeResponse.SubscriptionArn;
    }
```
+  Para obtener detalles sobre la API, consulte [Subscribe](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/Subscribe) en la *Referencia de la API de AWS SDK para .NET *. 

------
#### [ C\$1\$1 ]

**SDK para C\$1\$1**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sns#code-examples). 
Suscriba una dirección de correo electrónico a un tema.  

```
//! Subscribe to an Amazon Simple Notification Service (Amazon SNS) topic with delivery to an email address.
/*!
  \param topicARN: An SNS topic Amazon Resource Name (ARN).
  \param emailAddress: An email address.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::subscribeEmail(const Aws::String &topicARN,
                                 const Aws::String &emailAddress,
                                 const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::SubscribeRequest request;
    request.SetTopicArn(topicARN);
    request.SetProtocol("email");
    request.SetEndpoint(emailAddress);

    const Aws::SNS::Model::SubscribeOutcome outcome = snsClient.Subscribe(request);

    if (outcome.IsSuccess()) {
        std::cout << "Subscribed successfully." << std::endl;
        std::cout << "Subscription ARN '" << outcome.GetResult().GetSubscriptionArn()
                  << "'." << std::endl;
    }
    else {
        std::cerr << "Error while subscribing " << outcome.GetError().GetMessage()
                  << std::endl;
    }

    return outcome.IsSuccess();
}
```
Suscriba una aplicación móvil a un tema.  

```
//! Subscribe to an Amazon Simple Notification Service (Amazon SNS) topic with delivery to a mobile app.
/*!
  \param topicARN: The Amazon Resource Name (ARN) for an Amazon SNS topic.
  \param endpointARN: The ARN for a mobile app or device endpoint.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool
AwsDoc::SNS::subscribeApp(const Aws::String &topicARN,
                          const Aws::String &endpointARN,
                          const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::SubscribeRequest request;
    request.SetTopicArn(topicARN);
    request.SetProtocol("application");
    request.SetEndpoint(endpointARN);

    const Aws::SNS::Model::SubscribeOutcome outcome = snsClient.Subscribe(request);

    if (outcome.IsSuccess()) {
        std::cout << "Subscribed successfully." << std::endl;
        std::cout << "Subscription ARN '" << outcome.GetResult().GetSubscriptionArn()
                  << "'." << std::endl;
    }
    else {
        std::cerr << "Error while subscribing " << outcome.GetError().GetMessage()
                  << std::endl;
    }

    return outcome.IsSuccess();
}
```
Suscriba una función de Lambda a un tema.  

```
//! Subscribe to an Amazon Simple Notification Service (Amazon SNS) topic with delivery to an AWS Lambda function.
/*!
  \param topicARN: The Amazon Resource Name (ARN) for an Amazon SNS topic.
  \param lambdaFunctionARN: The ARN for an AWS Lambda function.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::subscribeLambda(const Aws::String &topicARN,
                                  const Aws::String &lambdaFunctionARN,
                                  const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::SubscribeRequest request;
    request.SetTopicArn(topicARN);
    request.SetProtocol("lambda");
    request.SetEndpoint(lambdaFunctionARN);

    const Aws::SNS::Model::SubscribeOutcome outcome = snsClient.Subscribe(request);

    if (outcome.IsSuccess()) {
        std::cout << "Subscribed successfully." << std::endl;
        std::cout << "Subscription ARN '" << outcome.GetResult().GetSubscriptionArn()
                  << "'." << std::endl;
    }
    else {
        std::cerr << "Error while subscribing " << outcome.GetError().GetMessage()
                  << std::endl;
    }

    return outcome.IsSuccess();
}
```
Suscriba una cola de SQS a un tema.  

```
        Aws::Client::ClientConfiguration clientConfig;
        // Optional: Set to the AWS Region (overrides config file).
        // clientConfig.region = "us-east-1";

    Aws::SNS::SNSClient snsClient(clientConfiguration);

            Aws::SNS::Model::SubscribeRequest request;
            request.SetTopicArn(topicARN);
            request.SetProtocol("sqs");
            request.SetEndpoint(queueARN);

            Aws::SNS::Model::SubscribeOutcome outcome = snsClient.Subscribe(request);

            if (outcome.IsSuccess()) {
                Aws::String subscriptionARN = outcome.GetResult().GetSubscriptionArn();
                std::cout << "The queue '" << queueName
                          << "' has been subscribed to the topic '"
                          << "'" << topicName << "'" << std::endl;
                std::cout << "with the subscription ARN '" << subscriptionARN << "."
                          << std::endl;
                subscriptionARNS.push_back(subscriptionARN);
            }
            else {
                std::cerr << "Error with TopicsAndQueues::Subscribe. "
                          << outcome.GetError().GetMessage()
                          << std::endl;

                cleanUp(topicARN,
                        queueURLS,
                        subscriptionARNS,
                        snsClient,
                        sqsClient);

                return false;
            }
```
Suscribirse con un filtro a un tema.  

```
        static const Aws::String TONE_ATTRIBUTE("tone");
        static const Aws::Vector<Aws::String> TONES = {"cheerful", "funny", "serious",
                                                       "sincere"};

        Aws::Client::ClientConfiguration clientConfig;
        // Optional: Set to the AWS Region (overrides config file).
        // clientConfig.region = "us-east-1";

    Aws::SNS::SNSClient snsClient(clientConfiguration);

            Aws::SNS::Model::SubscribeRequest request;
            request.SetTopicArn(topicARN);
            request.SetProtocol("sqs");
            request.SetEndpoint(queueARN);
            if (isFifoTopic) {
                if (first) {
                    std::cout << "Subscriptions to a FIFO topic can have filters."
                              << std::endl;
                    std::cout
                            << "If you add a filter to this subscription, then only the filtered messages "
                            << "will be received in the queue." << std::endl;
                    std::cout << "For information about message filtering, "
                              << "see https://docs.aws.amazon.com/sns/latest/dg/sns-message-filtering.html"
                              << std::endl;
                    std::cout << "For this example, you can filter messages by a \""
                              << TONE_ATTRIBUTE << "\" attribute." << std::endl;
                }

                std::ostringstream ostringstream;
                ostringstream << "Filter messages for \"" << queueName
                              << "\"'s subscription to the topic \""
                              << topicName << "\"?  (y/n)";

                // Add filter if user answers yes.
                if (askYesNoQuestion(ostringstream.str())) {
                    Aws::String jsonPolicy = getFilterPolicyFromUser();
                    if (!jsonPolicy.empty()) {
                        filteringMessages = true;

                        std::cout << "This is the filter policy for this subscription."
                                  << std::endl;
                        std::cout << jsonPolicy << std::endl;

                        request.AddAttributes("FilterPolicy", jsonPolicy);
                    }
                    else {
                        std::cout
                                << "Because you did not select any attributes, no filter "
                                << "will be added to this subscription." << std::endl;
                    }
                }
            }  // if (isFifoTopic)
            Aws::SNS::Model::SubscribeOutcome outcome = snsClient.Subscribe(request);

            if (outcome.IsSuccess()) {
                Aws::String subscriptionARN = outcome.GetResult().GetSubscriptionArn();
                std::cout << "The queue '" << queueName
                          << "' has been subscribed to the topic '"
                          << "'" << topicName << "'" << std::endl;
                std::cout << "with the subscription ARN '" << subscriptionARN << "."
                          << std::endl;
                subscriptionARNS.push_back(subscriptionARN);
            }
            else {
                std::cerr << "Error with TopicsAndQueues::Subscribe. "
                          << outcome.GetError().GetMessage()
                          << std::endl;

                cleanUp(topicARN,
                        queueURLS,
                        subscriptionARNS,
                        snsClient,
                        sqsClient);

                return false;
            }

//! Routine that lets the user select attributes for a subscription filter policy.
/*!
 \sa getFilterPolicyFromUser()
 \return Aws::String: The filter policy as JSON.
 */
Aws::String AwsDoc::TopicsAndQueues::getFilterPolicyFromUser() {
    std::cout
            << "You can filter messages by one or more of the following \""
            << TONE_ATTRIBUTE << "\" attributes." << std::endl;

    std::vector<Aws::String> filterSelections;
    int selection;
    do {
        for (size_t j = 0; j < TONES.size(); ++j) {
            std::cout << "  " << (j + 1) << ". " << TONES[j]
                      << std::endl;
        }
        selection = askQuestionForIntRange(
                "Enter a number (or enter zero to stop adding more). ",
                0, static_cast<int>(TONES.size()));

        if (selection != 0) {
            const Aws::String &selectedTone(TONES[selection - 1]);
            // Add the tone to the selection if it is not already added.
            if (std::find(filterSelections.begin(),
                          filterSelections.end(),
                          selectedTone)
                == filterSelections.end()) {
                filterSelections.push_back(selectedTone);
            }
        }
    } while (selection != 0);

    Aws::String result;
    if (!filterSelections.empty()) {
        std::ostringstream jsonPolicyStream;
        jsonPolicyStream << "{ \"" << TONE_ATTRIBUTE << "\": [";


        for (size_t j = 0; j < filterSelections.size(); ++j) {
            jsonPolicyStream << "\"" << filterSelections[j] << "\"";
            if (j < filterSelections.size() - 1) {
                jsonPolicyStream << ",";
            }
        }
        jsonPolicyStream << "] }";

        result = jsonPolicyStream.str();
    }

    return result;
}
```
+  Para obtener detalles sobre la API, consulte [Subscribe](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/Subscribe) en la *Referencia de la API de AWS SDK para C\$1\$1 *. 

------
#### [ CLI ]

**AWS CLI**  
**Suscripción a un tema**  
El siguiente comando `subscribe` suscribe una dirección de correo electrónico al tema especificado.  

```
aws sns subscribe \
    --topic-arn arn:aws:sns:us-west-2:123456789012:my-topic \
    --protocol email \
    --notification-endpoint my-email@example.com
```
Salida:  

```
{
    "SubscriptionArn": "pending confirmation"
}
```
+  Para obtener detalles sobre la API, consulte [Subscribe](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/subscribe.html) en la *Referencia de comandos de la AWS CLI *. 

------
#### [ Go ]

**SDK para Go V2**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/gov2/workflows/topics_and_queues#code-examples). 
Suscriba una cola a un tema con filtros opcionales.  

```
import (
	"context"
	"encoding/json"
	"log"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/service/sns"
	"github.com/aws/aws-sdk-go-v2/service/sns/types"
)

// SnsActions encapsulates the Amazon Simple Notification Service (Amazon SNS) actions
// used in the examples.
type SnsActions struct {
	SnsClient *sns.Client
}



// SubscribeQueue subscribes an Amazon Simple Queue Service (Amazon SQS) queue to an
// Amazon SNS topic. When filterMap is not nil, it is used to specify a filter policy
// so that messages are only sent to the queue when the message has the specified attributes.
func (actor SnsActions) SubscribeQueue(ctx context.Context, topicArn string, queueArn string, filterMap map[string][]string) (string, error) {
	var subscriptionArn string
	var attributes map[string]string
	if filterMap != nil {
		filterBytes, err := json.Marshal(filterMap)
		if err != nil {
			log.Printf("Couldn't create filter policy, here's why: %v\n", err)
			return "", err
		}
		attributes = map[string]string{"FilterPolicy": string(filterBytes)}
	}
	output, err := actor.SnsClient.Subscribe(ctx, &sns.SubscribeInput{
		Protocol:              aws.String("sqs"),
		TopicArn:              aws.String(topicArn),
		Attributes:            attributes,
		Endpoint:              aws.String(queueArn),
		ReturnSubscriptionArn: true,
	})
	if err != nil {
		log.Printf("Couldn't susbscribe queue %v to topic %v. Here's why: %v\n",
			queueArn, topicArn, err)
	} else {
		subscriptionArn = *output.SubscriptionArn
	}

	return subscriptionArn, err
}
```
+  Para obtener detalles sobre la API, consulte [Subscribe](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/sns#Client.Subscribe) en la *Referencia de la API de AWS SDK para Go *. 

------
#### [ Java ]

**SDK para Java 2.x**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 
Suscriba una dirección de correo electrónico a un tema.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.SubscribeRequest;
import software.amazon.awssdk.services.sns.model.SubscribeResponse;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class SubscribeEmail {
    public static void main(String[] args) {
        final String usage = """
                Usage:     <topicArn> <email>

                Where:
                   topicArn - The ARN of the topic to subscribe.
                   email - The email address to use.
                """;

        if (args.length != 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String topicArn = args[0];
        String email = args[1];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        subEmail(snsClient, topicArn, email);
        snsClient.close();
    }

    public static void subEmail(SnsClient snsClient, String topicArn, String email) {
        try {
            SubscribeRequest request = SubscribeRequest.builder()
                    .protocol("email")
                    .endpoint(email)
                    .returnSubscriptionArn(true)
                    .topicArn(topicArn)
                    .build();

            SubscribeResponse result = snsClient.subscribe(request);
            System.out.println("Subscription ARN: " + result.subscriptionArn() + "\n\n Status is "
                    + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
Suscriba un punto de conexión HTTP a un tema.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.SubscribeRequest;
import software.amazon.awssdk.services.sns.model.SubscribeResponse;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class SubscribeHTTPS {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <topicArn> <url>

                Where:
                   topicArn - The ARN of the topic to subscribe.
                   url - The HTTPS endpoint that you want to receive notifications.
                """;

        if (args.length < 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String topicArn = args[0];
        String url = args[1];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        subHTTPS(snsClient, topicArn, url);
        snsClient.close();
    }

    public static void subHTTPS(SnsClient snsClient, String topicArn, String url) {
        try {
            SubscribeRequest request = SubscribeRequest.builder()
                    .protocol("https")
                    .endpoint(url)
                    .returnSubscriptionArn(true)
                    .topicArn(topicArn)
                    .build();

            SubscribeResponse result = snsClient.subscribe(request);
            System.out.println("Subscription ARN is " + result.subscriptionArn() + "\n\n Status is "
                    + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
Suscriba una función de Lambda a un tema.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.SubscribeRequest;
import software.amazon.awssdk.services.sns.model.SubscribeResponse;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class SubscribeLambda {

    public static void main(String[] args) {

        final String usage = """

                Usage:    <topicArn> <lambdaArn>

                Where:
                   topicArn - The ARN of the topic to subscribe.
                   lambdaArn - The ARN of an AWS Lambda function.
                """;

        if (args.length != 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String topicArn = args[0];
        String lambdaArn = args[1];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        String arnValue = subLambda(snsClient, topicArn, lambdaArn);
        System.out.println("Subscription ARN: " + arnValue);
        snsClient.close();
    }

    public static String subLambda(SnsClient snsClient, String topicArn, String lambdaArn) {
        try {
            SubscribeRequest request = SubscribeRequest.builder()
                    .protocol("lambda")
                    .endpoint(lambdaArn)
                    .returnSubscriptionArn(true)
                    .topicArn(topicArn)
                    .build();

            SubscribeResponse result = snsClient.subscribe(request);
            return result.subscriptionArn();

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        return "";
    }
}
```
+  Para obtener detalles sobre la API, consulte [Subscribe](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Subscribe) en la *Referencia de la API de AWS SDK for Java 2.x *. 

------
#### [ JavaScript ]

**SDK para JavaScript (v3)**  
 Hay más información. GitHub Busque el ejemplo completo y aprenda a configurarlo y ejecutarlo en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Cree el cliente en un módulo separado y expórtelo.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
Importe el SDK y los módulos cliente, y llame a la API.  

```
import { SubscribeCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {string} topicArn - The ARN of the topic for which you wish to confirm a subscription.
 * @param {string} emailAddress - The email address that is subscribed to the topic.
 */
export const subscribeEmail = async (
  topicArn = "TOPIC_ARN",
  emailAddress = "usern@me.com",
) => {
  const response = await snsClient.send(
    new SubscribeCommand({
      Protocol: "email",
      TopicArn: topicArn,
      Endpoint: emailAddress,
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: 'c8e35bcd-b3c0-5940-9f66-06f6fcc108f0',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   SubscriptionArn: 'pending confirmation'
  // }
};
```
Suscriba una aplicación móvil a un tema.  

```
import { SubscribeCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {string} topicArn - The ARN of the topic the subscriber is subscribing to.
 * @param {string} endpoint - The Endpoint ARN of an application. This endpoint is created
 *                            when an application registers for notifications.
 */
export const subscribeApp = async (
  topicArn = "TOPIC_ARN",
  endpoint = "ENDPOINT",
) => {
  const response = await snsClient.send(
    new SubscribeCommand({
      Protocol: "application",
      TopicArn: topicArn,
      Endpoint: endpoint,
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: 'c8e35bcd-b3c0-5940-9f66-06f6fcc108f0',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   SubscriptionArn: 'pending confirmation'
  // }
  return response;
};
```
Suscriba una función de Lambda a un tema.  

```
import { SubscribeCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {string} topicArn - The ARN of the topic the subscriber is subscribing to.
 * @param {string} endpoint - The Endpoint ARN of and AWS Lambda function.
 */
export const subscribeLambda = async (
  topicArn = "TOPIC_ARN",
  endpoint = "ENDPOINT",
) => {
  const response = await snsClient.send(
    new SubscribeCommand({
      Protocol: "lambda",
      TopicArn: topicArn,
      Endpoint: endpoint,
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: 'c8e35bcd-b3c0-5940-9f66-06f6fcc108f0',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   SubscriptionArn: 'pending confirmation'
  // }
  return response;
};
```
Suscriba una cola de SQS a un tema.  

```
import { SubscribeCommand, SNSClient } from "@aws-sdk/client-sns";

const client = new SNSClient({});

export const subscribeQueue = async (
  topicArn = "TOPIC_ARN",
  queueArn = "QUEUE_ARN",
) => {
  const command = new SubscribeCommand({
    TopicArn: topicArn,
    Protocol: "sqs",
    Endpoint: queueArn,
  });

  const response = await client.send(command);
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: '931e13d9-5e2b-543f-8781-4e9e494c5ff2',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   SubscriptionArn: 'arn:aws:sns:us-east-1:xxxxxxxxxxxx:subscribe-queue-test-430895:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
  // }
  return response;
};
```
Suscribirse con un filtro a un tema.  

```
import { SubscribeCommand, SNSClient } from "@aws-sdk/client-sns";

const client = new SNSClient({});

export const subscribeQueueFiltered = async (
  topicArn = "TOPIC_ARN",
  queueArn = "QUEUE_ARN",
) => {
  const command = new SubscribeCommand({
    TopicArn: topicArn,
    Protocol: "sqs",
    Endpoint: queueArn,
    Attributes: {
      // This subscription will only receive messages with the 'event' attribute set to 'order_placed'.
      FilterPolicyScope: "MessageAttributes",
      FilterPolicy: JSON.stringify({
        event: ["order_placed"],
      }),
    },
  });

  const response = await client.send(command);
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: '931e13d9-5e2b-543f-8781-4e9e494c5ff2',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   SubscriptionArn: 'arn:aws:sns:us-east-1:xxxxxxxxxxxx:subscribe-queue-test-430895:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
  // }
  return response;
};
```
+  Para obtener información, consulte la [Guía para desarrolladores de AWS SDK para JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-subscribing-email). 
+  Para obtener detalles sobre la API, consulte [Subscribe](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/SubscribeCommand) en la *Referencia de la API de AWS SDK para JavaScript *. 

------
#### [ Kotlin ]

**SDK para Kotlin**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin/services/sns#code-examples). 
Suscriba una dirección de correo electrónico a un tema.  

```
suspend fun subEmail(
    topicArnVal: String,
    email: String,
): String {
    val request =
        SubscribeRequest {
            protocol = "email"
            endpoint = email
            returnSubscriptionArn = true
            topicArn = topicArnVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        val result = snsClient.subscribe(request)
        return result.subscriptionArn.toString()
    }
}
```
Suscriba una función de Lambda a un tema.  

```
suspend fun subLambda(
    topicArnVal: String?,
    lambdaArn: String?,
) {
    val request =
        SubscribeRequest {
            protocol = "lambda"
            endpoint = lambdaArn
            returnSubscriptionArn = true
            topicArn = topicArnVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        val result = snsClient.subscribe(request)
        println(" The subscription Arn is ${result.subscriptionArn}")
    }
}
```
+  Para obtener detalles sobre la API, consulte [Subscribe](https://sdk.amazonaws.com/kotlin/api/latest/index.html) en la *Referencia de la API de AWS SDK para Kotlin*. 

------
#### [ PHP ]

**SDK para PHP**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 
Suscriba una dirección de correo electrónico a un tema.  

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Prepares to subscribe an endpoint by sending the endpoint a confirmation message.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$protocol = 'email';
$endpoint = 'sample@example.com';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->subscribe([
        'Protocol' => $protocol,
        'Endpoint' => $endpoint,
        'ReturnSubscriptionArn' => true,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
Suscriba un punto de conexión HTTP a un tema.  

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Prepares to subscribe an endpoint by sending the endpoint a confirmation message.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$protocol = 'https';
$endpoint = 'https://';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->subscribe([
        'Protocol' => $protocol,
        'Endpoint' => $endpoint,
        'ReturnSubscriptionArn' => true,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Para obtener información sobre la API, consulte [Suscríbase](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/Subscribe) en la *Referencia de la API de AWS SDK para PHP *. 

------
#### [ Python ]

**SDK para Python (Boto3)**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/sns#code-examples). 
Suscriba una dirección de correo electrónico a un tema.  

```
class SnsWrapper:
    """Encapsulates Amazon SNS topic and subscription functions."""

    def __init__(self, sns_resource):
        """
        :param sns_resource: A Boto3 Amazon SNS resource.
        """
        self.sns_resource = sns_resource


    @staticmethod
    def subscribe(topic, protocol, endpoint):
        """
        Subscribes an endpoint to the topic. Some endpoint types, such as email,
        must be confirmed before their subscriptions are active. When a subscription
        is not confirmed, its Amazon Resource Number (ARN) is set to
        'PendingConfirmation'.

        :param topic: The topic to subscribe to.
        :param protocol: The protocol of the endpoint, such as 'sms' or 'email'.
        :param endpoint: The endpoint that receives messages, such as a phone number
                         (in E.164 format) for SMS messages, or an email address for
                         email messages.
        :return: The newly added subscription.
        """
        try:
            subscription = topic.subscribe(
                Protocol=protocol, Endpoint=endpoint, ReturnSubscriptionArn=True
            )
            logger.info("Subscribed %s %s to topic %s.", protocol, endpoint, topic.arn)
        except ClientError:
            logger.exception(
                "Couldn't subscribe %s %s to topic %s.", protocol, endpoint, topic.arn
            )
            raise
        else:
            return subscription
```
Suscriba una cola a un tema con filtros opcionales.  

```
class SnsWrapper:
    """Wrapper class for managing Amazon SNS operations."""

    def __init__(self, sns_client: Any) -> None:
        """
        Initialize the SnsWrapper.

        :param sns_client: A Boto3 Amazon SNS client.
        """
        self.sns_client = sns_client

    @classmethod
    def from_client(cls) -> 'SnsWrapper':
        """
        Create an SnsWrapper instance using a default boto3 client.

        :return: An instance of this class.
        """
        sns_client = boto3.client('sns')
        return cls(sns_client)


    def subscribe_queue_to_topic(
        self, 
        topic_arn: str, 
        queue_arn: str, 
        filter_policy: Optional[str] = None
    ) -> str:
        """
        Subscribe an SQS queue to an SNS topic.

        :param topic_arn: The ARN of the SNS topic.
        :param queue_arn: The ARN of the SQS queue.
        :param filter_policy: Optional JSON filter policy for message filtering.
        :return: The ARN of the subscription.
        :raises ClientError: If the subscription fails.
        """
        try:
            attributes = {}
            if filter_policy:
                attributes['FilterPolicy'] = filter_policy

            response = self.sns_client.subscribe(
                TopicArn=topic_arn,
                Protocol='sqs',
                Endpoint=queue_arn,
                Attributes=attributes
            )

            subscription_arn = response['SubscriptionArn']
            logger.info(f"Subscribed queue {queue_arn} to topic {topic_arn}")
            return subscription_arn

        except ClientError as e:
            error_code = e.response.get('Error', {}).get('Code', 'Unknown')
            logger.error(f"Error subscribing queue to topic: {error_code} - {e}")
            raise
```
+  Para obtener información sobre la API, consulte [Subscribe](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Subscribe) en la *Referencia de la API de AWS SDK para Python (Boto3)*. 

------
#### [ Ruby ]

**SDK para Ruby**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/ruby/example_code/sns#code-examples). 
Suscriba una dirección de correo electrónico a un tema.  

```
require 'aws-sdk-sns'
require 'logger'

# Represents a service for creating subscriptions in Amazon Simple Notification Service (SNS)
class SubscriptionService
  # Initializes the SubscriptionService with an SNS client
  #
  # @param sns_client [Aws::SNS::Client] The SNS client
  def initialize(sns_client)
    @sns_client = sns_client
    @logger = Logger.new($stdout)
  end

  # Attempts to create a subscription to a topic
  #
  # @param topic_arn [String] The ARN of the SNS topic
  # @param protocol [String] The subscription protocol (e.g., email)
  # @param endpoint [String] The endpoint that receives the notifications (email address)
  # @return [Boolean] true if subscription was successfully created, false otherwise
  def create_subscription(topic_arn, protocol, endpoint)
    @sns_client.subscribe(topic_arn: topic_arn, protocol: protocol, endpoint: endpoint)
    @logger.info('Subscription created successfully.')
    true
  rescue Aws::SNS::Errors::ServiceError => e
    @logger.error("Error while creating the subscription: #{e.message}")
    false
  end
end

# Main execution if the script is run directly
if $PROGRAM_NAME == __FILE__
  protocol = 'email'
  endpoint = 'EMAIL_ADDRESS' # Should be replaced with a real email address
  topic_arn = 'TOPIC_ARN'    # Should be replaced with a real topic ARN

  sns_client = Aws::SNS::Client.new
  subscription_service = SubscriptionService.new(sns_client)

  @logger.info('Creating the subscription.')
  unless subscription_service.create_subscription(topic_arn, protocol, endpoint)
    @logger.error('Subscription creation failed. Stopping program.')
    exit 1
  end
end
```
+  Para obtener información, consulte la [Guía para desarrolladores de AWS SDK para Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/developer-guide/sns-example-create-subscription.html). 
+  Para obtener información sobre la API, consulte [Suscríbase](https://docs.aws.amazon.com/goto/SdkForRubyV3/sns-2010-03-31/Subscribe) en la *Referencia de la API de AWS SDK para Ruby *. 

------
#### [ Rust ]

**SDK para Rust**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/rustv1/examples/sns#code-examples). 
Suscriba una dirección de correo electrónico a un tema.  

```
async fn subscribe_and_publish(
    client: &Client,
    topic_arn: &str,
    email_address: &str,
) -> Result<(), Error> {
    println!("Receiving on topic with ARN: `{}`", topic_arn);

    let rsp = client
        .subscribe()
        .topic_arn(topic_arn)
        .protocol("email")
        .endpoint(email_address)
        .send()
        .await?;

    println!("Added a subscription: {:?}", rsp);

    let rsp = client
        .publish()
        .topic_arn(topic_arn)
        .message("hello sns!")
        .send()
        .await?;

    println!("Published message: {:?}", rsp);

    Ok(())
}
```
+  Para obtener detalles sobre la API, consulte [Subscribe](https://docs.rs/aws-sdk-sns/latest/aws_sdk_sns/client/struct.Client.html#method.subscribe) en la *Referencia de la API de AWS SDK para Rust*. 

------
#### [ SAP ABAP ]

**SDK para SAP ABAP**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap/services/sns#code-examples). 
Suscriba una dirección de correo electrónico a un tema.  

```
    TRY.
        oo_result = lo_sns->subscribe(                      "oo_result is returned for testing purposes."
                iv_topicarn = iv_topic_arn
                iv_protocol = 'email'
                iv_endpoint = iv_email_address
                iv_returnsubscriptionarn = abap_true ).
        MESSAGE 'Email address subscribed to SNS topic.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Topic does not exist.' TYPE 'E'.
      CATCH /aws1/cx_snssubscriptionlmte00.
        MESSAGE 'Unable to create subscriptions. You have reached the maximum number of subscriptions allowed.' TYPE 'E'.
    ENDTRY.
```
+  Para obtener detalles sobre la API, consulte [Subscribe](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html) en la *Referencia de la API de AWS SDK para SAP ABAP*. 

------
#### [ Swift ]

**SDK para Swift**  
 Hay más información GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/swift/example_code/sns#code-examples). 
Suscriba una dirección de correo electrónico a un tema.  

```
import AWSSNS

        let config = try await SNSClient.SNSClientConfiguration(region: region)
        let snsClient = SNSClient(config: config)

        let output = try await snsClient.subscribe(
            input: SubscribeInput(
                endpoint: email,
                protocol: "email",
                returnSubscriptionArn: true,
                topicArn: arn
            )
        )

        guard let subscriptionArn = output.subscriptionArn else {
            print("No subscription ARN received from Amazon SNS.")
            return
        }
        
        print("Subscription \(subscriptionArn) created.")
```
Suscribir un número de teléfono a un tema para recibir notificaciones por SMS.  

```
import AWSSNS

        let config = try await SNSClient.SNSClientConfiguration(region: region)
        let snsClient = SNSClient(config: config)

        let output = try await snsClient.subscribe(
            input: SubscribeInput(
                endpoint: phone,
                protocol: "sms",
                returnSubscriptionArn: true,
                topicArn: arn
            )
        )

        guard let subscriptionArn = output.subscriptionArn else {
            print("No subscription ARN received from Amazon SNS.")
            return
        }
        
        print("Subscription \(subscriptionArn) created.")
```
+  Para obtener detalles sobre la API, consulte [Subscribe](https://sdk.amazonaws.com/swift/api/awssns/latest/documentation/awssns/snsclient/subscribe(input:)) en la *Referencia de la API de AWS SDK para Swift*. 

------