

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Utilisation d'Amazon SNS pour la messagerie application-to-person
<a name="sns-user-notifications"></a>

La messagerie Amazon SNS application-to-person (A2P) vous permet d'envoyer des notifications et des alertes directement sur les appareils mobiles de vos clients par SMS (Short Message Service). Grâce à cette fonctionnalité, vous pouvez envoyer des notifications push aux applications mobiles, des SMS aux numéros de téléphone portable et des e-mails en texte brut aux adresses e-mail. En outre, vous avez la possibilité de distribuer des messages en utilisant des sujets pour atteindre plusieurs destinataires, ou de publier des messages directement sur des terminaux mobiles individuels pour une communication personnalisée.

Cette rubrique explique comment utiliser Amazon SNS pour les notifications utilisateur adressées aux abonnés, telles que les applications mobiles, les numéros de téléphone portable et les adresses e-mail.

![\[Vue d'ensemble de la manière dont Amazon SNS prend en charge la messagerie application-to-person (A2P) en permettant aux éditeurs d'envoyer des notifications directement aux clients. Il présente deux méthodes principales de distribution des messages : la publication directe vers des points de terminaison individuels (tels que les adresses e-mail, les numéros de téléphone ou les applications mobiles) et la publication thématique, qui envoie des messages à plusieurs abonnés à la fois. Les abonnés, représentés sur la droite, peuvent recevoir des notifications par le biais de notifications push, de SMS ou d'e-mails, offrant ainsi une flexibilité adaptée aux différents cas d'utilisation.\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/sns-a2p-overview.png)


# Messagerie texte mobile avec Amazon SNS
<a name="sns-mobile-phone-number-as-subscriber"></a>

**Important**  
Le guide du développeur de SMS Amazon SNS a été mis à jour. Amazon SNS s'est intégré à [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)la livraison de messages SMS. Ce guide contient les dernières informations sur la création, la configuration et la gestion de vos messages SMS Amazon SNS.

La messagerie texte (SMS) mobile Amazon SNS est conçue pour faciliter la transmission de messages vers diverses plateformes, telles que les applications Web, mobiles et professionnelles qui prennent en charge les SMS. Les utilisateurs peuvent envoyer des messages à un ou plusieurs numéros de téléphone en les abonnant à une rubrique, ce qui simplifie le processus de distribution.

Les messages Amazon SNS sont envoyés par AWS End User Messaging SMS, ce qui garantit une transmission fiable des messages. Dans Amazon SNS APIs, vous pouvez définir diverses propriétés telles que les types de messages (promotionnels ou transactionnels), les [limites de dépenses mensuelles](sms_preferences.md#sms_preferences_console), les [listes de désinscription](sms_manage.md#sms_manage_optout) et l'optimisation de la diffusion des [messages](sms_preferences.md#sms_preferences_console).

AWS End User Messaging SMS gère la transmission des messages au numéro de téléphone de destination via son réseau mondial de fourniture de SMS. Il gère le routage, le statut de livraison et toute conformité requise aux réglementations régionales. Pour accéder à des fonctionnalités SMS supplémentaires telles que les autorisations granulaires, les pools téléphoniques, les ensembles de configurations, le simulateur de SMS et les règles nationales, consultez le [guide de l'AWS End User Messaging SMS utilisateur](https://docs.aws.amazon.com/sms-voice/latest/userguide/configurations.html).

![\[Une illustration de la manière dont Amazon SNS s'intègre AWS End User Messaging SMS pour diffuser des SMS mobiles de manière fiable. Les messages peuvent être envoyés directement à des destinataires individuels ou distribués à des groupes via les rubriques Amazon SNS. AWS End User Messaging SMS gère le routage, la livraison et la conformité des messages sur son réseau mondial, garantissant ainsi évolutivité et fiabilité. Cette configuration permet également de configurer les préférences relatives aux messages, de gérer les limites de dépenses et de suivre l'état de livraison afin d'optimiser AWS SMS la messagerie.\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/sns-sms-end-user-messaging.png)


Les fonctionnalités clés suivantes vous permettent d'envoyer des messages SMS Amazon SNS évolutifs et facilement extensibles :

**[Personnaliser les préférences relatives aux messages](sms_preferences.md)**  
Personnalisez les envois de SMS Compte AWS selon vos besoins en configurant les préférences SMS en fonction de votre budget et de votre cas d'utilisation. Par exemple, vous pouvez choisir si vos messages privilégient la rentabilité ou la fiabilité de leur diffusion.

**[Définissez des quotas de dépenses](channels-sms-awssupport-spend-threshold.md)**  
Personnalisez vos envois de SMS en spécifiant des quotas de dépenses ou pour des envois de messages individuels et des quotas de dépenses mensuels pour votre Compte AWS. Lorsque les lois et réglementations locales (telles que les États-Unis et le Canada) l'exigent, les destinataires de SMS peuvent se [désinscrire](sms_manage.md#sms_manage_optout), ce qui signifie qu'ils choisissent de ne plus recevoir de SMS de votre part Compte AWS. Une fois qu'un destinataire a refusé de recevoir des messages, vous pouvez, avec certaines restrictions, réinscrire le numéro de téléphone afin de pouvoir recommencer à envoyer des messages.

**[Envoyez des SMS dans le monde entier](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html)**  
Amazon SNS prend en charge la messagerie SMS dans plusieurs régions, ce qui vous permet d'envoyer des messages dans plus de 240 pays et régions.

## Comment Amazon SNS livre-t-il mes SMS ?
<a name="sns-sms-pinpoint-integration"></a>

Lorsque vous demandez à Amazon SNS d'envoyer des SMS en votre nom, les messages sont envoyés à l'aide de. AWS End User Messaging SMS L'intégration entre Amazon SNS et Amazon AWS End User Messaging SMS offre les avantages suivants :

**[Politiques IAM](sns-mobile-phone-number-getting-started.md#sns-mobile-phone-number-prerequisites)**  
Vous pouvez tirer parti de l'IAM et des politiques de ressources pour contrôler et répartir l'accès à vos ressources SMS entre d'autres AWS services et régions.

**Configurations [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/configurations.html)**  
Toutes les configurations liées à l'identifiant d'origine (création, mise à jour de configuration, mise en service d'une nouvelle origine IDs, modification des modèles d'enregistrement) sont utilisées. AWS End User Messaging SMS

**[AWS End User Messaging SMS facturation](https://aws.amazon.com/sns/sms-pricing/)**  
Cependant, toutes les facturations par SMS sont effectuées AWS End User Messaging SMS. Vous pouvez consolider vos AWS dépenses pour vos charges de travail liées aux SMS, tout en centralisant l'approvisionnement et la gestion de vos ressources SMS.

# Commencer à utiliser Amazon SNS SMS
<a name="sns-mobile-phone-number-getting-started"></a>

**Important**  
Le guide du développeur de SMS Amazon SNS a été mis à jour. Amazon SNS s'est intégré à [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)la livraison de messages SMS. Ce guide contient les dernières informations sur la création, la configuration et la gestion de vos messages SMS Amazon SNS.

Cette rubrique vous explique comment gérer votre sandbox SMS et configurer les politiques IAM et basées sur les ressources afin d'accorder à Amazon SNS les autorisations nécessaires pour accéder et utiliser le. AWS End User Messaging SMS APIs 

## Conditions préalables
<a name="sns-mobile-phone-number-prerequisites"></a>

Amazon SNS recommande de mettre à jour votre politique IAM afin d'inclure les actions suivantes afin de garantir un contrôle et une visibilité complets sur vos ressources Amazon SNS :
+ [`AmazonSNSFullAccess`](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonSNSFullAccess)
+ [`AmazonSNSReadOnly`](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonSNSReadOnlyAccess) 

# Utilisation du sandbox SMS Amazon SNS
<a name="sns-sms-sandbox"></a>

Les comptes SMS Amazon SNS nouvellement créés sont automatiquement placés dans le bac à sable des SMS afin de garantir la sécurité des AWS clients et des destinataires en atténuant les risques de fraude et d'abus. Cet environnement sert d'espace sécurisé à des fins de test et de développement. Lorsque vous travaillez dans le sandbox SMS, vous avez accès à toutes les fonctionnalités d'Amazon SNS, mais vous êtes soumis à certaines restrictions :
+ Vous pouvez envoyer des messages SMS uniquement aux numéros de téléphone de destination vérifiés.
+ Vous pouvez avoir jusqu'à 10 numéros de téléphone de destination vérifiés.
+ Vous ne pouvez supprimer les numéros de téléphone de destination qu'au moins 24 heures après la vérification ou la dernière tentative de vérification.

Une fois que votre compte sort du sandbox, ces restrictions sont supprimées et vous pouvez envoyer des SMS à n'importe quel destinataire.

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

Les nouveaux comptes SMS Amazon SNS sont placés dans un sandbox SMS. Suivez les étapes ci-dessous pour créer et gérer des numéros de téléphone dans votre sandbox, créer des numéros d'origine et d'expéditeur IDs, et enregistrer votre entreprise.

1. Ajoutez un numéro de **téléphone de destination** au sandbox SMS. Pour en savoir plus sur l'ajout, la gestion et le transfert de numéros de téléphone hors du sandbox Amazon SNS SMS, consultez. [Ajouter et vérifier des numéros de téléphone dans le sandbox Amazon SNS SMS](sns-sms-sandbox-verifying-phone-numbers.md)

1. Créez une **identité d'origine** que vos destinataires verront sur leurs appareils lorsque vous leur envoyez un message SMS. Pour en savoir plus sur les identités d'origine, y compris les différents types que vous pouvez utiliser, consultez la [Identités d'origine pour les SMS Amazon SNS](channels-sms-originating-identities.md) documentation.

1. **Enregistrez** votre entreprise. Certains pays exigent que vous enregistriez l'identité de votre entreprise pour pouvoir acheter des numéros de téléphone ou des expéditeurs IDs et consulter les messages que vous envoyez aux destinataires dans leur pays. Pour plus d'informations sur les pays nécessitant un enregistrement, consultez la section [Pays et régions pris en charge pour la messagerie SMS AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) dans le *guide de AWS End User Messaging SMS l'utilisateur*.

1. **Envoyez** vos messages à un sujet ou à un téléphone portable. Pour de plus amples informations, veuillez consulter [Envoi de SMS via Amazon SNS](sms_sending-overview.md).

# Ajouter et vérifier des numéros de téléphone dans le sandbox Amazon SNS SMS
<a name="sns-sms-sandbox-verifying-phone-numbers"></a>

Avant de pouvoir commencer à envoyer des SMS depuis votre Compte AWS navigateur dans le [sandbox SMS](sns-sms-sandbox.md), vous devez suivre les étapes de configuration suivantes. Cela garantit que votre compte est prêt pour la messagerie SMS et que vos numéros de téléphone de destination sont correctement vérifiés.

1. Créez un **[identifiant d'origine.](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-number-types.html)** Comme pour les comptes extérieurs au sandbox SMS, un identifiant d'origine est nécessaire pour pouvoir envoyer des SMS à des destinataires dans certains pays ou régions.

1. Ajoutez les **numéros de téléphone de destination** auxquels vous souhaitez envoyer des messages dans le sandbox SMS.

1. Vérifiez les **numéros de téléphone** pour vous assurer que les numéros de téléphone de destination sont valides pour être utilisés dans vos messages SMS.

**Ajouter et vérifier les numéros de téléphone de destination**

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le menu de la console, choisissez une [région qui prend en charge la messagerie SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. Dans le panneau de navigation, sélectionnez **Text messaging (SMS)**.

1. Dans la section **Numéros de téléphone de destination du Sandbox**, sélectionnez **Ajouter un numéro de téléphone**.

1. Sous **Détails de la destination**, fournissez les informations suivantes, puis sélectionnez **Ajouter un numéro de téléphone** :
   + **Code du pays** et **numéro de téléphone** de la destination.
   + **Langue** dans laquelle vous souhaitez que le message de vérification soit envoyé.

1. Après avoir ajouté le numéro de téléphone, Amazon SNS enverra un OTP au numéro de téléphone de destination fourni. Cet OTP est requis à des fins de vérification.

1. Vous recevrez l'OTP sous forme de SMS standard sur le **numéro de téléphone de destination** que vous avez fourni.
   + Si vous ne recevez pas l'OTP dans les 15 minutes, sélectionnez **Renvoyer le code de vérification** dans la console Amazon SNS.
   + Vous pouvez renvoyer l'OTP jusqu'à cinq fois par période de 24 heures.

1. Une fois que vous avez reçu l'OTP, saisissez-le dans le champ **Code de vérification** et sélectionnez **Vérifier le numéro de téléphone**.

1. Vérifiez l'**état de la vérification**.
   + Une fois le numéro de téléphone vérifié, le numéro de téléphone et son statut de vérification apparaîtront dans la section des **numéros de téléphone de destination du Sandbox**.
   + Si le statut est **En attente**, la vérification a échoué. Cela peut se produire si, par exemple, vous n'avez pas saisi correctement le code du pays.
   + Vous ne pouvez supprimer les numéros de téléphone en attente ou vérifiés qu'au bout de 24 heures ou plus depuis la dernière tentative de vérification.

1. Si vous souhaitez utiliser le même numéro de téléphone de destination dans d'autres régions, **répétez** les étapes précédentes pour chaque région dans laquelle vous souhaitez l'utiliser.

## Résolution des problèmes de non-réception d'un texte OTP
<a name="sns-sms-sandbox-troubleshooting-phone-numbers"></a>

Résolvez les problèmes courants susceptibles d'empêcher un numéro de téléphone de recevoir des SMS OTP.
+ Limite de **dépenses par SMS Amazon SNS : si vous avez Compte AWS dépassé la limite** de dépenses pour l'envoi de SMS, d'autres messages, y compris des SMS OTP, risquent de ne pas être envoyés tant que la limite n'est pas augmentée ou que le problème de facturation n'est pas résolu.
+ **Numéro de téléphone non activé pour les notifications par SMS :** dans certains pays ou régions, les destinataires doivent choisir de recevoir des SMS sous forme de codes courts, couramment utilisés pour les textes OTP. Si le numéro de téléphone du destinataire n'est pas activé, il ne recevra pas le texte OTP.
+ **Restrictions ou filtrage des opérateurs :** certains opérateurs de téléphonie mobile peuvent avoir mis en place des restrictions ou des mécanismes de filtrage qui empêchent la livraison de certains types de messages SMS, y compris les textes OTP. Cela peut être dû aux politiques de sécurité ou aux mesures anti-spam mises en œuvre par le transporteur.
+ **Numéro de téléphone non valide ou incorrect :** si le numéro de téléphone fourni par le destinataire est incorrect ou invalide, le texte OTP ne sera pas délivré.
+ **Problèmes de réseau : des** problèmes ou des pannes de réseau temporaires peuvent empêcher l'envoi de messages SMS, y compris les SMS OTP, sur le téléphone du destinataire.
+ **Retard de livraison :** dans certains cas, les messages SMS peuvent connaître des retards de livraison en raison de la congestion du réseau ou d'autres facteurs. Le texte OTP pourrait éventuellement être livré, mais il pourrait être retardé au-delà du délai prévu.
+ **Suspension ou résiliation du compte :** en cas de problème avec votre compte Compte AWS, tel qu'un non-paiement ou une violation des AWS conditions d'utilisation, les fonctionnalités de messagerie Amazon SNS, y compris les SMS OTP, peuvent être suspendues ou résiliées.

# Supprimer des numéros de téléphone du sandbox Amazon SNS SMS
<a name="sns-sms-sandbox-deleting-phone-numbers"></a>

Vous pouvez supprimer les numéros de téléphone de destination en attente et vérifiés du [sandbox SMS](sns-sms-sandbox.md).

**Important**  
Vous ne pouvez supprimer un numéro de téléphone que 24 heures après [l'avoir vérifié](sns-sms-sandbox-verifying-phone-numbers.md) ou 24 heures après votre dernière tentative de vérification.

**Pour supprimer les numéros de téléphone de destination de l'environnement de test (sandbox) pour SMS**

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le menu de la console, choisissez une [région qui prend en charge la messagerie SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html) dans laquelle vous avez ajouté un numéro de téléphone de destination.

1. Dans le volet de navigation, sélectionnez **Messagerie texte (SMS)**.

1. Sur la page **Messagerie texte (SMS) mobile**, accédez à la section **Numéros de téléphone de destination du Sandbox**.

1. Choisissez le numéro de téléphone que vous souhaitez supprimer, puis sélectionnez **Supprimer le numéro de téléphone**.

1. Pour confirmer que vous souhaitez supprimer le numéro de téléphone, saisissez **delete me**, puis choisissez **Supprimer**.

   Assurez-vous que 24 heures ou plus se sont écoulées depuis que vous avez vérifié ou tenté de vérifier le numéro de téléphone de destination avant de procéder à la suppression.

1. Répétez ces étapes dans chaque région où vous avez ajouté le numéro de téléphone de destination et où vous n'avez plus l'intention de l'utiliser.

# Sortir du sandbox SMS d'Amazon SNS
<a name="sns-sms-sandbox-moving-to-production"></a>

Pour Compte AWS sortir du [sandbox SMS](sns-sms-sandbox.md), vous devez d'abord ajouter, vérifier et tester les numéros de téléphone de destination. Après cela, créez un étui avec AWS Support.

**Pour demander que votre AWS compte soit retiré du sandbox SMS**

1. **Vérifiez les numéros de téléphone**

   1. Lorsque vous Compte AWS êtes dans le sandbox SMS, ouvrez la console [Amazon SNS](https://console.aws.amazon.com/sns/home).

   1. Dans le volet de navigation, sous Mobile, choisissez **Messagerie texte (SMS)**.

   1. Dans la section Numéros de téléphone de destination du Sandbox, [ajoutez et vérifiez](sns-sms-sandbox-verifying-phone-numbers.md) un ou plusieurs numéros de téléphone de destination. Cette vérification garantit que vous pouvez envoyer et recevoir des messages avec succès.

1. **Tester la publication de SMS**

   1. Vérifiez que vous êtes en mesure d'envoyer et de recevoir des messages à au moins un numéro de téléphone vérifié. Pour des instructions plus détaillées sur la façon de publier des SMS, consultez[Publier des SMS sur un téléphone mobile à l'aide d'Amazon SNS](sms_sending-overview.md#sms_publish-to-phone).

1. **Lancer la modification du bac à sable**

   1. Sur la page **Messagerie texte mobile (SMS)** de la console Amazon SNS, sous **Informations de compte**, choisissez **Quitter l'environnement de test (sandbox) pour SMS**. Cette action vous redirige vers le [centre de support Amazon](https://support.console.aws.amazon.com/support/home?#/case/create?issueType=service-limit-increase) et crée automatiquement un dossier d'assistance avec l'option d'**augmentation du quota de service** sélectionnée.

1. **Remplissez le formulaire**

   1. Dans le formulaire d'assistance, sous **Augmentation du quota de service**, procédez comme suit :

     1. Choisissez Choisir la **messagerie texte SNS** comme service.

     1. Indiquez l'**URL du site Web** ou le **nom de l'application** à partir duquel vous souhaitez envoyer des SMS.

     1. Spécifiez le type de message que vous allez envoyer : mot de **passe à usage unique**, **promotionnel** ou **transactionnel**.

     1. Choisissez celui **Région AWS**à partir duquel vous allez envoyer des SMS.

     1. Répertoriez les **pays** ou **régions dans** lesquels vous prévoyez d'envoyer des SMS.

     1. Décrivez comment vos clients **acceptent de recevoir des messages**.

     1. Incluez tous les **modèles de message** que vous avez l'intention d'utiliser.

1. **Spécifiez le quota et la région**

   1. Sous **Demandes**, procédez comme suit :

     1. Choisissez l'**Région AWS**endroit où vous souhaitez déplacer votre Compte AWS.

     1. Choisissez **Limites générales** pour le **type de ressource**.

     1. Choisissez **Exit SMS Sandbox** for **Quota**.

     1. (Facultatif) Pour demander des augmentations supplémentaires ou d'autres ajustements, choisissez **Ajouter une autre demande** et spécifiez les détails nécessaires.

     1. Pour **Nouvelle valeur de quota**, entrez la **limite** en dollars américains que vous demandez.

1. **Détails supplémentaires**

   1. Dans la **description du dossier**, fournissez tous les détails supplémentaires relatifs à votre demande.

   1. Sous **Options de contact**, choisissez la **langue de contact de votre choix**.

1. **Soumettre la demande**

   1. Choisissez **Soumettre** pour envoyer votre demande à Support.

L' Support équipe fournit une première réponse à votre demande dans les 24 heures.

Pour empêcher que nos systèmes soient utilisés pour envoyer des contenus indésirables ou malveillants, chaque demande est traitée avec soin. Si cela est possible, nous accepterons votre demande dans ce délai de 24 heures. En revanche, si nous avons besoin de plus amples informations, le traitement de votre demande peut prendre plus de temps.

Nous pourrions ne pas être en mesure de donner suite à votre demande si votre cas d'utilisation n'est pas conforme à nos politiques.

# Identités d'origine pour les SMS Amazon SNS
<a name="channels-sms-originating-identities"></a>

**Important**  
Le guide du développeur de SMS Amazon SNS a été mis à jour. Amazon SNS s'est intégré à [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)la livraison de messages SMS. Ce guide contient les dernières informations sur la création, la configuration et la gestion de vos messages SMS Amazon SNS.

Les identités d'origine des messages SMS sont des identifiants utilisés pour représenter l'expéditeur d'un message SMS. Vous pouvez vous identifier auprès de vos destinataires en utilisant les types d'identités d'origine suivants :

**Numéros d'origine**  
Chaîne numérique identifiant le numéro de téléphone de l'expéditeur d'un SMS. Il existe plusieurs types de numéros d'origine, notamment les codes longs (numéros de téléphone standard comportant généralement 10 chiffres ou plus), les codes longs à 10 chiffres (10DLC), les numéros gratuits (TFN) et les codes courts (numéros de téléphone contenant entre quatre et sept chiffres).  
Support pour les numéros d'origine n'est pas disponible dans les pays où les lois locales exigent l'utilisation de l'expéditeur IDs plutôt que du numéro d'origine. Lorsque vous envoyez un message SMS à l'aide d'un numéro d'origine, l'appareil du destinataire affiche le numéro d'origine comme le numéro de téléphone de l'expéditeur. Vous pouvez spécifier différents numéros d'origine par cas d'utilisation.  
Pour plus d'informations, consultez la section [Numéros de téléphone](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) dans le *guide de AWS End User Messaging SMS l'utilisateur*.  
Pour afficher la liste de tous les numéros d'origine existants dans votre AWS compte, dans le volet de navigation de la console [Amazon SNS](https://console.aws.amazon.com/sns/home), **sélectionnez** Numéros d'origine.

**Expéditeur IDs**  
Nom alphabétique identifiant l'expéditeur d'un message SMS. Lorsque vous envoyez un SMS à l'aide d'un identifiant d'expéditeur et que le destinataire se trouve dans une zone où l'authentification par identifiant d'expéditeur est prise en charge, votre identifiant d'expéditeur apparaît sur l'appareil du destinataire au lieu de votre numéro de téléphone. Un ID d'expéditeur fournit aux destinataires de SMS plus d'informations sur l'expéditeur qu'un numéro de téléphone, un code long ou un code court.  
 IDs Les expéditeurs sont pris en charge dans plusieurs pays et régions du monde. Dans certains cas, si vous êtes une entreprise qui envoie des messages SMS aux clients individuels, vous devez utiliser un ID d’expéditeur préalablement enregistré auprès d’un organisme de réglementation ou d’un groupe industriel. Pour obtenir la liste complète des pays et régions qui prennent en charge ou exigent l'envoi d'un expéditeur IDs, consultez la section [Pays et régions pris en charge pour la messagerie SMS AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) dans le *guide de AWS End User Messaging SMS l'utilisateur*.  
L'utilisation de l'expéditeur est gratuite IDs. Cependant, la prise en charge et les exigences relatives à l'authentification de l'identifiant de l'expéditeur varient selon les pays. Plusieurs grands marchés (dont le Canada, la Chine et les États-Unis d'Amérique) ne prennent pas en charge l'utilisation de l'expéditeur. IDs Certaines zones exigent que les entreprises qui envoient des messages SMS aux clients individuels doivent utiliser un ID d'expéditeur préalablement enregistré auprès d'un organisme de réglementation ou d'un groupe industriel.  
Pour plus d'informations, voir [Expéditeur IDs](https://docs.aws.amazon.com/sms-voice/latest/userguide/sender-id.html) dans le *guide de AWS End User Messaging SMS l'utilisateur*.

# Configuration de la messagerie SMS dans Amazon SNS
<a name="channels-sms-configurations"></a>

**Important**  
Le guide du développeur de SMS Amazon SNS a été mis à jour. Amazon SNS s'est intégré à [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)la livraison de messages SMS. Ce guide contient les dernières informations sur la création, la configuration et la gestion de vos messages SMS Amazon SNS.

Vous pouvez utiliser les configurations d'Amazon SNS SMS pour définir les préférences SMS en fonction de vos besoins, telles que l'ajustement des quotas de dépenses et la configuration de l'enregistrement du statut de livraison. Cette rubrique explique également comment publier des messages SMS sur des sujets à l'aide de la console Amazon SNS et du AWS SDK, gérer efficacement les quotas et récupérer des statistiques détaillées sur l'activité des SMS.

# Envoi de SMS via Amazon SNS
<a name="sms_sending-overview"></a>

Cette section explique comment envoyer des SMS à l'aide d'Amazon SNS, notamment en publiant sur un sujet, en abonnant des numéros de téléphone à des sujets, en définissant des attributs sur les messages et en publiant directement sur les téléphones mobiles.

## Publication de messages SMS sur une rubrique Amazon SNS
<a name="sms_publish-to-topic"></a>

Vous pouvez publier simultanément un seul message SMS à plusieurs numéros de téléphone en abonnant ces numéros de téléphone à une rubrique Amazon SNS. Une rubrique SNS est un canal de communication auquel vous pouvez ajouter des abonnés. Vous pouvez ensuite publier des messages à tous les abonnés. Un abonné reçoit tous les messages publiés dans le sujet jusqu'à ce que vous annuliez son abonnement ou jusqu'à ce qu'il refuse de recevoir des SMS de votre AWS compte.

### Envoyer un message à un sujet à l'aide de la AWS console
<a name="sms_publish-to-topic_console"></a>

**Pour créer une rubrique**

Procédez comme suit si vous ne disposez pas encore d'une rubrique à laquelle envoyer des SMS.

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le menu de la console, choisissez une [région qui prend en charge la messagerie SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. Dans le volet de navigation, choisissez **Rubriques**.

1. Sur la page **Rubriques**, choisissez **Créer une rubrique**.

1. Sur la page **Créer une rubrique** sous **Détails**, procédez comme suit :

   1. Pour **Type**, choisissez **Standard**.

   1. Pour **Nom de la rubrique**, saisissez un nom de rubrique.

   1. (Facultatif) Dans le champ **Nom d'affichage**, saisissez un préfixe personnalisé pour vos messages SMS. Lorsque vous envoyez un message à la rubrique, Amazon SNS ajoute le nom d'affichage suivi d'un signe supérieur (>) et d'un espace. Les noms d'affichage ne sont pas sensibles à la casse et Amazon SNS les convertit en majuscules. Par exemple, si le nom d'affichage d'une rubrique est `MyTopic` et que le message est `Hello World!`, le message se présente comme suit :

      ```
      MYTOPIC> Hello World!
      ```

1. Choisissez **Créer une rubrique**. Le nom de la rubrique et l'Amazon Resource Name (ARN) apparaissent sur la page **Rubriques**.

**Pour créer un abonnement aux SMS**

Vous pouvez utiliser les abonnements pour envoyer un SMS à plusieurs destinataires en publiant le message une seule fois dans votre rubrique.
**Note**  
Lorsque vous commencez à utiliser Amazon SNS pour envoyer des SMS, votre AWS compte se trouve dans le sandbox *SMS*. L'environnement de test (sandbox) pour SMS offre un environnement sûr pour vous permettre d'essayer les fonctionnalités d'Amazon SNS sans risquer votre réputation d'expéditeur SMS. Même si votre compte se trouve dans l'environnement de test (sandbox) pour SMS, vous pouvez utiliser toutes les fonctionnalités d'Amazon SNS, mais vous pouvez envoyer des SMS uniquement à des numéros de téléphone de destination vérifiés. Pour de plus amples informations, veuillez consulter [Utilisation du sandbox SMS Amazon SNS](sns-sms-sandbox.md).

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le panneau de navigation, choisissez **Abonnements**.

1. Sur la page **Abonnements**, choisissez **Créer un abonnement**.

1. Sur la page **Créer un abonnement**, sous **Détails**, procédez comme suit :

   1. Pour **ARN de rubrique**, saisissez ou choisissez l'ARN (Amazon Resource Name) de la rubrique à laquelle vous souhaitez envoyer des SMS.

   1. Pour **Protocole**, choisissez **SMS**.

   1. Pour **Point de terminaison**, saisissez le numéro de téléphone que vous souhaitez abonner à votre rubrique.

1. Choisissez **Créer un abonnement**. Les informations d'abonnement s'affichent sur la page **Abonnements**.

   Pour ajouter d'autres numéros de téléphone, répétez ces étapes. Vous pouvez également ajouter d'autres types d'abonnements, tels que la messagerie électronique.

**Pour envoyer un message**

Lorsque vous publiez un message dans une rubrique, Amazon SNS tente de livrer ce message à chaque numéro de téléphone qui est abonné à la rubrique.

1. Dans la [console Amazon SNS](https://console.aws.amazon.com/sns/home), sur la page **Rubriques**, choisissez le nom de la rubrique à laquelle envoyer des SMS.

1. Sur la page des détails de la rubrique, sélectionnez **Publier le message**.

1. Sur la page **Publier un message dans la rubrique**, sous **Détails du message**, procédez comme suit :

   1. Pour **Objet**, laissez le champ vide, sauf si votre rubrique contient des abonnements par e-mail et que vous voulez effectuer une publication à la fois dans des abonnements par e-mail et par SMS. Amazon SNS utilise **l'Objet** que vous saisissez en tant que ligne d'objet de l'e-mail.

   1. (Facultatif) Pour **time-to-live (TTL)**, saisissez un certain nombre de secondes pendant lesquelles Amazon SNS doit envoyer votre message SMS à tous les abonnés aux points de terminaison d'une application mobile.

1. Sous **Corps du message**, procédez comme suit :

   1. Pour **Structure des messages**, choisissez **Charge utile identique pour tous les protocoles de distribution** pour envoyer le même message à tous les types de protocoles abonnés à votre rubrique. Ou, choisissez **Charge utile personnalisée pour chaque protocole de distribution** pour personnaliser le message pour les abonnés de différents types de protocole. Par exemple, vous pouvez saisir un message par défaut pour les abonnés à un numéro de téléphone et un message personnalisé pour les abonnés à un courrier électronique.

   1. Pour **Corps du message à envoyer au point de terminaison**, saisissez votre message ou vos messages personnalisés par protocole de distribution.

      Si votre rubrique possède un nom d'affichage, Amazon SNS l'ajoute au message, augmentant ainsi sa longueur. La longueur du nom affiché représente le nombre de caractères dans le nom plus deux caractères pour le signe supérieur (>) et l'espace ajoutés par Amazon SNS.

      Pour plus d'informations sur les quotas de taille pour les SMS, consultez [Publier des SMS sur un téléphone mobile à l'aide d'Amazon SNS](#sms_publish-to-phone).

1. (Facultatif) Pour les **attributs de message**, ajoutez des métadonnées de message telles que les horodatages, les signatures et. IDs

1. Choisissez **Publier le message**. Amazon SNS envoie le message SMS et affiche un message de réussite.

### Envoi d'un message à un sujet à l'aide du AWS SDKs
<a name="sms_publish-to-topic_sdk"></a>

Pour utiliser un AWS SDK, vous devez le configurer avec vos informations d'identification. Pour plus d'informations, consultez [la section Les fichiers de configuration et d'identification partagés](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) dans le *guide de référence AWS SDKs et Tools*.

L’exemple de code suivant illustre comment :
+ Créer une rubrique Amazon SNS.
+ Abonner des numéros de téléphone à la rubrique.
+ Publier des messages SMS dans la rubrique afin que tous les numéros de téléphone abonnés reçoivent le message en même temps.

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

**SDK pour Java 2.x**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 
Créer une rubrique et renvoyez son 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 "";
    }
}
```
Abonner un point de terminaison à une rubrique  

```
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);
        }
    }
}
```
Définir des attributs sur le message, tels que l’ID de l’expéditeur, le prix maximal et son type. Les attributs de message sont facultatifs.  

```
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);
        }
    }
}
```
Publier un message dans une rubrique Le message est envoyé à chaque abonné.  

```
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);
        }
    }
}
```

------

## Publier des SMS sur un téléphone mobile à l'aide d'Amazon SNS
<a name="sms_publish-to-phone"></a>

Vous pouvez utiliser Amazon SNS pour envoyer des messages SMS directement à un téléphone mobile sans abonner le numéro de téléphone à une rubrique Amazon SNS.

**Note**  
L'abonnement de numéros de téléphone à une rubrique est utile si vous voulez envoyer un message à plusieurs numéros de téléphone à la fois. Pour obtenir des instructions sur la publication d'un SMS dans une rubrique, consultez [Publication de messages SMS sur une rubrique Amazon SNS](#sms_publish-to-topic).

Lorsque vous envoyez un message, vous pouvez contrôler s'il est optimisé en matière de coût ou de fiabilité de distribution. Vous pouvez également spécifier un [ID de l'expéditeur ou numéro d'origine](channels-sms-originating-identities.md). Si vous envoyez le message par programmation à l'aide de l'API Amazon SNS ou AWS SDKs du, vous pouvez spécifier un prix maximum pour la livraison du message.

Chaque SMS peut contenir jusqu'à 140 octets et le quota de caractères dépend du schéma de codage. Par exemple, un SMS peut contenir :
+ 160 caractères GSM
+ 140 caractères ASCII
+ 70 caractères UCS-2

Si vous publiez un message qui dépasse ce quota de taille, Amazon SNS le fractionne en plusieurs messages, chacun n'excédant pas ce quota. Les messages ne sont pas coupés au milieu d'un mot, mais plutôt sur la base d'un mot entier. Le quota de taille totale pour une action de publication de SMS est de 1600 octets.

Lorsque vous envoyez un SMS, vous spécifiez le numéro de téléphone au format E.164, structure de numérotation standard utilisée pour les télécommunications internationales. Les numéros qui respectent ce format peuvent comporter 15 chiffres au maximum, avec pour préfixe le signe plus (\$1) et le code pays. Par exemple, un numéro de téléphone américain au format E.164 apparaît sous la forme \$11XXX5550100.

### Envoi d'un message (console)
<a name="sms_publish_console"></a>

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le menu de la console, choisissez une [région qui prend en charge la messagerie SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. Dans le panneau de navigation, sélectionnez **Text messaging (SMS)**.

1. Sur la page **Messagerie texte mobile (SMS)**, choisissez **Publier un message texte**.

1. Sur la page **Publier un message SMS**, pour **Type de message** choisissez l'une des options suivantes :
   + **Promotional** – Messages non stratégiques, tels que les messages marketing.
   + **Transactional** – Messages stratégiques qui prennent en charge les transactions clients, comme des codes secrets uniques pour l'authentification multifacteur.
**Note**  
Ce paramètre au niveau des messages remplace le type de message par défaut au niveau du compte. Vous pouvez définir un type de message par défaut au niveau du compte dans la section **Préférences de messagerie SMS** de la page **Messagerie texte mobile (SMS)**.

   Pour obtenir des informations sur la tarification des messages promotionnels et transactionnels, consultez [Tarification mondiale SMS](https://aws.amazon.com/sns/sms-pricing/).

1. Pour **Numéro de téléphone de destination**, saisissez le numéro de téléphone auquel vous souhaitez envoyer le message.

1. Pour **Message**, saisissez le message à envoyer.

1. (Facultatif) Sous **Identités d'origine**, spécifiez comment vous identifier auprès de vos destinataires :
   + Pour spécifier un **ID de l'expéditeur**, saisissez un ID personnalisé contenant entre 3 et 11 caractères alphanumériques, dont au moins une lettre et aucun espace. L'ID expéditeur s'affiche en tant qu'expéditeur du message sur l'appareil de réception. Par exemple, vous pouvez utiliser votre marque d’entreprise pour faciliter la reconnaissance de la source du message.

     Support pour les expéditeurs IDs varie en fonction du pays et de and/or la région. Par exemple, les messages diffusés à des numéros de téléphone américains n'afficheront pas l'ID expéditeur. Pour les pays et régions qui prennent en charge les expéditeurs IDs, consultez la section [Pays et régions pris en charge pour la messagerie SMS AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) dans le *guide de AWS End User Messaging SMS l'utilisateur*.

     Si vous ne spécifiez pas d'ID d'expéditeur, l'un des éléments suivants s'affiche comme identité d'origine :
     + Dans les pays qui prennent en charge les codes longs, le code long apparaît.
     + Dans les pays où seuls les expéditeurs IDs sont pris en charge, un *AVIS* est affiché.

     Cet ID expéditeur au niveau du message remplace l'ID expéditeur par défaut, que vous définissez sur la page **Préférences de SMS**.
   + Pour spécifier un **Numéro d'origine**, saisissez une chaîne de 5 à 14 numéros à afficher comme numéro de téléphone de l'expéditeur sur l'appareil du destinataire. Cette chaîne doit correspondre à un numéro d'origine configuré dans votre répertoire Compte AWS pour le pays de destination. Le numéro d'origine peut être un numéro 10DLC, un numéro gratuit, un code person-to-person long ou un code court. Pour de plus amples informations, veuillez consulter [Identités d'origine pour les SMS Amazon SNS](channels-sms-originating-identities.md).

     Si vous ne spécifiez pas de numéro d'origine, Amazon SNS sélectionne un numéro d'origine à utiliser pour le message texte SMS, en fonction de la configuration de votre Compte AWS .

1. Si vous envoyez des messages SMS à des destinataires en Inde, développez **Attributs spécifiques au pays**, et spécifiez les attributs suivants :
   + **ID d'entité** – ID d'entité ou ID d'entité principale (PE) pour l'envoi de messages SMS à des destinataires en Inde. Cet ID est une chaîne unique de 1 à 50 caractères fournie par la Telecom Regulatory Authority of India (TRAI) pour identifier l'entité que vous avez enregistrée auprès de la TRAI.
   + **ID de modèle** – ID de modèle pour l'envoi de messages SMS à des destinataires en Inde. Cet ID est une chaîne unique de 1 à 50 caractères fournie par la TRAI qui identifie le modèle que vous avez enregistré auprès de la TRAI. L'ID du modèle doit être associé à l'ID de l'expéditeur que vous avez spécifié pour le message.

   Pour plus d'informations sur l'envoi de SMS aux destinataires en [Inde, consultez le guide de l'*utilisateur sur le processus d'enregistrement de l'identifiant de AWS End User Messaging SMS l'*expéditeur](https://docs.aws.amazon.com/sms-voice/latest/userguide/registrations-sms-senderid-india.html) en Inde.

1. Choisissez **Publier le message**.

**Astuce**  
Pour envoyer des messages SMS à partir d'un numéro d'origine, vous pouvez également choisir **Numéros d'origine** dans le panneau de navigation de la console Amazon SNS. Choisissez un numéro d'origine qui inclut **SMS** dans la colonne **Capacités**, puis choisissez **Publier un message texte**.

### Envoyer un message (AWS SDKs)
<a name="sms_publish_sdk"></a>

Pour envoyer un message SMS à l'aide de l'un des AWS SDKs, utilisez l'opération d'API de ce SDK qui correspond à la `Publish` demande de l'API Amazon SNS. Cette demande vous permet d'envoyer un SMS directement à un numéro de téléphone. Vous pouvez également utiliser le paramètre `MessageAttributes` pour définir les valeurs des noms d'attributs suivants :

**`AWS.SNS.SMS.SenderID`**  
Un ID personnalisé contenant entre 3 et 11 caractères alphanumériques ou des traits d’union (-), dont au moins une lettre et aucun espace. L'ID de l'expéditeur s'affiche en tant qu'expéditeur du message sur l'appareil de réception. Par exemple, vous pouvez utiliser votre marque d'entreprise pour permettre de faciliter la reconnaissance de la source du message.  
Support pour les expéditeurs IDs varie en fonction du pays ou de la région. Par exemple, les messages diffusés à des numéros de téléphone américains n'affichent pas l'ID d'expéditeur. Pour obtenir la liste des pays ou régions qui prennent en charge les expéditeurs IDs, consultez la section [Pays et régions pris en charge pour la messagerie SMS AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) dans le *guide de AWS End User Messaging SMS l'utilisateur*.  
Si vous ne spécifiez pas d'ID d'expéditeur, un [code long](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-request-long-code.html) s'affiche comme l'ID d'expéditeur dans les régions ou pays pris en charge. Pour les pays ou régions qui requièrent un ID d'expéditeur sous forme alphabétique, *AVIS* s'affiche en tant qu'ID d'expéditeur.  
Cet attribut au niveau du message remplace l'attribut au niveau du compte `DefaultSenderID`, que vous pouvez définir à l'aide de la demande `SetSMSAttributes`.

**`AWS.MM.SMS.OriginationNumber`**  
Une chaîne personnalisée de 5 à 14 nombres, qui peut inclure un signe plus initial en option (`+`). Cette chaîne de nombres apparaît comme le numéro de téléphone de l'expéditeur sur le périphérique de réception. La chaîne doit correspondre à un numéro d'origine configuré dans votre AWS compte pour le pays de destination. Le numéro d'origine peut être un numéro 10DLC, un numéro gratuit, un code long person-to-person (P2P) ou un code court. Pour plus d'informations, consultez la section [Numéros de téléphone](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) dans le *guide de AWS End User Messaging SMS l'utilisateur*.  
Si vous ne spécifiez pas de numéro d'origine, Amazon SNS choisit un numéro d'origine en fonction AWS de la configuration de votre compte.

**`AWS.SNS.SMS.MaxPrice`**  
Le prix maximum en USD que vous êtes prêt à payer pour envoyer le message SMS. Si Amazon SNS détermine que l'envoi du message entraînerait un coût supérieur à votre prix maximum, il n'envoie pas le message.  
Cet attribut n'a aucun effet si le coût de vos month-to-date SMS a déjà dépassé le quota défini pour l'`MonthlySpendLimit`attribut. Vous pouvez définir l'attribut `MonthlySpendLimit` à l'aide de la demande `SetSMSAttributes`.  
Si vous envoyez le message à une rubrique Amazon SNS, le prix maximum s'applique à chaque distribution de message envoyée sur chaque numéro de téléphone abonné à la rubrique.

**`AWS.SNS.SMS.SMSType`**  
Le type de message que vous envoyez :  
+ **`Promotional`** (par défaut) – Messages non stratégiques, tels que messages marketing.
+ **`Transactional`** – Messages stratégiques qui prennent en charge les transactions clients, comme des codes secrets uniques pour l'authentification multifacteur.
Cet attribut au niveau du message remplace l'attribut au niveau du compte `DefaultSMSType`, que vous pouvez définir à l'aide de la demande `SetSMSAttributes`.

**`AWS.MM.SMS.EntityId`**  
Cet attribut est requis uniquement pour l'envoi de messages SMS à des destinataires en Inde.  
Il s'agit de votre ID d'entité ou ID d'entité principale (PE) pour l'envoi de messages SMS aux destinataires en Inde. Cet ID est une chaîne unique de 1 à 50 caractères fournie par la Telecom Regulatory Authority of India (TRAI) pour identifier l'entité que vous avez enregistrée auprès de la TRAI.

**`AWS.MM.SMS.TemplateId`**  
Cet attribut est requis uniquement pour l'envoi de messages SMS à des destinataires en Inde.  
Ceci est votre modèle pour l'envoi de messages SMS à des destinataires en Inde. Cet ID est une chaîne unique de 1 à 50 caractères fournie par TRAI qui identifie le modèle que vous avez enregistré auprès de la TRAI. L'ID du modèle doit être associé à l'ID de l'expéditeur que vous avez spécifié pour le message.

#### Envoi d'un message
<a name="sms_publish_sdks"></a>

Les exemples de code suivants montrent comment publier des messages SMS à l’aide d’Amazon SNS.

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

**SDK pour .NET**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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}");
            }
        }
    }
}
```
+  Pour plus de détails sur l’API, consultez [Publish](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/Publish) dans la *Référence des API du kit AWS SDK pour .NET *. 

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

**SDK pour C\$1\$1**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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();
}
```
+  Pour de plus amples informations sur l’API, consultez [Publier](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/Publish) dans *AWS SDK pour C\$1\$1 Référence de l’API*. 

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

**SDK pour Java 2.x**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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);
        }
    }
}
```
+  Pour plus d’informations sur l’API, consultez [Publier](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Publish) dans *AWS SDK for Java 2.x Référence de l’API*. 

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

**Kit SDK pour Kotlin**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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.")
    }
}
```
+  Pour plus d’informations sur l’API, consultez la section [Publier](https://sdk.amazonaws.com/kotlin/api/latest/index.html) de la *référence du kit SDK AWS pour l’API Kotlin*. 

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

**Kit SDK pour PHP**  
 Il y en a plus sur GitHub. Trouvez l'exemple complet et découvrez comment le configurer et l'exécuter dans le [ référentiel d'exemples de code 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());
}
```
+  Pour plus d’informations, consultez le [Guide du développeur AWS SDK pour PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#publish-to-a-text-message-sms-message). 
+  Pour plus d’informations sur l’API, consultez [Publier](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/Publish) dans *AWS SDK pour PHP Référence de l’API*. 

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

**Kit SDK for Python (Boto3)**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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
```
+  Pour de plus amples informations sur l’API, consultez [Publier](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Publish) dans *Référence du kit SDK AWS de l’API Python (Boto3)*. 

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

**Kit SDK pour SAP ABAP**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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.
```
+  Pour plus d'informations sur l'API, consultez [Publish](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html) dans la *Référence d'API du kit SDK AWS pour SAP ABAP*. 

------

# Configuration des préférences de messagerie SMS dans Amazon SNS
<a name="sms_preferences"></a>

Utilisez Amazon SNS pour spécifier des préférences pour la messagerie SMS. Par exemple, vous pouvez spécifier si vous souhaitez optimiser les distributions à des fins de coût ou de fiabilité, votre limite de dépenses mensuelles, comment les distributions sont consignées et si vous souhaitez vous abonner à des rapports d'utilisation quotidiens des SMS.

Ces préférences prennent effet pour chaque SMS que vous envoyez depuis votre compte, mais vous pouvez en remplacer certaines lorsque vous envoyez un message individuel. Pour de plus amples informations, veuillez consulter [Publier des SMS sur un téléphone mobile à l'aide d'Amazon SNS](sms_sending-overview.md#sms_publish-to-phone).

## Configuration des préférences de messagerie SMS à l'aide du AWS Management Console
<a name="sms_preferences_console"></a>

1. Connectez-vous à la console [Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Choisissez une [région qui prend en charge les SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. Sur le panneau de navigation, choisissez **Mobile**, puis **Messagerie texte (SMS)**.

1. Sur la page**SMS mobile**, dans la section **Préférences de SMS**, choisissez **Modifier**.

1. Sur la page **Modifier les préférences SMS**, dans la section **Détails**, procédez comme suit :

   1. Pour **Type de message par défaut**, sélectionnez l'une des options suivantes :
      + **Promotionnel** – Messages non stratégiques (par exemple, marketing). Amazon SNS optimise la distribution de messages pour générer le coût le plus bas.
      + **Transactionnel** (par défaut) – Messages stratégiques qui prennent en charge les transactions clients, comme des codes secrets uniques pour l'authentification multifacteur. Amazon SNS optimise la distribution de messages pour obtenir la meilleure fiabilité possible.

      Pour la tarification des messages promotionnels et transactionnels, consultez la page [Tarifs SMS internationaux](https://aws.amazon.com/sns/sms-pricing/).

   1. Dans le champ **Limite de dépense du compte**, saisissez le montant maximal (en USD) que vous voulez dépenser pour les SMS par mois calendaire.
**Important**  
Par défaut, le quota de dépenses est définie sur 1,00 USD. Si vous souhaitez augmenter le quota de service, [soumettez une demande](https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase&limitType=service-code-sns).
Si le montant défini dans la console dépasse le quota de votre service, Amazon SNS cesse la publication de SMS.
Amazon SNS étant un système distribué, il cesse d'envoyer des SMS quelques minutes après le dépassement du quota de dépense. Si vous continuez à envoyer des SMS au cours de cet intervalle, vous risquez de devoir payer des coûts au-delà de votre quota.

1. (Facultatif) Pour **ID de l'expéditeur par défaut**, entrez un ID personnalisé, par exemple votre marque, qui s'affichera en tant qu'expéditeur de l'appareil de réception.
**Note**  
Support pour les expéditeurs IDs varie selon les pays.

1. (Facultatif) Saisissez le nom du **compartiment Amazon S3 pour les rapports d'utilisation**.
**Note**  
La politique relative aux compartiments Amazon S3 doit accorder un accès en écriture à Amazon SNS.

1. Sélectionnez **Enregistrer les modifications**.

## Configuration des préférences (AWS SDKs)
<a name="sms_preferences_sdk"></a>

Pour définir vos préférences en matière de SMS à l'aide de l'un des AWS SDKs, utilisez l'action de ce SDK qui correspond à la `SetSMSAttributes` demande dans l'API Amazon SNS. Cette demande vous permet d'affecter des valeurs aux différents attributs SMS, tels que votre quota de dépenses mensuelles et votre type de SMS par défaut (promotionnel ou transactionnel). Pour tous les attributs des SMS, consultez la section [Set SMSAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetSMSAttributes.html) dans le *manuel Amazon Simple Notification Service API Reference*.

Les exemples de code suivants illustrent comment utiliser `SetSMSAttributes`.

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

**SDK pour C\$1\$1**  
 Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sns#code-examples). 
Comment utiliser Amazon SNS pour définir l'attribut par défautSMSType .  

```
//! 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();
}
```
+  Pour plus de détails sur l'API, voir [Set SMSAttributes](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/SetSMSAttributes) in *AWS SDK pour C\$1\$1 API Reference*. 

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

**AWS CLI**  
**Pour définir les attributs des SMS**  
L’exemple `set-sms-attributes` suivant définit l’ID d’expéditeur par défaut des SMS sur `MyName`.  

```
aws sns set-sms-attributes \
    --attributes DefaultSenderID=MyName
```
Cette commande ne produit aucune sortie.  
+  Pour plus de détails sur l'API, voir [Set SMSAttributes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/set-sms-attributes.html) in *AWS CLI Command Reference*. 

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

**SDK pour Java 2.x**  
 Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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);
        }
    }
}
```
+  Pour plus de détails sur l'API, voir [Set SMSAttributes](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/SetSMSAttributes) in *AWS SDK for Java 2.x API Reference*. 

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

**SDK pour JavaScript (v3)**  
 Il y en a plus à ce sujet GitHub. Trouvez l'exemple complet et découvrez comment le configurer et l'exécuter dans le [ référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Créez le client dans un module séparé et exportez-le.  

```
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({});
```
Importez le kit SDK et les modules client et appelez l’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;
};
```
+  Pour plus d’informations, consultez le [AWS SDK pour JavaScript Guide du développeur](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-sending-sms.html#sending-sms-setattributes). 
+  Pour plus de détails sur l'API, voir [Set SMSAttributes](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/SetSMSAttributesCommand) in *AWS SDK pour JavaScript API Reference*. 

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

**Kit SDK pour PHP**  
 Il y en a plus à ce sujet GitHub. Trouvez l'exemple complet et découvrez comment le configurer et l'exécuter dans le [ référentiel d'exemples de code 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());
}
```
+  Pour plus d’informations, consultez le [Guide du développeur AWS SDK pour PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#set-sms-attributes). 
+  Pour plus de détails sur l'API, voir [Set SMSAttributes](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/SetSMSAttributes) in *AWS SDK pour PHP API Reference*. 

------

## Configuration des préférences de messagerie SMS pour une livraison spécifique au pays
<a name="sms_preferences_country_specific"></a>

Vous pouvez gérer et contrôler votre trafic SMS en n'envoyant des messages qu'à des pays de destination spécifiques. Cela garantit que vos messages sont envoyés uniquement aux pays approuvés, évitant ainsi des frais de SMS indésirables. Les instructions suivantes utilisent la configuration Protect d'Amazon Pinpoint pour spécifier les pays que vous souhaitez autoriser ou bloquer.

1. Ouvrez la AWS SMS console à l'adresse [https://console.aws.amazon.com/sms-voice/](https://console.aws.amazon.com/sms-voice/).

1. Dans le volet de navigation, sous **Vue d'ensemble**, dans la section **Démarrage rapide**, choisissez **Créer une configuration de protection**.

1. Sous **Détails de configuration de Protect**, entrez **un nom convivial** pour votre configuration de protection (par exemple, Allow-Only-AU).

1. Dans **les règles nationales relatives aux SMS**, cochez la case **Région/Pays** pour bloquer l'envoi de messages vers tous les pays pris en charge.

1. Décochez les cases correspondant aux pays dans lesquels vous souhaitez envoyer des messages. **Par exemple, pour autoriser les messages uniquement destinés à l'Australie, décochez la case Australie.**

1. Dans la section **Protéger les associations de configuration**, sous **Type d'association**, sélectionnez **Compte par défaut**. Cela garantira que la configuration AWS End User Messaging SMS Protect affecte tous les messages envoyés via Amazon SNS, Amazon [Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html) et l'appel d'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. Choisissez **Créer une configuration de protection** pour enregistrer vos paramètres.

   Le message de confirmation suivant s'affiche :

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

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. [**Publiez un message**](sns-publishing.md) dans l'un des pays bloqués, comme l'Inde.

   Le message ne sera pas délivré. Vous pouvez vérifier cela dans les journaux des échecs de livraison à l'aide de [CloudWatch](sms_stats_cloudwatch.md). Recherchez un groupe de journaux **sns/region/AccountID/DirectPublishToPhoneNumber/Failure**pour obtenir une réponse similaire à l'exemple suivant :

   ```
   {
   "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"
   }
   ```

# Gestion des numéros de téléphone et des abonnements Amazon SNS
<a name="sms_manage"></a>

Amazon SNS fournit plusieurs options pour gérer les personnes autorisées à recevoir des messages SMS de votre compte. A une fréquence limitée, vous pouvez réactiver des numéros de téléphone qui ont refusé de recevoir des SMS de votre compte. Pour arrêter l'envoi de messages à des abonnements SMS, vous pouvez supprimer des abonnements ou les rubriques qui effectuent des publications dedans.

## Désactivation de la réception des SMS
<a name="sms_manage_optout"></a>

Lorsque les lois et réglementations locales (telles que les États-Unis et le Canada) l'exigent, les destinataires de SMS peuvent utiliser leur appareil pour se désinscrire en répondant au message par l'un des moyens suivants : 
+ ARRÊTER (français)
+ ANNULER
+ FIN
+ REFUSER
+ REFUSER
+ SORTIR
+ SUPPRIMER
+ ARRÊTER
+ TD
+ SE DÉSABONNER

Pour se désinscrire, le destinataire doit répondre au même [numéro d'origine](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) qu'Amazon SNS a utilisé pour envoyer le message. Après votre désinscription, le destinataire ne recevra plus de SMS de votre part, Compte AWS sauf si vous avez indiqué le numéro de téléphone.

Si le numéro de téléphone est abonné à une rubrique Amazon SNS, la désinscription ne supprime pas l'abonnement, mais les SMS ne seront pas envoyés à cet abonnement, sauf si vous avez activé le numéro de téléphone.

## Gestion des numéros de téléphone et des abonnements à l'aide de la console Amazon SNS
<a name="sms_manage_console"></a>

Vous pouvez utiliser la console Amazon SNS pour contrôler quels numéros de téléphone recevront des SMS de votre compte.

### Inscription d'un numéro de téléphone qui a été désactivé sur la console Amazon SNS
<a name="sms_manage_optout_console"></a>

Vous pouvez voir quels numéros de téléphone n'ont pas été autorisés à recevoir des SMS de votre compte, et vous pouvez activer ces numéros de téléphone pour recommencer à leur envoyer des messages.

Vous ne pouvez saisir un numéro de téléphone qu'une fois tous les 30 jours.

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le menu de la console, définissez le sélecteur de région sur une [région prenant en charge la messagerie SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. Dans le panneau de navigation, choisissez **Messages texte (SMS)**.

1. Sur la page **Messagerie texte (SMS) mobile**, dans la section **Numéros de téléphone désactivés, les numéros de téléphone** désactivés sont affichés.

1. Cochez la case correspondant au numéro de téléphone que vous souhaitez inscrire, puis **choisissez Se connecter**. Le numéro de téléphone n'est plus désactivé et recevra les SMS que vous lui enverrez.

#### Supprimer un abonnement SMS sur la console Amazon SNS
<a name="sms_manage_subscriptions_console"></a>

Supprimez un abonnement SMS pour arrêter l'envoi de SMS à ce numéro de téléphone lorsque vous effectuez une publication dans vos rubriques.

1. Dans le panneau de navigation, choisissez **Abonnements**.

1. Cochez les cases correspondant aux abonnements à supprimer. Choisissez ensuite **Actions**, puis **Delete Subscriptions**.

1. Dans la fenêtre **Supprimer**, sélectionnez **Supprimer**. Amazon SNS supprime l'abonnement et affiche un message de de réussite.

#### Supprimer un sujet dans la console Amazon SNS
<a name="sms_manage_topic_console"></a>

Supprimez une rubrique lorsque vous ne souhaitez plus publier de messages dans ses points de terminaison abonnés.

1. Dans le panneau de navigation, choisissez **Rubriques**.

1. Cochez les cases correspondant aux rubriques à supprimer. Choisissez ensuite **Actions**, puis **Supprimer des rubriques**.

1. Dans la fenêtre **Supprimer**, sélectionnez **Supprimer**. Amazon SNS supprime la rubrique et affiche un message de réussite.

### Gestion des numéros de téléphone et des abonnements à l'aide du AWS SDK
<a name="sms_manage_sdk"></a>

Vous pouvez l'utiliser AWS SDKs pour envoyer des demandes programmatiques à Amazon SNS et gérer les numéros de téléphone autorisés à recevoir des SMS depuis votre compte.

Pour utiliser un AWS SDK, vous devez le configurer avec vos informations d'identification. Pour plus d'informations, consultez la section [Fichiers de configuration et d'informations d'identification partagés](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html) dans le *Guide de référence AWS SDKs et Tools*.

#### Afficher tous les numéros de téléphone désactivés à l'aide du SDK AWS
<a name="sms_view_optout_sdk"></a>

Pour consulter tous les numéros de téléphone désactivés, soumettez une `ListPhoneNumbersOptedOut` demande à l'aide de l'API Amazon SNS.

Les exemples de code suivants illustrent comment utiliser `ListPhoneNumbersOptedOut`.

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

**AWS CLI**  
**Pour répertorier les désactivations des SMS**  
L’exemple `list-phone-numbers-opted-out` suivant répertorie les numéros de téléphone qui ont désactivé la réception de SMS.  

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

```
{
    "phoneNumbers": [
        "+15555550100"
    ]
}
```
+  Pour plus de détails sur l'API, reportez-vous [ListPhoneNumbersOptedOut](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/list-phone-numbers-opted-out.html)à la section *Référence des AWS CLI commandes*. 

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

**SDK pour Java 2.x**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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);
        }
    }
}
```
+  Pour plus de détails sur l'API, reportez-vous [ListPhoneNumbersOptedOut](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/ListPhoneNumbersOptedOut)à la section *Référence des AWS SDK for Java 2.x API*. 

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

**Kit SDK pour PHP**  
 Il y en a plus sur GitHub. Trouvez l'exemple complet et découvrez comment le configurer et l'exécuter dans le [ référentiel d'exemples de code 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());
}
```
+  Pour plus d’informations, consultez le [Guide du développeur AWS SDK pour PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#list-opted-out-phone-numbers). 
+  Pour plus de détails sur l'API, reportez-vous [ListPhoneNumbersOptedOut](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/ListPhoneNumbersOptedOut)à la section *Référence des AWS SDK pour PHP API*. 

------

#### Vérifier si un numéro de téléphone est désactivé à l'aide du SDK AWS
<a name="sms_check_optout_sdk"></a>

Pour vérifier si un numéro de téléphone est désactivé, soumettez une `CheckIfPhoneNumberIsOptedOut` demande à l'aide de l'API Amazon SNS.

Les exemples de code suivants illustrent comment utiliser `CheckIfPhoneNumberIsOptedOut`.

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

**SDK pour .NET**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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}");
            }
        }
    }
```
+  Pour plus de détails sur l'API, reportez-vous [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/CheckIfPhoneNumberIsOptedOut)à la section *Référence des AWS SDK pour .NET API*. 

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

**AWS CLI**  
**Pour vérifier la désactivation d’un numéro de téléphone aux SMS**  
L'`check-if-phone-number-is-opted-out`exemple suivant vérifie si le numéro de téléphone spécifié est désactivé pour ne pas recevoir de SMS en provenance du AWS compte courant.  

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

```
{
    "isOptedOut": false
}
```
+  Pour plus de détails sur l'API, reportez-vous [CheckIfPhoneNumberIsOptedOut](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/check-if-phone-number-is-opted-out.html)à la section *Référence des AWS CLI commandes*. 

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

**SDK pour Java 2.x**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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);
        }
    }
}
```
+  Pour plus de détails sur l'API, reportez-vous [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/CheckIfPhoneNumberIsOptedOut)à la section *Référence des AWS SDK for Java 2.x API*. 

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

**SDK pour JavaScript (v3)**  
 Il y en a plus sur GitHub. Trouvez l'exemple complet et découvrez comment le configurer et l'exécuter dans le [ référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Créez le client dans un module séparé et exportez-le.  

```
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({});
```
Importez le kit SDK et les modules client et appelez l’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;
};
```
+  Pour plus d’informations, consultez le [AWS SDK pour JavaScript Guide du développeur](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-sending-sms.html#sending-sms-checkifphonenumberisoptedout). 
+  Pour plus de détails sur l'API, reportez-vous [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/CheckIfPhoneNumberIsOptedOutCommand)à la section *Référence des AWS SDK pour JavaScript API*. 

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

**Kit SDK pour PHP**  
 Il y en a plus sur GitHub. Trouvez l'exemple complet et découvrez comment le configurer et l'exécuter dans le [ référentiel d'exemples de code 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());
}
```
+  Pour plus d’informations, consultez le [Guide du développeur AWS SDK pour 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). 
+  Pour plus de détails sur l'API, reportez-vous [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/CheckIfPhoneNumberIsOptedOut)à la section *Référence des AWS SDK pour PHP API*. 

------

#### Inscription d'un numéro de téléphone qui a été désactivé à l'aide de l'API Amazon SNS
<a name="sms_manage_optin_sdk"></a>

Pour activer un numéro de téléphone, soumettez une `OptInPhoneNumber` demande à l'aide de l'API Amazon SNS.

Vous ne pouvez saisir un numéro de téléphone qu'une fois tous les 30 jours.

#### Supprimer un abonnement SMS à l'aide du AWS SDK
<a name="sms_manage_subscriptions_sdk"></a>

Pour supprimer un abonnement SMS à partir d'une rubrique Amazon SNS, obtenez l'ARN de l'abonnement en soumettant une demande `ListSubscriptions` avec l'API Amazon SNS API, puis transmettez l'ARN à une demande `Unsubscribe`.

Les exemples de code suivants illustrent comment utiliser `Unsubscribe`.

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

**SDK pour .NET**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/cross-service/TopicsAndQueues#code-examples). 
Désabonnez-vous d’une rubrique à l’aide d’un ARN d’abonnement.  

```
    /// <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;
    }
```
+  Pour plus de détails sur l’API, consultez [Unsubscribe](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/Unsubscribe) dans la *Référence des API du kit AWS SDK pour .NET *. 

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

**SDK pour C\$1\$1**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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();
}
```
+  Pour plus de détails sur l’API, consultez [Unsubscribe](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/Unsubscribe) dans la *Référence des API du kit AWS SDK pour C\$1\$1 *. 

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

**AWS CLI**  
**Pour se désabonner d’une rubrique**  
L’exemple `unsubscribe` suivant supprime l’abonnement spécifié d’une rubrique.  

```
aws sns unsubscribe \
    --subscription-arn arn:aws:sns:us-west-2:0123456789012:my-topic:8a21d249-4329-4871-acc6-7be709c6ea7f
```
Cette commande ne produit aucune sortie.  
+  Pour plus d’informations sur l’API, consultez [Unsubscribe](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/unsubscribe.html) dans la *Référence des commandes AWS CLI *. 

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

**SDK pour Java 2.x**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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);
        }
    }
}
```
+  Pour plus de détails sur l’API, consultez [Unsubscribe](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Unsubscribe) dans la *Référence des API du kit AWS SDK for Java 2.x *. 

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

**SDK pour JavaScript (v3)**  
 Il y en a plus sur GitHub. Trouvez l'exemple complet et découvrez comment le configurer et l'exécuter dans le [ référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Créez le client dans un module séparé et exportez-le.  

```
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({});
```
Importez le kit SDK et les modules client et appelez l’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;
};
```
+  Pour plus d’informations, consultez le [AWS SDK pour JavaScript Guide du développeur](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-unsubscribing). 
+  Pour de plus amples informations sur l’API, consultez [Se désabonner](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/UnsubscribeCommand) dans *Référence de l’API AWS SDK pour JavaScript *. 

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

**SDK pour Kotlin**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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}")
    }
}
```
+  Pour plus d’informations sur l’API, consultez la section [Se désabonner](https://sdk.amazonaws.com/kotlin/api/latest/index.html) de la *référence du kit SDK AWS pour l’API Kotlin*. 

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

**Kit SDK pour PHP**  
 Il y en a plus sur GitHub. Trouvez l'exemple complet et découvrez comment le configurer et l'exécuter dans le [ référentiel d'exemples de code 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());
}
```
+  Pour plus d’informations, consultez le [Guide du développeur AWS SDK pour PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-subscribing-unsubscribing-topics.html#unsubscribe-from-a-topic). 
+  Pour de plus amples informations sur l’API, consultez [Se désabonner](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/Unsubscribe) dans *Référence de l’API AWS SDK pour PHP *. 

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

**Kit SDK for Python (Boto3)**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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
```
+  Pour plus d’informations sur l’API, consultez [Se désabonner](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Unsubscribe) dans *Référence du kit SDK AWS de l’API Python (Boto3)*. 

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

**Kit SDK pour SAP ABAP**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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.
```
+  Pour plus d’informations sur l’API, consultez [Unsubscribe](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html) dans la *Référence du kit SDK AWS de l’API SAP ABAP*. 

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

**Kit SDK pour Swift**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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.")
```
+  Pour plus de détails sur l’API, consultez [Unsubscribe](https://sdk.amazonaws.com/swift/api/awssns/latest/documentation/awssns/snsclient/unsubscribe(input:)) dans la *Référence des API du kit AWS SDK pour Swift*. 

------

#### Supprimer un sujet à l'aide du AWS SDK
<a name="sms_manage_topic_sdk"></a>

Pour supprimer une rubrique ainsi que la totalité de ses abonnements, obtenez l'ARN de la rubrique en soumettant une demande `ListTopics` avec l'API Amazon SNS, puis transmettez l'ARN à la demande `DeleteTopic`.

Les exemples de code suivants illustrent comment utiliser `DeleteTopic`.

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

**SDK pour .NET**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/cross-service/TopicsAndQueues#code-examples). 
Supprimez une rubrique à l’aide de son ARN de rubrique.  

```
    /// <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;
    }
```
+  Pour plus de détails sur l'API, reportez-vous [DeleteTopic](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/DeleteTopic)à la section *Référence des AWS SDK pour .NET API*. 

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

**SDK pour C\$1\$1**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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();
}
```
+  Pour plus de détails sur l'API, reportez-vous [DeleteTopic](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/DeleteTopic)à la section *Référence des AWS SDK pour C\$1\$1 API*. 

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

**AWS CLI**  
**Pour supprimer une rubrique SNS**  
L’exemple `delete-topic` suivant supprime la rubrique SNS spécifiée.  

```
aws sns delete-topic \
    --topic-arn "arn:aws:sns:us-west-2:123456789012:my-topic"
```
Cette commande ne produit aucune sortie.  
+  Pour plus de détails sur l'API, reportez-vous [DeleteTopic](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/delete-topic.html)à la section *Référence des AWS CLI commandes*. 

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

**Kit SDK pour Go V2**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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
}
```
+  Pour plus de détails sur l'API, reportez-vous [DeleteTopic](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/sns#Client.DeleteTopic)à la section *Référence des AWS SDK pour Go API*. 

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

**SDK pour Java 2.x**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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);
        }
    }
}
```
+  Pour plus de détails sur l'API, reportez-vous [DeleteTopic](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/DeleteTopic)à la section *Référence des AWS SDK for Java 2.x API*. 

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

**SDK pour JavaScript (v3)**  
 Il y en a plus sur GitHub. Trouvez l'exemple complet et découvrez comment le configurer et l'exécuter dans le [ référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Créez le client dans un module séparé et exportez-le.  

```
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({});
```
Importez le kit SDK et les modules client et appelez l’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
  //   }
  // }
};
```
+  Pour plus d’informations, consultez le [AWS SDK pour JavaScript Guide du développeur](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-managing-topics-deletetopic). 
+  Pour plus de détails sur l'API, reportez-vous [DeleteTopic](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/DeleteTopicCommand)à la section *Référence des AWS SDK pour JavaScript API*. 

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

**SDK pour Kotlin**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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.")
    }
}
```
+  Pour plus de détails sur l'API, consultez [DeleteTopic](https://sdk.amazonaws.com/kotlin/api/latest/index.html)la section *AWS SDK pour la référence de l'API Kotlin*. 

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

**Kit SDK pour PHP**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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());
}
```
+  Pour plus de détails sur l'API, reportez-vous [DeleteTopic](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/DeleteTopic)à la section *Référence des AWS SDK pour PHP API*. 

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

**Kit SDK for Python (Boto3)**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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
```
+  Pour plus de détails sur l'API, consultez [DeleteTopic](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/DeleteTopic)le *AWS manuel de référence de l'API SDK for Python (Boto3*). 

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

**Kit SDK pour SAP ABAP**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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.
```
+  Pour plus de détails sur l'API, reportez-vous [DeleteTopic](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html)à la section de référence du *AWS SDK pour l'API SAP ABAP*. 

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

**Kit SDK pour Swift**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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)
        )
```
+  Pour plus de détails sur l'API, reportez-vous [DeleteTopic](https://sdk.amazonaws.com/swift/api/awssns/latest/documentation/awssns/snsclient/deletetopic(input:))à la section *AWS SDK pour la référence de l'API Swift*. 

------

# Surveillance de l'activité des SMS Amazon SNS
<a name="sms_stats"></a>

En surveillant votre activité SMS, vous pouvez suivre les numéros de téléphone de destination, les distributions ayant réussi ou échoué, les motifs d'échec, les coûts et autres informations. Amazon SNS vous aide en résumant les statistiques dans la console, en envoyant des informations à Amazon CloudWatch et en envoyant des rapports quotidiens sur l'utilisation des SMS à un compartiment Amazon S3 que vous spécifiez.

# Afficher les statistiques de livraison des SMS Amazon SNS
<a name="sms_stats_console"></a>

Vous pouvez utiliser la console Amazon SNS pour afficher les statistiques concernant vos distributions SMS récentes.

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le menu de la console, définissez le sélecteur de région sur une [région prenant en charge la messagerie SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html).

1. Dans le panneau de navigation, choisissez **Messages texte (SMS)**.

1. Sur la page **SMS**, dans la section **Statistiques du compte**, affichez les graphiques pour vos SMS transactionnels et promotionnels délivrés. Chaque graphique présente les données suivantes pour les 15 jours précédents :
   + Delivery rate (pourcentage de distributions réussies)
   + Sent (nombre de tentatives de distribution)
   + Failed (nombre d'échecs de distribution)

Sur cette page, vous pouvez également cliquer sur le bouton **Utilisation** pour accéder au compartiment Amazon S3 où vous stockez vos rapports d'utilisation quotidiens. Pour de plus amples informations, veuillez consulter [Abonnement aux rapports quotidiens d'utilisation des SMS d'Amazon SNS](sms_stats_usage.md).

# Surveillance de la livraison des SMS Amazon SNS avec les CloudWatch métriques et les journaux Amazon
<a name="sms_stats_cloudwatch"></a>

Vous pouvez utiliser Amazon CloudWatch et Amazon CloudWatch Logs pour surveiller la livraison de vos SMS.

## Afficher les CloudWatch statistiques Amazon
<a name="sms_stats_cloudwatch_metrics"></a>

Amazon SNS collecte automatiquement les statistiques relatives à la livraison de vos SMS et les transmet à Amazon. CloudWatch Vous pouvez les utiliser CloudWatch pour surveiller ces mesures et créer des alarmes pour vous avertir lorsqu'une métrique franchit un seuil. Par exemple, vous pouvez surveiller CloudWatch les statistiques pour connaître votre taux de livraison de SMS et vos frais de month-to-date SMS.

Pour plus d'informations sur la surveillance CloudWatch des métriques, le paramétrage des CloudWatch alarmes et les types de métriques disponibles, consultez[Surveillance des rubriques Amazon SNS à l'aide de CloudWatch](sns-monitoring-using-cloudwatch.md).

## Affichage des CloudWatch journaux
<a name="sns-viewing-cloudwatch-logs"></a>

Vous pouvez collecter des informations sur les envois de SMS réussis et infructueux en autorisant Amazon SNS à écrire sur Amazon CloudWatch Logs. Pour chaque SMS que vous envoyez, Amazon SNS écrit un journal qui inclut le prix du message, l'état de réussite ou d'échec, la cause d'échec (le cas échéant), la durée de conservation du message et d'autres informations.

**Pour activer et afficher CloudWatch les journaux de vos messages SMS**

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le menu de la console, définissez le sélecteur de région sur une [région prenant en charge la messagerie SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. Dans le panneau de navigation, choisissez **Messages texte (SMS)**.

1. Sur la page**SMS mobile**, dans la section **Préférences de SMS**, choisissez **Modifier**.

1. Sur la page suivante, développez la section **Journalisation de l'état de distribution**.

1. Pour le **taux d'échantillonnage de réussite**, spécifiez le pourcentage de livraisons de SMS réussies pour lesquelles Amazon SNS rédigera des journaux dans CloudWatch Logs. Par exemple :
   + Pour écrire des journaux uniquement pour les distributions qui ont échoué, définissez cette valeur sur 0.
   + Pour écrire des journaux pour 10 % des distributions qui ont réussi, définissez-la sur 10.

   Si vous ne spécifiez pas de pourcentage, Amazon SNS écrit des journaux pour toutes les distributions réussies.

1. Pour fournir les autorisations requises, utilisez une des méthodes suivantes :
   + Pour créer un nouveau rôle de service, choisissez **Créer un nouveau rôle de service** puis **Créer de nouveaux rôles**. Sur la page suivante, choisissez **Autoriser** pour permettre à Amazon SNS d'accéder en écriture aux ressources de votre compte.
   + Pour utiliser un rôle de service existant, choisissez **Utiliser le rôle de service existant**, puis collez le nom ARN dans la case **Rôle IAM pour les distributions ayant réussi et échoué**.

     Le rôle de service que vous spécifiez doit autoriser l'accès en écriture aux ressources de votre compte. Pour plus d'informations sur la création de rôles IAM, consultez la section [Création d'un rôle pour un AWS service](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console) dans le Guide de l'*utilisateur IAM*. 

1. Sélectionnez **Enregistrer les modifications**.

1. De retour sur la page **Messagerie texte mobile (SMS)**, accédez à la section **Journaux de l'état de distribution** pour afficher tous les journaux disponibles.
**Note**  
Selon l'opérateur du numéro de téléphone de destination, l'affichage des journaux de distribution peut durer jusqu'à 72 heures dans la console Amazon SNS. 

## Exemple de journal pour une distribution SMS réussie
<a name="example-log-successful-sms-delivery"></a>

Le journal de l'état de distribution pour une distribution SMS réussie se présente comme l'exemple suivant :

```
{
    "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"
}
```

## Exemple de journal pour une distribution SMS ayant échoué
<a name="example-log-failed-sms-delivery"></a>

Le journal de l'état de distribution pour une distribution SMS ayant échoué se présente comme l'exemple suivant :

```
{
    "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"
}
```

## Causes d'échec de la distribution SMS
<a name="sms_stats_delivery_fail_reasons"></a>

La cause d'un échec est fournie avec l'attribut `providerResponse`. La distribution des SMS risque d'échouer pour les raisons suivantes :
+ Il est bloqué en tant que courrier indésirable par l'opérateur de téléphonie
+ La destination est sur une liste bloquée
+ Le numéro de téléphone n'est pas valide
+ Le corps du message n'est pas valide
+ L'opérateur de téléphonie a bloqué ce message
+ L'opérateur de téléphonie est actuellement inaccessible/indisponible
+ Le téléphone a bloqué le SMS
+ Le téléphone est sur une liste bloquée
+ Le téléphone est actuellement inaccessible/indisponible
+ Le numéro de téléphone est désactivé
+ Cette distribution entraînerait un dépassement du prix maximum
+ Erreur inconnue lors de la tentative d'accès au téléphone

# Abonnement aux rapports quotidiens d'utilisation des SMS d'Amazon SNS
<a name="sms_stats_usage"></a>

Vous pouvez contrôler vos distributions SMS en vous abonnant à des rapports d'utilisation quotidiens à partir d'Amazon SNS. Pour chaque jour où vous envoyez au moins un SMS, Amazon SNS diffuse un rapport d'utilisation sous forme de fichier CSV au compartiment Amazon S3 spécifié. Il faut 24 heures pour que le rapport d'utilisation des SMS soit disponible dans le compartiment Amazon S3. 

## Informations sur le rapport d'utilisation quotidien
<a name="daily_usage_info"></a>

Le rapport d'utilisation inclut les informations suivantes pour chaque SMS que vous envoyez à partir de votre compte.

 Le rapport n'inclut pas les messages envoyés aux destinataires qui se sont désabonnés.
+ Heure de publication du message (au format UTC)
+ ID de message
+ Numéro de téléphone de destination
+ Type de message
+ Statut de distribution
+ Prix du message (en USD)
+ Référence (un message est fractionné en plusieurs parties s'il est trop long pour constituer un seul message)
+ Nombre total de parties

**Note**  
Si Amazon SNS n'a pas reçu le nombre de parties, nous définissons sa valeur à zéro.

## Abonnement à des rapports d'utilisation quotidiens
<a name="subscribe-to-daily-usage-reports"></a>

Pour vous abonner à des rapports d'utilisation quotidiens, vous devez créer un compartiment Amazon S3 avec les autorisations appropriées.

**Pour créer un compartiment Amazon S3 pour vos rapports d'utilisation quotidiens**

1. À partir de la console Compte AWS qui envoie des SMS, connectez-vous à la [console Amazon S3](https://console.aws.amazon.com/s3/).

1. Choisissez **Créer un compartiment**.

1. Pour **Nom du compartiment**, nous vous recommandons de saisir un nom unique pour votre compte et votre organisation. Par exemple, utilisez le modèle `<my-bucket-prefix>-<account_id>-<org-id>`. 

   Pour de plus amples informations sur les conventions et les restrictions pour les noms de compartiments, consultez [Règles relatives à l'attribution des noms de compartiments](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html#bucketnamingrules) dans le *Guide de l’utilisateur du service d’Amazon Simple Storage*.

1. Choisissez **Créer**.

1. Dans le tableau **Tous les compartiments**, sélectionnez le compartiment.

1. Dans l'onglet **Autorisations**, sélectionnez **politique de compartiment**.

1. Dans la fenêtre **Éditeur de politique de compartiment**, indiquez une politique qui permet au principal du service Amazon SNS d'écrire dans votre compartiment. Pour obtenir un exemple, consultez [Exemple de politique de compartiment](#example_bucket_policy).

   Si vous utilisez l'exemple de politique, n'oubliez pas de le *my-s3-bucket* remplacer par le nom du bucket que vous avez choisi à l'étape 3.

1. Choisissez **Enregistrer**.

**Pour vous abonner à des rapports d'utilisation quotidiens**

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/).

1. Dans le panneau de navigation, choisissez **Messages texte (SMS)**.

1. Sur la page**Mobile text messaging (SMS) (SMS mobile)**, dans la section **Text messaaging preferences (Préférences de SMS)**, choisissez **Edit (Modifier)**.  
![\[Section des préférences de messagerie texte dans la console Amazon SNS\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/daily-usage-report1.png)

1. Sur la page **Edit text messaging preferences (Modifier les préférences de SMS)** dans la section **Details (Détails)**, spécifiez le **Amazon S3 bucket name for usage reports (Nom du compartiment Amazon S3 pour les rapports d'utilisation)**.  
![\[Section détaillée de la page Modifier les préférences de messagerie texte dans la console Amazon SNS\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/daily-usage-report2.png)

1. Sélectionnez **Enregistrer les modifications**.

### Exemple de politique de compartiment
<a name="example_bucket_policy"></a>

La politique suivante permet au principal du service Amazon SNS d'exécuter les actions `s3:PutObject`, `s3:GetBucketLocation` et `s3:ListBucket`.

AWS fournit des outils pour tous les services dont les principaux responsables ont eu accès aux ressources de votre compte. Lorsque le principal d'une déclaration de politique relative aux compartiments Amazon S3 est un [problème d'adjoint confus](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html). Pour limiter la région et le compte à partir desquels le compartiment peut recevoir des rapports d'utilisation quotidiens, utilisez `aws:SourceArn` comme indiqué dans l'exemple ci-dessous. Si vous ne souhaitez pas limiter les régions qui peuvent générer ces rapports, utilisez `aws:SourceAccount` pour limiter en fonction du compte qui génère les rapports. Si vous ne connaissez pas l'ARN de la ressource, utilisez `aws:SourceAccount`.

Utilisez l'exemple suivant qui inclut une protection du député confus lorsque vous créez un compartiment Amazon S3 pour recevoir les rapports quotidiens d'utilisation des SMS d'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:*"
                }
            }
        }
    ]
}
```

------

**Note**  
Vous pouvez publier des rapports d'utilisation sur des compartiments Amazon S3 appartenant au Compte AWS qui est spécifié dans l'élément `Condition` de la politique Amazon S3. Pour publier des rapports d'utilisation dans un compartiment Amazon S3 appartenant à Compte AWS un autre, consultez [Comment copier des objets Amazon S3 d'un autre compartiment Compte AWS ?](https://aws.amazon.com/premiumsupport/knowledge-center/copy-s3-objects-account/) . 

### Exemple de rapport d'utilisation quotidien
<a name="example_report"></a>

Une fois que vous êtes abonné à des rapports d'utilisation quotidiens, Amazon SNS place chaque jour un fichier CSV avec les données d'utilisation à l'emplacement suivant :

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

Chaque fichier peut contenir jusqu'à 50 000 enregistrements. Si les enregistrements d'une journée dépassent ce quota, Amazon SNS ajoute plusieurs fichiers. L'illustration suivante présente un exemple de rapport :

```
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
```

# Demande d'assistance pour la messagerie SMS Amazon SNS
<a name="channels-sms-awssupport"></a>

**Important**  
Le guide du développeur de SMS Amazon SNS a été mis à jour. Amazon SNS s'est intégré à [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)la livraison de messages SMS. Ce guide contient les dernières informations sur la création, la configuration et la gestion de vos messages SMS Amazon SNS.

Certaines options de SMS avec Amazon SNS ne sont pas disponibles pour votre AWS compte tant que vous ne nous contactez pas. Support Créez un cas dans le [AWS Support Centre](https://console.aws.amazon.com/support/home#/) pour formuler une demande relative à une des opérations suivantes :
+ Une augmentation du seuil de vos dépenses mensuelles pour l’envoi de SMS

  Par défaut, le seuil des dépenses mensuelles est fixé à 1 USD. Votre seuil de dépenses détermine le volume de messages que vous pouvez envoyer avec Amazon SNS. Vous pouvez demander un seuil de dépenses correspondant au volume mensuel de messages prévu pour votre cas d'utilisation des SMS.
+ Un déplacement de [l'environnement de test (sandbox) pour SMS](sns-sms-sandbox.md) afin que vous puissiez envoyer des messages SMS sans restrictions. Pour de plus amples informations, veuillez consulter [Sortir du sandbox SMS d'Amazon SNS](sns-sms-sandbox-moving-to-production.md).
+ Un [numéro d'origine](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) dédié
+ Un [identifiant d'expéditeur](https://docs.aws.amazon.com/sms-voice/latest/userguide/sender-id.html) dédié. Un ID expéditeur est un ID personnalisé qui s'affiche en tant qu'expéditeur sur l'appareil du destinataire. Par exemple, vous pouvez utiliser votre marque d’entreprise pour faciliter la reconnaissance de la source du message. Support pour les expéditeurs IDs varie en fonction du pays ou de la région. Pour plus d'informations, consultez la section [Pays et régions pris en charge pour la messagerie SMS AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) dans le *Guide de AWS End User Messaging SMS l'utilisateur*.

# Demande d'augmentation de votre quota de dépenses mensuel pour les SMS Amazon SNS
<a name="channels-sms-awssupport-spend-threshold"></a>

Amazon SNS propose des quotas de dépenses destinés à vous aider à gérer le coût mensuel maximal lié à l'envoi de SMS à l'aide de votre compte. Le quota de dépenses limite vos risques en cas d'attaque malveillante et empêche votre application en amont d'envoyer plus de messages que prévu. Vous pouvez configurer Amazon SNS pour arrêter la publication de SMS lorsqu’il détermine que l'envoi d'un SMS entraînera un coût dépassant votre quota de dépenses pour le mois en cours. 

Pour éviter que vos activités ne soient impactées, nous vous recommandons de demander un quota de dépenses suffisamment élevé pour faire face à vos charges de travail de production. Pour de plus amples informations, consultez [Étape 1 : ouvrir une demande de SMS Amazon SNS](#channels-sms-awssupport-spend-threshold-open). Une fois le quota reçu, vous pouvez gérer votre risque en appliquant tout le quota, ou seulement une partie, comme le décrit la section [Étape 2 : Mettre à jour les paramètres de SMS](#channels-sms-awssupport-spend-threshold-settings). L’application d’une valeur inférieure à la totalité du quota vous permet de contrôler vos dépenses mensuelles tout en gardant la possibilité d'augmenter en fonction de vos besoins.

**Important**  
Amazon SNS étant un système distribué, il cesse d'envoyer des SMS après quelques minutes si le quota de dépenses est dépassé. Si vous continuez à envoyer des SMS au cours de cette période, vous risquez de devoir payer des frais au-delà de votre quota.

Le quota des dépenses pour tous les nouveaux comptes est défini à 1 USD par mois. Ce quota doit vous permettre de tester les capacités d’envoi de messages d’Amazon SNS. Pour demander une augmentation du quota de dépenses par SMS pour votre compte, ouvrez une demande d'augmentation du quota dans le AWS Support Center.

**Topics**
+ [Étape 1 : ouvrir une demande de SMS Amazon SNS](#channels-sms-awssupport-spend-threshold-open)
+ [Étape 2 : mettre à jour vos paramètres de SMS dans la console Amazon SNS](#channels-sms-awssupport-spend-threshold-settings)

## Étape 1 : ouvrir une demande de SMS Amazon SNS
<a name="channels-sms-awssupport-spend-threshold-open"></a>

Vous pouvez demander une augmentation de votre quota de dépenses mensuel en ouvrant un dossier d'augmentation de quota dans le AWS Support Center.

**Note**  
Certains champs du formulaire de demande sont marqués comme « facultatifs ». Toutefois, Support nécessite toutes les informations mentionnées dans les étapes suivantes afin de traiter votre demande. Si vous ne fournissez pas toutes les informations requises, le traitement de votre demande peut être retardé.

1. Connectez-vous à l' AWS Management Console adresse [https://console.aws.amazon.com/](https://console.aws.amazon.com/).

1. Dans le menu **Support**, choisissez **Centre de support**.

1. Dans le panneau **Vos cas de support**, choisissez **Créer un cas**.

1. Cliquez sur le lien **Vous cherchez à augmenter la limite de service ?**, puis procédez comme suit :
   + Pour **Type de limite**, choisissez **SMS SNS**.
   + (Facultatif) Pour **Fournir un lien vers le site ou l'application qui enverra les SMS**, entrez les informations sur le site Web, l'application ou le service qui enverra des SMS.
   + (Facultatif) Pour **Quel type de message envisagez-vous d’envoyer**, choisissez le type de message que vous prévoyez d’envoyer à l’aide de votre code long :
     + **Mot de passe ponctuel** – Messages fournissant des mots de passe que vos clients utilisent pour s’authentifier sur votre site web ou votre application.
     + **Promotionnel** – Messages non stratégiques faisant la promotion de votre entreprise ou de votre service, comme des offres spéciales ou des annonces.
     + **Transactionnel** – Messages d’information importants qui prennent en charge les transactions clients, comme des confirmations de commande ou des alertes de compte. Les messages transactionnels ne peuvent pas comporter de contenu promotionnel ni marketing.
   + (Facultatif) Pour ** AWS la région à partir de laquelle vous allez envoyer des messages**, choisissez la région à partir de laquelle vous allez envoyer des messages.
   + (Facultatif) Pour **Vers quels pays comptez-vous envoyer des messages**, entrez le pays ou la région dans lesquels vous souhaitez acheter des codes courts.
   + (Facultatif) Dans **Comment vos clients acceptent-ils de recevoir messages de votre part**, fournissez des détails sur votre processus d’acceptation.
   + (Facultatif) Dans le champ **Veuillez fournir le modèle de message que vous comptez utiliser pour envoyer des messages à vos clients**, incluez le modèle que vous allez utiliser.

1. Sous **Requests (Demandes)**, complétez les sections suivantes :
   + Pour **Région**, choisissez la région à partir de laquelle vous allez envoyer des messages. 
**Note**  
La région est obligatoire dans la section **Demandes**. Même si vous avez fourni ces informations dans la section **Détails du cas**, vous devez également les inclure ici.
   + Pour **Type de ressource**, choisissez **Limites générales**.
   + Pour **Limit (Limite)**, choisissez **Account Spend Threshold Increase (Augmenter la limite de dépenses du compte)**.

1. Pour Nouvelle valeur limite, saisissez le montant maximal (en USD) que vous pouvez dépenser en SMS chaque mois civil.

1. Sous **Case description (Description de cas)**, pour **Use case description (Description du cas d’utilisation)**, saisissez les informations suivantes :
   + Le site Web ou l’application de l’entreprise ou du service qui envoie les SMS.
   + Le service fourni par votre site Web ou votre application, ainsi que la façon dont vos SMS contribuent à ce service.
   + La façon dont les utilisateurs s’inscrivent volontairement pour recevoir vos SMS sur votre site web, votre application ou tout autre emplacement.

   Si le quota de dépenses que vous demandez (c’est-à-dire la valeur que vous spécifiez pour **New quota value (Nouvelle valeur de quota)**, dépasse 10 000 USD, fournissez les informations supplémentaires suivantes pour chaque pays vers lequel vous envoyez des SMS :
   + Si vous utilisez un ID expéditeur ou un code court. Si vous utilisez un ID expéditeur, indiquez :
     + L’ID expéditeur.
     + Si l’ID expéditeur est enregistré auprès des opérateurs sans fil dans le pays.
   + Le maximum attendu transactions-per-second (TPS) pour votre messagerie.
   + La taille moyenne des SMS.
   + Le modèle pour les messages que vous envoyez vers le pays.
   + (Facultatif) L’encodage de caractères nécessaire, le cas échéant.

1. (Facultatif) Si vous souhaitez soumettre d’autres demandes, choisissez **Ajouter une autre demande**. Si vous incluez plusieurs demandes, fournissez les informations requises pour chacune d’elles. Pour en savoir plus sur les informations requises, consultez les autres sections dans [Demande d'assistance pour la messagerie SMS Amazon SNS](channels-sms-awssupport.md).

1. Sous **Options de contact**, pour **Langue de contact préférée**, choisissez la langue dans laquelle vous souhaitez recevoir les communications pour ce cas.

1. Lorsque vous avez terminé, choisissez **Submit (Soumettre)**.

L' Support équipe fournit une première réponse à votre demande dans les 24 heures.

Pour empêcher que nos systèmes soient utilisés pour envoyer des contenus indésirables ou malveillants, chaque demande est traitée avec soin. Si cela est possible, nous accepterons votre demande dans ce délai de 24 heures. En revanche, si nous avons besoin de plus amples informations, le traitement de votre demande peut prendre plus de temps.

Nous pourrions ne pas être en mesure de donner suite à votre demande si votre cas d'utilisation n'est pas conforme à nos politiques.

## Étape 2 : mettre à jour vos paramètres de SMS dans la console Amazon SNS
<a name="channels-sms-awssupport-spend-threshold-settings"></a>

Lorsque vous aurez été informé que votre quota de dépenses mensuelles a été augmenté, vous devez ajuster ce quota pour votre compte dans la console Amazon SNS.

**Important**  
Vous devez suivre ces étapes ou votre limite de dépenses en SMS ne sera pas augmentée.

**Pour ajuster votre quota de dépenses sur la console**

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Ouvrez le menu de navigation de gauche, développez **Mobile**, puis choisissez **SMS**.

1. Sur la page**SMS mobile**, dans la section **Préférences de SMS**, choisissez **Modifier**.

1. Sur la page **Modifier les préférences de SMS**, dans la section **Détails**, entrez votre nouvelle limite de dépenses en SMS dans le champ **Limite de dépenses du compte**.
**Note**  
Il se peut que vous receviez un avertissement indiquant que la valeur entrée est supérieure à la limite de dépenses par défaut. Vous pouvez ignorer ce texte. 

1. Sélectionnez **Enregistrer les modifications**.
**Note**  
Si vous obtenez une erreur « Paramètre non valide », consultez le contact du support AWS et confirmez que vous avez saisi la nouvelle limite de dépenses SMS correcte. Si le problème persiste, ouvrez un dossier dans le AWS Support Center. 

Lorsque vous créez votre dossier dans le Support Centre, veillez à inclure toutes les informations requises pour le type de demande que vous soumettez. Dans le cas contraire, vous Support devez vous contacter pour obtenir ces informations avant de continuer. En soumettant un cas détaillé, vous contribuez à ce qu'il soit satisfait sans retard. Pour les détails requis pour des types spécifiques de demande SMS, consultez les rubriques suivantes.

 Pour plus d'informations sur l'expéditeur IDs, consultez la documentation suivante dans le *guide de AWS End User Messaging SMS l'utilisateur* :


| AWS End User Messaging SMS Rubrique | Description | 
| --- | --- | 
|  [Demande d'augmentation du quota de dépenses](https://docs.aws.amazon.com/sms-voice/latest/userguide/awssupport-spend-threshold.html)  |  Votre quota de dépenses détermine le montant que vous pouvez dépenser pour envoyer des SMS AWS End User Messaging SMS chaque mois.  | 
|  [Ouvrez un dossier dans le centre d'assistance pour obtenir un identifiant d'expéditeur](https://docs.aws.amazon.com/sms-voice/latest/userguide/awssupport-sender-id.html)  |  Si vous prévoyez d'envoyer des messages à des destinataires dans un pays où IDs les expéditeurs sont obligatoires, vous pouvez demander un identifiant d'expéditeur en créant un nouveau dossier dans le Support Centre.  | 

# Bonnes pratiques pour la messagerie SMS Amazon SNS
<a name="channels-sms-best-practices"></a>

**Important**  
Le guide du développeur de SMS Amazon SNS a été mis à jour. Amazon SNS s'est intégré à [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)la livraison de messages SMS. Ce guide contient les dernières informations sur la création, la configuration et la gestion de vos messages SMS Amazon SNS.

Les utilisateurs de téléphonie mobile ont tendance à avoir une tolérance très faible pour les SMS non sollicités. Les taux de réponse aux campagnes SMS non sollicitées sera presque toujours faible, et, par conséquent, le retour sur investissement sera médiocre.

En outre, les opérateurs de téléphonie mobile soumettent les expéditeurs de SMS à des audits permanents. Ils restreignent ou bloquent les messages en provenance des numéros qu’ils considèrent comme envoyant des messages non sollicités. 

L'envoi de contenu non sollicité constitue également une violation de la [politique d'utilisation acceptable d'AWS](https://aws.amazon.com/aup/#No_E-Mail_or_Other_Message_Abuse). L'équipe Amazon SNS procède à des audits réguliers des campagnes SMS. Elle peut restreindre ou bloquer votre capacité à envoyer des messages s'il s'avère que vous envoyez des messages non sollicités.

Enfin, dans de nombreux pays, régions et juridictions, de lourdes pénalités peuvent être appliquées pour l’envoi de SMS non sollicités. Par exemple, aux États-Unis, le TCPA (Telephone Consumer Protection Act) stipule que les consommateurs peuvent bénéficier de 500 à 1 500 USD de dommages et intérêts (payés par l’expéditeur) pour chaque message non sollicité reçu.

Cette section décrit plusieurs bonnes pratiques qui peuvent vous aider à améliorer votre engagement client et à éviter de lourdes pénalités. Cependant, notez que cette section ne contient pas de conseils juridiques. Consultez toujours un avocat pour obtenir des conseils juridiques.

## Respectez les lois, les réglementations et les exigences des opérateurs
<a name="channels-sms-best-practices-understand-laws"></a>

Vous pouvez avoir à vous acquitter d’amendes et de pénalités significatives si vous enfreignez les législations et les réglementations des pays ou régions où résident vos clients. Pour cette raison, il est essentiel de comprendre les lois liées à la messagerie SMS de chaque pays ou région dans lesquels vous travaillez.

La liste suivante contient des liens vers les lois essentielles qui s’appliquent aux communications SMS sur les principaux marchés à travers le monde.
+ **États-Unis** : le Telephone Consumer Protection Act de 1991, également connu sous le nom de TCPA, s’applique à certains types de messages SMS. Pour de plus amples informations, veuillez consulter les [règles et réglementations](https://www.fcc.gov/document/telephone-consumer-protection-act-1991) sur le site Web de la Federal Communications Commission.
+ **Royaume-Uni** : la Privacy and Electronic Communications (EC Directive) Regulations 2003, également connue sous le nom de PECR, s’applique à certains types de messages SMS. Pour plus d’informations, consultez [What are PECR?](https://ico.org.uk/for-organisations/direct-marketing-and-privacy-and-electronic-communications/guide-to-pecr/what-are-pecr/) sur le site Web de l’UK Information Commissioner’s Office.
+ **Union européenne** : la directive sur la vie privée et les communications électroniques (2002), parfois connue sous le nom d’ePrivacy Directive, s’applique à certains types de messages SMS. Pour de plus amples informations, veuillez consulter le [texte complet de la loi (format PDF)](http://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32002L0058) sur le site Web Europa.eu.
+ **Canada** : le Fighting Internet and Wireless Spam Act, plus communément appelé Canada’s Antispam Law ou CASL, s’applique à certains types de messages SMS. Pour de plus amples informations, veuillez consulter le [texte complet de la loi](http://www.parl.ca/DocumentViewer/en/40-3/bill/C-28/first-reading) sur le site Web du Parlement canadien.
+ **Japon** : la loi sur le règlement de transmission des courriers électroniques spécifiques peut s’appliquer à certains types de messages SMS. Pour plus d’informations, consultez la rubrique [Japan’s Countermeasures Against Spam](https://www.japaneselawtranslation.go.jp/en/laws/view/3767/en) du site web du ministère japonais de l’intérieur et des communications.

En tant qu’expéditeur, ces lois peuvent s’appliquer à votre cas, même si votre entreprise ou votre organisation n’est pas basée dans l’un de ces pays. Certaines législations dans cette liste ont été initialement créées pour traiter les e-mails ou les appels téléphoniques indésirables, mais ont été interprétées ou étendues pour s’appliquer aussi aux messages SMS. D’autres pays et régions peuvent avoir leurs propres lois liées à la transmission des messages SMS. Consultez un avocat dans chaque pays ou région où vos clients sont situés pour obtenir des conseils juridiques.

Dans de nombreux pays, les opérateurs locaux ont en fin de compte le pouvoir de déterminer le type de trafic qui circule sur leurs réseaux. Cela signifie que les opérateurs peuvent imposer des restrictions sur le contenu des SMS qui dépassent les exigences minimales des lois locales.

## Obtenir une autorisation
<a name="channels-sms-best-practices-obtain-permission"></a>

N’envoyez pas de messages aux destinataires qui n’ont pas demandé explicitement à recevoir les types spécifiques de messages que vous prévoyez d’envoyer. Ne partagez pas de listes d’inscription, y compris entre des organisations de la même entreprise. 

Si les destinataires peuvent s’inscrire pour recevoir vos messages via un formulaire en ligne, ajoutez des systèmes pour empêcher les scripts automatisés d’inscrire des personnes à leur insu. Vous devez également limiter le nombre de fois qu’un utilisateur peut soumettre un numéro de téléphone au cours d’une même session.

Lorsque vous recevez une demande d’acceptation de SMS, envoyez au destinataire un message pour l’inviter à confirmer qu’il souhaite recevoir des messages de votre part. N’envoyez aucun message supplémentaire à ce destinataire tant qu’il n’a pas confirmé son abonnement. Un message de confirmation d’abonnement peut se présenter comme l’exemple ci-dessous :

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

Conservez les enregistrements incluant la date, l’heure et la source de chaque demande d’acceptation et de chaque confirmation. Cela peut être utile si un opérateur ou un organisme de régulation les demande ; cela peut également vous aider à effectuer des audits réguliers sur votre liste de clients.

### Flux de travaux d’abonnement
<a name="channels-sms-best-practices-obtain-permission-optin"></a>

Dans certains cas (comme l’enregistrement gratuit ou par code court aux États-Unis), les opérateurs de téléphonie mobile vous demandent de fournir des maquettes ou des captures d’écran de l’ensemble de votre flux de travail d’abonnement. Les maquettes ou captures d’écran doivent ressembler étroitement au flux de travaux d’abonnement que vos destinataires suivront. 

Vos maquettes ou captures d’écran doivent inclure toutes les informations requises indiquées ci-dessous afin de maintenir le plus haut niveau de conformité. 

**Informations requises**
+ Une description du cas d’utilisation de la messagerie que vous allez envoyer via votre programme.
+ La phrase « Des frais peuvent s’appliquer pour les messages et données. »
+ Une indication de la fréquence à laquelle les destinataires recevront des messages de votre part. Par exemple, un programme de messagerie récurrent peut indiquer « un message par semaine ». Un exemple d’utilisation d’un mot de passe unique ou d’une authentification multifactorielle peut indiquer « la fréquence des messages varie » ou « un message par tentative de connexion ».
+ Liens vers vos conditions générales et vos documents de politique de confidentialité. 

**Motifs de rejet courants pour les abonnements non conformes**
+ Si le nom de l’entreprise fourni ne correspond pas à celui indiqué sur la maquette ou la capture d’écran. Toute relation non évidente doit être expliquée dans la description du flux de travaux d’abonnement.
+ S’il apparaît qu’un message sera envoyé au destinataire, mais qu’aucun consentement n’est explicitement recueilli avant de le faire. Le consentement explicite est obligatoire pour tous les messages.
+ S’il apparaît que la réception d’un SMS est requise pour s’inscrire à un service. Cela n’est pas conforme si le flux de travaux ne fournit aucune alternative à la réception d’un message d’abonnement sous une autre forme, comme un e-mail ou un appel vocal. 
+ Si la langue d’abonnement est entièrement présentée dans les conditions d’utilisation. Les informations doivent toujours être présentées au destinataire au moment de l’abonnement plutôt que dans un document de politique associé. 
+ Si un client a consenti à recevoir un type de message de votre part et que vous lui envoyez d’autres types de SMS. Par exemple, il accepte de recevoir des mots de passe à usage unique, mais reçoit également des messages de sondage.
+ Si les informations requises (énumérées ci-dessus) ne sont pas présentées aux destinataires.

L’exemple suivant est conforme aux exigences des opérateurs de téléphonie mobile pour un cas d’utilisation d’authentification multifactorielle.

![\[Une step-by-step maquette du flux de travail opt-in pour activer l'authentification multifactorielle (MFA) sur un compte utilisateur avec. ExampleCorp Le processus commence par la fourniture par l'utilisateur des informations de base sur son compte, telles que son nom et son adresse e-mail. Ensuite, l'utilisateur décide d'activer ou non le MFA pour renforcer la sécurité. Si le MFA est activé, l'utilisateur sélectionne la manière dont il souhaite recevoir le jeton MFA, avec des options telles que le message texte ou l'appel téléphonique. Si l'utilisateur sélectionne un SMS, il reçoit un SMS contenant un code de vérification. La dernière étape demande à l'utilisateur de saisir le code reçu pour confirmer son numéro de téléphone, complétant ainsi le processus d'inscription. Cette maquette garantit que toutes les informations nécessaires sont fournies pour la conformité des SMS.\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/best-practices-usecase.png)


Elle contient du texte et des images finalisés, et affiche l’intégralité du flux d’abonnement, avec des annotations. Dans le flux de travaux d’abonnement, le client doit prendre des mesures distinctes et intentionnelles pour donner son consentement à recevoir des SMS. Ce flux contient toutes les informations requises.

### Autres types de flux de travaux d’abonnement
<a name="channels-sms-best-practices-obtain-permission-other"></a>

Les opérateurs de téléphonie mobile accepteront également les flux de travaux d’abonnement en dehors des applications et des sites Web, comme l’abonnement verbal ou écrit, s’ils sont conformes aux éléments décrits ci-dessus. Un flux de travaux d’abonnement conforme et un script verbal ou écrit recueilleront le consentement explicite du destinataire pour recevoir un type de message spécifique. À titre d’exemple, citons le script verbal qu’un agent de support utilise pour recueillir le consentement avant de l’enregistrer dans une base de données de service ou un numéro de téléphone indiqué sur un dépliant promotionnel. Pour fournir une maquette de ces types de flux de travail opt-in, vous pouvez fournir une capture d'écran de votre script d'opt-in, de votre matériel marketing ou de votre base de données dans laquelle les numéros sont collectés. Les opérateurs de téléphonie mobile peuvent avoir des questions supplémentaires concernant ces cas d’utilisation si l’abonnement n’est pas clair ou si le cas d’utilisation dépasse certains volumes.

## Ne pas envoyer à d’anciennes listes
<a name="channels-sms-best-practices-old-lists"></a>

Les utilisateurs changent souvent de numéro de téléphone. Un numéro de téléphone dont le propriétaire a accepté d’être contacté il y a deux ans pourrait appartenir à quelqu’un d’autre aujourd’hui. N’utilisez pas une ancienne liste de numéros de téléphone pour un nouveau programme de messages ; si vous le faites, certains messages risquent d’échouer car le numéro n’est plus en service, et certaines personnes se désinscriront parce qu’elles ne se souviennent pas de vous avoir donné leur consentement.

## Effectuer un audit de vos listes de clients
<a name="channels-sms-best-practices-audit-lists"></a>

Si vous envoyez des campagnes SMS récurrentes, effectuez un audit de vos listes de clients de façon régulière. Effectuer un audit de vos listes de clients permet de vous assurer que seuls les clients intéressés par la réception de vos messages reçoivent ces derniers. 

Lorsque vous effectuez un audit de votre liste, envoyez à chaque client un message lui rappelant qu’il s’est abonné, et fournissez-lui les informations requises pour un désabonnement. Un message de rappel peut se présenter comme l’exemple ci-dessous :

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

## Archivage des enregistrements
<a name="channels-sms-best-practices-keep-records"></a>

Conservez les enregistrements indiquant à quel moment chaque client a demandé de recevoir des messages SMS de votre part, et quels messages vous avez envoyés à chaque client. De nombreux pays et régions du monde entier imposent aux expéditeurs de SMS de conserver ces enregistrements de manière facilement consultable. Les opérateurs de téléphonie mobile peuvent également vous demander ces informations à tout moment. Les informations exactes que vous devez fournir varient en fonction du pays ou de la région. Pour plus d’informations sur les exigences en matière d’archivage des enregistrements, consultez les réglementations relatives aux messages SMS commerciaux de chaque pays ou région où vos clients se trouvent.

Un opérateur ou un organisme de réglementation nous demande parfois de prouver qu’un client s’est inscrit pour recevoir des messages de votre part. Dans ces situations, il vous Support contacte pour vous fournir une liste des informations dont le transporteur ou l'agence a besoin. Si vous ne pouvez pas fournir les informations demandées, nous sommes susceptibles de suspendre votre capacité à envoyer de nouveaux messages SMS.

## Faites en sorte que vos messages soient clairs, honnêtes et concis
<a name="channels-sms-best-practices-appropriate-content"></a>

Le SMS est un support unique. La character-per-message limite de 160 signifie que vos messages doivent être concis. Les techniques que vous pouvez utiliser sur d’autres canaux de communication, comme les e-mails, peuvent ne pas s’appliquer au canal SMS et peuvent même sembler malhonnêtes ou trompeuses lorsqu’elles sont utilisées avec des SMS. Si le contenu de vos messages ne respecte pas les bonnes pratiques, les destinataires peuvent ignorer vos messages ; dans le pire des cas, les opérateurs de téléphonie mobile peuvent identifier vos messages comme du spam et bloquer les futurs messages provenant de votre numéro de téléphone.

Cette section fournit des conseils et des idées pour créer un message SMS efficace.

### Identifiez-vous en tant qu’expéditeur
<a name="channels-sms-best-practices-appropriate-content-identify"></a>

Vos destinataires doivent pouvoir déterminer immédiatement que vous êtes l’auteur du message. Les expéditeurs qui suivent cette bonne pratique incluent un nom d’identification (« nom du programme ») au début de chaque message.

**Ne le faites pas :**  
`Your account has been accessed from a new device. Reply Y to confirm.`

**Essayez plutôt ceci :**  
`ExampleCorp Financial Alerts: You have logged in to your account from a new device. Reply Y to confirm, or STOP to opt-out.`

### N'essayez pas de faire en sorte que votre message ressemble à un person-to-person message
<a name="channels-sms-best-practices-appropriate-content-p2p"></a>

Certains spécialistes du marketing sont tentés d’ajouter une touche personnelle à leurs SMS, en faisant croire que leurs messages ont été envoyés par une personne spécifique. Cependant, cette technique peut donner l’impression que votre message est une tentative d’hameçonnage.

**Ne le faites pas :**  
`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.`

**Essayez plutôt ceci :**  
`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.`

### Soyez prudent lorsque vous parlez d’argent
<a name="channels-sms-best-practices-appropriate-content-money"></a>

Les fraudeurs exploitent souvent la volonté des gens d’économiser et de recevoir de l’argent. Ne faites pas d’offres trop belles pour être vraies. N’utilisez pas l’appât de l’argent pour tromper les gens. N’utilisez pas de symboles monétaires pour parler d’argent.

**Ne le faites pas :**  
`Save big $$$ on your next car repair by going to https://www.example.com.`

**Essayez plutôt ceci :**  
`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.`

### Utilisez uniquement les caractères nécessaires
<a name="channels-sms-best-practices-appropriate-content-characters"></a>

Les marques ont souvent envie de protéger leurs produits en ajoutant des symboles de marque tels que ™ ou ® dans leurs messages. Toutefois, ces symboles ne font pas partie de l’ensemble de caractères standard (appelé alphabet GSM) qui peut être inclus dans un SMS de 160 caractères. Lorsque vous envoyez un message contenant l’un de ces caractères, votre message est automatiquement envoyé à l’aide d’un système de codage de caractères différent, qui ne prend en charge que 70 caractères par message. Par conséquent, votre message peut être divisé en plusieurs parties. Étant donné que vous êtes facturé pour chaque partie que vous envoyez, l’envoi de l’intégralité du message peut vous coûter plus cher. En outre, vos destinataires peuvent recevoir plusieurs messages d’affilée de votre part, au lieu d’un seul message. Pour plus d’informations sur l’encodage de caractères SMS, consultez [Limites de caractères des SMS dans Amazon SNS](#channels-sms-limitations-characters).

**Ne le faites pas :**  
`ExampleCorp Alerts: Save 20% when you buy a new ExampleCorp Widget® at example.com and use the promo code WIDGET.`

**Essayez plutôt ceci :**  
`ExampleCorp Alerts: Save 20% when you buy a new ExampleCorp Widget(R) at example.com and use the promo code WIDGET.`

**Note**  
Les deux exemples précédents sont presque identiques, mais le premier contient un symbole de marque déposée (®), qui ne fait pas partie de l’alphabet GSM. Par conséquent, le premier exemple est envoyé en deux messages, tandis que le second est envoyé en un message.

### Utilisez des liens valides et sûrs
<a name="channels-sms-best-practices-appropriate-content-links"></a>

Si votre message comporte des liens, vérifiez-les pour vous assurer qu’ils fonctionnent. Testez vos liens sur un appareil en dehors du réseau de votre entreprise pour vous assurer qu’ils sont corrects. En raison de la limite de 160 caractères des messages SMS, les messages très longs URLs peuvent être répartis sur plusieurs messages. Vous devez utiliser des domaines de redirection pour fournir des informations abrégées URLs. Toutefois, n’utilisez pas de services gratuits pour raccourcir des liens, comme tinyurl.com ou bitly.com, car les opérateurs ont tendance à filtrer les messages qui contiennent des liens sur ces domaines. Cependant, vous pouvez utiliser des services payants pour raccourcir vos liens, à condition que ces derniers soient redirigés vers un domaine dont l’usage est exclusivement réservé à votre entreprise ou organisation. 

**Ne le faites pas :**  
`Go to https://tinyurl.com/4585y8mr today for a special offer!`

**Essayez plutôt ceci :**  
`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.`

### Limitez le nombre d’abréviations employé
<a name="channels-sms-best-practices-appropriate-content-abbrev"></a>

La limite de 160 caractères du canal SMS pousse certains expéditeurs à utiliser des abréviations de manière intensive dans leurs messages. Cependant, l’utilisation excessive d’abréviations peut sembler peu professionnelle à de nombreux lecteurs et peut amener certains utilisateurs à signaler votre message comme spam. Il est tout à fait possible d’écrire un message cohérent sans utiliser trop d’abréviations.

**Ne le faites pas :**  
`Get a gr8 deal on ExampleCorp widgets when u buy a 4-pack 2day.`

**Essayez plutôt ceci :**  
`ExampleCorp Alerts: Today only—an exclusive deal on ExampleCorp Widgets at example.com. Text STOP to opt-out.`

## Répondre de manière appropriée
<a name="channels-sms-best-practices-respond-appropriately"></a>

Lorsqu’un destinataire répond à vos messages, veillez à lui répondre en lui fournissant des informations utiles. Par exemple, lorsqu’un client répond à l’un de vos messages avec le mot-clé « AIDE », envoyez-lui des informations sur le programme auquel il est abonné, le nombre de messages que vous envoyez chaque mois, et les méthodes qui lui permettent de vous contacter afin d’obtenir plus d’informations. La réponse à une demande AIDE peut se présenter comme l’exemple ci-dessous :

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

Lorsqu’un client répond avec le mot-clé « STOP », indiquez-lui qu’il ne recevra plus d’autres messages. La réponse à une demande STOP peut se présenter comme l’exemple ci-dessous :

`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.`

## Ajuster votre envoi en fonction de l’implication
<a name="channels-sms-best-practices-adjust-engagement"></a>

Les priorités de vos clients peuvent évoluer au fil du temps. Si les clients ne considèrent plus vos messages comme utiles, ils peuvent les refuser complètement, voire même les signaler comme messages indésirables. Pour ces raisons, il est important que vous ajustiez vos pratiques d’envoi en fonction de l’implication du client.

Pour les clients qui s’impliquent rarement par rapport à vos messages, vous devez ajuster la fréquence de ces derniers. Par exemple, si vous envoyez des messages hebdomadaires aux clients impliqués, vous pouvez créer un récapitulatif mensuel distinct pour les clients qui sont moins impliqués. 

Enfin, supprimez de vos listes de clients ceux qui ne sont pas impliqués du tout. Cette étape permet de prévenir toute frustration provoquée par vos messages de la part des clients. Elle vous permet d’économiser de l’argent et contribue à protéger votre réputation d’expéditeur.

## Envoyer à des heures appropriées
<a name="channels-sms-best-practices-appropriate-times"></a>

Envoyez des messages uniquement pendant les heures normales d’ouverture de bureau. Si vous envoyez des messages à l’heure du dîner ou au milieu de la nuit, il y a de grandes chances que vos clients se désinscrivent de vos listes afin d’éviter d’être dérangés. De plus, cela n’a aucun sens d’envoyer des SMS lorsque vos clients ne peuvent pas y répondre immédiatement. 

Si vous envoyez des campagnes ou des parcours à de très grandes audiences, vérifiez les taux de débit pour vos numéros de création. Divisez le nombre de destinataires par votre débit pour déterminer le temps qu’il faudra pour envoyer des messages à tous vos destinataires.

## Éviter la fatigue multicanal
<a name="channels-sms-best-practices-cross-channel-fatigue"></a>

Dans vos campagnes, si vous utilisez plusieurs canaux de communication (e-mail, SMS et messages push), n’envoyez pas le même message dans chaque canal. Lorsque vous envoyez le même message simultanément dans plusieurs canaux, vos clients percevront probablement votre comportement d’envoi comme agaçant plutôt qu’utile.

## Utiliser des codes courts dédiés
<a name="channels-sms-best-practices-dedicated-short-codes"></a>

Si vous utilisez des codes courts, conservez un code court distinct pour chaque marque et chaque type de message. Par exemple, si votre entreprise possède deux marques, utilisez un code court distinct pour chacune d’elles. De même, si vous envoyez des messages promotionnels et des messages transactionnels, utilisez un code court distinct pour chaque type de message. Pour en savoir plus sur la demande de codes abrégés, consultez la section [Demande de codes abrégés pour la messagerie SMS AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-request-short-code.html) dans le *Guide de AWS End User Messaging SMS l'utilisateur*.

## Vérifiez vos numéros de téléphone de destination
<a name="channels-sms-best-practices-verify-destination-numbers"></a>

Lorsque vous envoyez des SMS via Amazon SNS, vous êtes facturé pour chaque partie de message que vous envoyez. Le prix que vous payez par partie de message varie en fonction du pays ou de la région du destinataire. Pour plus d'informations sur la tarification des SMS, consultez la section [Tarification des SMS AWS dans le monde entier](https://aws.amazon.com/sns/sms-pricing).

Lorsqu'Amazon SNS accepte une demande d'envoi de SMS (suite à un appel à l'[SendMessages](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#SendMessages)API ou au lancement d'une campagne ou d'un parcours), l'envoi de ce message vous est facturé. Cette instruction est vraie même si le destinataire prévu ne reçoit pas réellement le message. Par exemple, si le numéro de téléphone du destinataire n'est plus en service ou si le numéro auquel vous avez envoyé le message n'était pas un numéro de téléphone portable valide, l'envoi du message vous sera toujours facturé.

Amazon SNS accepte les demandes valides d'envoi de SMS et tente de les distribuer. Pour cette raison, vous devez vérifier que les numéros de téléphone auxquels vous envoyez des messages sont des numéros de téléphone mobiles valides. Vous pouvez l'utiliser AWS End User Messaging SMS pour envoyer un message test afin de déterminer si un numéro de téléphone est valide et de quel type de numéro il s'agit (mobile, fixe ou VoIP). Pour plus d'informations, voir [Envoyer un message de test avec le simulateur de SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/getting-started-tutorial.html#getting-started-tutorial-step3) dans le *guide de AWS End User Messaging SMS l'utilisateur*.

## Conception axée sur la redondance
<a name="channels-sms-best-practices-redundancy"></a>

Pour les programmes de messagerie stratégiques, nous vous recommandons de configurer Amazon SNS dans plusieurs Région AWS. Amazon SNS est disponible en plusieurs versions. Régions AWS Pour obtenir la liste des régions où Amazon SNS est disponible, consultez les [Références générales AWS](https://docs.aws.amazon.com/general/latest/gr/sns.html). 

Les numéros de téléphone que vous utilisez pour les messages SMS, y compris les codes courts, les codes longs, les numéros gratuits et les numéros 10DLC, ne peuvent pas être répliqués dans les Régions AWS. Par conséquent, pour utiliser Amazon SNS dans plusieurs régions, vous devez demander des numéros de téléphone distincts dans chaque région où vous souhaitez utiliser Amazon SNS. Par exemple, si vous utilisez un code abrégé pour envoyer des SMS à des destinataires aux États-Unis d'Amérique, vous devez demander des codes abrégés distincts pour Région AWS chacun des messages que vous comptez utiliser.

Dans certains pays, vous pouvez également utiliser plusieurs types de numéros de téléphone pour une redondance accrue. Par exemple, aux États-Unis, vous pouvez demander des codes courts, des numéros 10DLC et des numéros gratuits. Chacun de ces types de numéros de téléphone emprunte un chemin différent vers le destinataire. Le fait de disposer de plusieurs types de numéros de téléphone, qu'ils soient identiques Région AWS ou répartis sur plusieurs Régions AWS, fournit une couche supplémentaire de redondance, ce qui peut contribuer à améliorer la résilience.

## Limites et restrictions pour les SMS
<a name="channels-sms-best-practices-limits"></a>

Pour connaître les limites et restrictions relatives aux [SMS, consultez la section Limites et restrictions relatives aux SMS et MMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/sms-limitations.html) dans le *guide de AWS End User Messaging SMS l'utilisateur*.

## Gestion des mots clés de désabonnement
<a name="channels-sms-best-practices-optout-keywords"></a>

Les destinataires de SMS peuvent utiliser leurs appareils pour se désinscrire des messages en répondant avec un mot clé. Pour de plus amples informations, veuillez consulter [Désactivation de la réception des SMS](sms_manage.md#sms_manage_optout).

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

Utilisez l'action d'API `CreatePool` pour créer un nouveau pool et associer une identité d'origine spécifiée au pool. Pour plus d'informations, consultez [CreatePool](https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_CreatePool.html)la section *Référence des AWS End User Messaging SMS API*.

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

Utilisez l'action `PutKeyword` API pour créer ou mettre à jour une configuration de mots clés sur un numéro de téléphone ou un pool d'origine. Pour plus d'informations, consultez [PutKeyword](https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_PutKeyword.html)la section *Référence des AWS End User Messaging SMS API*.

## Gestion des paramètres des numéros
<a name="channels-sms-best-practices-number-settings"></a>

Pour gérer les paramètres des codes courts et longs dédiés que vous avez demandés au AWS Support et attribués à votre compte, voir [Modifier les fonctionnalités d'un numéro de téléphone avec AWS CLI l'](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-change-capabilitiy.html)entrée *AWS End User Messaging SMS*.

## Limites de caractères des SMS dans Amazon SNS
<a name="channels-sms-limitations-characters"></a>

Chaque SMS peut contenir jusqu’à 140 octets d’informations. Le nombre de caractères que vous pouvez inclure dans un seul message SMS dépend du type de caractères figurant dans le message.

Si votre message utilise uniquement des [caractères du jeu de caractères GSM 03.38](#channels-sms-limitations-characters-gsm-alphabet), également connu sous le nom d’alphabet GSM 7 bits, il peut contenir jusqu’à 160 caractères. Si votre message contient des caractères n’appartenant pas au jeu de caractères GSM 03.38, il peut contenir jusqu’à 70 caractères. Lorsque vous envoyez un message SMS, Amazon SNS détermine automatiquement l'encodage le plus efficace à utiliser.

Lorsqu’un message contient plus que le nombre maximal de caractères, il est fractionné. Lorsqu’un messages est fractionné, chacune de ses parties contient des informations complémentaires sur la partie qui la précède. Lorsque l’appareil du destinataire reçoit des parties de message ainsi fractionnées, il utilise ces informations complémentaires pour s’assurer que toutes les parties du message sont affichées dans le bon ordre. Selon l’opérateur mobile et l’appareil du destinataire, plusieurs messages peuvent être affichés comme un seul message ou comme une séquence de messages séparés. Par conséquent, le nombre de caractères dans chaque partie d’un message est réduit à 153 (pour les messages qui contiennent uniquement des caractères GSM 03.38) ou 67 (pour les messages qui contiennent d’autres caractères). Vous pouvez estimer le nombre de parties que contient votre message avant de l’envoyer à l’aide des outils de calcul de la longueur des SMS, dont plusieurs sont disponibles en ligne. La taille maximale prise en charge pour tout message est de 1 600 caractères GSM ou de 630 caractères non GSM. Pour plus d'informations sur le débit et la taille des messages, consultez [SMS character limits in Amazon Pinpoint](https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-sms-limitations-mps.html) (Limites de caractères des SMS dans Amazon Pinpoint) dans le *Guide de l'utilisateur Amazon Pinpoint*.

Pour afficher le nombre de parties pour chaque message que vous envoyez, vous devez d'abord activer [Event stream settings](https://docs.aws.amazon.com/pinpoint/latest/userguide/settings-event-streams.html) (Paramètres du flux d'événements). Ce faisant, Amazon SNS produit un événement `_SMS.SUCCESS` lorsque le message est remis au fournisseur mobile du destinataire. L’enregistrement d’événement `_SMS.SUCCESS` contient un attribut appelé `attributes.number_of_message_parts`. Cet attribut spécifie le nombre de parties contenues dans le message.

**Important**  
Lorsque vous envoyez un message avec plusieurs parties, vous êtes facturé en fonction du nombre de parties contenues dans le message.

### Jeu de caractères GSM 03.38
<a name="channels-sms-limitations-characters-gsm-alphabet"></a>

Le tableau suivant répertorie tous les caractères qui sont présents dans le jeu de caractères GSM 03.38. Si vous envoyez un message qui inclut uniquement des caractères indiqués dans le tableau suivant, le message peut contenir jusqu’à 160 caractères. 


| Caractères standard 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 | s, sem | h/24, j/7 | y | z | 
| à | Å | å | Ä | ä | Ç | É | é | è | ì | Ñ | ñ | ò | 
| Ø | ø | Ö | ö | ù | Ü | ü | Æ | æ | ß | 0 | 1 | 2 | 
| 3 | 4 | 5 | 6 | 7 | 8 | 9 | & | \$1 | @ | : | , | ¤ | 
| \$1 | = | \$1 | > | \$1 | - | ¡ | ¿ | ( | < | % | . | \$1 | 
| £ | ? | " | ) | § | ; | ' | / | \$1 | ¥ | Δ | Φ | Γ | 
| Λ | Ω | Π | Ψ | Σ | Θ | Ξ |  |  |  |  |  |  | 

Le jeu de caractères GSM 03.38 inclut plusieurs symboles en plus de ceux indiqués dans le tableau précédent. Cependant, chacun de ces caractères est considéré comme deux caractères, car il comprend également un caractère d’échappement invisible :
+ ^
+ \$1
+ \$1
+ \$1
+ [
+ ]
+ \$1
+ \$1
+ €

Enfin, le jeu de caractères GSM 03.38 inclut également les caractères non imprimés suivants :
+ Un caractère espace.
+ Une commande de saut de ligne, ce qui signifie la fin d’une ligne de texte et le début d’une autre.
+ Une commande de retour chariot, qui se déplace au début d’une ligne de texte (généralement après un caractère de saut de ligne).
+ Une commande d’échappement, qui est automatiquement ajoutée pour les caractères de la liste précédente.

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

Cette section contient plusieurs exemples de messages SMS. Pour chaque exemple, elle affiche le nombre total de caractères, ainsi que le nombre de parties de message pour le message.

**Exemple 1 : message long qui ne contient que des caractères de l’alphabet GSM 03.38**  
Le message suivant contient uniquement des caractères figurant dans l’alphabet 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.`

Le message précédent contient 180 caractères, il doit donc être fractionné en plusieurs parties. Lorsqu’un message est fractionné, chacune de ses parties peut contenir 153 caractères GSM 03.38. Par conséquent, ce message est envoyé en 2 parties.

**Exemple 2 : message contenant des caractères multi-octets**  
Le message suivant contient plusieurs caractères chinois, dont aucun n’appartient à l’alphabet GSM 03.38. 

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

Le message précédent contient 71 caractères. Cependant, étant donné que la majorité des caractères du message n’appartiennent pas à l’alphabet GSM 03.38, il est envoyé en deux parties. Chacune d’elles peut contenir un maximum de 67 caractères.

**Exemple 3 : message contenant un seul caractère non GSM**  
Le message suivant contient un seul caractère qui n’appartient pas à l’alphabet GSM 03.38. Dans cet exemple, le caractère est un guillemet simple (’), c’est-à-dire un caractère différent d’une apostrophe ordinaire (’). Les applications de traitement de texte telles que Microsoft Word remplacent souvent automatiquement les apostrophes par des guillemets simples fermants. Si vous rédigez vos messages SMS dans Microsoft Word et que vous les collez dans Amazon SNS, vous devez supprimer ces caractères spéciaux et les remplacer par des apostrophes.

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

Le message précédent contient 130 caractères. Cependant, comme il contient le caractère guillemet simple fermant, qui ne fait pas partie de l’alphabet GSM 03.38, il est envoyé en deux parties.

Si vous remplacez le caractère guillemet simple fermant dans ce message par une apostrophe (qui fait partie de l’alphabet GSM 03.38), le message est envoyé en une seule partie.

# Envoi de notifications push mobiles avec Amazon SNS
<a name="sns-mobile-application-as-subscriber"></a>

Vous pouvez utiliser Amazon SNS pour envoyer des messages de notification push directement aux applications sur les appareils mobiles. Les messages de notification push envoyés à un terminal mobile peuvent apparaître dans l'application mobile sous forme d'alertes, de mises à jour de badges ou d'alertes sonores. 

![\[Présentation des notifications push mobiles Amazon SNS\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/sns-mobile-push-notifications.png)


**Topics**
+ [Comment fonctionnent les notifications utilisateur Amazon SNS](#sns-how-user-notifications-work)
+ [Configuration des notifications push avec Amazon SNS](#sns-user-notifications-process-overview)
+ [Configuration d'une application mobile sur Amazon SNS](mobile-push-send.md)
+ [Utilisation d'Amazon SNS pour les notifications push mobiles](mobile-push-notifications.md)
+ [Attributs de l'application mobile Amazon SNS](sns-msg-status.md)
+ [Notifications d'événements liés aux applications Amazon SNS pour les applications mobiles](application-event-notifications.md)
+ [Actions d'API push mobile](mobile-push-api.md)
+ [Erreurs courantes de l'API push mobile Amazon SNS](mobile-push-api-error.md)
+ [Utilisation de l'attribut Amazon SNS time to live message pour les notifications push mobiles](sns-ttl.md)
+ [Régions prises en charge par l'application mobile Amazon SNS](sns-mobile-push-supported-regions.md)
+ [Bonnes pratiques pour gérer les notifications push mobiles Amazon SNS](mobile-push-notifications-best-practices.md)

## Comment fonctionnent les notifications utilisateur Amazon SNS
<a name="sns-how-user-notifications-work"></a>

Vous envoyez des messages de notification push aux appareils mobiles et aux ordinateurs de bureau, à l'aide de l'un des services de notification push pris en charge suivants : 
+ Amazon Device Messaging (ADM)
+ Service de notification push Apple (APNs) pour iOS et Mac OS X
+ Baidu Cloud Push (Baidu)
+ Messagerie cloud Firebase (FCM)
+ Service de notification push Microsoft pour Windows Phone (MPNS)
+ Services de notification push Windows (WNS)

Les services de notifications push, tels que APNs FCM, maintiennent une connexion avec chaque application et appareil mobile associé enregistrés pour utiliser leur service. Lorsqu'une application et un appareil mobile s'inscrivent, le service de notification push renvoie un jeton d'appareil. Amazon SNS utilise ce jeton d'appareil pour créer un point de terminaison mobile, auquel il peut envoyer directement des messages de notification push. Afin qu'Amazon SNS communique avec les différents services de notification push, soumettez vos informations d'identification de service de notification push à Amazon SNS pour qu'il les utilise en votre nom. Pour de plus amples informations, veuillez consulter [Configuration des notifications push avec Amazon SNS](#sns-user-notifications-process-overview). 

 Outre l'envoi direct de messages de notification push, vous pouvez également utiliser Amazon SNS pour envoyer des messages aux points de terminaison mobiles abonnés à une rubrique. Le concept est le même que l'abonnement d'autres types de point de terminaison, comme Amazon SQS, HTTP/S, e-mail et SMS, à une rubrique, comme décrit dans [Qu'est-ce qu'Amazon SNS ?](welcome.md). La différence réside dans le fait qu'Amazon SNS communique à l'aide des services de notification push, afin que les points de terminaison mobiles abonnés reçoivent les messages de notification push envoyés à la rubrique.

## Configuration des notifications push avec Amazon SNS
<a name="sns-user-notifications-process-overview"></a>

1. [Obtenez les informations d'identification et le jeton de périphérique](sns-prerequisites-for-mobile-push-notifications.md) pour les plates-formes mobiles que vous souhaitez prendre en charge.

1. Utilisez les informations d'identification pour créer un objet d'application de plate-forme (`PlatformApplicationArn`) à l'aide d'Amazon SNS. Pour de plus amples informations, veuillez consulter [Création d'une application de plateforme Amazon SNS](mobile-push-send-register.md).

1. Utilisez les informations d'identification renvoyées pour demander aux plateformes mobiles un jeton de périphérique pour votre application mobile et l'appareil. Le jeton que vous recevez représente votre application mobile et l'appareil.

1. Utilisez le jeton de périphérique et le `PlatformApplicationArn` pour créer un objet de point de terminaison de plate-forme (`EndpointArn`) avec Amazon SNS. Pour de plus amples informations, veuillez consulter [Configuration d'un point de terminaison sur la plateforme Amazon SNS pour les notifications mobiles](mobile-platform-endpoint.md).

1. Utilisez le `EndpointArn` pour [publier un message dans une application sur un appareil mobile](mobile-push-send.md). Pour plus d'informations, consultez [Messagerie directe sur appareil mobile Amazon SNS](mobile-push-notifications.md#mobile-push-send-directmobile) et l'API [Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html) dans la Référence d'API Amazon Simple Notification Service.

# Configuration d'une application mobile sur Amazon SNS
<a name="mobile-push-send"></a>

Cette rubrique décrit comment configurer des applications mobiles à l' AWS Management Console aide des informations décrites dans[Conditions préalables pour les notifications utilisateur Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md).

# Conditions préalables pour les notifications utilisateur Amazon SNS
<a name="sns-prerequisites-for-mobile-push-notifications"></a>

Pour commencer à utiliser les notifications push mobiles Amazon SNS, vous aurez besoin des éléments suivants :
+ Ensemble d'informations d'identification permettant de se connecter à l'un des services de notification push pris en charge : ADM APNs, Baidu, FCM, MPNS ou WNS.
+ Un jeton d'appareil ou un ID d'enregistrement pour l'application mobile et l'appareil.
+ Amazon SNS configuré pour envoyer des messages de notification push aux points de terminaison mobiles.
+ Une application mobile enregistrée et configurée pour utiliser l'un des services de notification push pris en charge.

L'enregistrement de votre application auprès d'un service de notification push nécessite plusieurs étapes. Amazon SNS a besoin de certaines des informations que vous fournissez au service de notification push pour envoyer des messages de notification push directs au point de terminaison mobile. En général, vous avez besoin des informations d'identification requises pour la connexion au service de notification push, d'un jeton d'appareil ou d'un ID d'enregistrement (représentant votre appareil mobile et votre application mobile), que vous avez reçu du service de notification push, et de l'application mobile inscrite auprès du service de notification push. 

La forme exacte des informations d'identification diffère selon les plateformes mobiles, mais dans tous les cas, ces informations d'identification doivent être soumises lors de l'établissement d'une connexion à la plateforme. Un ensemble d'informations d'identification est émis pour chaque application mobile et doit être utilisé pour envoyer un message à une instance de cette application. 

Les noms spécifiques varient en fonction du service de notification push utilisé. Par exemple, lorsque vous l'utilisez APNs comme service de notification push, vous avez besoin d'un *jeton d'appareil*. Parallèlement, avec FCM, l'équivalent du jeton d'appareil est appelé *ID d'enregistrement*. Le *jeton d'appareil* ou l'*ID d'enregistrement* est une chaîne qui est envoyée à l'application par le système d'exploitation de l'appareil mobile. Ils identifient de façon unique une instance d'une application mobile en cours d'exécution sur un appareil mobile spécifique et peuvent être considérés comme les identifiants uniques de cette paire application-appareil. 

Amazon SNS stocke les informations d'identification (plus quelques autres paramètres) sous forme de ressource d'application de plateforme. Les jetons de l'appareil (encore une fois avec quelques paramètres supplémentaires) sont représentés sous forme d'objets appelés *points de terminaison de plate-forme*. Chaque point de terminaison de plateforme appartient à une application de plateforme spécifique, et la communication avec chaque point de terminaison de plateforme est possible à l'aide des informations d'identification qui sont stockées dans son application de plateforme correspondante.

Les sections suivantes incluent les conditions préalables pour chacun des services de notification push pris en charge. Une fois que vous avez obtenu les informations requises, vous pouvez envoyer un message de notification push en utilisant le AWS Management Console ou le push mobile Amazon SNS. APIs Pour de plus amples informations, veuillez consulter [Configuration des notifications push avec Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview). 

# Création d'une application de plateforme Amazon SNS
<a name="mobile-push-send-register"></a>

Pour envoyer des notifications depuis Amazon SNS aux terminaux mobiles, que ce soit directement ou par le biais d'abonnements à un sujet, vous devez d'abord créer une application de plateforme. Après avoir enregistré l'application AWS, vous devez créer un point de terminaison pour l'application et pour l'appareil mobile. Ce point de terminaison permet à Amazon SNS d'envoyer des messages à l'appareil.

**Pour créer une application de plateforme**

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le volet de navigation, sélectionnez **Notifications push**.

1. Dans la section **Platform applications (Applications de plateforme)**, choisissez **Create platform application (Créer une application de plateforme)**.

1. Choisissez votre **Région AWS**. Pour obtenir une liste des Régions AWS dans lesquelles vous pouvez créer des applications mobiles, consultez la section [Régions prises en charge par l'application mobile Amazon SNS](sns-mobile-push-supported-regions.md).

1. Entrez les **informations de candidature** suivantes :
   + **Nom de l'application** : donnez un **nom** à l'application de votre plateforme. Le nom doit comporter entre 1 et 256 caractères et peut contenir des lettres majuscules et minuscules, des chiffres, des traits de soulignement, des traits d'union et des points.
   + **Plateforme de notifications push** : sélectionnez le **service de notification** approprié auprès duquel l'application est enregistrée (par exemple, Apple Push Notification Service (APNs), Firebase Cloud Messaging (FCM)).

1. En fonction de la plateforme que vous avez sélectionnée, vous devrez fournir des informations d'identification spécifiques :
   + Pour **APNs**(Apple Push Notification Service) : choisissez entre une authentification basée sur des **jetons ou une authentification basée sur** des **certificats**.
     + Pour l'authentification basée sur des jetons, téléchargez un **fichier .p8** (généré via Keychain Access).
     + Pour l'authentification par certificat, téléchargez un **fichier .p12** (également exporté depuis Keychain Access).
   + Pour **FCM** (Firebase Cloud Messaging) : entrez la **clé du serveur** depuis la console Firebase.
   + **Pour les **autres plateformes** (telles que ADM ou GCM), entrez les **clés d'API ou les informations d'identification** correspondantes.**

1. Après avoir saisi les informations nécessaires, choisissez **Créer une application de plateforme**. Cette action enregistre l'application auprès d'Amazon SNS et crée l'objet d'application de plateforme correspondant.

1. Lors de la création, Amazon SNS génère et renvoie un ([https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html)Amazon Resource Name). Cet ARN identifie de manière unique l'application de votre plateforme et est utilisé lors de la création de points de terminaison pour les appareils mobiles.

# Configuration d'un point de terminaison sur la plateforme Amazon SNS pour les notifications mobiles
<a name="mobile-platform-endpoint"></a>

Lorsqu'une application et un appareil mobile s'enregistrent auprès d'un service de notification push (tel que APNs Firebase Cloud Messaging), le service de notification push renvoie un jeton d'appareil. Amazon SNS utilise ce jeton d'appareil pour créer un point de terminaison de plateforme, qui sert de cible pour envoyer des messages de notification push directs à l'application installée sur l'appareil. Le point de terminaison de la plateforme sert de pont et achemine les messages envoyés par Amazon SNS vers le service de notification push pour qu'ils soient transmis à l'appareil mobile correspondant. Pour plus d’informations, consultez [Conditions préalables pour les notifications utilisateur Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md) et [Configuration des notifications push avec Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview).

## Comprendre les jetons des appareils et les points de terminaison de la plateforme
<a name="device-token-platform-endpoint"></a>

Un jeton d'appareil identifie de manière unique un appareil mobile enregistré auprès d'un service de notification push (par exemple APNs, Firebase Cloud Messaging). Lorsqu'une application s'enregistre auprès du service de notification push, elle génère un jeton spécifique à cette application et à cet appareil. Amazon SNS utilise ce jeton d'appareil pour créer un point de terminaison de plateforme dans l'application de plateforme correspondante.

Le point de terminaison de la plateforme permet à Amazon SNS d'envoyer des messages de notification push à l'appareil via le service de notification push, en maintenant la connexion entre votre application et l'appareil de l'utilisateur.

## Création d'un point de terminaison de plateforme
<a name="mobile-platform-endpoint-create"></a>

Pour envoyer des notifications à une application à l'aide d'Amazon SNS, le jeton d'appareil de cette application doit d'abord être inscrit auprès d'Amazon SNS grâce à l'appel de l'action de création d'un point de terminaison de plateforme. Cette action utilise l'Amazon Resource Name (ARN) de l'application de plateforme et le jeton d'appareil en tant que paramètres et renvoie l’ARN du point de terminaison de plateforme créé.

L'[https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)action effectue les opérations suivantes :
+ Si le point de terminaison de la plateforme existe déjà, ne le créez pas à nouveau. Renvoyez à l'appelant l'ARN du point de terminaison de plateforme existant.
+ Si le point de terminaison de la plateforme avec le même jeton d'appareil mais des paramètres différents existe déjà, ne le créez pas à nouveau. Envoyez une exception à l'appelant.
+ Si le point de terminaison de la plateforme n'existe pas, créez-le. Renvoyez à l'appelant l'ARN du point de terminaison de plateforme nouvellement créé.

Vous ne devez pas appeler l'action de création de point de terminaison de plateforme à chaque démarrage d'une application, car cette approche ne fournit pas toujours un point de terminaison en état de fonctionnement. Cela peut se produire, par exemple, lorsqu'une application est désinstallée et réinstallée sur le même appareil et que son point de terminaison existe déjà mais est désactivé. Un processus d'inscription réussi doit effectuer les opérations suivantes :

1. S'assurer qu'un point de terminaison de plateforme existe pour cette combinaison application-appareil.

1. Vérifier que le jeton d'appareil dans le point de terminaison de plateforme est le jeton d'appareil valide le plus récent.

1. S'assurer que le point de terminaison de plateforme est activé et prêt à être utilisé.

## Code fictif
<a name="mobile-platform-endpoint-pseudo-code"></a>

Le pseudo-code suivant décrit une pratique recommandée pour la création d'un point de terminaison de plateforme en état de fonctionnement, actuel et activé dans une large gamme de conditions de démarrage. Cette approche fonctionne s’il s'agit de l’enregistrement initial de l'application, si le point de terminaison de plateforme pour cette application existe déjà et si le point de terminaison de plateforme est activé, possède le jeton d'appareil correct, etc. Il n'est pas risqué de l'appeler plusieurs fois d'affilée, car il ne créera pas de points de terminaison de plateforme en double ou ne modifiera pas un point de terminaison de plateforme existant s'il est déjà à jour et activé.

```
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
```

Cette approche peut servir chaque fois que l'application veut s'enregistrer ou se ré-enregistrer. Elle peut également être utilisée lors de la notification d'une modification du jeton d'appareil à Amazon SNS. Dans ce cas, il vous suffit d'appeler l'action avec la dernière valeur de jeton d'appareil. Voici quelques points à prendre en compte à propos de cette approche :
+ Il existe deux cas dans lesquels elle peut appeler l'action de création de point de terminaison de plateforme. Elle peut être appelée au tout début, lorsque l'application ne connaît pas son propre ARN de point de terminaison de plateforme, comme cela se produit lors d'une inscription initiale. Il est également appelé si l'appel `GetEndpointAttributes` d'action initial échoue avec une exception introuvable, comme cela se produirait si l'application connaît son ARN de point de terminaison mais qu'il a été supprimé.
+ L'`GetEndpointAttributes`action est appelée pour vérifier l'état du point de terminaison de la plate-forme même si le point de terminaison de la plate-forme vient d'être créé. Cela se produit lorsque le point de terminaison de plateforme existe déjà mais est désactivé. Dans ce cas, l'action de création de point de terminaison de plateforme réussit, mais n'active pas le point de terminaison de plateforme. Vous devez donc vérifier l'état du point de terminaison de plateforme avant d'indiquer la réussite.

## AWS Exemple de SDK
<a name="mobile-platform-endpoint-sdk-examples"></a>

Le code suivant montre comment implémenter le pseudo code précédent à l'aide des clients Amazon SNS fournis par le. AWS SDKs

Pour utiliser un AWS SDK, vous devez le configurer avec vos informations d'identification. Pour plus d'informations, consultez [la section Les fichiers de configuration et d'identification partagés](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) dans le *guide de référence des outils AWS SDKs et des outils*.

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

**AWS CLI**  
**Pour créer un point de terminaison d’application de plateforme**  
L’exemple `create-platform-endpoint` suivant crée un point de terminaison pour l’application de plateforme spécifiée à l’aide du jeton spécifié.  

```
aws sns create-platform-endpoint \
    --platform-application-arn arn:aws:sns:us-west-2:123456789012:app/GCM/MyApplication \
    --token EXAMPLE12345...
```
Sortie :  

```
{
      "EndpointArn": "arn:aws:sns:us-west-2:1234567890:endpoint/GCM/MyApplication/12345678-abcd-9012-efgh-345678901234"
}
```

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

**SDK pour Java 2.x**  
 Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code 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());
        }
    }
}
```

------

 Pour de plus amples informations, veuillez consulter [Actions d'API push mobile](mobile-push-api.md).

## Résolution des problèmes
<a name="mobile-platform-endpoint-problems"></a>

### Appel répété de la création du point de terminaison de plateforme avec un jeton d'appareil obsolète
<a name="mobile-platform-endpoint-problems-outdated"></a>

En particulier pour les points de terminaison FCM, vous pensez peut-être qu'il est préférable de stocker le premier jeton d'appareil émis par l'application, puis d'appeler le point de terminaison de la plateforme de création avec ce jeton d'appareil à chaque fois que l'application démarre. Cela peut sembler correct dans la mesure où l'application n'a pas à gérer l'état du jeton d'appareil et où Amazon SNS met automatiquement à jour le jeton d'appareil à l'aide de sa valeur la plus récente. Cependant, cette solution présente un certain nombre de problèmes graves :
+ Amazon SNS s'appuie sur les retours de FCM pour remplacer les jetons d'appareil expirés par de nouveaux jetons d'appareil. FCM conserve les informations concernant les anciens jetons d'appareil un certain temps, mais pas indéfiniment. Une fois que FCM a oublié la connexion entre l'ancien jeton d'appareil et le nouveau, Amazon SNS ne peut plus mettre à jour le jeton d'appareil stocké dans le point de terminaison de plateforme avec la valeur correcte ; au lieu de cela, il désactive simplement le point de terminaison de plateforme.
+ L'application de plateforme contient plusieurs points de terminaison de plateforme correspondant au même jeton d'appareil.
+ Amazon SNS impose un quota au nombre de points de terminaison de plateforme qui peuvent être créés en commençant par le même jeton d'appareil. Enfin, la création de nouveaux points de terminaison échoue avec une exception de paramètre non valide et le message d'erreur suivant : « This endpoint is already registered with a different token (Ce point de terminaison est déjà enregistré avec un jeton différent) ».

Pour plus d'informations sur la gestion des points de terminaison FCM, consultez. [Gestion des points de terminaison Firebase Cloud Messaging par Amazon SNS](sns-fcm-endpoint-management.md)

### Réactivation d'un point de terminaison de plateforme associé à un jeton d'appareil non valide
<a name="mobile-platform-endpoint-problems-invalid"></a>

Lorsqu'une plateforme mobile (telle que APNs FCM) informe Amazon SNS que le jeton d'appareil utilisé dans la demande de publication n'était pas valide, Amazon SNS désactive le point de terminaison de plateforme associé à ce jeton d'appareil. Amazon SNS rejettera ensuite les publications ultérieures sur ce jeton d'appareil. Bien que vous puissiez penser qu'il est préférable de simplement réactiver le point de terminaison de plateforme et de continuer la publication, dans la plupart des cas, cela ne fonctionnera pas : les messages qui sont publiés ne sont pas diffusés et le point de terminaison de plateforme est à nouveau désactivé peu de temps après.

En effet, cela vient du fait que le jeton d'appareil associé au point de terminaison de plateforme est réellement non valide. Les diffusions à ce point de terminaison ne peuvent pas réussir, car il ne correspond plus à aucune application installée. Lors de la prochaine publication, la plateforme mobile informera à nouveau Amazon SNS que le jeton d'appareil n'est pas valide et Amazon SNS désactivera à nouveau le point de terminaison de plateforme.

Pour réactiver un point de terminaison de plateforme désactivé, ce dernier doit être associé à un jeton d'appareil valide (avec un appel d'action de définition d'attributs de point de terminaison), puis activé. Les diffusions à ce point de terminaison de plateforme ne réussiront qu'à ce moment-là. La seule fois où la réactivation d'un point de terminaison de plateforme fonctionne sans mise à jour de son jeton d'appareil est lorsqu'un jeton d'appareil associé à ce point de terminaison qui était non valide redevient valide. Cela peut se produire, par exemple, lorsqu'une application a été désinstallée, puis réinstallée sur le même appareil mobile et reçoit le même jeton d'appareil. L'approche présentée ci-dessus effectue cette opération, en s'assurant de ne réactiver un point de terminaison de plateforme qu'après avoir vérifié que le jeton d'appareil qui lui est associé est le dernier en date disponible.

# Intégration de jetons d'appareils à Amazon SNS pour les notifications mobiles
<a name="mobile-push-send-devicetoken"></a>

Lorsque vous enregistrez pour la première fois une application et un appareil mobile auprès d'un service de notification, tel que Apple Push Notification Service (APNs) et Firebase Cloud Messaging (FCM), les jetons d'appareil ou l'enregistrement IDs sont renvoyés par le service. Ils tokens/IDs sont ajoutés à Amazon SNS afin de créer un point de terminaison pour l'application et l'appareil, à l'aide de l'[https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html)API. Une fois le point de terminaison créé, un [https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html)est renvoyé, qu'Amazon SNS utilise pour diriger les notifications vers l'application/l'appareil approprié.

Vous pouvez ajouter des jetons d'appareil ou un enregistrement IDs sur Amazon SNS de la manière suivante :
+ Ajoutez manuellement un seul jeton via AWS Management Console
+ Chargement de plusieurs jetons à l'aide de l'API [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)
+ Enregistrez des jetons pour les futurs appareils

****Pour ajouter manuellement un jeton d'appareil ou un identifiant d'enregistrement****

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le volet de navigation, sélectionnez **Notifications push**.

1. Dans la section **Applications de plate-forme**, sélectionnez votre application, puis choisissez **Modifier**. Si vous n'avez pas encore créé d'application de plateforme, suivez le [Création d'une application de plateforme Amazon SNS](mobile-push-send-register.md) guide pour le faire dès maintenant.

1. Choisissez **Créer un point de terminaison**.

1. Dans le champ **Endpoint Token**, entrez le **jeton** ou l'**ID d'enregistrement**, selon le service de notification que vous utilisez (par exemple, l'ID d'enregistrement FCM).

1. (Facultatif) Entrez des données supplémentaires dans le champ **Données utilisateur**. Ces données doivent être codées en UTF-8 et être inférieures à 2 Ko.

1. Choisissez **Créer un point de terminaison**.

Une fois le point de terminaison créé, vous pouvez envoyer des messages directement à l'appareil mobile ou aux appareils mobiles abonnés à une rubrique Amazon SNS.

****Pour télécharger plusieurs jetons à l'aide de l'`CreatePlatformEndpoint`API****

Les étapes suivantes montrent comment utiliser l'exemple d'application Java (`bulkupload`package) fourni par AWS pour télécharger plusieurs jetons (jetons d'appareil ou enregistrement IDs) sur Amazon SNS. Vous pouvez utiliser cet exemple d'application pour vous familiariser avec le chargement des jetons existants. 
**Note**  
Les étapes suivantes utilisent l'IDE Eclipse Java. Les étapes supposent que vous avez installé le AWS SDK pour Java et que vous disposez des informations d'identification AWS de sécurité pour votre Compte AWS. Pour de plus amples informations, veuillez consulter [AWS SDK pour Java](https://aws.amazon.com/sdkforjava/). Pour plus d'informations sur les informations d'identification, consultez les [informations d'identification AWS de sécurité](https://docs.aws.amazon.com/general/latest/gr/getting-aws-sec-creds.html) dans le *guide de l'utilisateur IAM*. 

1. Téléchargez et décompressez le fichier [snsmobilepush.zip](samples/snsmobilepush.zip). 

1. Créez un nouveau **projet Java** dans Eclipse et importez le `SNSSamples` dossier dans le projet. 

1. Téléchargez la bibliothèque [OpenCSV](http://sourceforge.net/projects/opencsv/) et ajoutez-la au chemin de compilation.

1. Dans le `BulkUpload.properties` fichier, spécifiez les éléments suivants : 
   + Votre `ApplicationArn` (ARN de l'application de plateforme).
   + Le chemin absolu vers votre fichier CSV contenant les jetons.
   + Enregistrement des noms de fichiers pour les jetons réussis et échoués. Par exemple : `goodTokens.csv` et `badTokens.csv`.
   + (Facultatif) Configuration du délimiteur, du guillemet et du nombre de fils à utiliser.

   Votre `BulkUpload.properties` terminé devrait ressembler à ce qui suit :

   ```
   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.  Exécutez l'application **BatchCreatePlatformEndpointSample.java** pour télécharger les jetons sur Amazon SNS. Les jetons téléchargés avec succès seront connectés`goodTokens.csv`, tandis que les jetons mal formés seront connectés. `badTokens.csv`

**Pour enregistrer des jetons provenant d'appareils pour de futures installations d'applications**

Deux options s'offrent à vous pour ce processus :

**Utiliser le service Amazon Cognito**  
Votre application mobile peut utiliser des informations d'identification de sécurité temporaires pour créer des points de terminaison. Il est recommandé d'utiliser Amazon Cognito pour générer des informations d'identification temporaires. Pour plus d'informations, consultez le guide du *[développeur Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/)*   
Pour suivre [les inscriptions](application-event-notifications.md) aux applications, utilisez les événements Amazon SNS pour recevoir des notifications lors de la création d'un nouveau point de terminaison ARNs .  
Vous pouvez également utiliser l'[https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html)API pour récupérer la liste des points de terminaison enregistrés.

**Utilisation d'un serveur proxy**  
Si l'infrastructure de votre application prend déjà en charge l'enregistrement des appareils lors de l'installation, vous pouvez utiliser votre serveur comme proxy. Il transmettra les jetons de l'appareil à Amazon SNS via l'[https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)API.  
L'ARN du point de terminaison créé par Amazon SNS sera renvoyé et pourra être stocké par votre serveur pour la publication de futurs messages.

# Amazon SNS Méthodes d'authentification par notification push Apple
<a name="sns-apple-authentication-methods"></a>

Vous pouvez autoriser Amazon SNS à envoyer des notifications push à votre appli iOS ou macOS en communiquant des informations qui vous identifient en tant que développeur de l'application. Pour vous authentifier, fournissez une *clé* ou un *certificat* [ lors de la création d'une application de plateforme](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html), que vous pouvez obtenir à partir de votre compte Apple Developer.

**Clé de signature de jeton**  
Clé de signature privée utilisée par Amazon SNS pour signer les jetons d'authentification Apple Push Notification Service (APNs).  
Si vous fournissez une clé de signature, Amazon SNS utilise un jeton pour s'authentifier APNs pour chaque notification push que vous envoyez. Avec votre clé de signature, vous pouvez envoyer des notifications push aux environnements de APNs production et de sandbox.  
Votre clé de signature n'expire pas, et vous pouvez l’utiliser pour plusieurs appli. Pour plus d'informations, consultez la section [Communiquer avec APNs des jetons d'authentification](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_token-based_connection_to_apns) dans la section d'**aide relative au compte développeur** du site Web d'Apple.

**Certificat**  
Certificat TLS utilisé par Amazon SNS pour s'authentifier lorsque vous envoyez APNs des notifications push. Procurez-vous le certificat à partir de votre compte Apple Developer.  
Les certificats prennent fin au bout d'un an. Dans ce cas, vous devez créer un certificat et le fournir à Amazon SNS. Pour plus d'informations, consultez la section [Etablissement d'une connexion basée sur des certificats APNs](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns) sur le site Web des développeurs Apple.

**Pour gérer les APNs paramètres à l'aide de la console AWS de gestion**

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le volet de navigation, sélectionnez **Notifications push**.

1. Dans la section **Applications de plate-forme**, sélectionnez l'**application** dont vous souhaitez modifier les APNs paramètres, puis choisissez **Modifier**. Si vous n'avez pas encore créé d'application de plateforme, suivez le [Création d'une application de plateforme Amazon SNS](mobile-push-send-register.md) guide pour le faire dès maintenant.

1. Choisissez **Modifier** pour modifier les paramètres de votre application de plateforme.

1. Dans la section **Type d'authentification**, choisissez l'une des options suivantes :
   + **Authentification basée sur des jetons** (recommandée pour les intégrations modernes APNs )
   + **Authentification basée sur des certificats** (ancienne méthode)

1. Configurez vos **informations d'identification** en fonction du type d'authentification :
   + **Pour l'authentification basée sur des jetons :**
     + Téléchargez le **fichier .p8**, qui est la clé de signature du jeton d'authentification que vous avez téléchargée depuis votre compte Apple Developer.
     + Entrez l'**identifiant de la clé de signature** que vous trouverez dans votre compte Apple Developer. Accédez à **Certificats IDs****, profils**, **clés**, puis sélectionnez la **clé** que vous souhaitez utiliser.
     + Fournissez l'**identifiant d'équipe** de votre compte Apple Developer. Vous pouvez le trouver sur la page d'adhésion.
     + Entrez l'**identifiant du bundle** attribué à votre application. Vous pouvez le trouver sous Certificats IDs et profils, App IDs.
   + **Pour l'authentification basée sur des certificats :**
     + Téléchargez le **fichier .p12** pour votre certificat TLS. Ce fichier peut être exporté depuis Keychain Access sur macOS après avoir téléchargé le certificat depuis votre compte Apple Developer.
     + Si vous avez attribué un **mot de passe** à votre certificat .p12, saisissez-le ici.

1. Après avoir saisi les informations d'identification nécessaires, choisissez **Enregistrer les modifications** pour mettre à jour les paramètres.

# Configuration de l'authentification de l'intégration d'Amazon SNS avec Firebase Cloud Messaging
<a name="sns-fcm-authentication-methods"></a>

Cette rubrique explique comment obtenir les informations d'identification de l'API FCM (HTTP v1) requises auprès de Google pour les utiliser avec l' AWS API, AWS CLI et le AWS Management Console.

**Important**  
26 mars 2024 — Amazon SNS prend en charge l'API FCM HTTP v1 pour les appareils Apple et les destinations Webpush. Nous vous recommandons de migrer vos applications push mobiles existantes vers la dernière API HTTP v1 de FCM au plus tard le 1er juin 2024 afin d'éviter toute interruption des applications.  
18 janvier 2024 — Amazon SNS a introduit la prise en charge de l'API FCM HTTP v1 pour l'envoi de notifications push mobiles aux appareils Android.  
20 juin 2023 — Google a déconseillé son ancienne API HTTP Firebase Cloud Messaging (FCM). Amazon SNS prend désormais en charge la livraison vers tous les types d'appareils à l'aide de l'API FCM HTTP v1. Nous vous recommandons de migrer vos applications push mobiles existantes vers la dernière API HTTP v1 de FCM au plus tard le 1er juin 2024 pour éviter toute interruption.

Vous pouvez autoriser Amazon SNS à envoyer des notifications push à vos applications en communiquant des informations qui vous identifient en tant que développeur de l’application. Pour vous authentifier, fournissez une **clé d'API** ou un **jeton** [lors de la création d'une application de plateforme](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html). Vous pouvez obtenir les informations suivantes depuis votre [console d'application Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds) :

**Clé d'API**  
La clé d'API est une information d'identification utilisée lors de l'appel de l'ancienne API de Firebase. Le FCM Legacy APIs sera supprimé par Google le 20 juin 2024. Si vous utilisez actuellement une clé d'API comme information d'dentification de plateforme, vous pouvez mettre à jour les informations d'identification de la plateforme en sélectionnant l'option **Jeton** et en téléchargeant le fichier JSON associé pour votre application Firebase.

**Jeton**  
Un jeton d'accès de courte durée est utilisé lors de l'appel de l'API HTTP v1. Il s'agit de l'API suggérée par Firebase pour envoyer des notifications push. Afin de générer des jetons d'accès, Firebase fournit aux développeurs un ensemble d'informations d'identification sous la forme d'un fichier de clé privée (également appelé fichier service.json).

## Prérequis
<a name="sns-fcm-authentication-prerequisite"></a>

Vous devez obtenir vos informations d'identification FCM service.json pour pouvoir gérer les paramètres FCM dans Amazon SNS. Pour obtenir vos informations d'identification service.json, consultez la section [Migrer de l'ancienne version de FCM APIs vers HTTP v1](https://firebase.google.com/docs/cloud-messaging/migrate-v1) dans la documentation de Google Firebase.

## Gestion des paramètres FCM à l'aide de la CLI
<a name="sns-fcm-authentication-api"></a>

Vous pouvez créer des notifications push FCM à l'aide de l' AWS API. Le nombre et la taille des ressources Amazon SNS d'un AWS compte sont limités. Pour plus d'informations, consultez la section [Points de terminaison et quotas Amazon Simple Notification Service](https://docs.aws.amazon.com/general/latest/gr/sns.html) dans le *Références générales AWS Guide*.

**Pour créer une notification push FCM associée à une rubrique AWS Amazon SNS (API)**  
Lorsque vous utilisez des informations d'identification de type **clé**, les données `PlatformCredential` se présentent sous forme d'une `API key`. Lorsque vous utilisez des informations d'identification de type **jeton**, les données `PlatformCredential` se présentent sous forme d'un fichier de clé privée au format JSON :
+ [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)

**Pour récupérer un type d'identifiant FCM pour une rubrique Amazon SNS (API) existante AWS**  
Récupère le type d'information d'identification `"AuthenticationMethod": "Token"` ou ` "AuthenticationMethod": "Key"` :
+ [GetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetPlatformApplicationAttributes.html)

**Pour définir un attribut FCM pour une rubrique AWS Amazon SNS (API) existante**  
Définit l'attribut FCM :
+ [SetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html)

## Gestion des paramètres FCM à l'aide de la console
<a name="sns-fcm-authentication-cli"></a>

Vous pouvez créer des notifications push FCM à l'aide de la AWS Command Line Interface (CLI). Le nombre et la taille des ressources Amazon SNS d'un AWS compte sont limités. Pour plus d'informations, consultez [Points de terminaison et quotas Amazon Simple Notification Service](https://docs.aws.amazon.com/general/latest/gr/sns.html). 

**Pour créer une notification push FCM avec une rubrique Amazon SNS (AWS CLI)**  
Lorsque vous utilisez des informations d'identification de type **clé**, les données `PlatformCredential` se présentent sous forme d'une `API key`. Lorsque vous utilisez des informations d'identification de type **jeton**, les données `PlatformCredential` se présentent sous forme d'un fichier de clé privée au format JSON. Lorsque vous utilisez la AWS CLI, le fichier doit être au format chaîne et les caractères spéciaux doivent être ignorés. Pour formater correctement le fichier, Amazon SNS recommande d'utiliser la commande suivante : `SERVICE_JSON=`jq @json <<< cat service.json``
+ [create-platform-application](https://docs.aws.amazon.com/cli/latest/reference/sns/create-platform-application.html)

**Pour récupérer un type d'information d'identification FCM pour une rubrique Amazon SNS existante (AWS CLI)**  
Récupère le type d'information d'identification `"AuthenticationMethod": "Token"` ou ` "AuthenticationMethod": "Key"` :
+ [get-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/get-platform-application-attributes.html)

**Pour définir un attribut FCM pour une rubrique Amazon SNS existante (AWS CLI)**  
Définit l'attribut FCM :
+ [set-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/set-platform-application-attributes.html)

## Gestion des paramètres FCM (console)
<a name="sns-fcm-authentication-console"></a>

Suivez les étapes suivantes pour saisir et gérer vos informations d'identification Firebase Cloud Messaging (FCM) dans Amazon SNS.

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le volet de navigation, sélectionnez **Notifications push**.

1. Dans la section **Applications de plate-forme**, sélectionnez l'**application de plate-forme FCM** dont vous souhaitez modifier les informations d'identification, puis choisissez **Modifier**.

1. Dans la section **Informations d'identification de Firebase Cloud Messaging**, choisissez l'une des options suivantes :
   + **Authentification basée sur des jetons** (méthode recommandée) : téléchargez le **fichier de clé privée** (JSON) que vous avez téléchargé depuis la console Firebase. Ce fichier contient les informations d'identification nécessaires pour générer des jetons d'accès de courte durée pour les notifications FCM. Pour obtenir ce fichier, procédez comme suit :

     1. Accédez à la [console de votre application Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds).

     1. Dans les **paramètres du projet**, sélectionnez **Cloud Messaging**.

     1. Téléchargez le fichier JSON de **clé privée** (à utiliser dans la méthode d'authentification basée sur des jetons).
   + **Authentification par clé d'API** — Si vous préférez utiliser l'ancienne méthode d'authentification par clé d'API, entrez la **clé d'API Google** dans le champ prévu à cet effet. Pour obtenir ce fichier, procédez comme suit :

     1. Accédez à la [console de votre application Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds).

     1. Dans **les paramètres du projet**, sélectionnez **Cloud Messaging**.

     1. Copiez la **clé du serveur** (clé API) à utiliser pour envoyer des notifications.

1. Lorsque vous avez terminé, choisissez **Enregistrer les modifications**.

**Voir aussi**
+ [Utilisation des charges utiles de Google Firebase Cloud Messaging v1 dans Amazon SNS](sns-fcm-v1-payloads.md)

# Gestion des points de terminaison Firebase Cloud Messaging par Amazon SNS
<a name="sns-fcm-endpoint-management"></a>

## Gestion et maintenance des jetons d'appareils
<a name="sns-managing-device-tokens"></a>

Vous pouvez garantir la délivrabilité des notifications push de votre application mobile en suivant ces étapes :

1. Stockez tous les jetons de l'appareil, le point de terminaison ARNs Amazon SNS correspondant et les horodatages sur votre serveur d'applications.

1. Supprimez tous les jetons périmés et supprimez le point de terminaison Amazon ARNs SNS correspondant.

Au démarrage initial de votre application, vous recevrez un jeton d'appareil (également appelé jeton d'enregistrement) pour l'appareil. Ce jeton d'appareil est émis par le système d'exploitation de l'appareil et est lié à votre application FCM. Une fois que vous avez reçu ce jeton d'appareil, vous pouvez l'enregistrer auprès d'Amazon SNS en tant que point de terminaison de plateforme. Nous vous recommandons de stocker le jeton de l'appareil, l'ARN du point de terminaison de la plateforme Amazon SNS et l'horodatage en les enregistrant sur votre serveur d'applications ou sur un autre magasin persistant. Pour configurer votre application FCM afin de récupérer et de stocker les jetons d'appareil, consultez la section [Récupérer et stocker les jetons d'enregistrement](https://firebase.google.com/docs/cloud-messaging/manage-tokens#retrieve-and-store-registration-tokens) dans la documentation *Firebase* de Google.

Il est important que vous conserviez up-to-date les jetons. Les jetons de l'appareil de votre utilisateur peuvent changer dans les conditions suivantes :

1. L'application mobile est restaurée sur un nouvel appareil.

1. L'utilisateur désinstalle ou met à jour l'application.

1. L'utilisateur efface les données de l'application.

Lorsque le jeton de votre appareil change, nous vous recommandons de mettre à jour le point de terminaison Amazon SNS correspondant avec le nouveau jeton. Cela permet à Amazon SNS de poursuivre la communication avec l'appareil enregistré. Vous pouvez le faire en implémentant le pseudo code suivant dans votre application mobile. Il décrit une pratique recommandée pour créer et gérer des points de terminaison de plateforme activés. Cette approche peut être exécutée à chaque démarrage des applications mobiles ou sous forme de tâche planifiée en arrière-plan.

### Code fictif
<a name="sns-device-token-pseudo-code"></a>

Utilisez le pseudo-code FCM suivant pour gérer et gérer les jetons de l'appareil.

```
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
```

Pour en savoir plus sur les exigences relatives à la mise à [jour des jetons, consultez la section Mettre à jour régulièrement](https://firebase.google.com/docs/cloud-messaging/manage-tokens#update-tokens-on-a-regular-basis) les jetons dans la documentation *Firebase* de Google.

## Détection de jetons non valides
<a name="sns-detecting-invalid-tokens"></a>

Lorsqu'un message est envoyé à un point de terminaison FCM v1 avec un jeton d'appareil non valide, Amazon SNS reçoit l'une des exceptions suivantes :
+ `UNREGISTERED`(HTTP 404) — Lorsqu'Amazon SNS reçoit cette exception, vous recevez un événement d'échec de livraison avec un identifiant `FailureType` de`InvalidPlatformToken`, et un *jeton de plateforme `FailureMessage` of associé au point de terminaison n'est pas valide*. Amazon SNS désactivera le point de terminaison de votre plateforme en cas d'échec d'une livraison, à cette exception près.
+ `INVALID_ARGUMENT`(HTTP 400) — Lorsqu'Amazon SNS reçoit cette exception, cela signifie que le jeton de l'appareil ou la charge utile du message n'est pas valide. Pour plus d'informations, consultez [ErrorCode](https://firebase.google.com/docs/reference/fcm/rest/v1/ErrorCode)la documentation *Firebase* de Google.

Comme il `INVALID_ARGUMENT` peut être renvoyé dans l'un ou l'autre de ces cas, Amazon SNS renverra un « de »`InvalidNotification`, et le *corps `FailureType` de notification « `FailureMessage` of » n'est* pas valide. Lorsque vous recevez cette erreur, vérifiez que votre charge utile est correcte. Si c'est correct, vérifiez que le jeton de l'appareil l'est up-to-date. Amazon SNS ne désactive pas le point de terminaison de votre plateforme en cas d'échec d'une livraison, à cette exception près.

Un autre cas où vous rencontrerez un échec de `InvalidPlatformToken` livraison est lorsque le jeton de l'appareil enregistré n'appartient pas à l'application qui tente d'envoyer ce message. Dans ce cas, Google renverra une *erreur SENDER\$1ID\$1MISMATCH*. Amazon SNS désactivera le point de terminaison de votre plateforme en cas d'échec d'une livraison, à cette exception près.

Tous les codes d'erreur observés reçus de l'API FCM v1 sont disponibles CloudWatch lorsque vous configurez l'[enregistrement de l'état de livraison](topics-attrib.md) pour votre application. 

Pour recevoir les événements de livraison de votre application, consultez[Événements d'application disponibles](application-event-notifications.md#application-event-notifications-events).

## Supprimer les jetons périmés
<a name="sns-removing-stale-tokens"></a>

Les jetons sont considérés comme périmés une fois que les envois de messages au terminal commencent à échouer. Amazon SNS définit ces jetons périmés comme des points de terminaison désactivés pour votre application de plateforme. Lorsque vous publiez sur un point de terminaison désactivé, Amazon SNS renvoie un `EventDeliveryFailure` événement avec le point de terminaison `FailureType` of`EndpointDisabled`, et le *point `FailureMessage` de terminaison est* désactivé. Pour recevoir les événements de livraison de votre application, consultez[Événements d'application disponibles](application-event-notifications.md#application-event-notifications-events).

Lorsque vous recevez cette erreur d'Amazon SNS, vous devez supprimer ou mettre à jour le jeton périmé dans l'application de votre plateforme.

# Utilisation d'Amazon SNS pour les notifications push mobiles
<a name="mobile-push-notifications"></a>

 Cette section décrit comment envoyer un message de notification push mobile.

## Publier dans une rubrique
<a name="mobile-push-send-topicmobile"></a>

Vous pouvez également utiliser Amazon SNS pour envoyer des messages à des points de terminaison mobiles abonnés à une rubrique. Le concept est le même que l'abonnement d'autres types de point de terminaison, comme Amazon SQS, HTTP/S, e-mail et SMS, à une rubrique, comme décrit dans [Qu'est-ce qu'Amazon SNS ?](welcome.md). La différence est qu'Amazon SNS communique via des services de notification tels que Apple Push Notification Service (APNS) et Google Firebase Cloud Messaging (FCM). Les points de terminaison mobiles abonnés reçoivent les notifications envoyées à la rubrique grâce au service de notification. 

## Messagerie directe sur appareil mobile Amazon SNS
<a name="mobile-push-send-directmobile"></a>

Vous pouvez envoyer des messages de notification push Amazon SNS directement à un point de terminaison qui représente une application sur un appareil mobile. 

**Pour envoyer directement un message**

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le panneau de navigation, choisissez **Push notifications** (Notifications Push).

1. Sur la page **des notifications push mobiles**, dans la section **Applications de la plateforme**, choisissez le nom de l'application, par exemple***MyApp***.

1. Sur la ***MyApp*** page, dans la section **Points de terminaison**, choisissez un point de terminaison, puis choisissez **Publier le message**.

1. Sur la page **Publier un message vers un point de terminaison**, saisissez le message qui s'affiche dans l'application sur l'appareil mobile, puis choisissez **Publier un message**.

   Amazon SNS envoie le message de notification à la plateforme de notification qui, à son tour, envoie le message à l'application.

# Publication de notifications Amazon SNS avec des charges utiles spécifiques à la plate-forme
<a name="sns-send-custom-platform-specific-payloads-mobile-devices"></a>

Vous pouvez utiliser Amazon SNS AWS Management Console ou Amazon APIs pour envoyer des messages personnalisés avec des charges utiles spécifiques à la plate-forme vers des appareils mobiles. Pour plus d'informations sur l'utilisation d'Amazon SNS APIs, consultez la section [Actions d'API push mobile](mobile-push-api.md) et le `SNSMobilePush.java` fichier dans. `[snsmobilepush.zip](samples/snsmobilepush.zip)` 

## Envoi de messages au format JSON
<a name="mobile-push-send-json"></a>

Lors de l'envoi de charges utiles propres à une plateforme, les données doivent être formatées en tant que chaînes de paire valeur clé JSON, avec les guillemets dans une séquence d'échappement.

Les exemples suivants montrent un message personnalisé pour la plateforme FCM.

```
{
"GCM": "{\"fcmV1Message\": {\"message\": {\"notification\": {\"title\": \"Hello\", \"body\": \"This is a test.\"}, \"data\": {\"dataKey\": \"example\"}}}}"
}
```

## Envoi de messages propres à une plateforme
<a name="mobile-push-send-platform"></a>

En plus d'envoyer des données personnalisées en tant que paires valeur clé, vous pouvez envoyer des paires valeur clé propres à une plateforme.

L'exemple suivant illustre l'inclusion des paramètres FCM `time_to_live` et `collapse_key` après les paires valeur clé de données personnalisées dans le paramètre FCM `data`.

```
{
"GCM": "{\"fcmV1Message\": {\"message\": {\"notification\": {\"title\": \"TitleTest\", \"body\": \"Sample message for Android or iOS endpoints.\"}, \"data\":{\"time_to_live\": 3600,\"collapse_key\":\"deals\"}}}}"
}
```

Pour une liste des paires valeur clé prises en charge dans chacun des services de notification push pris en charge dans Amazon SNS, consultez les liens suivants : 

**Important**  
Amazon SNS prend désormais en charge l'API HTTP v1 de Firebase Cloud Messaging (FCM) pour envoyer des notifications push mobiles aux appareils Android.  
26 mars 2024 — Amazon SNS prend en charge l'API FCM HTTP v1 pour les appareils Apple et les destinations Webpush. Nous vous recommandons de migrer vos applications push mobiles existantes vers la dernière API HTTP v1 de FCM au plus tard le 1er juin 2024 afin d'éviter toute interruption des applications.
+ [Référence clé de charge utile](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html#/apple_ref/doc/uid/TP40008194-CH17-SW1) dans la documentation APNs 
+ [Protocole HTTP de Firebase Cloud Messaging](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages) dans la documentation FCM
+ [Envoi d'un message](https://developer.amazon.com/sdk/adm/sending-message.html) dans la documentation ADM

## Envoi de messages à une application sur plusieurs plateformes
<a name="mobile-push-send-multiplatform"></a>

Pour envoyer un message à une application installée sur des appareils pour plusieurs plateformes, telles que FCM APNs, vous devez d'abord abonner les points de terminaison mobiles à une rubrique sur Amazon SNS, puis publier le message dans cette rubrique.

L'exemple suivant montre un message à envoyer aux terminaux mobiles abonnés sur APNs, FCM et 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\"}}" 
}
```

## Envoi de messages APNs sous forme d'alerte ou de notifications en arrière-plan
<a name="mobile-push-send-message-apns-background-notification"></a>

Amazon SNS peut envoyer des messages `alert` ou des `background` notifications (pour plus d'informations, consultez la section Envoyer des [mises à jour en arrière-plan à votre application](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app) dans la APNs documentation). APNs 
+ Une `alert` APNs notification informe l'utilisateur en affichant un message d'alerte, en émettant un son ou en ajoutant un badge à l'icône de votre application.
+ Une `background` APNs notification active ou demande à votre application d'agir en fonction du contenu de la notification, sans en informer l'utilisateur.

### Spécification de valeurs APNs d'en-tête personnalisées
<a name="specify-custom-header-value"></a>

Nous vous recommandons de spécifier des valeurs personnalisées pour l'[attribut de message `AWS.SNS.MOBILE.APNS.PUSH_TYPE` réservé](sns-message-attributes.md#sns-attrib-mobile-reserved) à l'aide de l'action d'`Publish`API Amazon SNS AWS SDKs, ou du. AWS CLI L'exemple DE CLI suivant définit `content-available` pour `1` et `apns-push-type` `background` pour la rubrique spécifiée. 

```
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
```

**Note**  
Assurez-vous que la structure JSON est valide. Ajoutez une virgule après chaque paire clé-valeur, sauf la dernière.

### Déduire l'en-tête de type APNs push à partir de la charge utile
<a name="inferring-push-type-header-from-payload"></a>

Si vous ne définissez pas l'`apns-push-type` APNs en-tête, Amazon SNS définit l'en-tête `background` selon `alert` ou selon la `content-available` clé du `aps` dictionnaire de votre configuration de charge utile au format JSON APNs .

**Note**  
Amazon SNS est capable de déduire uniquement les en-têtes `alert` ou `background`, bien que l'en-tête `apns-push-type` puisse être défini sur d'autres valeurs.
+ `apns-push-type` a la valeur `alert`
  + Si le `aps` dictionnaire contient `content-available` défini sur `1` et *une ou plusieurs clés* qui déclenchent des interactions utilisateur.
  + Si le dictionnaire `aps` contient `content-available` défini sur `0` *ou* si la clé `content-available` est absente.
  + Si la valeur de la clé `content-available` n'est pas un entier ou un booléen.
+ `apns-push-type` a la valeur `background`
  + Si le dictionnaire `aps` contient *uniquement* la valeur `content-available` définie sur `1` et *aucune clé* qui déclenchent des interactions utilisateur.
**Important**  
Si Amazon SNS envoie un objet de configuration brut APNs sous forme de notification de fond uniquement, vous devez inclure `content-available` set to `1` dans le dictionnaire. `aps` Bien que vous puissiez inclure des clés personnalisées, le dictionnaire `aps` ne doit contenir aucune clé qui déclenche des interactions utilisateur (par exemple, des alertes, des badges ou des sons).

Voici un exemple d'objet de configuration brut.

```
{
  "APNS": "{\"aps\":{\"content-available\":1},\"Foo1\":\"Bar\",\"Foo2\":123}"
}
```

Dans cet exemple, Amazon SNS définit l'`apns-push-type` APNs en-tête du message sur. `background` Lorsqu'Amazon SNS détecte que le dictionnaire `apn` contient la clé `content-available` définie sur `1` et ne contient aucune autre clé pouvant déclencher des interactions utilisateur, il définit l'en-tête sur `background`.

# Utilisation des charges utiles de Google Firebase Cloud Messaging v1 dans Amazon SNS
<a name="sns-fcm-v1-payloads"></a>

Amazon SNS prend en charge l'utilisation de l'API FCM HTTP v1 pour envoyer des notifications vers des destinations Android, iOS et Webpush. Cette rubrique fournit des exemples de structure de charge utile lors de la publication de notifications push mobiles à l'aide de la CLI ou de l'API Amazon SNS.

Vous pouvez inclure les types de messages suivants dans votre charge utile lorsque vous envoyez une notification FCM :
+ **Message de données** : un message de données est géré par votre application cliente et contient des paires clé-valeur personnalisées. Lorsque vous créez un message de données, vous devez inclure la `data` clé avec un objet JSON comme valeur, puis saisir vos paires clé-valeur personnalisées.
+ **Message de notification** ou **message d'affichage** : un message de notification contient un ensemble prédéfini de touches gérées par le SDK FCM. Ces clés varient en fonction du type d'appareil sur lequel vous livrez. Pour plus d'informations sur les clés de notification spécifiques à la plate-forme, consultez les rubriques suivantes :
  + [Clés de notification Android](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages)
  + [Clés de notification APNS](https://developer.apple.com/documentation/usernotifications/generating-a-remote-notification)
  + [Clés de notification Webpush](https://developer.mozilla.org/en-US/docs/Web/API/Notification)

Pour plus d'informations sur les types de messages FCM, consultez la section [Types de messages](https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages) dans la documentation *Firebase* de Google.

## Utilisation de la structure de charge utile FCM v1 pour envoyer des messages
<a name="sending-messages-using-v1-payload"></a>

Si vous créez une application FCM pour la première fois, ou si vous souhaitez profiter des fonctionnalités de FCM v1, vous pouvez choisir d'envoyer une charge utile au format FCM v1. Pour ce faire, vous devez inclure la clé `fcmV1Message` de niveau supérieur. *Pour plus d'informations sur la création de charges utiles FCM v1, consultez [Migrer de l'ancienne FCM APIs vers HTTP v1](https://firebase.google.com/docs/cloud-messaging/migrate-v1) et [Personnalisation d'un message sur toutes les plateformes](https://firebase.google.com/docs/cloud-messaging/concept-options#customizing-a-message-across-platforms) dans la documentation Firebase de Google.*

**Exemple de charge utile FCM v1 envoyée à Amazon SNS :**

**Note**  
La valeur `GCM` clé utilisée dans l'exemple suivant doit être codée sous forme de chaîne lors de la publication d'une notification via 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\"
          }
        }
      }
    }
  }"
}
```

Lorsque vous envoyez une charge utile JSON, veillez à inclure l'`message-structure`attribut dans votre demande et à `json` le définir sur.

**Exemple de 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
```

*Pour plus d'informations sur l'envoi de charges utiles au format FCM v1, consultez les informations suivantes dans la documentation Firebase de Google :*
+ [Migrer de l'ancienne FCM APIs vers HTTP v1](https://firebase.google.com/docs/cloud-messaging/migrate-v1)
+ [À propos des messages de la FCM](https://firebase.google.com/docs/cloud-messaging/concept-options#customizing_a_message_across_platforms)
+ [Ressource REST : projects.messages](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages)

## Utilisation de l'ancienne structure de charge utile pour envoyer des messages à l'API FCM v1
<a name="sns-fcm-v1-legacy-payload-structure"></a>

Lors de la migration vers FCM v1, il n'est pas nécessaire de modifier la structure de charge utile que vous utilisiez pour vos anciennes informations d'identification. Amazon SNS transforme votre charge utile dans la nouvelle structure de charge utile FCM v1 et l'envoie à Google.

Format de charge utile du message d'entrée :

```
{
  "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\"}}"
}
```

Message envoyé à 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"
    }
  }
}
```

**Risques potentiels**
+ Le mappage de l'ancienne version à la version v1 ne prend pas en charge le service de notification push (APNS) d'Apple `headers` ni les `fcm_options` touches. Si vous souhaitez utiliser ces champs, envoyez une charge utile FCM v1.
+ Dans certains cas, les en-têtes de message sont requis par FCM v1 pour envoyer des notifications silencieuses à vos APNs appareils. Si vous envoyez actuellement des notifications silencieuses à vos APNs appareils, elles ne fonctionneront pas avec l'ancienne approche. Nous vous recommandons plutôt d'utiliser la charge utile FCM v1 pour éviter des problèmes inattendus. Pour obtenir la liste des APNs en-têtes et leur utilité, consultez la section [Communiquer avec APNs](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html) dans le manuel *Apple Developer Guide*.
+ Si vous utilisez l'attribut `TTL` Amazon SNS lors de l'envoi de votre notification, celui-ci ne sera mis à jour que dans le `android` champ. Si vous souhaitez définir l'attribut `TTL` APNS, utilisez la charge utile FCM v1.
+ Les `webpush` touches `android``apns`, et seront mappées et renseignées avec toutes les clés pertinentes fournies. Par exemple, si vous fournissez `title` une clé partagée entre les trois plateformes, le mappage FCM v1 renseignera les trois plateformes avec le titre que vous avez fourni.
+ Certaines clés partagées entre plateformes supposent des types de valeur différents. Par exemple, la `badge` clé transmise à `apns` attend une valeur entière, tandis que la `badge` clé transmise à `webpush` attend une valeur String. Dans les cas où vous fournissez la `badge` clé, le mappage FCM v1 ne renseigne que la clé pour laquelle vous avez fourni une valeur valide.

## Événements d'échec de livraison du FCM
<a name="sns-fcm-delivery-failure-events"></a>

Le tableau suivant indique le type de défaillance Amazon SNS correspondant aux codes d'erreur/d'état reçus de Google pour les demandes de notification FCM v1. Tous les codes d'erreur observés reçus de l'API FCM v1 sont disponibles CloudWatch lorsque vous configurez l'[enregistrement du statut de livraison](topics-attrib.md) pour votre application.


| Code FCM error/status  | Type de panne Amazon SNS | Message d’échec | Cause et atténuation | 
| --- | --- | --- | --- | 
|  `UNREGISTERED`  |  `InvalidPlatformToken`  |  Le jeton de plateforme associé au point de terminaison n'est pas valide.  |  Le jeton d'appareil attaché à votre terminal est périmé ou non valide. Amazon SNS a désactivé votre terminal. Mettez à jour le point de terminaison Amazon SNS avec le jeton d'appareil le plus récent.  | 
|  `INVALID_ARGUMENT`  |  `InvalidNotification`  |  Le corps de notification n'est pas valide.  |  Le jeton ou la charge utile du message de l'appareil n'est peut-être pas valide. Vérifiez que la charge utile de votre message est valide. Si la charge utile du message est valide, mettez à jour le point de terminaison Amazon SNS avec le jeton d'appareil le plus récent.  | 
|  `SENDER_ID_MISMATCH`  |  `InvalidPlatformToken`  |  Le jeton de plateforme associé au point de terminaison n'est pas valide.  |  L'application de plateforme associée au jeton d'appareil n'est pas autorisée à envoyer au jeton d'appareil. Vérifiez que vous utilisez les informations d'identification FCM correctes dans votre application de plateforme Amazon SNS.  | 
|  `UNAVAILABLE`  |  `DependencyUnavailable`  |  La dépendance n'est pas disponible.  |  FCM n'a pas pu traiter la demande à temps. Toutes les tentatives exécutées par Amazon SNS ont échoué. Vous pouvez stocker ces messages dans une file d'attente de lettres mortes (DLQ) et les rediffuser ultérieurement.  | 
|  `INTERNAL`  |  `UnexpectedFailure`  |  Défaillance inattendue ; veuillez contacter Amazon. Phrase d'échec [Erreur interne].  |  Le serveur FCM a rencontré une erreur lors de la tentative de traitement de votre demande. Toutes les tentatives exécutées par Amazon SNS ont échoué. Vous pouvez stocker ces messages dans une file d'attente de lettres mortes (DLQ) et les rediffuser ultérieurement.  | 
|  `THIRD_PARTY_AUTH_ERROR`  |  `InvalidCredentials`  |  Les informations d'identification de l'application de plateforme ne sont pas valides.  |  Impossible d'envoyer un message destiné à un appareil iOS ou à un appareil Webpush. Vérifiez que vos informations de développement et de production sont valides.  | 
|  `QUOTA_EXCEEDED`  |  `Throttled`  |  Demande limitée par [gcm].  |  Le quota de débit de messages, le quota de débit de messages de l'appareil ou le quota de débit de messages thématiques a été dépassé. Pour plus d'informations sur la manière de résoudre ce problème, consultez [ErrorCode](https://firebase.google.com/docs/reference/fcm/rest/v1/ErrorCode)la documentation *Firebase* de Google.  | 
|  `PERMISSION_DENIED`  |  `InvalidNotification`  |  Le corps de notification n'est pas valide.  |  Dans le cas d'une `PERMISSION_DENIED` exception, l'appelant (votre application FCM) n'est pas autorisé à exécuter l'opération spécifiée dans la charge utile. Accédez à votre console FCM et vérifiez que les actions d'API requises sont activées sur vos informations d'identification.  | 

# Attributs de l'application mobile Amazon SNS
<a name="sns-msg-status"></a>

Amazon Simple Notification Service (Amazon SNS) prend en charge la journalisation de l'état de diffusion des messages de notification push. Après avoir configuré les attributs de l'application, les entrées du journal seront envoyées à CloudWatch Logs pour les messages envoyés depuis Amazon SNS vers les terminaux mobiles. La journalisation du statut de distribution du message permet de fournir des informations opérationnelles plus précises, par exemple : 
+ Savoir si un message de notification push a été diffusé au service de notification push à partir d'Amazon SNS.
+ Identifier la réponse envoyée par le service de notification push à Amazon SNS.
+ Déterminer la durée de conservation du message (la durée entre l'horodatage de publication et juste avant sa remise à un service de notification push).

 Pour configurer les attributs de l'application en fonction de l'état de livraison des messages AWS Management Console, vous pouvez utiliser les kits de développement AWS logiciel (SDKs) ou l'API de requête. 

## Configuration des attributs d'état de livraison des messages à l'aide du AWS Management Console
<a name="sns-msg-console"></a>

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le panneau de navigation, choisissez **Mobile**, puis **Notifications Push**.

1. Dans la section **Applications de plate-forme**, choisissez l'application qui contient les points de terminaison pour lesquels vous souhaitez recevoir des CloudWatch journaux.

1. Choisissez **Actions sur l'application**, puis **Statut de diffusion**.

1. Dans la boîte de dialogue **État de la distribution**, sélectionnez **Créer des rôles IAM**.

   Vous serez ensuite redirigé vers la console IAM.

1. Choisissez **Autoriser** pour accorder à Amazon SNS l'accès en écriture afin qu'il puisse utiliser CloudWatch Logs en votre nom.

1. Maintenant, revenez dans la boîte de dialogue **État de livraison**, entrez un nombre dans le champ **Pourcentage de réussite par rapport à l'échantillon (0-100)** pour le pourcentage de messages envoyés avec succès pour lesquels vous souhaitez recevoir des CloudWatch journaux.
**Note**  
Une fois que vous avez configuré les attributs de l'application pour l'état de livraison des messages, tous les messages ayant échoué génèrent des CloudWatch journaux.

1. Enfin, sélectionnez **Enregistrer la configuration**. Vous pouvez désormais consulter et analyser les CloudWatch journaux contenant l'état de livraison des messages. Pour plus d'informations sur l'utilisation CloudWatch, consultez la [CloudWatchdocumentation](https://aws.amazon.com/documentation/cloudwatch).

## Exemples de journaux d'état CloudWatch de livraison des messages Amazon SNS
<a name="sns-msg-examples"></a>

Une fois que vous avez configuré les attributs d'état de livraison des messages pour un point de terminaison d'application, CloudWatch des journaux sont générés. Les exemples de journaux, au format JSON, se présentent comme suit :

**SUCCÈS**

```
{
  "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"
  }
}
```

**ÉCHEC**

```
{
  "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"
  }
}
```

Pour obtenir une liste des codes de réponse du service de notification push, consultez la page [Codes de réponse de la plateforme](#platform-returncodes).

## Configuration des attributs d'état de livraison des messages à l'aide du AWS SDKs
<a name="sns-msg-sdk"></a>

Ils [AWS SDKs](https://aws.amazon.com/tools/)fournissent APIs en plusieurs langues l'utilisation des attributs d'état de livraison des messages avec Amazon SNS. 

L'exemple Java suivant montre comment utiliser l'API `SetPlatformApplicationAttributes` pour configurer les attributs d'application pour l'état de diffusion des messages de notification push. Vous pouvez utiliser les attributs suivants pour l'état de diffusion du message : `SuccessFeedbackRoleArn`, `FailureFeedbackRoleArn` et `SuccessFeedbackSampleRate`. Les `FailureFeedbackRoleArn` attributs `SuccessFeedbackRoleArn` et sont utilisés pour donner à Amazon SNS un accès en écriture lui permettant d'utiliser CloudWatch Logs en votre nom. L'attribut `SuccessFeedbackSampleRate` permet de spécifier le pourcentage de la fréquence d’échantillonnage (0-100) des messages diffusés avec succès. Une fois que vous avez configuré l'`FailureFeedbackRoleArn`attribut, tous les messages ayant échoué génèrent des CloudWatch journaux. 

```
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);
```

Pour plus d'informations sur le SDK pour Java, consultez [Mise en route avec le kit AWS SDK pour Java](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html).

## Codes de réponse de la plateforme
<a name="platform-returncodes"></a>

Voici une liste de liens pour les codes de réponse du service de notification push :


****  

| Service de notification push | Codes de réponse | 
| --- | --- | 
| Amazon Device Messaging (ADM) | Consultez [Format de la réponse](https://developer.amazon.com/docs/adm/send-message.html#response-format) dans la documentation ADM. | 
| Service de notification push Apple (APNs) | Voir la réponse HTTP/2 de APNs la section [Communiquer avec APNs](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html#/apple_ref/doc/uid/TP40008194-CH11-SW1) dans le guide de programmation des notifications locales et distantes. | 
| Messagerie cloud Firebase (FCM) | Consultez [Codes de réponse aux messages d'erreur en aval](https://firebase.google.com/docs/cloud-messaging/http-server-ref#error-codes) dans la documentation Firebase Cloud Messaging. | 
| Service de notification push Microsoft pour Windows Phone (MPNS) | Consultez [Codes de réponse du service de notification push pour Windows Phone 8](https://msdn.microsoft.com/en-us/library/windows/apps/ff941100%28v=vs.105%29.aspx#BKMK_PushNotificationServiceResponseCodes) dans la documentation Windows 8 Development. | 
| Services de notification push Windows (WNS) | Consultez « Codes de réponse » dans [En-têtes de demande et de réponse du service de notification Push (applications d'exécution Windows)](https://msdn.microsoft.com/en-us/library/windows/apps/hh465435.aspx) dans la documentation Windows 8 Development. | 

# Notifications d'événements liés aux applications Amazon SNS pour les applications mobiles
<a name="application-event-notifications"></a>

Amazon SNS prend en charge le déclenchement de notifications lorsque certains évènements d'application se produisent. Vous pouvez ensuite effectuer une action par programmation sur cet événement. Votre application doit inclure la prise en charge d'un service de notification push tel que Apple Push Notification Service (APNs), Firebase Cloud Messaging (FCM) et Windows Push Notification Services (WNS). Vous définissez les notifications d'événements d'application à l'aide de la console Amazon SNS ou du. AWS CLI AWS SDKs

## Événements d'application disponibles
<a name="application-event-notifications-events"></a>

Les notifications d'événements d'application suivent la création, la suppression et la mise à jour de points de terminaison de plateforme individuels, ainsi que les échecs de diffusion. Voici les noms d'attributs pour les événements d'application.


| Nom d’attribut | Déclencheur de notification | 
| --- | --- | 
| EventEndpointCreated | Un nouveau point de terminaison de plateforme est ajouté à votre application. | 
| EventEndpointDeleted | Tous les points de terminaison de plateforme associés à votre application sont supprimés. | 
| EventEndpointUpdated | Tous les attributs des points de terminaison de plateforme associés à votre application sont modifiés. | 
| EventDeliveryFailure | Une diffusion vers n’importe quel point de terminaison de plateforme associé à votre application fait l’objet d'une utilisation hors limites permanente.  Pour suivre les échecs de diffusion du côté application de plateforme, abonnez-vous aux événements d'état de diffusion du message pour l'application. Pour plus d'informations, consultez la page [Utilisation des attributs d'application Amazon SNS pour le statut de distribution du message](https://docs.aws.amazon.com/sns/latest/dg/sns-msg-status.html).  | 

Vous pouvez associer n'importe quel attribut avec une application, qui peut alors recevoir ces notifications d'événements. 

## Envoi de notifications push mobile
<a name="application-event-notifications-howto-set"></a>

Pour envoyer des notifications d'événements d'application, spécifiez une rubrique qui recevra les notifications pour chaque type d'événement. Lorsqu'Amazon SNS envoie les notifications, la rubrique peut les acheminer à des points de terminaison qui effectueront l'action par programmation.

**Important**  
Des applications à volume élevé créeront un grand nombre de notifications d’événements d'application (par exemple, des dizaines de milliers), qui envahiront les points de terminaison destinés à une utilisation humaine, tels que les adresses e-mail, les numéros de téléphone et les applications mobiles. Respectez les consignes suivantes lorsque vous envoyez des notifications d’événements d'application à une rubrique :  
Chaque rubrique recevant des notifications ne doit contenir que des abonnements pour les points de terminaison programmatiques, tels que les points de terminaison HTTP ou HTTPS, les files d'attente Amazon SQS ou les fonctions. AWS Lambda 
Pour réduire le volume de traitement qui est déclenché par les notifications, limitez les abonnements de chaque rubrique à un petit nombre (par exemple, cinq ou moins).

Vous pouvez envoyer des notifications d'événements d'application à l'aide de la console Amazon SNS, du AWS Command Line Interface (AWS CLI) ou du. AWS SDKs 

### AWS Management Console
<a name="application-event-notifications-howto-set-console"></a>

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le panneau de navigation, choisissez **Mobile**, **Notifications Push**.

1. Sur la page **des notifications push mobiles**, dans la section **Applications de la plateforme**, choisissez une application, puis sélectionnez **Modifier**.

1. Développez la section **Notifications d'événement**.

1. Choisissez **Actions**, **Configurer les évènements**.

1. Entrez ARNs les sujets à utiliser pour les événements suivants :
   + Point de terminaison créé
   + Point de terminaison supprimé
   + Point de terminaison mis à jour
   + Échec de diffusion

1. Sélectionnez **Enregistrer les modifications**.

### AWS CLI
<a name="awscli"></a>

Exécutez la commande [set-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/set-platform-application-attributes.html).

L'exemple suivant définit la même rubrique Amazon SNS pour les quatre évènements d'application :

```
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>

Définissez les notifications d'événements d'application en soumettant une `SetPlatformApplicationAttributes` demande à l'aide de l'API Amazon SNS à l'aide d'un AWS SDK.

Pour obtenir la liste complète des guides du développeur et des exemples de code du AWS SDK, y compris l'aide au démarrage et des informations sur les versions précédentes, consultez[Utilisation d'Amazon SNS avec un SDK AWS](sdk-general-information-section.md).

# Actions d'API push mobile
<a name="mobile-push-api"></a>

Pour utiliser le service push mobile Amazon SNS APIs, vous devez d'abord remplir les conditions requises pour le service de notification push, telles que le service de notification push Apple (APNs) et Firebase Cloud Messaging (FCM). Pour obtenir plus d'informations sur les conditions préalables, consultez la page [Conditions préalables pour les notifications utilisateur Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md). 

 Pour envoyer un message de notification push à une application mobile et à un appareil à l'aide de APIs, vous devez d'abord utiliser l'`CreatePlatformApplication`action, qui renvoie un `PlatformApplicationArn` attribut. L'attribut `PlatformApplicationArn` est ensuite utilisé par `CreatePlatformEndpoint`, qui renvoie un attribut `EndpointArn`. Vous pouvez alors utiliser l'attribut `EndpointArn` avec l'action `Publish` pour envoyer un message de notification à une application mobile et un appareil, ou vous pouvez utiliser l'attribut `EndpointArn` avec l'action `Subscribe` pour l'abonnement à une rubrique. Pour de plus amples informations, veuillez consulter [Configuration des notifications push avec Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview).

Les notifications push d'Amazon SNS sur mobile APIs sont les suivantes : 

`[CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)`  
Crée un objet d'application de plate-forme pour l'un des services de notification push pris en charge, tel que APNs FCM, auquel les appareils et les applications mobiles peuvent s'enregistrer. Renvoie un attribut `PlatformApplicationArn`, qui est utilisé par l'action `CreatePlatformEndpoint`.

`[CreatePlatformEndpoint](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)`  
Crée un point de terminaison pour un appareil et une application mobile sur l'un des services de notification push pris en charge. `CreatePlatformEndpoint` utilise l'attribut `PlatformApplicationArn` renvoyé par l'action `CreatePlatformApplication`. L'attribut `EndpointArn`, qui est renvoyé lors de l'utilisation de `CreatePlatformEndpoint`, est ensuite utilisé avec l'action `Publish` pour envoyer un message de notification à une application mobile et un appareil. 

`[CreateTopic](https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html)`  
Crée une rubrique dans laquelle des messages peuvent être publiés. 

`[DeleteEndpoint](https://docs.aws.amazon.com/sns/latest/api/API_DeleteEndpoint.html)`  
Supprime le point de terminaison pour un appareil et une application mobile sur l'un des services de notification push pris en charge.

`[DeletePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_DeletePlatformApplication.html)`  
Supprime un objet d'application de plateforme.

`[DeleteTopic](https://docs.aws.amazon.com/sns/latest/api/API_DeleteTopic.html)`  
Supprime une rubrique et tous ses abonnements.

`[GetEndpointAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetEndpointAttributes.html)`  
Récupère les attributs de point de terminaison pour un appareil et une application mobile.

`[GetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetPlatformApplicationAttributes.html)`  
Récupère les attributs de l'objet d'application de plateforme.

`[ListEndpointsByPlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html)`  
Répertorie les points de terminaison et leurs attributs pour des appareils et des applications mobiles dans un service de notification push pris en charge.

`[ListPlatformApplications](https://docs.aws.amazon.com/sns/latest/api/API_ListPlatformApplications.html)`  
Répertorie les objets d'application de plateforme pour les services de notification push pris en charge.

`[Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html)`  
Envoie un message de notification à tous les points de terminaison abonnés à une rubrique.

`[SetEndpointAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetEndpointAttributes.html)`  
Définit les attributs d'un point de terminaison pour un appareil et une application mobile.

`[SetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html)`  
Définit les attributs de l'objet d'application de plateforme.

`[Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html)`  
Prépare l'abonnement d'un point de terminaison en lui envoyant un message de confirmation. Pour créer réellement un abonnement, le propriétaire du terminal doit lancer l' ConfirmSubscription action à l'aide du jeton figurant dans le message de confirmation. 

`[Unsubscribe](https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html)`  
Supprime un abonnement.

# Erreurs courantes de l'API push mobile Amazon SNS
<a name="mobile-push-api-error"></a>

Les erreurs renvoyées par Amazon SNS APIs pour mobile push sont répertoriées dans le tableau suivant. Pour plus d'informations sur Amazon SNS APIs pour mobile push, consultez. [Actions d'API push mobile](mobile-push-api.md)


| Erreur | Description | Code d'état HTTPS | Action d'API | 
| --- | --- | --- | --- | 
| Le nom de l'application est une chaîne nulle | Le nom d'application requis est défini sur null. | 400 | `CreatePlatformApplication` | 
| Platform Name is null string | Le nom de plateforme requis est défini sur null. | 400 | `CreatePlatformApplication` | 
| Platform Name is invalid | Une valeur non valide ou une out-of-range valeur a été fournie pour le nom de plate-forme. | 400 | `CreatePlatformApplication` | 
| APNs — Le principal n'est pas un certificat valide | Un certificat non valide a été fourni pour le APNs principal, à savoir le certificat SSL. Pour plus d'informations, consultez [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)le manuel Amazon Simple Notification Service API Reference. | 400 | `CreatePlatformApplication` | 
| APNs — Le principal est un certificat valide mais pas au format .pem | Un certificat valide qui n'est pas au format .pem a été fourni pour le APNs principal, à savoir le certificat SSL. | 400 | `CreatePlatformApplication` | 
| APNs — Le principal est un certificat expiré | Un certificat expiré a été fourni pour le APNs principal, à savoir le certificat SSL. | 400 | `CreatePlatformApplication` | 
| APNs — Le principal n'est pas un certificat émis par Apple | Un certificat non émis par Apple a été fourni pour le mandataire APNs qui est le certificat SSL. | 400 | `CreatePlatformApplication` | 
| APNs — Le principal n'est pas fourni | Le APNs principal, à savoir le certificat SSL, n'a pas été fourni. | 400 | `CreatePlatformApplication` | 
| APNs — Les informations d'identification ne sont pas fournies | L' APNs identifiant, qui est la clé privée, n'a pas été fourni. Pour plus d'informations, consultez [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)le manuel Amazon Simple Notification Service API Reference. | 400 | `CreatePlatformApplication` | 
| APNs — Les informations d'identification ne sont pas au format .pem valide | L' APNs identifiant, qui est la clé privée, n'est pas dans un format .pem valide. | 400 | `CreatePlatformApplication` | 
| FCM — le serveur n'APIKey est pas fourni | Les informations d'identification FCM, qui sont la clé API, n'ont pas été fournies. Pour plus d'informations, consultez [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)le manuel Amazon Simple Notification Service API Reference. | 400 | `CreatePlatformApplication` | 
| FCM — le serveur APIKey est vide | Les informations d'identification FCM, qui sont la clé API, sont vides. | 400 | `CreatePlatformApplication` | 
| FCM — le serveur APIKey est une chaîne nulle | Les informations d'identification FCM, qui sont la clé API, sont null. | 400 | `CreatePlatformApplication` | 
| FCM — le serveur APIKey n'est pas valide | Les informations d'identification FCM, qui sont la clé API, ne sont pas valides. | 400 | `CreatePlatformApplication` | 
| ADM — clientsecret is not provided | Le code secret du client requis n'est pas fourni. | 400 | `CreatePlatformApplication` | 
| ADM — clientsecret is a null string | La chaîne requise pour le code secret du client est null. | 400 | `CreatePlatformApplication` | 
| ADM — client\$1secret is empty string | La chaîne requise pour le code secret du client est vide. | 400 | `CreatePlatformApplication` | 
| ADM — client\$1secret is not valid | La chaîne requise pour le code secret du client n'est pas valide. | 400 | `CreatePlatformApplication` | 
| ADM — client\$1id is empty string | La chaîne requise pour l'ID client est vide. | 400 | `CreatePlatformApplication` | 
| ADM — clientId is not provided | La chaîne requise pour l'ID client n'est pas fournie. | 400 | `CreatePlatformApplication` | 
| ADM — clientid is a null string | La chaîne requise pour l'ID client est null. | 400 | `CreatePlatformApplication` | 
| ADM — client\$1id is not valid | La chaîne requise pour l'ID client n'est pas valide. | 400 | `CreatePlatformApplication` | 
| EventEndpointCreated possède un format ARN non valide | EventEndpointCreated possède un format ARN non valide. | 400 | `CreatePlatformApplication` | 
| EventEndpointDeleted possède un format ARN non valide | EventEndpointDeleted possède un format ARN non valide. | 400 | `CreatePlatformApplication` | 
| EventEndpointUpdated possède un format ARN non valide | EventEndpointUpdated possède un format ARN non valide. | 400 | `CreatePlatformApplication` | 
| EventDeliveryAttemptFailure possède un format ARN non valide | EventDeliveryAttemptFailure possède un format ARN non valide. | 400 | `CreatePlatformApplication` | 
| EventDeliveryFailure possède un format ARN non valide | EventDeliveryFailure possède un format ARN non valide. | 400 | `CreatePlatformApplication` | 
| EventEndpointCreated n'est pas un sujet existant | EventEndpointCreated n'est pas un sujet existant. | 400 | `CreatePlatformApplication` | 
| EventEndpointDeleted n'est pas un sujet existant | EventEndpointDeleted n'est pas un sujet existant. | 400 | `CreatePlatformApplication` | 
| EventEndpointUpdated n'est pas un sujet existant | EventEndpointUpdated n'est pas un sujet existant. | 400 | `CreatePlatformApplication` | 
| EventDeliveryAttemptFailure n'est pas un sujet existant | EventDeliveryAttemptFailure n'est pas un sujet existant. | 400 | `CreatePlatformApplication` | 
| EventDeliveryFailure n'est pas un sujet existant | EventDeliveryFailure n'est pas un sujet existant. | 400 | `CreatePlatformApplication` | 
| Platform ARN is invalid | L'ARN de plateforme n'est pas valide. | 400 | `SetPlatformAttributes` | 
| Platform ARN is valid but does not belong to the user | L'ARN de plateforme est valide, mais n'appartient pas à l'utilisateur. | 400 | `SetPlatformAttributes` | 
| APNs — Le principal n'est pas un certificat valide | Un certificat non valide a été fourni pour le APNs principal, à savoir le certificat SSL. Pour plus d'informations, consultez [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)le manuel Amazon Simple Notification Service API Reference. | 400 | `SetPlatformAttributes` | 
| APNs — Le principal est un certificat valide mais pas au format .pem | Un certificat valide qui n'est pas au format .pem a été fourni pour le APNs principal, à savoir le certificat SSL. | 400 | `SetPlatformAttributes` | 
| APNs — Le principal est un certificat expiré | Un certificat expiré a été fourni pour le APNs principal, à savoir le certificat SSL. | 400 | `SetPlatformAttributes` | 
| APNs — Le principal n'est pas un certificat émis par Apple | Un certificat non émis par Apple a été fourni pour le mandataire APNs qui est le certificat SSL. | 400 | `SetPlatformAttributes` | 
| APNs — Le principal n'est pas fourni | Le APNs principal, à savoir le certificat SSL, n'a pas été fourni. | 400 | `SetPlatformAttributes` | 
| APNs — Les informations d'identification ne sont pas fournies | L' APNs identifiant, qui est la clé privée, n'a pas été fourni. Pour plus d'informations, consultez [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)le manuel Amazon Simple Notification Service API Reference. | 400 | `SetPlatformAttributes` | 
| APNs — Les informations d'identification ne sont pas au format .pem valide | L' APNs identifiant, qui est la clé privée, n'est pas dans un format .pem valide. | 400 | `SetPlatformAttributes` | 
| FCM — le serveur n'APIKey est pas fourni | Les informations d'identification FCM, qui sont la clé API, n'ont pas été fournies. Pour plus d'informations, consultez [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)le manuel Amazon Simple Notification Service API Reference. | 400 | `SetPlatformAttributes` | 
| FCM — le serveur APIKey est une chaîne nulle | Les informations d'identification FCM, qui sont la clé API, sont null. | 400 | `SetPlatformAttributes` | 
| ADM — clientId is not provided | La chaîne requise pour l'ID client n'est pas fournie. | 400 | `SetPlatformAttributes` | 
| ADM — clientid is a null string | La chaîne requise pour l'ID client est null. | 400 | `SetPlatformAttributes` | 
| ADM — clientsecret is not provided | Le code secret du client requis n'est pas fourni. | 400 | `SetPlatformAttributes` | 
| ADM — clientsecret is a null string | La chaîne requise pour le code secret du client est null. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated possède un format ARN non valide | EventEndpointUpdated possède un format ARN non valide. | 400 | `SetPlatformAttributes` | 
| EventEndpointDeleted possède un format ARN non valide | EventEndpointDeleted possède un format ARN non valide. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated possède un format ARN non valide | EventEndpointUpdated possède un format ARN non valide. | 400 | `SetPlatformAttributes` | 
| EventDeliveryAttemptFailure possède un format ARN non valide | EventDeliveryAttemptFailure possède un format ARN non valide. | 400 | `SetPlatformAttributes` | 
| EventDeliveryFailure possède un format ARN non valide | EventDeliveryFailure possède un format ARN non valide. | 400 | `SetPlatformAttributes` | 
| EventEndpointCreated n'est pas un sujet existant | EventEndpointCreated n'est pas un sujet existant. | 400 | `SetPlatformAttributes` | 
| EventEndpointDeleted n'est pas un sujet existant | EventEndpointDeleted n'est pas un sujet existant. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated n'est pas un sujet existant | EventEndpointUpdated n'est pas un sujet existant. | 400 | `SetPlatformAttributes` | 
| EventDeliveryAttemptFailure n'est pas un sujet existant | EventDeliveryAttemptFailure n'est pas un sujet existant. | 400 | `SetPlatformAttributes` | 
| EventDeliveryFailure n'est pas un sujet existant | EventDeliveryFailure n'est pas un sujet existant. | 400 | `SetPlatformAttributes` | 
| Platform ARN is invalid | L'ARN de plateforme n'est pas valide. | 400 | `GetPlatformApplicationAttributes` | 
| Platform ARN is valid but does not belong to the user | L'ARN de plateforme est valide, mais n'appartient pas à l'utilisateur. | 403 | `GetPlatformApplicationAttributes` | 
| Token specified is invalid | Le jeton spécifié n'est pas valide. | 400 | `ListPlatformApplications` | 
| Platform ARN is invalid | L'ARN de plateforme n'est pas valide. | 400 | `ListEndpointsByPlatformApplication` | 
| Platform ARN is valid but does not belong to the user | L'ARN de plateforme est valide, mais n'appartient pas à l'utilisateur. | 404 | `ListEndpointsByPlatformApplication` | 
| Token specified is invalid | Le jeton spécifié n'est pas valide. | 400 | `ListEndpointsByPlatformApplication` | 
| Platform ARN is invalid | L'ARN de plateforme n'est pas valide. | 400 | `DeletePlatformApplication` | 
| Platform ARN is valid but does not belong to the user | L'ARN de plateforme est valide, mais n'appartient pas à l'utilisateur. | 403 | `DeletePlatformApplication` | 
| Platform ARN is invalid | L'ARN de plateforme n'est pas valide. | 400 | `CreatePlatformEndpoint` | 
| Platform ARN is valid but does not belong to the user | L'ARN de plateforme est valide, mais n'appartient pas à l'utilisateur. | 404 | `CreatePlatformEndpoint` | 
| Token is not specified | Le jeton n'est pas spécifié. | 400 | `CreatePlatformEndpoint` | 
| Token is not of correct length | La longueur du jeton est incorrecte. | 400 | `CreatePlatformEndpoint` | 
| Les données utilisateurs du client sont trop volumineuses. | Les données utilisateur du client ne doivent pas dépasser 2 048 octets en encodage UTF-8. | 400 | `CreatePlatformEndpoint` | 
| Endpoint ARN is invalid | L'ARN du point de terminaison n'est pas valide. | 400 | `DeleteEndpoint` | 
| Endpoint ARN is valid but does not belong to the user | L'ARN du point de terminaison est valide, mais n'appartient pas à l'utilisateur. | 403 | `DeleteEndpoint` | 
| Endpoint ARN is invalid | L'ARN du point de terminaison n'est pas valide. | 400 | `SetEndpointAttributes` | 
| Endpoint ARN is valid but does not belong to the user | L'ARN du point de terminaison est valide, mais n'appartient pas à l'utilisateur. | 403 | `SetEndpointAttributes` | 
| Token is not specified | Le jeton n'est pas spécifié. | 400 | `SetEndpointAttributes` | 
| Token is not of correct length | La longueur du jeton est incorrecte. | 400 | `SetEndpointAttributes` | 
| Les données utilisateurs du client sont trop volumineuses. | Les données utilisateur du client ne doivent pas dépasser 2 048 octets en encodage UTF-8. | 400 | `SetEndpointAttributes` | 
| Endpoint ARN is invalid | L'ARN du point de terminaison n'est pas valide. | 400 | `GetEndpointAttributes` | 
| Endpoint ARN is valid but does not belong to the user | L'ARN du point de terminaison est valide, mais n'appartient pas à l'utilisateur. | 403 | `GetEndpointAttributes` | 
| Target ARN is invalid | L'ARN cible n'est pas valide. | 400 | `Publish` | 
| Target ARN is valid but does not belong to the user | L'ARN cible est valide, mais n'appartient pas à l'utilisateur. | 403 | `Publish` | 
| Message format is invalid | Le format du message n'est pas valide. | 400 | `Publish` | 
| Message size is larger than supported by protocol/end-service | La taille du message est supérieure à la taille prise en charge par le protocole/service final. | 400 | `Publish` | 

# Utilisation de l'attribut Amazon SNS time to live message pour les notifications push mobiles
<a name="sns-ttl"></a>

Amazon Simple Notification Service (Amazon SNS) prend en charge la définition d'un attribut de message de *time-to-live (TTL)* pour les messages de notification push mobile. Cela s'ajoute à la capacité existante de définir le TTL dans le corps du message Amazon SNS pour les services de notification push mobiles qui le prennent en charge, tels qu'Amazon Device Messaging (ADM) et Firebase Cloud Messaging (FCM) lors de l'envoi vers Android.

L'attribut de message TTL est utilisé pour spécifier des métadonnées d'expiration relatives à un message. Cela vous permet de spécifier le délai dont dispose le service de notification push, tel que Apple Push Notification Service (APNs) ou FCM, pour transmettre le message au terminal. Si, pour une raison quelconque (telle que la mise hors tension de l'appareil mobile), le message ne peut pas être diffusé dans la durée de vie spécifiée, il est supprimé et aucune autre tentative de diffusion n'est effectuée. Pour spécifier le TTL dans les attributs des messages, vous pouvez utiliser les AWS Management Console kits de développement AWS logiciel (SDKs) ou l'API de requête. 

## Attributs de message TTL pour les services de notification push
<a name="sns-ttl-msg-attrib"></a>

Voici une liste des attributs de message TTL pour les services de notification push que vous pouvez utiliser pour définir lors de l'utilisation de l'API AWS SDKs or query :


****  

| Service de notification push | Attribut de message TTL | 
| --- | --- | 
| Amazon Device Messaging (ADM) | AWS.SNS.MOBILE.ADM.TTL | 
| Service de notification push Apple (APNs) | AWS.SNS.MOBILE.APNS.TTL | 
| Sandbox du service de notification push Apple (APNs\$1SANDBOX) | AWS.SNS.MOBILE.APNS\$1SANDBOX.TTL | 
| Baidu Cloud Push (Baidu) | AWS.SNS.MOBILE.BAIDU.TTL | 
| Firebase Cloud Messaging (FCM lors de l'envoi vers Android) | AWS.SNS.MOBILE.FCM.TTL | 
| Services de notification push Windows (WNS) | AWS.SNS.MOBILE.WNS.TTL | 

Chacun des services de notification push gère la durée de vie différemment. Amazon SNS fournit une vue abstraite de la durée de vie pour tous les services de notification push, ce qui facilite la spécification de la durée de vie. Lorsque vous utilisez le AWS Management Console pour spécifier le TTL (en secondes), vous ne devez saisir la valeur TTL qu'une seule fois et Amazon SNS calculera ensuite le TTL pour chacun des services de notification push sélectionnés lors de la publication du message. 

 La durée de vie est relative à l'heure de publication. Avant de remettre un message de notification push à un service de notification push spécifique, Amazon SNS calcule la durée de conservation (la durée entre l'horodatage de publication et juste avant sa remise à un service de notification push) pour la notification push et transmet la durée de vie restante au service de notification push spécifique. Si la durée de vie est inférieure à la durée de conservation, Amazon SNS ne tente pas d'effectuer la publication. 

Si vous spécifiez un TTL pour un message de notification push, la valeur TTL doit être un entier positif, sauf si la valeur de `0` a une signification spécifique pour le service de notification push, par exemple with APNs et FCM (lors de l'envoi vers Android). Si la valeur de durée de vie est définie sur`0` et que le service de notification push n'a pas de signification spécifique pour `0`, Amazon SNS supprime le message. Pour plus d'informations sur le paramètre TTL défini sur `0` lors de l'utilisation APNs, consultez le *tableau A-3 Identifiants d'élément pour les notifications à distance* dans la documentation de l'[API Binary Provider](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/BinaryProviderAPI.html).

## Ordre de priorité pour déterminer la durée de vie
<a name="sns-ttl-precedence"></a>

La priorité utilisée par Amazon SNS pour déterminer la durée de vie pour un message de notification push se fonde sur l'ordre suivant, où le plus petit nombre a la priorité la plus élevée : 

1. Durée de vie de l'attribut de message

1. Durée de vie du corps du message

1. Durée de vie par défaut du service de notification push (varie selon le service)

1. Durée de vie par défaut d'Amazon SNS (4 semaines)

Si vous définissez des valeurs de durée de vie différentes (une dans les attributs de message et une autre dans le corps du message) pour le même message, Amazon SNS modifie la durée de vie dans le corps du message pour qu'elle corresponde à celle spécifiée dans l'attribut du message.

## Spécifier le TTL à l'aide du AWS Management Console
<a name="sns-ttl-console"></a>

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le panneau de navigation, choisissez **Mobile**, **Notifications Push**.

1. Sur la page **Notifications Push mobile**, dans la section **Applications de plateforme**, sélectionnez une application.

1. Sur la ***MyApplication*** page, dans la section **Points de terminaison**, choisissez un point de terminaison d'application, puis choisissez **Publier le message**.

1. Dans la section **Détails du message**, saisissez la valeur de la durée de vie (la durée, en secondes, pendant laquelle le service de notification push doit diffuser le message au point de terminaison).

1. Choisissez **Publier le message**.

# Régions prises en charge par l'application mobile Amazon SNS
<a name="sns-mobile-push-supported-regions"></a>

Actuellement, vous pouvez créer des applications mobiles dans les régions suivantes :
+ USA Est (Ohio)
+ USA Est (Virginie du Nord)
+ USA Ouest (Californie du Nord)
+ USA Ouest (Oregon)
+ Afrique (Le Cap)
+ Asie-Pacifique (Hong Kong)
+ Asie-Pacifique (Jakarta)
+ Asie-Pacifique (Mumbai)
+ Asie-Pacifique (Osaka)
+ Asia Pacific (Seoul)
+ Asie-Pacifique (Singapour)
+ Asie-Pacifique (Sydney)
+ Asie-Pacifique (Tokyo)
+ Canada (Centre)
+ Europe (Francfort)
+ Europe (Irlande)
+ Europe (Londres)
+ Europe (Milan)
+ Europe (Espagne)
+ Europe (Paris)
+ Europe (Stockholm)
+ Middle East (Bahrain)
+ Moyen-Orient (EAU)
+ Amérique du Sud (São Paulo)
+ AWS GovCloud (US-Ouest)

# Bonnes pratiques pour gérer les notifications push mobiles Amazon SNS
<a name="mobile-push-notifications-best-practices"></a>

Cette section décrit plusieurs bonnes pratiques qui peuvent vous aider à améliorer votre engagement client.

## Gestion des terminaux
<a name="channels-sms-best-practices-endpoint-management"></a>

Des problèmes de livraison peuvent survenir lorsque les jetons de l'appareil changent en raison d'une action de l'utilisateur sur l'appareil (par exemple, une application est réinstallée sur l'appareil) ou lorsque des [mises à jour de certificats](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns) affectent des appareils fonctionnant sur une version iOS particulière. Il s'agit d'une bonne pratique recommandée par Apple pour [s'inscrire](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#:~:text=Registering%20to%20Receive%20Remote%20Notifications) à APNs chaque lancement de votre application.

Étant donné que le jeton d'appareil ne change pas chaque fois qu'une application est ouverte par un utilisateur, l'API [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html) idempotente peut être utilisée. Toutefois, cela peut créer des doublons pour le même appareil dans les cas où le jeton lui-même n'est pas valide ou si le point de terminaison est valide mais désactivé (par exemple, une incompatibilité entre les environnements de production et de sandbox).

Un mécanisme de gestion des jetons d'appareil tel que celui présent dans le [pseudo-code](mobile-platform-endpoint.md#mobile-platform-endpoint-pseudo-code) peut être utilisé.

Pour plus d'informations sur la gestion et la maintenance des jetons de périphérique FCM v1, consultez[Gestion des points de terminaison Firebase Cloud Messaging par Amazon SNS](sns-fcm-endpoint-management.md).

## Journalisation de l'état de distribution
<a name="channels-sms-best-practices-delivery-logging"></a>

Pour surveiller l'état de distribution des notifications push, nous vous recommandons d'activer la journalisation de l'état de distribution pour votre application de plateforme Amazon SNS. Cela vous aide à résoudre les échecs de livraison, car les journaux contiennent des [codes de réponse](sns-msg-status.md#platform-returncodes) fournisseur renvoyés par le service push de plateforme. Pour plus d'informations sur l'activation de la journalisation de l'état de distribution, consultez [Comment puis-je accéder aux journaux de diffusion des rubriques Amazon SNS pour les notifications push ?](https://aws.amazon.com/premiumsupport/knowledge-center/troubleshoot-failed-sns-deliveries/).

## Notifications d’événements
<a name="channels-sms-best-practices-event-notifications"></a>

Pour gérer les points de terminaison d'une manière axée sur les événements, vous pouvez utiliser la fonctionnalité de [notification d'événement](application-event-notifications.md#application-event-notifications-sdk). Elle permet à la rubrique Amazon SNS configurée de distribuer les événements aux abonnés, tels qu'une fonction Lambda, pour des événements d'application de plateforme relatifs à la création de points de terminaison, à des suppressions, à des mises à jour ou à des échecs de livraison.

# Configuration et gestion de l'abonnement aux e-mails Amazon SNS
<a name="sns-email-notifications"></a>

Vous pouvez abonner une [adresse e-mail](#sns-email-notifications) à une rubrique Amazon SNS en utilisant le AWS Management Console AWS SDK pour Java, ou. AWS SDK pour .NET

**Remarques**  
La personnalisation du corps du message électronique n'est pas prise en charge. La fonction de remise des e-mails est destinée à fournir des alertes système internes, et non des messages marketing.
L'abonnement direct de points de terminaison d'e-mail n'est pris en charge que pour les rubriques standard.
Le débit de livraison des e-mails est limité. Pour plus d'informations, consultez la section [Quotas Amazon SNS.](https://docs.aws.amazon.com/general/latest/gr/sns.html#limits_sns)

**Important**  
Pour empêcher les destinataires des listes de diffusion de désabonner tous les destinataires des e-mails de la rubrique Amazon SNS, consultez [Configurer une inscription par e-mail qui nécessite de s’authentifier pour se désinscrire](https://aws.amazon.com/premiumsupport/knowledge-center/prevent-unsubscribe-all-sns-topic/) dans le support AWS .
Le dépassement de la limite de 10 messages par seconde (TPS) pour un e-mail ou un point de terminaison email-json déclenchera une suspension automatique de l'abonnement, le plaçant dans un statut en attente de confirmation. L'abonnement reste valide PendingConfirmation pendant 30 jours, après quoi il sera automatiquement supprimé à moins que des mesures ne soient prises.
Si une adresse e-mail enregistrée entraîne un rebond, l'adresse est supprimée des livraisons ultérieures pendant 7 jours. Les rebonds peuvent se produire pour diverses raisons, notamment des adresses non valides ou des problèmes avec le serveur de messagerie de réception. Pour supprimer l'adresse de la liste de suppression avant l'expiration du délai de 7 jours, résolvez le problème sous-jacent lié à l'adresse e-mail, puis contactez AWS le Support Center.

## Abonnement d'une adresse e-mail à une rubrique Amazon SNS à l'aide du AWS Management Console
<a name="create-subscribe-endpoint-to-topic-console"></a>

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le volet de navigation de gauche, choisissez **Subscriptions (Abonnements)**.

1. Sur la page **Abonnements**, choisissez **Créer un abonnement**.

1. Sur la page **Créer un abonnement**, dans la section **Détails**, procédez comme suit :

   1. Pour **ARN de rubrique**, choisissez l'Amazon Resource Name (ARN) d'une rubrique.

   1. Pour **Protocole**, choisissez **E-mail**.

   1. Saisissez l'adresse e-mail pour le **point de terminaison**.

   1. (Facultatif) Pour configurer une politique de filtrage, développez la section **Politique de filtrage d'abonnement**. Pour de plus amples informations, veuillez consulter [Stratégies de filtre d'abonnement Amazon SNS](sns-subscription-filter-policies.md).

   1. (Facultatif) Pour activer le filtrage basé sur la charge utile, configurez `Filter Policy Scope` sur `MessageBody`. Pour de plus amples informations, veuillez consulter [Étendue de la politique de filtre d'abonnement Amazon SNS](sns-message-filtering-scope.md).

   1. (Facultatif) Pour configurer une file d’attente de lettres mortes pour l’abonnement, développez la section **Politique de reconduite (File d’attente de lettres mortes).** Pour de plus amples informations, consultez la section [Files d'attente pour les lettres mortes Amazon SNS](sns-dead-letter-queues.md).

   1. Choisissez **Créer un abonnement**.

      La console crée l'abonnement et ouvre la page **Détails** de l'abonnement.

Vous devez confirmer l'abonnement avant que l'adresse e-mail puisse recevoir des messages.

**Pour confirmer un abonnement**

1. Vérifiez votre boîte de réception et choisissez **Confirmer l'abonnement** dans l'e-mail d'Amazon SNS.

1. Amazon SNS ouvre votre navigateur web et affiche une confirmation d'abonnement avec votre ID d'abonnement.

## Abonnement d'une adresse e-mail à une rubrique Amazon SNS à l'aide d'un SDK AWS
<a name="subscribe-email-to-topic-aws-sdks"></a>

Pour utiliser un AWS SDK, vous devez le configurer avec vos informations d'identification. Pour plus d'informations, consultez [la section Les fichiers de configuration et d'identification partagés](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) dans le *guide de référence des outils AWS SDKs et des outils*.

Les exemples de code suivants illustrent comment utiliser `Subscribe`.

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

**SDK pour .NET**  
 Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/SNS#code-examples). 
Abonnez une adresse e-mail à une rubrique.  

```
        /// <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;
        }
```
Abonnez une file d’attente à une rubrique avec des filtres facultatifs.  

```
    /// <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;
    }
```
+  Pour plus de détails sur l’API, consultez [Subscribe](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/Subscribe) dans la *Référence des API du kit AWS SDK pour .NET *. 

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

**SDK pour C\$1\$1**  
 Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sns#code-examples). 
Abonnez une adresse e-mail à une rubrique.  

```
//! 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();
}
```
Abonnez une application mobile à une rubrique.  

```
//! 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();
}
```
Abonnez une fonction Lambda à une rubrique.  

```
//! 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();
}
```
Abonnez une file d’attente SQS à une rubrique.  

```
        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;
            }
```
Abonnez-vous avec un filtre à une rubrique.  

```
        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;
}
```
+  Pour plus de détails sur l’API, consultez [Subscribe](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/Subscribe) dans la *Référence des API du kit AWS SDK pour C\$1\$1 *. 

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

**AWS CLI**  
**Pour s’abonner à une rubrique**  
La commande `subscribe` suivante abonne une adresse e-mail à la rubrique spécifiée.  

```
aws sns subscribe \
    --topic-arn arn:aws:sns:us-west-2:123456789012:my-topic \
    --protocol email \
    --notification-endpoint my-email@example.com
```
Sortie :  

```
{
    "SubscriptionArn": "pending confirmation"
}
```
+  Pour plus d’informations sur l’API, consultez [Subscribe](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/subscribe.html) dans la *Référence des commandes AWS CLI *. 

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

**Kit SDK pour Go V2**  
 Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/gov2/workflows/topics_and_queues#code-examples). 
Abonnez une file d’attente à une rubrique avec des filtres facultatifs.  

```
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
}
```
+  Pour plus de détails sur l’API, consultez [Subscribe](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/sns#Client.Subscribe) dans la *Référence des API du kit AWS SDK pour Go *. 

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

**SDK pour Java 2.x**  
 Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 
Abonnez une adresse e-mail à une rubrique.  

```
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);
        }
    }
}
```
Abonnez un point de terminaison HTTP à une rubrique.  

```
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);
        }
    }
}
```
Abonnez une fonction Lambda à une rubrique.  

```
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 "";
    }
}
```
+  Pour plus de détails sur l’API, consultez [Subscribe](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Subscribe) dans la *Référence des API du kit AWS SDK for Java 2.x *. 

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

**SDK pour JavaScript (v3)**  
 Il y en a plus à ce sujet GitHub. Trouvez l'exemple complet et découvrez comment le configurer et l'exécuter dans le [ référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Créez le client dans un module séparé et exportez-le.  

```
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({});
```
Importez le kit SDK et les modules client et appelez l’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'
  // }
};
```
Abonnez une application mobile à une rubrique.  

```
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;
};
```
Abonnez une fonction Lambda à une rubrique.  

```
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;
};
```
Abonnez une file d’attente SQS à une rubrique.  

```
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;
};
```
Abonnez-vous avec un filtre à une rubrique.  

```
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;
};
```
+  Pour plus d’informations, consultez le [AWS SDK pour JavaScript Guide du développeur](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-subscribing-email). 
+  Pour de plus amples informations sur l’API, consultez [S’abonner](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/SubscribeCommand) dans *AWS SDK pour JavaScript Référence de l’API*. 

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

**SDK pour Kotlin**  
 Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin/services/sns#code-examples). 
Abonnez une adresse e-mail à une rubrique.  

```
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()
    }
}
```
Abonnez une fonction Lambda à une rubrique.  

```
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}")
    }
}
```
+  Pour plus d’informations sur l’API, consultez la section [S’abonner](https://sdk.amazonaws.com/kotlin/api/latest/index.html) de la *référence du kit SDK AWS pour l’API Kotlin*. 

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

**Kit SDK pour PHP**  
 Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 
Abonnez une adresse e-mail à une rubrique.  

```
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());
}
```
Abonnez un point de terminaison HTTP à une rubrique.  

```
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());
}
```
+  Pour de plus amples informations sur l’API, consultez [S’abonner](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/Subscribe) dans *AWS SDK pour PHP Référence de l’API*. 

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

**Kit SDK for Python (Boto3)**  
 Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/sns#code-examples). 
Abonnez une adresse e-mail à une rubrique.  

```
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
```
Abonnez une file d’attente à une rubrique avec des filtres facultatifs.  

```
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
```
+  Pour plus de détails sur l’API, consultez [Subscribe](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Subscribe) dans la *Référence des API du kit AWS SDK for Python (Boto3)*. 

------
#### [ Ruby ]

**Kit SDK pour Ruby**  
 Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/ruby/example_code/sns#code-examples). 
Abonnez une adresse e-mail à une rubrique.  

```
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
```
+  Pour plus d’informations, consultez le [AWS SDK pour Ruby Guide du développeur](https://docs.aws.amazon.com/sdk-for-ruby/v3/developer-guide/sns-example-create-subscription.html). 
+  Pour de plus amples informations sur l’API, consultez [S’abonner](https://docs.aws.amazon.com/goto/SdkForRubyV3/sns-2010-03-31/Subscribe) dans *AWS SDK pour Ruby Référence de l’API*. 

------
#### [ Rust ]

**SDK pour Rust**  
 Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/rustv1/examples/sns#code-examples). 
Abonnez une adresse e-mail à une rubrique.  

```
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(())
}
```
+  Pour plus de détails sur l’API, consultez [Subscribe](https://docs.rs/aws-sdk-sns/latest/aws_sdk_sns/client/struct.Client.html#method.subscribe) dans *Référence du kit SDK AWS pour l’API Rust*. 

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

**Kit SDK pour SAP ABAP**  
 Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap/services/sns#code-examples). 
Abonnez une adresse e-mail à une rubrique.  

```
    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.
```
+  Pour plus de détails sur l’API, consultez [Subscribe](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html) dans la *Référence des API du kit AWS SDK pour SAP ABAP*. 

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

**Kit SDK pour Swift**  
 Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/swift/example_code/sns#code-examples). 
Abonnez une adresse e-mail à une rubrique.  

```
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.")
```
Abonnez un numéro de téléphone à une rubrique pour recevoir des notifications par 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.")
```
+  Pour plus de détails sur l’API, consultez [Subscribe](https://sdk.amazonaws.com/swift/api/awssns/latest/documentation/awssns/snsclient/subscribe(input:)) dans la *Référence des API du kit AWS SDK pour Swift*. 

------