

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Utilizzo di Amazon SNS per la messaggistica application-to-person
<a name="sns-user-notifications"></a>

La messaggistica Amazon SNS application-to-person (A2P) ti consente di inviare notifiche e avvisi direttamente ai dispositivi mobili dei tuoi clienti tramite SMS (Short Message Service). Utilizzando questa funzionalità, puoi inviare notifiche push alle app mobili, messaggi di testo ai numeri di cellulare e messaggi di testo semplice agli indirizzi e-mail. Inoltre, hai la flessibilità di distribuire messaggi utilizzando argomenti per raggiungere più destinatari o di pubblicare messaggi direttamente su singoli endpoint mobili per comunicazioni personalizzate.

Questo argomento spiega come utilizzare Amazon SNS per le notifiche degli utenti con abbonati come applicazioni mobili, numeri di cellulare e indirizzi e-mail.

![\[Una panoramica di come Amazon SNS supporta la messaggistica application-to-person (A2P) consentendo agli editori di inviare notifiche direttamente ai clienti. Mostra due modi principali di distribuire i messaggi: la pubblicazione diretta su singoli endpoint (come indirizzi e-mail, numeri di telefono o app mobili) e la pubblicazione basata su argomenti, che invia messaggi a più abbonati contemporaneamente. Gli abbonati, rappresentati sulla destra, possono ricevere notifiche tramite notifiche push, messaggi di testo o e-mail, offrendo flessibilità per diversi casi d'uso.\]](http://docs.aws.amazon.com/it_it/sns/latest/dg/images/sns-a2p-overview.png)


# Messaggi di testo mobili con Amazon SNS
<a name="sns-mobile-phone-number-as-subscriber"></a>

**Importante**  
La Amazon SNS SMS Developer Guide è stata aggiornata. Amazon SNS è integrato [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)per la consegna di messaggi SMS. Questa guida contiene le informazioni più recenti su come creare, configurare e gestire i messaggi SMS di Amazon SNS.

La messaggistica di testo mobile (SMS) di Amazon SNS è progettata per facilitare la consegna dei messaggi su varie piattaforme, come applicazioni Web, mobili e aziendali che supportano gli SMS. Gli utenti possono inviare messaggi a uno o più numeri di telefono abbonandoli a un argomento, semplificando il processo di distribuzione.

I messaggi Amazon SNS vengono recapitati da AWS End User Messaging SMS, il che garantisce una trasmissione affidabile dei messaggi. [All'interno di Amazon SNS APIs, puoi impostare varie proprietà come tipi di messaggi (promozionali o transazionali), [limiti di spesa mensili](sms_preferences.md#sms_preferences_console), [elenchi di opt-out](sms_manage.md#sms_manage_optout) e ottimizzazione della consegna dei messaggi.](sms_preferences.md#sms_preferences_console)

AWS End User Messaging SMS gestisce la trasmissione di messaggi al numero di telefono di destinazione attraverso la sua rete globale di fornitura di SMS. Gestisce il routing, lo stato di consegna e qualsiasi richiesta di conformità alle normative regionali. [Per accedere a funzionalità SMS aggiuntive come autorizzazioni granulari, pool di telefoni, set di configurazioni, simulatore SMS e regole nazionali, consulta la Guida per l'utente.AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/configurations.html)

![\[Un'illustrazione di come Amazon SNS si integra per distribuire messaggi di testo AWS End User Messaging SMS mobili in modo affidabile. I messaggi possono essere inviati direttamente a singoli destinatari o distribuiti a gruppi tramite argomenti di Amazon SNS. AWS End User Messaging SMS gestisce il routing, la consegna e la conformità dei messaggi attraverso la sua rete globale, garantendo scalabilità e affidabilità. Questa configurazione consente inoltre di configurare le preferenze dei messaggi, gestire i limiti di spesa e monitorare lo stato di consegna per ottimizzare la messaggistica. AWS SMS\]](http://docs.aws.amazon.com/it_it/sns/latest/dg/images/sns-sms-end-user-messaging.png)


Le seguenti funzionalità chiave ti aiutano a inviare messaggi SMS Amazon SNS scalabili e facilmente estensibili:

**[Personalizza le preferenze dei messaggi](sms_preferences.md)**  
Personalizza le consegne di SMS per te Account AWS impostando le preferenze relative agli SMS in base al tuo budget e al tuo caso d'uso. Ad esempio, puoi scegliere se dare priorità ai tuoi messaggi all'efficienza dei costi o alla consegna affidabile.

**[Imposta le quote di spesa](channels-sms-awssupport-spend-threshold.md)**  
Personalizza le tue consegne di SMS specificando le quote di spesa o per il recapito di singoli messaggi e le quote di spesa mensili per te. Account AWS Laddove richiesto dalle leggi e dai regolamenti locali (come Stati Uniti e Canada), i destinatari degli SMS possono [rinunciare](sms_manage.md#sms_manage_optout), il che significa che scelgono di non ricevere più messaggi SMS dall'utente. Account AWS Dopo che un destinatario ha scelto di non ricevere messaggi, puoi, con alcune limitazioni, inserire nuovamente il numero di telefono in modo da poter riprendere a inviare messaggi.

**[Invia messaggi SMS a livello globale](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html)**  
Amazon SNS supporta la messaggistica SMS in più regioni, consentendoti di inviare messaggi in oltre 240 paesi e regioni.

## In che modo Amazon SNS consegna i miei messaggi SMS?
<a name="sns-sms-pinpoint-integration"></a>

Quando richiedi ad Amazon SNS di inviare SMS per tuo conto, i messaggi vengono inviati tramite. AWS End User Messaging SMS L'integrazione tra Amazon SNS e AWS End User Messaging SMS offre i seguenti vantaggi:

**[Politiche IAM](sns-mobile-phone-number-getting-started.md#sns-mobile-phone-number-prerequisites)**  
Puoi sfruttare IAM e le policy relative alle risorse per controllare e distribuire l'accesso alle tue risorse SMS tra altri AWS servizi e regioni.

**Configurazioni [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/configurations.html)**  
Tutte le configurazioni relative all'ID di origine (creazione, aggiornamento della configurazione, provisioning di una nuova origine IDs, modifica dei modelli di registrazione) utilizzano. AWS End User Messaging SMS

**[AWS End User Messaging SMS fatturazione](https://aws.amazon.com/sns/sms-pricing/)**  
Tuttavia, tutta la fatturazione via SMS viene effettuata. AWS End User Messaging SMS Puoi consolidare la AWS spesa per i carichi di lavoro relativi agli SMS, procurando e gestendo le risorse SMS in un'unica posizione centrale.

# Guida introduttiva ad Amazon SNS SMS
<a name="sns-mobile-phone-number-getting-started"></a>

**Importante**  
La Amazon SNS SMS Developer Guide è stata aggiornata. Amazon SNS è integrato [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)per la consegna di messaggi SMS. Questa guida contiene le informazioni più recenti su come creare, configurare e gestire i messaggi SMS di Amazon SNS.

Questo argomento ti guida nella gestione della sandbox SMS e nella configurazione di IAM e policy basate sulle risorse per concedere ad Amazon SNS le autorizzazioni necessarie per accedere e utilizzare. AWS End User Messaging SMS APIs 

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

Amazon SNS consiglia di aggiornare la tua policy IAM per includere le seguenti azioni per garantire il controllo e la visibilità completi sulle tue risorse Amazon SNS:
+ [`AmazonSNSFullAccess`](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonSNSFullAccess)
+ [`AmazonSNSReadOnly`](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonSNSReadOnlyAccess) 

# Utilizzo della sandbox SMS di Amazon SNS
<a name="sns-sms-sandbox"></a>

Gli account SMS Amazon SNS appena creati vengono inseriti automaticamente nella sandbox SMS per garantire la sicurezza sia dei AWS clienti che dei destinatari mitigando il rischio di frodi e abusi. Questo ambiente funge da spazio sicuro per scopi di test e sviluppo. Mentre operi all'interno della sandbox SMS, hai accesso a tutte le funzionalità di Amazon SNS ma sei soggetto a determinate limitazioni:
+ Puoi inviare messaggi SMS solo a numeri di telefono di destinazione verificati.
+ Puoi avere un massimo di 10 numeri di telefono di destinazione verificati.
+ Puoi eliminare i numeri di telefono di destinazione solo dopo un minimo di 24 ore dalla verifica o dall'ultimo tentativo di verifica.

Una volta che l'account esce dalla sandbox, queste restrizioni vengono rimosse e puoi inviare messaggi SMS a qualsiasi destinatario.

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

I nuovi account Amazon SNS SMS vengono inseriti in una sandbox SMS. Utilizza i seguenti passaggi per creare e gestire i numeri di telefono nella sandbox, creare numeri di origine e mittente IDs e registrare la tua azienda.

1. Aggiungi un **numero di telefono di destinazione alla sandbox** SMS. Per dettagli sull'aggiunta, la gestione e lo spostamento dei numeri di telefono dalla sandbox SMS di Amazon SNS, consulta. [Aggiungere e verificare numeri di telefono nella sandbox SMS di Amazon SNS](sns-sms-sandbox-verifying-phone-numbers.md)

1. Crea un'**identità di origine** che i destinatari vedano sui loro dispositivi quando invii loro un messaggio SMS. Per ulteriori informazioni sulle identità di origine, compresi i diversi tipi che è possibile utilizzare, consulta la documentazione. [Identità di origine per i messaggi SMS di Amazon SNS](channels-sms-originating-identities.md)

1. **Registra** la tua azienda. Alcuni Paesi richiedono la registrazione dell'identità dell'azienda per poter acquistare i numeri di telefono o il mittente IDs e rivedere i messaggi inviati ai destinatari nel loro paese. Per informazioni sui paesi che richiedono la registrazione, consulta [Paesi e aree geografiche supportati per la messaggistica SMS AWS End User Messaging SMS nella Guida](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) per l'*AWS End User Messaging SMS utente*.

1. **Invia** i tuoi messaggi a un argomento o a un telefono cellulare. Per ulteriori informazioni, consulta [Invio di messaggi SMS tramite Amazon SNS](sms_sending-overview.md).

# Aggiungere e verificare numeri di telefono nella sandbox SMS di Amazon SNS
<a name="sns-sms-sandbox-verifying-phone-numbers"></a>

Prima di poter iniziare a inviare messaggi SMS Account AWS mentre ti trovi nella [sandbox SMS](sns-sms-sandbox.md), devi completare i seguenti passaggi di configurazione. Ciò garantisce che il tuo account sia pronto per la messaggistica SMS e che i numeri di telefono di destinazione siano verificati correttamente.

1. Crea un **[ID di origine](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-number-types.html)**. Analogamente agli account esterni alla sandbox SMS, è necessario un ID di origine prima di poter inviare messaggi SMS a destinatari in alcuni paesi o aree geografiche.

1. Aggiungi i **numeri di telefono di destinazione** a cui desideri inviare messaggi all'interno della sandbox SMS.

1. Verifica i **numeri di telefono** per assicurarti che i numeri di telefono di destinazione siano validi per l'uso nei tuoi messaggi SMS.

**Aggiungi e verifica i numeri di telefono di destinazione**

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel menu della console, scegli una [regione che supporti la messaggistica SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. Nel riquadro di navigazione, seleziona **Text messaging (SMS)** (SMS).

1. Nella sezione **Numeri di telefono di destinazione Sandbox**, seleziona **Aggiungi numero di telefono**.

1. In **Dettagli della destinazione**, fornisci le seguenti informazioni, quindi seleziona **Aggiungi numero di telefono:**
   + **Codice del paese** e **numero di telefono** della destinazione.
   + La **lingua** in cui desideri che venga inviato il messaggio di verifica.

1. Dopo aver aggiunto il numero di telefono, Amazon SNS invierà una OTP al numero di telefono di destinazione fornito. Questa OTP è necessaria per la verifica.

1. Riceverai l'OTP come messaggio SMS standard sul **numero di telefono di destinazione che hai fornito**.
   + Se non ricevi l'OTP entro 15 minuti, seleziona **Reinvia il codice di verifica** nella console Amazon SNS.
   + Puoi inviare nuovamente l'OTP fino a cinque volte in un periodo di 24 ore.

1. Dopo aver ricevuto l'OTP, inseriscilo nella casella **Codice di verifica** e seleziona **Verifica** numero di telefono.

1. Controlla lo **stato della verifica**.
   + Dopo aver verificato correttamente il numero di telefono, il numero di telefono e il relativo stato di verifica verranno visualizzati nella sezione dei **numeri di telefono di destinazione di Sandbox**.
   + Se lo stato è **In sospeso, la** verifica non ha avuto esito positivo. Ciò può accadere se, ad esempio, non hai inserito correttamente il prefisso internazionale.
   + Puoi eliminare i numeri di telefono in sospeso o verificati solo dopo 24 ore o più dall'ultimo tentativo di verifica.

1. Se desideri utilizzare lo stesso numero di telefono di destinazione in altre aree geografiche, **ripeti** i passaggi precedenti per ogni regione in cui intendi utilizzarlo.

## Risoluzione dei problemi relativi alla mancata ricezione di un testo OTP
<a name="sns-sms-sandbox-troubleshooting-phone-numbers"></a>

Risolvi i problemi più comuni che possono impedire a un numero di telefono di ricevere messaggi OTP.
+ Limite di **spesa SMS di Amazon SNS: se hai Account AWS superato il limite** di spesa per l'invio di messaggi SMS, è possibile che altri messaggi, inclusi gli SMS OTP, non vengano recapitati finché il limite non viene aumentato o il problema di fatturazione non viene risolto.
+ **Numero di telefono non utilizzato per le notifiche SMS:** in alcuni paesi o regioni, i destinatari devono attivare la ricezione di messaggi SMS da codici brevi, che vengono comunemente utilizzati per i messaggi OTP. Se il numero di telefono del destinatario non è abilitato, non riceverà il testo OTP.
+ **Restrizioni o filtri dell'operatore:** alcuni operatori di telefonia mobile potrebbero disporre di restrizioni o meccanismi di filtraggio che impediscono la consegna di determinati tipi di messaggi SMS, inclusi i messaggi OTP. Ciò potrebbe essere dovuto alle politiche di sicurezza o alle misure antispam implementate dal gestore.
+ **Numero di telefono non valido o errato:** se il numero di telefono fornito dal destinatario è errato o non valido, il testo OTP non verrà recapitato.
+ **Problemi di rete: problemi** o interruzioni temporanee della rete potrebbero impedire la consegna di messaggi SMS, inclusi SMS OTP, al telefono del destinatario.
+ **Consegna ritardata:** in alcuni casi, i messaggi SMS possono subire ritardi nella consegna a causa della congestione della rete o di altri fattori. Il testo OTP potrebbe alla fine essere recapitato, ma potrebbe subire ritardi oltre il periodo di tempo previsto.
+ **Sospensione o chiusura dell'account:** in caso di problemi con il tuo account Account AWS, come il mancato pagamento o la violazione dei AWS termini di servizio, le funzionalità di messaggistica di Amazon SNS, inclusi gli SMS OTP, potrebbero essere sospese o interrotte.

# Eliminazione di numeri di telefono dalla sandbox SMS di Amazon SNS
<a name="sns-sms-sandbox-deleting-phone-numbers"></a>

Puoi eliminare sia i numeri di telefono di destinazione in sospeso che quelli verificati dalla [sandbox SMS](sns-sms-sandbox.md).

**Importante**  
Puoi eliminare un numero di telefono solo 24 ore dopo [la verifica del numero di telefono](sns-sms-sandbox-verifying-phone-numbers.md) o 24 ore dopo l'ultimo tentativo di verifica.

**Per eliminare i numeri di telefono di destinazione dalla sandbox SMS**

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel menu della console, scegli una [regione che supporti la messaggistica SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html) a cui hai aggiunto un numero di telefono di destinazione.

1. Nel riquadro di navigazione, seleziona **Messaggi di testo (SMS)**.

1. Nella pagina **Messaggi di testo mobili (SMS)**, accedi alla sezione **Numeri di telefono di destinazione del Sandbox**.

1. Scegli il numero di telefono specifico che desideri eliminare, quindi scegli **Elimina numero di telefono**.

1. Per confermare che si desidera eliminare il numero di telefono, immettere **delete me** e quindi scegliere **Delete (Elimina)**.

   Assicurati che siano trascorse almeno 24 ore dalla verifica o dal tentativo di verificare il numero di telefono di destinazione prima di procedere con l'eliminazione.

1. Ripetere questi passaggi in ogni regione in cui è stato aggiunto il numero di telefono di destinazione e non si prevede più di utilizzarlo.

# Uscire dalla sandbox SMS di Amazon SNS
<a name="sns-sms-sandbox-moving-to-production"></a>

 Account AWS Per uscire dalla [sandbox SMS](sns-sms-sandbox.md) è necessario innanzitutto aggiungere, verificare e testare i numeri di telefono di destinazione. Dopo aver fatto ciò, crea una custodia con Supporto AWS.

**Per richiedere che il tuo AWS account venga rimosso dalla sandbox SMS**

1. **Verifica i numeri di telefono**

   1. Mentre ti Account AWS trovi nella sandbox SMS, apri la console [Amazon SNS](https://console.aws.amazon.com/sns/home).

   1. Nel pannello di navigazione, sotto Mobile, scegli Messaggi di **testo (SMS)**.

   1. Nella sezione Sandbox dedicata ai numeri di telefono di destinazione, [aggiungi e verifica](sns-sms-sandbox-verifying-phone-numbers.md) uno o più numeri di telefono di destinazione. Questa verifica garantisce che tu possa inviare e ricevere messaggi con successo.

1. **Prova la pubblicazione di SMS**

   1. Conferma di essere in grado di inviare e ricevere messaggi ad almeno un numero di telefono verificato. Per istruzioni più dettagliate su come pubblicare messaggi SMS, consulta[Pubblicazione di messaggi SMS su un telefono cellulare tramite Amazon SNS](sms_sending-overview.md#sms_publish-to-phone).

1. **Avvia la modifica della sandbox**

   1. Nella pagina **Messaggi di testo per dispositivi mobili (SMS)** della console Amazon SNS, sotto **Informazioni sull'account**, scegliere **Exit SMS sandbox (Uscire dalla sandbox SMS)**. Questa azione ti reindirizza all'Amazon [Support Center](https://support.console.aws.amazon.com/support/home?#/case/create?issueType=service-limit-increase) e crea automaticamente un caso di supporto con l'opzione di **aumento della quota di servizio** selezionata.

1. **Compila il modulo**

   1. Nel modulo di assistenza sotto **Aumento della quota di servizio**, procedi come segue:

     1. Scegli «**SNS Text Messaging**» come servizio.

     1. Fornisci l'**URL del sito Web** o **il nome dell'app** da cui intendi inviare messaggi SMS.

     1. Specificate il tipo di messaggi che invierete: **password monouso**, **promozionale** o **transazionale**.

     1. Scegli il tipo **Regione AWS**da cui inviare i messaggi SMS.

     1. Elenca i **paesi** o **le regioni** in cui intendi inviare messaggi SMS.

     1. Descrivi in che modo i tuoi **clienti scelgono di ricevere messaggi**.

     1. Includi tutti **i modelli di messaggio** che intendi utilizzare.

1. **Specificare quota e regione**

   1. In **Requests (Richieste)**, procedere come segue:

     1. Scegli **Regione AWS**dove vuoi spostare il tuo Account AWS.

     1. Scegli **i limiti generali** per il **tipo di risorsa**.

     1. Scegli **Exit SMS Sandbox** per **Quota**.

     1. (Facoltativo) Per richiedere ulteriori aumenti o altri aggiustamenti, scegli **Aggiungi un'altra richiesta** e specifica i dettagli necessari.

     1. In **Nuovo valore di quota**, inserisci il **limite** in USD che stai richiedendo.

1. **Dettagli aggiuntivi**

   1. Nella **descrizione del caso**, fornisci eventuali dettagli aggiuntivi pertinenti alla tua richiesta.

   1. In **Opzioni di contatto**, scegli la **lingua di contatto preferita**.

1. **Invia la richiesta**

   1. Scegli **Invia** a cui inviare la richiesta Supporto.

Il Supporto team fornisce una risposta iniziale alla tua richiesta entro 24 ore.

Per evitare che i nostri sistemi vengano utilizzati per l'invio di contenuti indesiderati o dannosi, ogni richiesta verrà analizzata attentamente da parte nostra. In seguito a questa valutazione, saremo in grado di gestire la tua richiesta durante le prime 24 ore. Tuttavia, se la risoluzione richiede ulteriori informazioni da parte tua, i tempi di gestione della richiesta potranno essere più lunghi.

Se il caso d'uso specifico non è conforme con le nostre policy, potremmo non essere in grado di gestire la tua richiesta.

# Identità di origine per i messaggi SMS di Amazon SNS
<a name="channels-sms-originating-identities"></a>

**Importante**  
La Amazon SNS SMS Developer Guide è stata aggiornata. Amazon SNS è integrato con [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)per la consegna di messaggi SMS. Questa guida contiene le informazioni più recenti su come creare, configurare e gestire i messaggi SMS di Amazon SNS.

Le identità di origine per i messaggi SMS sono identificatori utilizzati per rappresentare il mittente di un messaggio SMS. Puoi identificarti presso i destinatari utilizzando i seguenti tipi di identità di origine:

**Numeri di origine**  
Una stringa numerica che identifica il numero di telefono del mittente di un messaggio SMS. Esistono diversi tipi di numeri di origine, tra cui codici lunghi (numeri di telefono standard che in genere hanno 10 o più cifre), codici lunghi a 10 cifre (10DLC), numeri verdi (TFN) e codici brevi (numeri di telefono che contengono da quattro a sette cifre).  
Il supporto per i numeri di origine non è disponibile nei paesi in cui le leggi locali richiedono l'uso del mittente IDs anziché dei numeri di origine. Quando si invia un messaggio SMS utilizzando un numero di origine, il dispositivo del destinatario mostra il numero di origine come numero di telefono del mittente. È possibile specificare diversi numeri di origine in base al caso d'uso.  
*Per ulteriori informazioni, consulta [Numeri di telefono nella Guida per](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) l'AWS End User Messaging SMS utente.*  
Per visualizzare un elenco di tutti i numeri di origine esistenti nel tuo AWS account, nel riquadro di navigazione della console [Amazon SNS](https://console.aws.amazon.com/sns/home), **scegli** Origination numbers.

**Mittente IDs**  
Un nome alfabetico che identifica il mittente di un messaggio SMS. Quando invii un messaggio SMS utilizzando un ID mittente e il destinatario si trova in un'area in cui è supportata l'autenticazione dell'ID mittente, il tuo ID mittente viene visualizzato sul dispositivo del destinatario anziché il tuo numero di telefono. Un ID mittente offre ai destinatari di SMS maggiori informazioni sul mittente rispetto a un numero di telefono o un codice lungo o breve.  
 IDs I mittenti sono supportati in diversi paesi e aree geografiche in tutto il mondo. In alcuni, un’azienda che invia messaggi SMS a singoli clienti deve utilizzare un ID mittente preregistrato presso un ente normativo o un gruppo di settore. Per un elenco completo dei Paesi e delle aree geografiche che supportano o richiedono il mittente IDs, consulta [Paesi e aree geografiche supportati per la messaggistica SMS AWS End User Messaging SMS nella Guida](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) per l'*AWS End User Messaging SMS utente*.  
Non sono previsti costi aggiuntivi per l'utilizzo del mittente IDs. Tuttavia, il supporto e i requisiti per l'autenticazione dell'ID mittente variano in base al Paese. Diversi mercati importanti (tra cui Canada, Cina e Stati Uniti d'America) non supportano l'utilizzo del IDs mittente. In alcuni, le aziende che inviano messaggi SMS a singoli clienti devono utilizzare un ID mittente preregistrato presso un ente normativo o un gruppo di settore.  
Per ulteriori informazioni, consulta [Sender IDs nella Guida](https://docs.aws.amazon.com/sms-voice/latest/userguide/sender-id.html) per l'*AWS End User Messaging SMS utente*.

# Configurazione della messaggistica SMS in Amazon SNS
<a name="channels-sms-configurations"></a>

**Importante**  
La Amazon SNS SMS Developer Guide è stata aggiornata. Amazon SNS è integrato con [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)per la consegna di messaggi SMS. Questa guida contiene le informazioni più recenti su come creare, configurare e gestire i messaggi SMS di Amazon SNS.

Puoi utilizzare le configurazioni di Amazon SNS SMS per impostare le preferenze SMS in base alle tue esigenze, ad esempio regolando le quote di spesa e impostando la registrazione dello stato di consegna. Questo argomento fornisce anche dettagli su come pubblicare messaggi SMS su argomenti utilizzando la console e l' AWS SDK di Amazon SNS, gestire in modo efficiente le quote e recuperare statistiche dettagliate sull'attività degli SMS.

# Invio di messaggi SMS tramite Amazon SNS
<a name="sms_sending-overview"></a>

Questa sezione descrive come inviare messaggi SMS utilizzando Amazon SNS, inclusa la pubblicazione su un argomento, l'iscrizione di numeri di telefono agli argomenti, l'impostazione degli attributi sui messaggi e la pubblicazione diretta sui telefoni cellulari.

## Pubblicazione di messaggi SMS su un argomento di Amazon SNS
<a name="sms_publish-to-topic"></a>

Puoi inviare un singolo messaggio SMS a più numeri di telefono contemporaneamente sottoscrivendo tali numeri in un argomento Amazon SNS. Un argomento SNS è un canale di comunicazione dove è possibile aggiungere gli abbonati ai quali si vogliono indirizzare determinati messaggi. Un abbonato riceve tutti i messaggi pubblicati sull'argomento fino a quando non annulli l'abbonamento o finché l'abbonato non sceglie di non ricevere messaggi SMS dal tuo account. AWS 

### Invio di un messaggio a un argomento tramite la console AWS
<a name="sms_publish-to-topic_console"></a>

**Per creare un argomento**

Se ancora non disponi di un argomento al quale inviare messaggi SMS, completa i seguenti passaggi.

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel menu della console, scegli una [regione che supporti la messaggistica SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. Nel pannello di navigazione, scegli **Argomenti**.

1. Nella pagina **Topics (Argomenti)**, seleziona **Create new topic (Crea nuovo argomento)**.

1. Nella pagina **Create topic (Crea argomento)**, in **Details (Dettagli)**, effettuare le seguenti operazioni:

   1. Per **Tipo**, scegliere **Standard**.

   1. In **Name (Nome)**, immettere un nome.

   1. (Facoltativo) In **Display name (Nome visualizzato)**, inserisci un prefisso personalizzato per il messaggio SMS. Quando invii un messaggio all'argomento, Amazon SNS antepone il nome visualizzato a una parentesi angolare destra (>) e uno spazio. I nomi visualizzati non sono sensibili alle maiuscole/minuscole, in quanto sarà poi Amazon SNS a convertirli in caratteri maiuscoli. Ad esempio, se il nome visualizzato di un argomento è `MyTopic` e il messaggio è `Hello World!`, il messaggio appare in questo formato:

      ```
      MYTOPIC> Hello World!
      ```

1. Scegliere **Create topic (Crea argomento)**. Il nome dell'argomento e l'Amazon Resource Name (ARN) vengono visualizzati nella pagina **Topics (Argomenti)**

**Per creare una sottoscrizione SMS**

Con le sottoscrizioni puoi inviare un messaggio SMS a più destinatari pubblicandolo una volta sola nel tuo argomento.
**Nota**  
Quando inizi a utilizzare Amazon SNS per inviare messaggi SMS, il tuo AWS account si trova nella sandbox *SMS*. La sandbox SMS offre un ambiente sicuro per provare le funzionalità Amazon SNS senza rischiare la reputazione del mittente SMS. Quando il tuo account è nella sandbox SMS, puoi utilizzare tutte le caratteristiche di Amazon SNS, ma puoi inviare SMS solo a numeri di telefono di destinazione verificati. Per ulteriori informazioni, consulta [Utilizzo della sandbox SMS di Amazon SNS](sns-sms-sandbox.md).

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel riquadro di navigazione scegli **Subscriptions (Sottoscrizioni)**.

1. Nella pagina **Sottoscrizioni** scegli **Crea sottoscrizione**.

1. Nella pagina **Create subscription (Crea sottoscrizione)**, nella sezione **Details (Dettagli)**, eseguire queste operazioni:

   1. Per **Topic ARN (ARN argomento)**, inserisci o seleziona l'Amazon Resource Name (ARN) dell'argomento a cui desideri inviare messaggi SMS.

   1. In **Protocol (Protocollo)**, scegli **SMS**.

   1. Per **Endpoint**, inserisci il numero di telefono a cui desideri iscriverti all'argomento.

1. Scegli **Create Subscription (Crea sottoscrizione)**. Le informazioni sull'abbonamento vengono visualizzate nella pagina **Subscriptions (Abbonamenti)**.

   Per aggiungere altri numeri di telefono, ripetere questi passaggi. Puoi anche aggiungere altri tipi di sottoscrizione, ad esempio le e-mail.

**Come inviare un messaggio**

Quando pubblichi un messaggio in un argomento, Amazon SNS prova a consegnare il messaggio a tutti i numeri di telefono che hanno effettuato la sottoscrizione a un dato argomento.

1. Nella [Console Amazon SNS](https://console.aws.amazon.com/sns/home), nella pagina **Topics (Argomenti)**, scegli il nome dell'argomento a cui desideri inviare messaggi SMS.

1. Nella pagina dettagli, seleziona **Publish message (Pubblica messaggio)**.

1. Nella pagina **Publish message to topic (Pubblica messaggio nell'argomento)**, alla sezione **Message details (Dettagli messaggio)** procedi come indicato di seguito:

   1. Per **Subject (Oggetto)**, lascia il campo vuoto a meno che il tuo argomento non contenga anche sottoscrizioni e-mail e tu non voglia pubblicare il messaggio sulle sottoscrizioni e-mail ed SMS. Amazon SNS utilizza il **Subject (Oggetto)** che inserisci come oggetto dell'e-mail.

   1. (Facoltativo) Per **Time to Live (TTL) (Durata)**, inserisci un numero di secondi che Amazon SNS deve inviare il tuo messaggio SMS a tutti gli abbonati agli endpoint delle applicazioni mobili.

1. Su **Message body (Corpo del messaggio)**, procedere come segue:

   1. Per **Message structure (Struttura dei messaggi)**, scegliere **Identical payload for all delivery protocols (Payload identico per tutti i protocolli di consegna)** per inviare lo stesso messaggio a tutti i tipi di protocollo sottoscritti all'argomento. In alternativa, scegliere **Custom payload for each delivery protocol (Payload personalizzato per ogni protocollo di consegna)** per personalizzare il messaggio per i sottoscrittori di diversi tipi di protocollo. Ad esempio, è possibile immettere un messaggio predefinito per gli abbonati al numero di telefono e un messaggio personalizzato per i sottoscrittori di posta elettronica.

   1. Per **Message body to send to the endpoint (Corpo del messaggio da inviare all'endpoint)**, immettere il messaggio o i messaggi personalizzati per protocollo di recapito.

      Se il tuo argomento ha un nome visualizzato, Amazon SNS lo aggiunge al messaggio, aumentando così la lunghezza del messaggio. La lunghezza del nome visualizzato dipende dal numero di caratteri nel nome più due per la parentesi angolare destra (>) e lo spazio aggiunto da Amazon SNS.

      Per informazioni sulle dimensioni massime degli SMS, consulta [Pubblicazione di messaggi SMS su un telefono cellulare tramite Amazon SNS](#sms_publish-to-phone).

1. (Facoltativo) Per **gli attributi dei messaggi**, aggiungi i metadati dei messaggi come timestamp, firme e. IDs

1. Seleziona **Publish message (Pubblica messaggio)**. Amazon SNS invia il messaggio SMS e ne visualizza quindi la conferma.

### Invio di un messaggio a un argomento utilizzando il AWS SDKs
<a name="sms_publish-to-topic_sdk"></a>

Per utilizzare un AWS SDK, devi configurarlo con le tue credenziali. *Per ulteriori informazioni, consulta [I file di configurazione e credenziali condivisi nella and](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) Tools Reference AWS SDKs Guide.*

Il codice di esempio seguente mostra come fare per:
+ Creazione di un argomento Amazon SNS.
+ Sottoscrivere un numero di telefono cellulare all’argomento.
+ Pubblicazione di messaggi SMS nell’argomento in modo che tutti i numeri di telefono sottoscritti ricevano il messaggio in una sola volta.

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

**SDK per Java 2.x**  
 C'è di più su. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 
Creare un argomento e restituire il suo 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 "";
    }
}
```
Sottoscrivere un endpoint a un argomento.  

```
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);
        }
    }
}
```
Impostare gli attributi del messaggio, ad esempio l’ID del mittente, il prezzo massimo e il relativo tipo. Gli attributi del messaggio sono facoltativi.  

```
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);
        }
    }
}
```
Pubblicare un messaggio in un argomento. Il messaggio viene inviato a ogni abbonato.  

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

------

## Pubblicazione di messaggi SMS su un telefono cellulare tramite Amazon SNS
<a name="sms_publish-to-phone"></a>

Puoi utilizzare Amazon SNS per inviare messaggi SMS direttamente a un telefono cellulare senza sottoscrivere il numero di telefono a un argomento Amazon SNS.

**Nota**  
La sottoscrizione di numeri di telefono a un argomento è utile se desideri inviare un messaggio a più numeri di telefono contemporaneamente. Per istruzioni sulla pubblicazione di un messaggio SMS in un argomento, consulta [Pubblicazione di messaggi SMS su un argomento di Amazon SNS](#sms_publish-to-topic).

Quando invii un messaggio, puoi controllare se è ottimizzato relativamente al costo e all'affidabilità della consegna. È anche possibile specificare un [sender ID or origination number (ID mittente o numero di origine)](channels-sms-originating-identities.md). Se invii il messaggio in modo programmatico utilizzando l'API Amazon SNS o AWS SDKs il, puoi specificare un prezzo massimo per la consegna del messaggio.

Ogni messaggio SMS può contenere fino a 140 byte, mentre la quota di caratteri dipende dallo schema di codifica. Ad esempio, un messaggio SMS può contenere:
+ 160 caratteri GSM
+ 140 caratteri ASCII
+ 70 caratteri UCS-2

Se il messaggio supera la quota della dimensione, Amazon SNS lo invia sotto forma di più messaggi, ciascuno nel rispetto della quota della dimensione indicata. I messaggi non vengono troncati nel mezzo di una parola ma tra una parola e l'altra. Le quota della dimensione totale massima di una singola pubblicazione SMS è di 1600 byte.

Quando invii un SMS, specifichi il numero di telefono utilizzando il formato E.164, una struttura di numerazione standard utilizzata per le telecomunicazioni internazionali. I numeri di telefono che seguono questo formato possono avere un massimo di 15 cifre oltre al prefisso con il segno più (\$1) e il prefisso del paese. Ad esempio, un numero di telefono statunitense in formato E.164 viene visualizzato come \$11. XXX5550100

### Invio di un messaggio (Console)
<a name="sms_publish_console"></a>

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel menu della console, scegli una [regione che supporti la messaggistica SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. Nel riquadro di navigazione, seleziona **Text messaging (SMS)** (SMS).

1. Nella pagina **Messaggi di testo per dispositivi mobili (SMS)** scegli **Pubblicazione di testo**.

1. Nella pagina **Pubblicazione di messaggi SMS**, per **Tipo di messaggio** scegliere una delle opzioni seguenti:
   + **Promotional (Promozionali)** - Messaggi non critici, come i messaggi di marketing.
   + **Transactional (Transazionali)** - Messaggi critici che supportano le transazioni dei clienti, come le password monouso per l'autenticazione a più fattori.
**Nota**  
Questa impostazione a livello di messaggio sostituisce il tipo di messaggio predefinito a livello di account. È possibile impostare un tipo di messaggio predefinito a livello di account dalla sezione **Preferenze di messaggistica** della pagina **Messaggi di testo per dispositivi mobili (SMS)**.

   Per informazioni sulle tariffe relative a messaggi promozionali e transazionali, consulta la pagina relativa alle [tariffe SMS globali](https://aws.amazon.com/sns/sms-pricing/).

1. In **Number (Numero)**, inserisci il numero di telefono al quale vuoi inviare il messaggio.

1. In **Message (Messaggio)**, inserisci il testo da inviare.

1. (Facoltativo) Su **Identità di origine**, specificare come identificarsi ai destinatari:
   + Per specificare l'**ID mittente**, digita un ID personalizzato contenente da 3 a 11 caratteri alfanumerici, tra cui almeno una lettera e nessuno spazio. L'ID mittente viene visualizzato come mittente del messaggio sul dispositivo ricevente. Ad esempio, puoi utilizzare il tuo marchio commerciale per rendere più facilmente riconoscibile l'origine del messaggio.

     Il supporto per il mittente IDs varia in base al Paese e all' and/or area geografica. Ad esempio, i messaggi consegnati a numeri di telefono statunitensi non visualizzeranno l'ID mittente. Per i paesi e le aree geografiche che supportano il mittente IDs, consulta [Paesi e aree geografiche supportati per la messaggistica SMS AWS End User Messaging SMS nella Guida](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) per l'*AWS End User Messaging SMS utente*.

     Se non specifichi un ID mittente, una delle seguenti identità verrà visualizzata come identità di origine:
     + Nei paesi che supportano codici lunghi, verrà visualizzato il codice lungo.
     + Nei paesi in cui è supportato solo il mittente, IDs viene visualizzato l'*AVVISO*.

     Tale ID mittente a livello di messaggio sovrascrive l'ID mittente predefinito, che è stato impostato sulla pagina **Text messaging preferences** (Preferenze messaggi di testo).
   + Per specificare un **Numero di origine**, inserisci una stringa di 5-14 numeri da visualizzare come numero di telefono del mittente sul dispositivo del ricevitore. Questa stringa deve corrispondere a un numero di origine configurato nel tuo paese Account AWS di destinazione. Il numero di origine può essere un numero da 10 DLC, un numero verde, un codice person-to-person lungo o codici brevi. Per ulteriori informazioni, consulta [Identità di origine per i messaggi SMS di Amazon SNS](channels-sms-originating-identities.md).

     Se non specifichi un numero di origine, Amazon SNS seleziona un numero di origine da utilizzare per il messaggio di testo SMS, in base alla configurazione di Account AWS .

1. Se invii messaggi SMS ai destinatari in India, espandi **Attributi specifici del paese** e specifica gli attributi seguenti:
   + **ID entità** — L'ID entità o l'ID entità principale (PE) per l'invio di messaggi SMS ai destinatari in India. Questo ID è una stringa univoca di 1-50 caratteri fornita dalla Telecom Regulatory Authority of India (TRAI) per identificare l'entità registrata presso il TRAI.
   + **ID modello** — L'ID modello per l'invio di messaggi SMS ai destinatari in India. Questo ID è una stringa univoca fornita da TRAI di 1-50 caratteri che identificherà il modello registrato con TRAI. L'ID modello deve essere associato all'ID mittente specificato per il messaggio.

   Per ulteriori informazioni sull'invio di messaggi SMS a destinatari in [India, consulta la procedura di registrazione dell'ID mittente indiano nella Guida](https://docs.aws.amazon.com/sms-voice/latest/userguide/registrations-sms-senderid-india.html) per l'*AWS End User Messaging SMS utente*.

1. Seleziona **Publish message (Pubblica messaggio)**.

**Suggerimento**  
Per inviare messaggi SMS da un numero di origine, puoi anche scegliere **Numeri di origine** nel pannello di navigazione della console Amazon SNS. Scegliere un numero di origine che includa **SMS** nella colonna **Capabilities (Funzionalità)**, quindi scegliere **Pubblicazione di testo**.

### Invio di un messaggio ()AWS SDKs
<a name="sms_publish_sdk"></a>

Per inviare un messaggio SMS utilizzando uno di questi AWS SDKs, utilizza l'operazione API in quell'SDK che corrisponde alla `Publish` richiesta nell'API Amazon SNS. Con questa richiesta, puoi inviare un messaggio SMS direttamente a un numero di telefono. Puoi anche utilizzare il parametro `MessageAttributes` per impostare i valori per i seguenti nomi attributo:

**`AWS.SNS.SMS.SenderID`**  
Un ID personalizzato che contiene da 3 a 11 caratteri alfanumerici o caratteri trattino (-), tra cui almeno una lettera e nessuno spazio. L'ID mittente viene visualizzato come mittente del messaggio sul dispositivo ricevente. Ad esempio, puoi utilizzare il tuo marchio commerciale per aiutare a rendere più facilmente riconoscibile l'origine del messaggio.  
Il supporto per il mittente IDs varia in base al Paese o all'area geografica. Nei messaggi recapitati a numeri di telefono degli Stati Uniti, ad esempio, non viene visualizzato l'ID mittente. Per un elenco dei paesi o delle aree geografiche che supportano il mittente IDs, consulta [Paesi e aree geografiche supportati per la messaggistica SMS AWS End User Messaging SMS nella Guida](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) per l'*AWS End User Messaging SMS utente*.  
Se non specifichi un ID mittente, il messaggio visualizzerà un [codice lungo](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-request-long-code.html) come ID mittente nei paesi o nelle regioni supportati. Per i paesi o le regioni che richiedono un ID mittente in forma alfabetica, il messaggio visualizza *NOTICE (PREAVVISO)* come ID mittente.  
Questo attributo a livello di messaggio sovrascrive l'attributo a livello di account `DefaultSenderID`, che può essere impostato tramite la richiesta `SetSMSAttributes`.

**`AWS.MM.SMS.OriginationNumber`**  
Una stringa personalizzata di 5-14 numeri, che può includere un segno \$1 iniziale opzionale (`+`). Questa stringa di numeri viene visualizzata come numero di telefono del mittente sul dispositivo ricevente. La stringa deve corrispondere a un numero di origine configurato nel tuo AWS account per il paese di destinazione. Il numero di origine può essere un numero da 10 DLC, un numero verde, un codice lungo person-to-person (P2P) o un codice breve. *Per ulteriori informazioni, consulta Numeri di [telefono](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) nella Guida per l'utente.AWS End User Messaging SMS *  
Se non specifichi un numero di origine, Amazon SNS sceglie un numero di origine in base alla configurazione del tuo account. AWS 

**`AWS.SNS.SMS.MaxPrice`**  
L'importo massimo in dollari che sei disposto a spendere per inviare il messaggio SMS. Amazon SNS non invierà il messaggio nel caso in cui il costo dovesse superare il prezzo massimo.  
Questo attributo non ha effetto se i costi month-to-date degli SMS hanno già superato la quota impostata per l'attributo. `MonthlySpendLimit` È possibile impostare `MonthlySpendLimit` utilizzando l'attributo `SetSMSAttributes`.  
Quando invii il messaggio a un argomento Amazon SNS, a ogni messaggio inviato viene applicato il prezzo massimo a ognuno dei numeri di telefono sottoscritti a un dato argomento.

**`AWS.SNS.SMS.SMSType`**  
Tipo di messaggio che intendi inviare:  
+ **`Promotional`** (impostazione predefinita) - Messaggi non critici, come i messaggi di marketing.
+ **`Transactional`** – Messaggi critici che supportano le transazioni dei clienti, come i passcode monouso per l'autenticazione a più fattori.
Questo attributo a livello di messaggio sovrascrive l'attributo a livello di account `DefaultSMSType`, che può essere impostato tramite la richiesta `SetSMSAttributes`.

**`AWS.MM.SMS.EntityId`**  
Questo attributo è necessario solo per l'invio di messaggi SMS ai destinatari in India.  
ID entità o ID entità principale (PE) per l'invio di messaggi SMS ai destinatari in India. Questo ID è una stringa univoca di 1-50 caratteri fornita dalla Telecom Regulatory Authority of India (TRAI) per identificare l'entità registrata presso il TRAI.

**`AWS.MM.SMS.TemplateId`**  
Questo attributo è necessario solo per l'invio di messaggi SMS ai destinatari in India.  
Questo è il modello per inviare messaggi SMS ai destinatari in India. Questo ID è una stringa univoca fornita da TRAI di 1-50 caratteri che identificherà il modello registrato con il TRAI. L'ID modello deve essere associato all'ID mittente specificato per il messaggio.

#### Invio di un messaggio
<a name="sms_publish_sdks"></a>

Negli esempi di codice seguenti viene illustrato come pubblicare messaggi SMS utilizzando Amazon SNS.

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

**SDK per .NET**  
 C'è altro da fare GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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}");
            }
        }
    }
}
```
+  Per informazioni dettagliate sull’API, consulta [Pubblicazione](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/Publish) nella *documentazione di riferimento dell’API AWS SDK per .NET *. 

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

**SDK per C\$1\$1**  
 C'è dell'altro GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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();
}
```
+  Per informazioni dettagliate sull’API, consulta [Pubblicazione](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/Publish) nella *documentazione di riferimento dell’API AWS SDK per C\$1\$1 *. 

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

**SDK per Java 2.x**  
 C'è dell'altro GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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);
        }
    }
}
```
+  Per informazioni dettagliate sull’API, consulta [Pubblicazione](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Publish) nella *documentazione di riferimento dell’API AWS SDK for Java 2.x *. 

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

**SDK per Kotlin**  
 C'è dell'altro GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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.")
    }
}
```
+  Per informazioni dettagliate sull’API, consulta [Pubblicazione](https://sdk.amazonaws.com/kotlin/api/latest/index.html) nella *documentazione di riferimento dell’API AWS SDK per Kotlin*. 

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

**SDK per PHP**  
 C'è dell'altro GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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());
}
```
+  Per ulteriori informazioni, consulta la [Guida per sviluppatori di AWS SDK per PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#publish-to-a-text-message-sms-message). 
+  Per informazioni dettagliate sull’API, consulta [Pubblicazione](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/Publish) nella *documentazione di riferimento dell’API AWS SDK per PHP *. 

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

**SDK per Python (Boto3)**  
 C'è dell'altro GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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
```
+  Per informazioni dettagliate sull’API, consulta [Pubblicazione](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Publish) nella *documentazione di riferimento dell’API SDK for Python (Boto3)AWS *. 

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

**SDK per SAP ABAP**  
 C'è altro da fare. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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.
```
+  Per informazioni dettagliate sulle API, consulta [Publish](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html) nella *documentazione di riferimento dell'SDK AWS per l'API SAP ABAP*. 

------

# Impostazione delle preferenze di messaggistica SMS in Amazon SNS
<a name="sms_preferences"></a>

Utilizza Amazon SNS per specificare le preferenze per i messaggi SMS. Ad esempio, puoi specificare se ottimizzare le consegne per costo o affidabilità, il limite di spesa mensile, la registrazione delle consegne e se eseguire la sottoscrizione a report di utilizzo di SMS giornalieri.

Queste preferenze diventano effettive per ogni SMS che invii dal tuo account, ma alcune possono essere sovrascritte all'invio di un singolo messaggio. Per ulteriori informazioni, consulta [Pubblicazione di messaggi SMS su un telefono cellulare tramite Amazon SNS](sms_sending-overview.md#sms_publish-to-phone).

## Impostazione delle preferenze per i messaggi SMS utilizzando il Console di gestione AWS
<a name="sms_preferences_console"></a>

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Scegliere una [regione che supporti la messaggistica SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. Nel pannello di navigazione, scegli **Mobile** e poi **Messaggi di testo (SMS)**.

1. Nella pagina **Mobile text messaging (SMS) (Messaggi di testo mobili (SMS))**, nella sezione **Text messaging preferences (Preferenze per i messaggi di testo)**, scegliere **Edit (Modifica)**.

1. Nella pagina **Modifica le preferenze per i messaggi di testo**, nella sezione **Dettagli**, effettuare queste operazioni:

   1. Per **Default message type (Tipo di messaggio predefinito)**, scegliere una di queste opzioni:
      + **Promozionale**: messaggi non critici (ad esempio marketing). Amazon SNS ottimizza la consegna dei messaggi per generare il costo più basso.
      + **Transazionale**: messaggi critici che supportano le transazioni dei clienti, come le password monouso per l'autenticazione a più fattori. Amazon SNS ottimizza la consegna dei messaggi per ottenere la migliore affidabilità.

      Per informazioni sulle tariffe relative a messaggi promozionali e transazionali, consulta la pagina relativa alle [tariffe SMS globali](https://aws.amazon.com/sns/sms-pricing/).

   1. In **Account spend limit (Limite di spesa per account)**, digitare l'importo massimo in USD da spendere in messaggi SMS ogni mese di calendario.
**Importante**  
Per impostazione predefinita, la quota di spesa è impostata a 1,00 USD. Se si desidera aumentare la quota di servizio, [inviare una richiesta](https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase&limitType=service-code-sns).
Se l'importo impostato nella console supera la quota di servizio, Amazon SNS interrompe la pubblicazione di messaggi SMS.
Poiché Amazon SNS è un sistema distribuito, blocca l'invio di SMS alcuni minuti dopo il superamento della quota di spesa. Se continui a inviare SMS durante tale intervallo, potresti incorrere in costi che superano la tua quota di spesa.

1. (Facoltativo) Per **Default sender ID (ID mittente predefinito)**, immettere un ID personalizzato, ad esempio il marchio aziendale, visualizzato come mittente sul dispositivo di ricezione.
**Nota**  
Il supporto per il mittente IDs varia in base al Paese.

1. (Facoltativo) Immettere il **Amazon S3 bucket name for usage reports (Nome bucket Amazon S3 per i report di utilizzo)**.
**Nota**  
La policy del bucket Amazon S3 deve concedere l'accesso in scrittura ad Amazon SNS.

1. Scegli **Save changes** (Salva modifiche).

## Impostazione delle preferenze ()AWS SDKs
<a name="sms_preferences_sdk"></a>

Per impostare le tue preferenze SMS utilizzando uno di questi AWS SDKs, utilizza l'azione in quell'SDK che corrisponde alla `SetSMSAttributes` richiesta nell'API Amazon SNS. Con questa richiesta, assegni valori a differenti attributi SMS, come la quota di spesa mensile e il tipo di SMS predefinito (promozionale o transazionale). Per tutti gli attributi SMS, consulta [Set SMSAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetSMSAttributes.html) in the *Amazon Simple Notification Service API Reference*.

Gli esempi di codice seguenti mostrano come utilizzare `SetSMSAttributes`.

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

**SDK per C\$1\$1**  
 C'è di più su GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sns#code-examples). 
Come usare Amazon SNS per impostare l'attributo predefinitoSMSType .  

```
//! 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();
}
```
+  Per i dettagli sull'API, consulta [Set SMSAttributes](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/SetSMSAttributes) in *AWS SDK per C\$1\$1 API Reference.* 

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

**AWS CLI**  
**Impostazione degli attributi dei messaggi SMS**  
Nell’esempio `set-sms-attributes` seguente l’ID mittente predefinito per i messaggi SMS viene impostato su `MyName`.  

```
aws sns set-sms-attributes \
    --attributes DefaultSenderID=MyName
```
Questo comando non produce alcun output.  
+  Per i dettagli sull'API, consulta [Set SMSAttributes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/set-sms-attributes.html) in *AWS CLI Command Reference*. 

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

**SDK per Java 2.x**  
 C'è altro su GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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);
        }
    }
}
```
+  Per i dettagli sull'API, consulta [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 per JavaScript (v3)**  
 C'è altro da fare. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l’esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Creare il client in un modulo separato ed esportarlo.  

```
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({});
```
Importare l’SDK e i moduli client e chiamare 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;
};
```
+  Per ulteriori informazioni, consulta la [Guida per sviluppatori di AWS SDK per JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-sending-sms.html#sending-sms-setattributes). 
+  Per i dettagli sull'API, consulta [Set SMSAttributes](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/SetSMSAttributesCommand) in *AWS SDK per JavaScript API Reference*. 

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

**SDK per PHP**  
 C'è altro su GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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());
}
```
+  Per ulteriori informazioni, consulta la [Guida per sviluppatori di AWS SDK per PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#set-sms-attributes). 
+  Per i dettagli sull'API, consulta [Set SMSAttributes](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/SetSMSAttributes) in *AWS SDK per PHP API Reference*. 

------

## Impostazione delle preferenze di messaggistica SMS per la consegna specifica del Paese
<a name="sms_preferences_country_specific"></a>

Puoi gestire e controllare il traffico SMS inviando messaggi solo a paesi di destinazione specifici. Ciò garantisce che i messaggi vengano inviati solo nei paesi approvati, evitando addebiti indesiderati per SMS. Le seguenti istruzioni utilizzano la configurazione Protect di Amazon Pinpoint per specificare i paesi che desideri consentire o bloccare.

1. Apri la AWS SMS console all'indirizzo [https://console.aws.amazon.com/sms-voice/](https://console.aws.amazon.com/sms-voice/).

1. Nel riquadro di navigazione, in **Panoramica**, nella sezione **Avvio rapido**, scegli **Crea una configurazione di protezione**.

1. In **Proteggi i dettagli di configurazione**, inserisci un **nome adatto alle aziende** per la tua configurazione di protezione (ad esempio, Allow-Only-AU).

1. In **Regole nazionali relative agli SMS**, seleziona la casella di controllo **Regione/Paese** per bloccare l'invio di messaggi a tutti i paesi supportati.

1. Deseleziona le caselle di controllo relative ai paesi in cui desideri inviare messaggi. **Ad esempio, per consentire l'invio di messaggi solo in Australia, deseleziona la casella di controllo relativa all'Australia.**

1. Nella sezione **Proteggi le associazioni di configurazione**, in **Tipo di associazione**, seleziona **Account** predefinito. Ciò garantirà che la configurazione AWS End User Messaging SMS Protect influisca su tutti i messaggi inviati tramite Amazon SNS, [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html) e la chiamata 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. Scegli **Crea configurazione di protezione per salvare le tue impostazioni**.

   Viene visualizzato il seguente messaggio di conferma:

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

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. [**Pubblica un messaggio**](sns-publishing.md) in uno dei paesi bloccati, come l'India.

   Il messaggio non verrà recapitato. È possibile verificarlo nei registri degli errori di consegna utilizzando [CloudWatch](sms_stats_cloudwatch.md). Cerca nel gruppo di **sns/region/AccountID/DirectPublishToPhoneNumber/Failure**log una risposta simile all'esempio seguente:

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

# Gestione dei numeri di telefono e degli abbonamenti Amazon SNS
<a name="sms_manage"></a>

Amazon SNS offre diverse opzioni per gestire chi riceve messaggi SMS dal tuo account. Con frequenza limitata, puoi inserire nell'elenco di invio numeri di telefono di destinatari che hanno scelto di non ricevere i messaggi SMS dal tuo account. Per interrompere l'invio di messaggi a sottoscrizioni SMS, puoi rimuovere le sottoscrizioni o gli argomenti in cui effettui la pubblicazioni destinate alle sottoscrizioni.

## Richiesta di non ricevere i messaggi SMS
<a name="sms_manage_optout"></a>

Laddove richiesto dalle leggi e dai regolamenti locali (come Stati Uniti e Canada), i destinatari degli SMS possono utilizzare i propri dispositivi per annullare l'iscrizione rispondendo al messaggio con una delle seguenti risposte: 
+ ARRET (francese)
+ CANCEL
+ END
+ OPT-OUT
+ OPTOUT
+ QUIT
+ REMOVE
+ STOP
+ TD
+ UNSUBSCRIBE

Per rinunciare, il destinatario deve rispondere allo stesso [numero di origine](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) utilizzato da Amazon SNS per recapitare il messaggio. Dopo la rinuncia, il destinatario non riceverà più i messaggi SMS recapitati dal destinatario, a Account AWS meno che tu non inserisca il numero di telefono.

Se il numero di telefono è abbonato a un argomento di Amazon SNS, la disattivazione non rimuove l'abbonamento, ma i messaggi SMS non verranno recapitati a quell'abbonamento a meno che tu non fornisca il numero di telefono.

## Gestione dei numeri di telefono e degli abbonamenti tramite la console Amazon SNS
<a name="sms_manage_console"></a>

Per specificare quali numeri di telefono ricevono messaggi dal tuo account, puoi usare la console Amazon SNS.

### Inserimento di un numero di telefono che è stato disattivato nella console Amazon SNS
<a name="sms_manage_optout_console"></a>

Puoi visualizzare quali numeri di telefono sono stati disattivati dalla ricezione di messaggi SMS dal tuo account e puoi attivare questi numeri di telefono per riprendere l'invio di messaggi.

Puoi inserire un numero di telefono solo una volta ogni 30 giorni.

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel menu della console, imposta lo strumento di selezione della regione su una [regione che supporti la messaggistica SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. Nel riquadro di navigazione, selezionare **Text messaging (SMS) (Messaggi di testo (SMS))**.

1. Nella pagina **Messaggi di testo mobili (SMS)**, nella sezione **Numeri di telefono annullati, vengono visualizzati i numeri di telefono** disattivati.

1. **Seleziona la casella di controllo relativa al numero di telefono che desideri attivare e scegli Accetta.** Il numero di telefono non è più disattivato e riceverà i messaggi SMS che gli invierai.

#### Eliminazione di un abbonamento SMS dalla console Amazon SNS
<a name="sms_manage_subscriptions_console"></a>

Elimina una sottoscrizione SMS per interrompere l'invio di messaggi SMS al numero specificato quando effettui pubblicazioni nei tuoi argomenti.

1. Nel riquadro di navigazione, scegli **Sottoscrizioni**.

1. Seleziona le caselle di controllo delle sottoscrizioni da eliminare. Scegli **Actions** (Operazioni), quindi **Delete Subscriptions** (Elimina sottoscrizioni).

1. Nella finestra **Delete (Elimina)** scegli **Delete (Elimina)**. Amazon SNS elimina la sottoscrizione visualizzandone poi la conferma.

#### Eliminazione di un argomento dalla console Amazon SNS
<a name="sms_manage_topic_console"></a>

Elimina un argomento quando non desideri più pubblicare messaggi per gli endpoint dotati di sottoscrizione all'argomento.

1. Nel pannello di navigazione, scegliere **Argomenti**.

1. Seleziona le caselle di controllo degli argomenti da eliminare. Scegli **Actions** (Operazioni), quindi **Delete Topics** (Elimina argomenti).

1. Nella finestra **Delete (Elimina)** scegli **Delete (Elimina)**. Amazon SNS elimina l'argomento visualizzandone poi la conferma.

### Gestione dei numeri di telefono e degli abbonamenti tramite l'SDK AWS
<a name="sms_manage_sdk"></a>

Puoi utilizzarlo AWS SDKs per effettuare richieste programmatiche ad Amazon SNS e gestire quali numeri di telefono possono ricevere messaggi SMS dal tuo account.

Per utilizzare un AWS SDK, devi configurarlo con le tue credenziali. Per ulteriori informazioni, consulta [File di configurazione e credenziali condivisi](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html) nella Guida di riferimento agli strumenti *AWS SDKs e* agli strumenti.

#### Visualizzazione di tutti i numeri di telefono esclusi tramite l'SDK AWS
<a name="sms_view_optout_sdk"></a>

Per visualizzare tutti i numeri di telefono esclusi, invia una `ListPhoneNumbersOptedOut` richiesta con l'API Amazon SNS.

Gli esempi di codice seguenti mostrano come utilizzare `ListPhoneNumbersOptedOut`.

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

**AWS CLI**  
**Elencare le opzioni di opt-out dei messaggi SMS**  
Nell’esempio `list-phone-numbers-opted-out` seguente sono elencati i numeri di telefono per i quali sono abilitate le opzioni di opt-out per la ricezione di SMS.  

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

```
{
    "phoneNumbers": [
        "+15555550100"
    ]
}
```
+  *Per i dettagli sull'API, consulta Command [ListPhoneNumbersOptedOut](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/list-phone-numbers-opted-out.html)Reference AWS CLI .* 

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

**SDK per Java 2.x**  
 C'è altro su GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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);
        }
    }
}
```
+  Per i dettagli sull'API, consulta la [ListPhoneNumbersOptedOut](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/ListPhoneNumbersOptedOut)sezione *AWS SDK for Java 2.x API Reference*. 

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

**SDK per PHP**  
 C'è altro su GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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());
}
```
+  Per ulteriori informazioni, consulta la [Guida per sviluppatori di AWS SDK per PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#list-opted-out-phone-numbers). 
+  Per i dettagli sull'API, consulta la [ListPhoneNumbersOptedOut](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/ListPhoneNumbersOptedOut)sezione *AWS SDK per PHP API Reference*. 

------

#### Verifica se un numero di telefono è stato disattivato utilizzando l'SDK AWS
<a name="sms_check_optout_sdk"></a>

Per verificare se un numero di telefono è stato disattivato, invia una `CheckIfPhoneNumberIsOptedOut` richiesta con l'API Amazon SNS.

Gli esempi di codice seguenti mostrano come utilizzare `CheckIfPhoneNumberIsOptedOut`.

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

**SDK per .NET**  
 C'è di più su. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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}");
            }
        }
    }
```
+  Per i dettagli sull'API, consulta la [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/CheckIfPhoneNumberIsOptedOut)sezione *AWS SDK per .NET API Reference*. 

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

**AWS CLI**  
**Controllo delle impostazioni di opt-out dei messaggi SMS per un numero di telefono**  
L'`check-if-phone-number-is-opted-out`esempio seguente verifica se al numero di telefono specificato è stata disattivata la ricezione di messaggi SMS dall' AWS account corrente.  

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

```
{
    "isOptedOut": false
}
```
+  Per i dettagli sull'API, vedere [CheckIfPhoneNumberIsOptedOut](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/check-if-phone-number-is-opted-out.html)in *AWS CLI Command Reference.* 

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

**SDK per Java 2.x**  
 C'è altro su GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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);
        }
    }
}
```
+  Per i dettagli sull'API, consulta la [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/CheckIfPhoneNumberIsOptedOut)sezione *AWS SDK for Java 2.x API Reference*. 

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

**SDK per JavaScript (v3)**  
 C'è altro da fare. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l’esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Creare il client in un modulo separato ed esportarlo.  

```
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({});
```
Importare l’SDK e i moduli client e chiamare 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;
};
```
+  Per ulteriori informazioni, consulta la [Guida per sviluppatori di AWS SDK per JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-sending-sms.html#sending-sms-checkifphonenumberisoptedout). 
+  Per i dettagli sull'API, consulta la [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/CheckIfPhoneNumberIsOptedOutCommand)sezione *AWS SDK per JavaScript API Reference*. 

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

**SDK per PHP**  
 C'è altro su GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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());
}
```
+  Per ulteriori informazioni, consulta la [Guida per sviluppatori di AWS SDK per 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). 
+  Per i dettagli sull'API, consulta la [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/CheckIfPhoneNumberIsOptedOut)sezione *AWS SDK per PHP API Reference*. 

------

#### Inserimento di un numero di telefono che è stato disattivato utilizzando l'API Amazon SNS
<a name="sms_manage_optin_sdk"></a>

Per attivare un numero di telefono, invia una `OptInPhoneNumber` richiesta con l'API Amazon SNS.

Puoi inserire un numero di telefono solo una volta ogni 30 giorni.

#### Eliminazione di un abbonamento SMS tramite l'SDK AWS
<a name="sms_manage_subscriptions_sdk"></a>

Per eliminare una sottoscrizione SMS da un argomento Amazon SNS, recupera l'ARN della sottoscrizione inviando una richiesta `ListSubscriptions` con l'API di &SNS;, quindi passa l'ARN a una richiesta `Unsubscribe`.

Gli esempi di codice seguenti mostrano come utilizzare `Unsubscribe`.

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

**SDK per .NET**  
 C'è di più su. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/cross-service/TopicsAndQueues#code-examples). 
Annulla l’iscrizione a un argomento tramite un ARN di sottoscrizione.  

```
    /// <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;
    }
```
+  Per informazioni dettagliate sull’API, consulta [Annullamento della sottoscrizione](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/Unsubscribe) nella *documentazione di riferimento dell’API AWS SDK per .NET *. 

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

**SDK per C\$1\$1**  
 C'è dell'altro GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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();
}
```
+  Per informazioni dettagliate sull’API, consulta [Annullamento della sottoscrizione](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/Unsubscribe) nella *documentazione di riferimento dell’API AWS SDK per C\$1\$1 *. 

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

**AWS CLI**  
**Annullamento della sottoscrizione a un argomento**  
Nell’esempio `unsubscribe` seguente viene eliminata la sottoscrizione specificata a un argomento.  

```
aws sns unsubscribe \
    --subscription-arn arn:aws:sns:us-west-2:0123456789012:my-topic:8a21d249-4329-4871-acc6-7be709c6ea7f
```
Questo comando non produce alcun output.  
+  Per informazioni dettagliate sull’API, consulta [Unsubscribe](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/unsubscribe.html) nella *documentazione di riferimento dei comandi della AWS CLI *. 

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

**SDK per Java 2.x**  
 C'è dell'altro GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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);
        }
    }
}
```
+  Per informazioni dettagliate sull’API, consulta [Annullamento della sottoscrizione](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Unsubscribe) nella *documentazione di riferimento dell’API AWS SDK for Java 2.x *. 

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

**SDK per JavaScript (v3)**  
 C'è altro da fare. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l’esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Creare il client in un modulo separato ed esportarlo.  

```
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({});
```
Importare l’SDK e i moduli client e chiamare 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;
};
```
+  Per ulteriori informazioni, consulta la [Guida per sviluppatori di AWS SDK per JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-unsubscribing). 
+  Per informazioni dettagliate sull’API, consulta [Annullamento della sottoscrizione](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/UnsubscribeCommand) nella *documentazione di riferimento dell’API AWS SDK per JavaScript *. 

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

**SDK per Kotlin**  
 C'è dell'altro GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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}")
    }
}
```
+  Per informazioni dettagliate sull’API, consulta [Annullamento della sottoscrizione](https://sdk.amazonaws.com/kotlin/api/latest/index.html) nella *documentazione di riferimento dell’API AWS SDK per Kotlin*. 

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

**SDK per PHP**  
 C'è dell'altro GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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());
}
```
+  Per ulteriori informazioni, consulta la [Guida per sviluppatori di AWS SDK per PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-subscribing-unsubscribing-topics.html#unsubscribe-from-a-topic). 
+  Per informazioni dettagliate sull’API, consulta [Annullamento della sottoscrizione](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/Unsubscribe) nella *documentazione di riferimento dell’API AWS SDK per PHP *. 

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

**SDK per Python (Boto3)**  
 C'è dell'altro GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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
```
+  Per informazioni dettagliate sull’API, consulta [Annullamento della sottoscrizione](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Unsubscribe) nella *documentazione di riferimento dell’API SDK for Python (Boto3)AWS *. 

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

**SDK per SAP ABAP**  
 C'è altro da fare. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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.
```
+  Per informazioni dettagliate sull’API, consulta [Unsubscribe](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html) nella *documentazione di riferimento dell’API AWS SDK per SAP ABAP*. 

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

**SDK per Swift**  
 C'è altro da fare. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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.")
```
+  Per informazioni dettagliate sull’API, consulta [Unsubscribe](https://sdk.amazonaws.com/swift/api/awssns/latest/documentation/awssns/snsclient/unsubscribe(input:)) nella *documentazione di riferimento dell’API AWS SDK per Swift*. 

------

#### Eliminazione di un argomento utilizzando l'SDK AWS
<a name="sms_manage_topic_sdk"></a>

Per eliminare un argomento e tutte le relative sottoscrizioni, recupera l'ARN dell'argomento inviando una richiesta `ListTopics` con l'API di Amazon SNS, quindi passa l'ARN alla richiesta `DeleteTopic`.

Gli esempi di codice seguenti mostrano come utilizzare `DeleteTopic`.

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

**SDK per .NET**  
 C'è altro da fare. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/cross-service/TopicsAndQueues#code-examples). 
Elimina un argomento in base all’ARN dell’argomento.  

```
    /// <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;
    }
```
+  Per i dettagli sull'API, consulta la [DeleteTopic](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/DeleteTopic)sezione *AWS SDK per .NET API Reference*. 

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

**SDK per C\$1\$1**  
 C'è altro su GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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();
}
```
+  Per i dettagli sull'API, consulta la [DeleteTopic](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/DeleteTopic)sezione *AWS SDK per C\$1\$1 API Reference*. 

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

**AWS CLI**  
**Eliminazione di un argomento SNS**  
Nell’esempio `delete-topic` seguente viene eliminato l’argomento SNS specificato.  

```
aws sns delete-topic \
    --topic-arn "arn:aws:sns:us-west-2:123456789012:my-topic"
```
Questo comando non produce alcun output.  
+  Per i dettagli sull'API, consulta [DeleteTopic AWS CLI](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/delete-topic.html)*Command Reference*. 

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

**SDK per Go V2**  
 C'è altro su GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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
}
```
+  Per i dettagli sull'API, consulta la [DeleteTopic](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/sns#Client.DeleteTopic)sezione *AWS SDK per Go API Reference*. 

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

**SDK per Java 2.x**  
 C'è altro su GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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);
        }
    }
}
```
+  Per i dettagli sull'API, consulta la [DeleteTopic](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/DeleteTopic)sezione *AWS SDK for Java 2.x API Reference*. 

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

**SDK per JavaScript (v3)**  
 C'è altro da fare. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l’esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Creare il client in un modulo separato ed esportarlo.  

```
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({});
```
Importare l’SDK e i moduli client e chiamare 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
  //   }
  // }
};
```
+  Per ulteriori informazioni, consulta la [Guida per sviluppatori di AWS SDK per JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-managing-topics-deletetopic). 
+  Per i dettagli sull'API, consulta la [DeleteTopic](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/DeleteTopicCommand)sezione *AWS SDK per JavaScript API Reference*. 

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

**SDK per Kotlin**  
 C'è altro su GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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.")
    }
}
```
+  Per i dettagli sull'API, [DeleteTopic](https://sdk.amazonaws.com/kotlin/api/latest/index.html)consulta *AWS SDK for Kotlin* API reference. 

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

**SDK per PHP**  
 C'è altro su. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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());
}
```
+  Per i dettagli sull'API, consulta la [DeleteTopic](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/DeleteTopic)sezione *AWS SDK per PHP API Reference*. 

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

**SDK per Python (Boto3)**  
 C'è altro su GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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
```
+  Per i dettagli sull'API, consulta [DeleteTopic AWS](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/DeleteTopic)*SDK for Python (Boto3) API Reference*. 

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

**SDK per SAP ABAP**  
 C'è altro da fare. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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.
```
+  Per i dettagli sulle API, [DeleteTopic](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html)consulta *AWS SDK for SAP ABAP* API reference. 

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

**SDK per Swift**  
 C'è altro da fare. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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)
        )
```
+  Per i dettagli sull'API, consulta la [DeleteTopic](https://sdk.amazonaws.com/swift/api/awssns/latest/documentation/awssns/snsclient/deletetopic(input:))guida di riferimento all'*API AWS SDK for Swift*. 

------

# Monitoraggio delle attività SMS di Amazon SNS
<a name="sms_stats"></a>

Mediante il monitoraggio della tua attività SMS, puoi tenere traccia di numeri di telefono di destinazione, consegne riuscite o non riuscite, motivi della mancate consegne, costi e altre informazioni. Amazon SNS ti aiuta riepilogando le statistiche nella console, inviando informazioni ad Amazon CloudWatch e inviando report giornalieri sull'utilizzo di SMS a un bucket Amazon S3 da te specificato.

# Visualizzazione delle statistiche di consegna degli SMS di Amazon SNS
<a name="sms_stats_console"></a>

Puoi utilizzare la console Amazon SNS per visualizzare le statistiche relative alla consegna dei tuoi SMS più recenti

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel menu della console, imposta lo strumento di selezione della regione su una [regione che supporti la messaggistica SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html).

1. Nel riquadro di navigazione, selezionare **Text messaging (SMS) (Messaggi di testo (SMS))**.

1. Sulla pagina **Text messaging (SMS)** (Preferenze messaggistica (SMS)) nella sezione **Account stats** (Statistiche account), visualizza i grafici delle consegne degli SMS promozionali e di vendita. Ogni tabella mostra i seguenti dati relativi ai 15 giorni precedenti:
   + Tasso di consegna (percentuale di successo)
   + Inviati (numero di tentativi di recapito)
   + Falliti (numero di mancate consegne)

Su questa pagina, puoi anche selezionare il pulsante **Usage (Utilizzo)** per andare al bucket Amazon S3 dove vengono salvati i report di utilizzo giornalieri. Per ulteriori informazioni, consulta [Iscrizione ai report giornalieri sull'utilizzo degli SMS di Amazon SNS](sms_stats_usage.md).

# Monitoraggio della consegna degli SMS di Amazon SNS con CloudWatch parametri e log di Amazon
<a name="sms_stats_cloudwatch"></a>

Puoi utilizzare Amazon CloudWatch e Amazon CloudWatch Logs per monitorare le consegne dei tuoi messaggi SMS.

## Visualizzazione dei CloudWatch parametri di Amazon
<a name="sms_stats_cloudwatch_metrics"></a>

Amazon SNS raccoglie automaticamente i parametri relativi alle consegne dei messaggi SMS e li invia ad Amazon. CloudWatch Puoi utilizzarlo CloudWatch per monitorare queste metriche e creare allarmi per avvisarti quando una metrica supera una soglia. Ad esempio, puoi monitorare le CloudWatch metriche per conoscere la tariffa di consegna degli SMS e i costi degli SMS. month-to-date

Per informazioni sul monitoraggio delle CloudWatch metriche, sull'impostazione degli CloudWatch allarmi e sui tipi di metriche disponibili, consulta. [Monitoraggio degli argomenti di Amazon SNS tramite CloudWatch](sns-monitoring-using-cloudwatch.md)

## Visualizzazione dei registri CloudWatch
<a name="sns-viewing-cloudwatch-logs"></a>

Puoi raccogliere informazioni sulle consegne di messaggi SMS riuscite e non riuscite abilitando Amazon SNS alla scrittura su Amazon Logs. CloudWatch Per ogni SMS inviato, Amazon SNS creerà un log con il costo del messaggio, lo stato di consegna e la motivazione in caso di fallimento, il tempo di sosta e altre informazioni.

**Per abilitare e visualizzare i CloudWatch log per i tuoi messaggi SMS**

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel menu della console, imposta lo strumento di selezione della regione su una [regione che supporti la messaggistica SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. Nel riquadro di navigazione, selezionare **Text messaging (SMS) (Messaggi di testo (SMS))**.

1. Nella pagina **Mobile text messaging (SMS) (Messaggi di testo mobili (SMS))**, nella sezione **Text messaging preferences (Preferenze per i messaggi di testo)**, scegliere **Edit (Modifica)**.

1. Nella pagina successiva, espandere la sezione **Delivery status logging (Registrazione dello stato di consegna)**.

1. Per la **frequenza di campionamento Success**, specifica la percentuale di consegne SMS riuscite per le quali Amazon SNS scriverà i log in CloudWatch Logs. Esempio:
   + Per generare dei log unicamente per le consegne non riuscite, imposta questo valore su 0.
   + Per generare dei log per il 10% delle consegne riuscite, imposta 10.

   Se non specifichi una percentuale, Amazon SNS genera dei log per tutte le consegne riuscite.

1. Per fornire le autorizzazioni necessarie, eseguire una delle seguenti operazioni:
   + Per creare un nuovo ruolo del servizio, scegli **Creazione di un nuovo ruolo del servizio** e poi **Creazione di nuovi ruoli**. Nella pagina successiva, scegli **Abilita** per consentire ad Amazon SNS di accedere in scrittura alle risorse del tuo account.
   + Per utilizzare un ruolo del servizio esistente, scegli **Utilizzare il ruolo del servizio esistente** e quindi incollare il nome ARN nella casella **Ruolo IAM per consegne riuscite e non riuscite**.

     Il ruolo di servizio specificato deve consentire l'accesso in scrittura alle risorse dell'account. *Per ulteriori informazioni sulla creazione di ruoli IAM, consulta [Creating a role for an AWS service](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console) nella IAM User Guide.* 

1. Scegli **Save changes** (Salva modifiche).

1. Nella pagina **Messaggi di testo per dispositivi mobili (SMS)** vai alla pagina **Registri dello stato di** per visualizzare tutti i registri disponibili.
**Nota**  
A seconda del corriere del numero di telefono di destinazione, possono essere necessarie fino a 72 ore affinché i log delle consegne vengano visualizzati nella console Amazon SNS. 

## Log di esempio per gli SMS inviati con successo
<a name="example-log-successful-sms-delivery"></a>

Il log dello stato di consegna per un SMS inviato con successo sarà simile al seguente esempio:

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

## Log di esempio per gli SMS falliti
<a name="example-log-failed-sms-delivery"></a>

Il log dello stato di consegna per un SMS fallito sarà simile al seguente esempio:

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

## Ragioni per un SMS fallito
<a name="sms_stats_delivery_fail_reasons"></a>

La ragione per un SMS fallito viene fornita dall'attributo `providerResponse`. L'invio di un messaggio SMS potrebbe fallire per i seguenti motivi:
+ Bloccato come spam dall'operatore telefonico
+ La destinazione è in un elenco bloccato
+ Il numero di telefono non è valido
+ Il testo del messaggio non è valido
+ L'operatore telefonico ha bloccato il messaggio
+ L'operatore telefonico non è raggiungibile/disponibile
+ Il telefono ha bloccato l'SMS
+ Il telefono è in un elenco bloccato
+ Il telefono non è raggiungibile/disponibile
+ Il numero di telefono è stato escluso
+ La consegna supera il costo massimo
+ Errore sconosciuto nel tentativo di raggiungere il telefono

# Iscrizione ai report giornalieri sull'utilizzo degli SMS di Amazon SNS
<a name="sms_stats_usage"></a>

Puoi monitorare le consegne di SMS effettuando la sottoscrizione a report di utilizzo di SMS giornalieri a partire da Amazon SNS. Per ogni giorno in cui invii almeno un messaggio SMS, Amazon SNS fornisce un report di utilizzo in un file CSV per il bucket Amazon S3 specificato. Sono necessarie 24 ore prima che il rapporto sull'utilizzo degli SMS sia disponibile nel bucket Amazon S3. 

## Informazioni contenute nei report di utilizzo giornalieri
<a name="daily_usage_info"></a>

Il report di utilizzo include le seguenti informazioni per ogni SMS inviato dal tuo account.

 Tenere presente che il report non include messaggi che vengono inviati ai destinatari che hanno scelto di non ricevere i messaggi.
+ Tempo di pubblicazione per messaggio (in UTC)
+ ID messaggio
+ Numero di telefono di destinazione
+ Tipo di messaggio
+ Stato della consegna
+ Costo del messaggio (in USD)
+ Numero di parte (un messaggio viene suddiviso in più parti se è troppo lungo per un unico messaggio)
+ Numero totale di parti

**Nota**  
Se Amazon SNS non ha ricevuto il numero di parte, impostiamo il suo valore su zero.

## Sottoscrizione ai report di utilizzo giornalieri
<a name="subscribe-to-daily-usage-reports"></a>

Per eseguire la sottoscrizione ai report di utilizzo giornalieri, devi creare un bucket Amazon S3 con le autorizzazioni appropriate.

**Creazione di un bucket Amazon S3 per i report di utilizzo giornalieri**

1. Da chi Account AWS invia messaggi SMS, accedi alla console [Amazon S3](https://console.aws.amazon.com/s3/).

1. Scegli **Crea bucket**.

1. Per **Bucket Name (Nome bucket)**, si consiglia di immettere un nome univoco per l'account e l'organizzazione. Ad esempio, utilizzare il modello `<my-bucket-prefix>-<account_id>-<org-id>`. 

   Per informazioni sulle convenzioni e sulle restrizioni per i nomi di bucket, consulta [Regole per la denominazione dei bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html#bucketnamingrules) nella *Guida per l'utente di Amazon Simple Storage Service*.

1. Scegli **Create** (Crea).

1. Nella tabella **All Buckets (Tutti i bucket)**, seleziona il bucket.

1. Nella sezione **Permissions (Autorizzazioni)**, scegliere **Bucket policy (Policy bucket)**.

1. Nella finestra **Bucket Policy Editor (Editor policy bucket)**, specifica una policy che autorizzi il principale del servizio Amazon SNS a scrivere nel tuo bucket. Per vedere un esempio, consulta [Esempio di policy di bucket](#example_bucket_policy).

   Se utilizzi la politica di esempio, ricordati di sostituirla *my-s3-bucket* con il nome del bucket che hai scelto nello Step 3.

1. Scegli **Save** (Salva).

**Sottoscrizione ai report di utilizzo giornalieri**

1. Accedi alla console [Amazon SNS](https://console.aws.amazon.com/sns/).

1. Nel riquadro di navigazione, selezionare **Text messaging (SMS) (Messaggi di testo (SMS))**.

1. Nella pagina **Text messaging (SMS) (Messaggi di testo (SMS))**, nella sezione **Text messaging preferences (Preferenze per i messaggi di testo)**, scegliere **Edit (Modifica)**.  
![\[Sezione delle preferenze per i messaggi di testo nella console Amazon SNS\]](http://docs.aws.amazon.com/it_it/sns/latest/dg/images/daily-usage-report1.png)

1. Nella pagina **Edit text messaging preferences (Modifica preferenze di messaggistica di testo)**, nella sezione **Details (Dettagli)**, specificare **Amazon S3 bucket name for usage reports (Nome del bucket Amazon S3 per i report di utilizzo)**.  
![\[Sezione Dettagli della pagina Modifica delle preferenze per i messaggi di testo nella console Amazon SNS\]](http://docs.aws.amazon.com/it_it/sns/latest/dg/images/daily-usage-report2.png)

1. Scegli **Save changes** (Salva modifiche).

### Esempio di policy di bucket
<a name="example_bucket_policy"></a>

La policy seguente consente al principale del servizio Amazon SNS di eseguire le operazioni `s3:PutObject`, `s3:GetBucketLocation` e `s3:ListBucket`.

AWS fornisce strumenti per tutti i servizi con i responsabili dei servizi a cui è stato concesso l'accesso alle risorse del tuo account. Quando il principale di una dichiarazione sulla politica del bucket di Amazon S3 è un problema secondario [confuso](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html). Per limitare la regione e l'account da cui il bucket può ricevere report di utilizzo giornalieri, utilizzare `aws:SourceArn` come mostrato nell'esempio sottostante. Se non si desidera limitare le regioni che possono generare questi report, utilizzare `aws:SourceAccount` per limitare in base a quale account sta generando i report. Se non si conosce l'ARN della risorsa, utilizzare `aws:SourceAccount`.

Utilizzare l'esempio seguente che include la protezione "confused deputy" quando crei un bucket Amazon S3 per ricevere report di utilizzo di SMS giornalieri da Amazon SNS.

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

****  

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

------

**Nota**  
Puoi pubblicare report sull'utilizzo nei bucket Amazon S3 di proprietà dell' Account AWS che è specificato nell'elemento `Condition` nella policy di Amazon S3. Per pubblicare report di utilizzo in un bucket Amazon S3 di Account AWS proprietà di un altro, vedi [Come posso copiare oggetti Amazon S3](https://aws.amazon.com/premiumsupport/knowledge-center/copy-s3-objects-account/) da un altro? Account AWS. 

### Esempio di report di utilizzo giornaliero
<a name="example_report"></a>

Dopo la sottoscrizione ai report di utilizzo giornalieri, Amazon SNS inserisce un file CSV con i dati sull'utilizzo nella seguente posizione:

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

Ogni file può contenere fino a 50.000 record. Se i record di un giorno superano questa quota, Amazon SNS aggiunge più file. Di seguito viene riportato un esempio di report:

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

# Richiesta di supporto per la messaggistica SMS di Amazon SNS
<a name="channels-sms-awssupport"></a>

**Importante**  
La Amazon SNS SMS Developer Guide è stata aggiornata. Amazon SNS è integrato [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)per la consegna di messaggi SMS. Questa guida contiene le informazioni più recenti su come creare, configurare e gestire i messaggi SMS di Amazon SNS.

Alcune opzioni SMS con Amazon SNS non sono disponibili per il tuo AWS account finché non ti contatti. Supporto Apri un caso nel [Center Supporto AWS](https://console.aws.amazon.com/support/home#/) per fare una delle richieste seguenti:
+ Un aumento della soglia di spesa mensile per gli SMS

  Per impostazione predefinita, la soglia di spesa mensile è di 1 USD. La soglia di spesa determina il volume di messaggi che è possibile inviare con Amazon SNS. Puoi richiedere una soglia che soddisfi il volume mensile previsto di messaggi SMS per il tuo caso d'uso.
+ Una mossa dalla [sandbox SMS](sns-sms-sandbox.md) in modo da poter inviare messaggi SMS senza restrizioni. Per ulteriori informazioni, consulta [Uscire dalla sandbox SMS di Amazon SNS](sns-sms-sandbox-moving-to-production.md).
+ Un dedicato [Numero di origine](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html)
+ Un ID [mittente](https://docs.aws.amazon.com/sms-voice/latest/userguide/sender-id.html) dedicato. Un ID mittente è un ID personalizzato che viene mostrato come mittente nel dispositivo del destinatario. Ad esempio, puoi utilizzare il tuo marchio commerciale per rendere più facilmente riconoscibile l'origine del messaggio. Il supporto per il mittente IDs varia in base al Paese o all'area geografica. Per ulteriori informazioni, consulta [Paesi e aree geografiche supportati per la messaggistica SMS AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) nella *Guida per l'AWS End User Messaging SMS utente*.

# Richiesta di aumenti della quota di spesa mensile di Amazon SNS SMS
<a name="channels-sms-awssupport-spend-threshold"></a>

Amazon SNS fornisce quote di spesa che ti aiutano a gestire il costo massimo mensile sostenuto per l'invio di SMS utilizzando il tuo account. La quota di spesa limita i rischi in caso di attacchi dannosi e impedisce all'applicazione a monte di inviare più messaggi del previsto. Puoi configurare Amazon SNS in modo tale da interrompere la pubblicazione di messaggi SMS qualora il sistema determini che l'invio di un messaggio SMS comporta un costo che supera la quota di spesa per il mese corrente. 

Per garantire che la tua attività rimanga operativa, ti consigliamo di richiedere una quota di spesa sufficientemente elevata per supportare i carichi di lavoro di produzione. Per ulteriori informazioni, consulta [Fase 1: apertura di un caso per SMS Amazon SNS](#channels-sms-awssupport-spend-threshold-open). Una volta ricevuta la quota, puoi gestire il rischio applicando la quota completa o un valore inferiore, come descritto nella sezione [Fase 2: aggiornamento delle impostazioni relative agli SMS](#channels-sms-awssupport-spend-threshold-settings). Applicando un valore più basso, puoi controllare la spesa mensile con la possibilità di aumentarla in base alle esigenze.

**Importante**  
Poiché è un sistema distribuito, Amazon SNS blocca l'invio di SMS alcuni minuti dopo il superamento della quota di spesa. Se continui a inviare SMS durante tale periodo, potresti incorrere in costi che superano la tua quota di spesa.

La quota di spesa è impostata su 1 USD al mese per tutti i nuovi account. Questa quota è pensata per consentirti di testare le funzionalità di invio di messaggi di Amazon SNS. Per richiedere un aumento della quota di spesa via SMS per il tuo account, apri un caso di aumento della quota nel AWS Support Center.

**Topics**
+ [

## Fase 1: apertura di un caso per SMS Amazon SNS
](#channels-sms-awssupport-spend-threshold-open)
+ [

## Fase 2: aggiornamento delle impostazioni relative agli SMS nella console Amazon SNS
](#channels-sms-awssupport-spend-threshold-settings)

## Fase 1: apertura di un caso per SMS Amazon SNS
<a name="channels-sms-awssupport-spend-threshold-open"></a>

Puoi richiedere un aumento della tua quota di spesa mensile aprendo un caso di aumento della quota nel AWS Support Center.

**Nota**  
Alcuni dei campi nel modulo di richiesta sono contrassegnate come "facoltativi". Tuttavia, Supporto richiede tutte le informazioni menzionate nelle seguenti fasi per elaborare la tua richiesta. Se non fornisci tutte le informazioni richieste, possono verificarsi ritardi nell'elaborazione della richiesta.

1. Accedi Console di gestione AWS a [https://console.aws.amazon.com/](https://console.aws.amazon.com/).

1. Nel menu **Supporto** scegliere **Centro di supporto**.

1. Nella scheda **I tuoi casi di supporto**, scegli **Create caso**.

1. Scegli il collegamento **Cerchi aumenti del limite di servizio?**, quindi completa quanto segue:
   + Per **Tipo di limite**, scegli **Messaggi di testo SNS**.
   + (Facoltativo) In **Fornisci un link al sito o all'app che invierà messaggi SMS**, fornisci informazioni relative al sito Web, all'applicazione o al servizio che invierà messaggi SMS.
   + (Facoltativo) In **Tipo di messaggi di cui è previsto l'invio**, scegli il tipo di messaggio che intendi inviare con codici lunghi:
     + **One-Time Password (Password una tantum)** - Messaggi che forniscono password che i clienti utilizzano per l'autenticazione a un sito o un'applicazione.
     + **Promotional (Promozionale)** - Messaggi non critici che promuovono l'azienda o un servizio, ad esempio offerte speciali o annunci.
     + **Transactional (Transazionale)** - Messaggi informativi importanti che supportano le transazioni con i clienti, come conferme d'ordine o avvisi dell'account. I messaggi transazionali non devono contenere contenuti promozionali o di marketing.
   + (Facoltativo) **Da quale AWS regione invierai i messaggi**, scegli la regione da cui invierai i messaggi.
   + (Facoltativo) In **Paesi a cui si prevede di inviare messaggi**, immetti il paese o la regione in cui desideri acquistare codici brevi.
   + (Facoltativo) Nella sezione **In che modo i clienti decidono di ricevere messaggi dall'utente**, fornisci dettagli sul processo di consenso esplicito.
   + (Facoltativo) Nel campo **Fornire il modello di messaggio che si intende utilizzare per inviare messaggi ai clienti**, includi il modello che utilizzerai.

1. In **Requests** (Richieste), completa le seguenti sezioni:
   + Per la **Regione**, scegli la regione da cui invierai i messaggi. 
**Nota**  
La regione è obbligatoria nella sezione **Richieste**. Anche se hai fornito queste informazioni nella sezione **Dettagli del caso**, devi includerle anche qui.
   + In **Resource Type (Tipo di risorsa)** scegliere **General Limits (Limiti generali)**.
   + In **Limit (Limite)** scegliere **Account Spend Threshold Increase (Aumento soglia di spesa account)**.

1. In Nuovo valore limite, immetti l'importo massimo (in USD) che puoi spendere in messaggi SMS per ogni mese di calendario.

1. In **Case description (Descrizione caso)**, per **Use case description (Descrizione del caso d'uso)**, specificare i dettagli seguenti:
   + Il sito Web o l'app dell'azienda o del servizio che invia messaggi SMS
   + Servizio fornito dal sito Web o dall'app e contributo dei messaggi SMS a tale servizio
   + In che modo gli utenti si registrano per ricevere volontariamente i messaggi SMS sul sito Web, sull'app o altra posizione.

   Se la quota di spesa richiesta, ovvero il valore specificato per **New quota value (Nuovo valore quota)**, è superiore a 10.000 USD, fornire i seguenti dettagli aggiuntivi per ciascun paese a cui si inviano messaggi:
   + Se si utilizza un ID mittente o un codice breve. Se si utilizza un ID mittente, fornire:
     + L'ID del mittente.
     + Se l'ID del mittente è registrato con operatori wireless nel paese.
   + Il massimo previsto transactions-per-second (TPS) per la tua messaggistica.
   + La dimensione media dei messaggi.
   + Il modello dei messaggi che vengono inviati al paese specifico.
   + (Facoltativo) eventuali esigenze di codifica dei caratteri.

1. (Facoltativo) Se desideri inviare ulteriori richieste, scegli **Aggiungi un'altra richiesta**. Se si includono più richieste, specificare le informazioni necessarie per ciascuna. Per le informazioni richieste, consulta le altre sezioni all'interno di [Richiesta di supporto per la messaggistica SMS di Amazon SNS](channels-sms-awssupport.md).

1. In **Opzioni di contatto**, per **Lingua di contatto preferita**, scegli la lingua in cui desideri ricevere le comunicazioni per questo caso.

1. Al termine, scegli **Submit** (Invia).

Il Supporto team fornisce una risposta iniziale alla tua richiesta entro 24 ore.

Per evitare che i nostri sistemi vengano utilizzati per l'invio di contenuti indesiderati o dannosi, ogni richiesta verrà analizzata attentamente da parte nostra. In seguito a questa valutazione, saremo in grado di gestire la tua richiesta durante le prime 24 ore. Tuttavia, se la risoluzione richiede ulteriori informazioni da parte tua, i tempi di gestione della richiesta potranno essere più lunghi.

Se il caso d'uso specifico non è conforme con le nostre policy, potremmo non essere in grado di gestire la tua richiesta s

## Fase 2: aggiornamento delle impostazioni relative agli SMS nella console Amazon SNS
<a name="channels-sms-awssupport-spend-threshold-settings"></a>

Dopo aver ricevuto la notifica relativa all'aumento della quota di spesa mensile, devi modificare la quota di spesa per l'account nella console Amazon SNS.

**Importante**  
È necessario completare i seguenti passaggi o il limite di spesa per gli SMS non verrà aumentato.

**Per modificare la quota di spesa nella console**

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Apri il menu di navigazione a sinistra, espandi **Dispositivi mobili**, quindi scegli **Messaggi di testo (SMS)**.

1. Nella pagina **Mobile text messaging (SMS) (Messaggi di testo mobili (SMS))**, nella sezione **Text messaging preferences (Preferenze per i messaggi di testo)**, scegliere **Edit (Modifica)**.

1. Nella pagina **Modifica le preferenze per i messaggi di testo**, nella sezione **Dettagli**, inserisci il nuovo limite di spesa SMS nel campo **Limite di spesa per account**.
**Nota**  
Potrebbe essere visualizzato un avviso che indica che il valore immesso è maggiore del limite di spesa predefinito. È possibile ignorare questo avviso. 

1. Scegli **Save changes** (Salva modifiche).
**Nota**  
Se ricevi un errore di "Parametro non valido", controlla il contatto da Support AWS e conferma di aver inserito il nuovo limite di spesa SMS corretto. Se il problema persiste, apri una richiesta nel AWS Support Center. 

Quando crei il tuo caso nel Supporto Centro, assicurati di includere tutte le informazioni richieste per il tipo di richiesta che stai inviando. Altrimenti, Supporto devi contattarti per ottenere queste informazioni prima di procedere. Inviando un caso dettagliato, aumenti le probabilità che venga soddisfatto senza ritardi. Per i dettagli che sono necessari per tipi specifici di richieste SMS, consulta i seguenti argomenti.

 Per ulteriori informazioni sul mittente IDs, consulta la seguente documentazione nella Guida per l'*AWS End User Messaging SMS utente*:


| AWS End User Messaging SMS Argomento | Descrizione | 
| --- | --- | 
|  [Richiesta di aumento della quota di spesa](https://docs.aws.amazon.com/sms-voice/latest/userguide/awssupport-spend-threshold.html)  |  La tua quota di spesa determina la quantità di denaro che puoi spendere per l'invio di messaggi SMS AWS End User Messaging SMS ogni mese.  | 
|  [Apri una richiesta nel centro assistenza per un ID mittente](https://docs.aws.amazon.com/sms-voice/latest/userguide/awssupport-sender-id.html)  |  Se prevedi di inviare messaggi ai destinatari di un Paese in cui è richiesto il mittente IDs , puoi richiedere un ID mittente creando una nuova richiesta nel Centro. Supporto   | 

# Le migliori pratiche per la messaggistica SMS di Amazon SNS
<a name="channels-sms-best-practices"></a>

**Importante**  
La Amazon SNS SMS Developer Guide è stata aggiornata. Amazon SNS è integrato [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)per la consegna di messaggi SMS. Questa guida contiene le informazioni più recenti su come creare, configurare e gestire i messaggi SMS di Amazon SNS.

Gli utenti di telefonia mobile tendono ad avere scarsa tolleranza nei confronti dei messaggi SMS non sollecitati. Le campagne SMS non sollecitate otterranno quasi sempre tassi di risposta bassi e, di conseguenza, un ritorno sull'investimento ridotto.

Gli operatori di telefonia mobile, inoltre, controllano continuamente i mittenti di SMS in blocco e limitano o bloccano i messaggi provenienti da numeri che sono stati identificati come mittenti di messaggi non sollecitati. 

L'invio di contenuti non sollecitati costituisce anche una violazione dell'[Acceptable Use Policy (policy di utilizzo accettabile) di AWS](https://aws.amazon.com/aup/#No_E-Mail_or_Other_Message_Abuse). Il team di Amazon SNS controlla regolarmente le campagne SMS e potrebbe limitare o bloccare la possibilità di inviare messaggi se risulta che vengono inviati messaggi indesiderati.

In molti paesi, regioni e giurisdizioni, infine, sono previste sanzioni severe per l'invio di messaggi SMS non sollecitati. Ad esempio, negli Stati Uniti, il Telephone Consumer Protection Act (TCPA) stabilisce che i consumatori hanno diritto a \$1500-\$11.500 in danni (pagati dal mittente) per ogni messaggio non richiesto che ricevono.

Questa sezione illustra diverse best practice che potrebbero rivelarsi utili per migliorare il coinvolgimento dei clienti ed evitare costose sanzioni. Non contiene tuttavia consulenza legale. Consulta sempre un avvocato per ottenere adeguati pareri legali.

## Conformità a leggi, normative e requisiti del gestore
<a name="channels-sms-best-practices-understand-laws"></a>

La violazione di leggi e normative in vigore nei luoghi di residenza dei clienti può comportare multe e sanzioni elevate. Per questo motivo, è essenziale conoscere le leggi relative alla messaggistica SMS in vigore in ogni paese o regione in cui l'azienda opera.

L'elenco seguente contiene link alle leggi chiave applicate alle comunicazioni tramite SMS nei principali mercati di tutto il mondo.
+ **Stati Uniti**: alcuni tipi di messaggi SMS sono soggetti al Telephone Consumer Protection Act (TCPA) del 1991. Per ulteriori informazioni, consulta le [regole e le normative](https://www.fcc.gov/document/telephone-consumer-protection-act-1991) nel sito Web della Federal Communications Commission.
+ **Regno Unito**: alcuni tipi di messaggi SMS sono soggetti alla direttiva CE relativa alla vita privata e alle comunicazioni elettroniche del 2003. Per ulteriori informazioni, consulta [What are PECR?](https://ico.org.uk/for-organisations/direct-marketing-and-privacy-and-electronic-communications/guide-to-pecr/what-are-pecr/) nel sito Web dell'Information Commissioner's Office del Regno Unito.
+ **Unione Europea**: alcuni tipi di messaggi SMS sono soggetti alla direttiva relativa alla vita privata e alle comunicazioni elettroniche del 2002, detta anche "direttiva ePrivacy". Per ulteriori informazioni, consulta il [testo integrale della legge](http://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32002L0058) nel sito Web europa.eu.
+ **Canada**: alcuni tipi di messaggi SMS sono soggetti al Fighting Internet and Wireless Spam Act, comunemente noto come CASL (Canada's Anti-Spam Law). Per ulteriori informazioni, consulta il [testo integrale della legge](http://www.parl.ca/DocumentViewer/en/40-3/bill/C-28/first-reading) nel sito Web del parlamento canadese.
+ **Giappone**: alcuni tipi di messaggi SMS sono soggetti alla legge sulla regolamentazione della trasmissione di posta elettronica specifica. Per ulteriori informazioni, consulta [Japan's Countermeasures Against Spam](https://www.japaneselawtranslation.go.jp/en/laws/view/3767/en) nel sito Web del Ministero degli Affari interni e delle Comunicazioni del Giappone.

In qualità di mittente, queste leggi possono essere applicabili anche se l'azienda o l'organizzazione non ha sede in uno di questi Paesi. Alcune delle leggi dell'elenco sono state originariamente create per e-mail o chiamate telefoniche non sollecitate, ma sono state interpretate o estese in modo da coprire anche i messaggi SMS. Altri paesi e regioni potrebbero disporre di legislazione specifica relativa alla trasmissione di messaggi SMS. Consulta un avvocato in ogni paese o regione in cui si trovano i tuoi clienti per ottenere consulenza legale.

In molti Paesi, i gestori locali hanno sostanzialmente l'autorità di determinare il tipo di traffico gestito nelle rispettive reti. Ciò significa che i gestori potrebbero applicare limitazioni ai contenuti SMS che non risultano conformi ai requisiti minimi delle leggi locali.

## Acquisizione dell’autorizzazione
<a name="channels-sms-best-practices-obtain-permission"></a>

Non inviare mai messaggi a destinatari che non hanno richiesto esplicitamente di ricevere i tipi specifici di messaggi che intendi inviare. Non condividere elenchi di consenso esplicito, nemmeno tra organizzazioni all'interno della stessa azienda. 

Se i destinatari possono registrarsi per ricevere i messaggi mediante un modulo online, aggiungi sistemi che impediscono che script automatizzati possano eseguire la sottoscrizione all'insaputa dei destinatari. È inoltre necessario limitare il numero di volte in cui un utente può inviare un numero di telefono in una singola sessione.

Quando ricevi una richiesta con consenso esplicito per i messaggi SMS, invia al destinatario un messaggio per chiedere conferma del desiderio di ricevere tali messaggi. Non inviare altri messaggi al destinatario finché non conferma la propria sottoscrizione. Un messaggio per la conferma della sottoscrizione potrebbe essere simile all'esempio seguente:

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

Mantieni una documentazione della data, dell'ora e dell'origine di ogni richiesta con consenso esplicito e di ogni conferma. Potrebbe essere utile se un operatore o un ente normativo ne fa richiesta, nonché per eseguire i controlli di routine dell'elenco dei clienti.

### Flusso di lavoro del consenso esplicito
<a name="channels-sms-best-practices-obtain-permission-optin"></a>

In alcuni casi, ad esempio la registrazione mediante numeri verdi gratuiti o codici brevi negli Stati Uniti, gli operatori di telefonia mobile richiedono di fornire modelli (mockup) o schermate dell'intero flusso di lavoro di opt-in. I modelli o le schermate devono assomigliare il più possibile al flusso di lavoro del consenso esplicito che i destinatari completeranno. 

I modelli o le schermate devono includere tutte le informazioni richieste elencate di seguito per mantenere il massimo livello di conformità. 

**Esposizione di informazioni richieste**
+ Una descrizione del caso d'uso relativo alla messaggistica che invierai tramite il programma.
+ La frase "È possibile che vengano applicate tariffe specifiche per messaggi e dati".
+ Un'indicazione della frequenza con cui i destinatari riceveranno messaggi. Ad esempio, un programma di messaggistica ricorrente potrebbe indicare "un messaggio alla settimana". Un caso d'uso relativo alla password monouso o all'autenticazione a più fattori (MFA) potrebbe indicare "la frequenza dei messaggi può variare" o "un messaggio per tentativo di accesso".
+ Collegamenti ai termini e alle condizioni d'uso e ai documenti relativi all'Informativa sulla privacy. 

**Motivi comuni di rifiuto per operazioni di consenso esplicito non conformi**
+ Se il nome dell'azienda fornito non corrisponde a quello fornito nel modello o nella schermata. Qualsiasi relazione non ovvia deve essere spiegata nella descrizione del flusso di lavoro del consenso esplicito.
+ Se sembra che verrà inviato un messaggio al destinatario, ma non viene acquisito alcun consenso esplicito in merito. Il consenso esplicito è un requisito per tutti i messaggi.
+ Se sembra che la ricezione di un messaggio SMS sia necessaria per iscriversi a un servizio. Ciò non è conforme se il flusso di lavoro non fornisce alcuna alternativa alla ricezione di un messaggio di consenso esplicito in un'altra forma, ad esempio e-mail o chiamata vocale. 
+ Se la lingua del consenso esplicito è rappresentata nei Termini del servizio. Le informazioni richieste devono sempre essere esposte al destinatario al momento del rilascio del consenso esplicito anziché essere contenute in un documento collegato relativo alla policy. 
+ Se un cliente ha fornito il consenso a ricevere un tipo di messaggio da te e tu gli invii altri tipi di messaggi di testo. Ad esempio, il cliente accetta di ricevere password monouso, ma riceve anche messaggi relativi a sondaggi e indagini.
+ Se le informazioni richieste (elencate sopra) non vengono esposte ai destinatari.

L'esempio seguente è conforme ai requisiti dei gestori di telefonia mobile per un caso d'uso relativo all'autenticazione a più fattori.

![\[Un modello del step-by-step flusso di lavoro opt-in per abilitare l'autenticazione a più fattori (MFA) su un account utente con. ExampleCorp Il processo inizia con l'utente che fornisce informazioni di base sull'account, come nome ed e-mail. Successivamente, l'utente decide se abilitare l'MFA per una maggiore sicurezza. Se l'MFA è abilitata, l'utente seleziona come desidera ricevere il token MFA, con opzioni come SMS o telefonata. Se l'utente seleziona un messaggio di testo, riceve un SMS con un codice di verifica. Il passaggio finale richiede all'utente di inserire il codice ricevuto per confermare il proprio numero di telefono, completando la procedura di opt-in. Questo mockup garantisce che vengano fornite tutte le informazioni necessarie per la conformità agli SMS.\]](http://docs.aws.amazon.com/it_it/sns/latest/dg/images/best-practices-usecase.png)


Contiene testo e immagini finalizzati e mostra l'intero flusso di lavoro del consenso esplicito, completo di annotazioni. Nel flusso di lavoro del consenso esplicito, il cliente deve intraprendere azioni distinte e intenzionali per fornire il proprio consenso a ricevere messaggi di testo e contiene tutte le informazioni richieste.

### Altri tipi di flussi di lavoro del consenso esplicito
<a name="channels-sms-best-practices-obtain-permission-other"></a>

I gestori di telefonia mobile accetteranno anche flussi di lavoro del consenso esplicito esterni ad applicazioni e siti Web, come il consenso esplicito verbale o scritto, se conforme a quanto descritto sopra. Un flusso di lavoro del consenso esplicito conforme e uno script verbale o scritto acquisirà il consenso esplicito del destinatario a ricevere un tipo di messaggio specifico. Esempi di ciò includono lo script verbale utilizzato da un agente del supporto per acquisire il consenso prima della registrazione in un database di servizi o un numero di telefono elencato in un volantino promozionale. Per fornire un modello di questi tipi di flusso di lavoro di opt-in, puoi fornire una schermata dello script di attivazione, del materiale di marketing o del database in cui vengono raccolti i numeri. I gestori di telefonia mobile potrebbero avere ulteriori domande su questi casi d'uso se l'opzione di consenso esplicito non è chiara o se il caso d'uso supera determinati volumi.

## Non inviare messaggi a elenchi obsoleti
<a name="channels-sms-best-practices-old-lists"></a>

Le persone cambiano spesso numeri di telefono. Un numero di telefono per il quale è stato acquisito il consenso all'invio di messaggi due anni fa potrebbe ora appartenere a un altro utente. Non utilizzare un vecchio elenco di numeri di telefono per un nuovo programma di messaggistica; se lo fai, è possibile che alcuni messaggi non vengano recapitati perché il numero non è più operativo e alcuni destinatari potrebbero non ricordare di avere precedentemente fornito il loro consenso.

## Controllo degli elenchi dei clienti
<a name="channels-sms-best-practices-audit-lists"></a>

Se invii campagne SMS ricorrenti, controlla regolarmente gli elenchi dei clienti. Tale controllo garantisce che i messaggi vengano inviati solo ai clienti che sono interessati a riceverli. 

Quando controlli l'elenco, invia a ogni cliente che ha acconsentito esplicitamente un messaggio di promemoria della sottoscrizione con le informazioni per annullarla. Un messaggio di promemoria potrebbe essere simile all'esempio seguente:

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

## Conservazione della documentazione
<a name="channels-sms-best-practices-keep-records"></a>

Conserva la documentazione che indica quando ogni cliente ha richiesto di ricevere SMS e quali messaggi hai inviato a ciascun cliente. Molti paesi e regioni di tutto il mondo richiedono ai mittenti di SMS di conservare tale documentazione in modo che sia facilmente recuperabile. Tali informazioni potrebbero inoltre essere richieste dagli operatori di telefonia mobile in qualsiasi momento. Le informazioni esatte da fornire variano a seconda del paese o della regione. Per ulteriori informazioni sui requisiti di conservazione della documentazione, esamina le normative sui messaggi SMS commerciali di ogni paese o regione in cui si trovano i tuoi clienti.

Talvolta, un operatore o un ente normativo ci chiede di fornire una prova del fatto che un cliente ha acconsentito a ricevere messaggi da te. In queste situazioni, ti Supporto contatta fornendoti un elenco delle informazioni richieste dal corriere o dall'agenzia. Se non sei in grado di fornire le informazioni necessarie, potremmo sospendere la tua possibilità di inviare ulteriori messaggi SMS.

## Rendi i tuoi messaggi chiari, attendibili e concisi
<a name="channels-sms-best-practices-appropriate-content"></a>

Gli SMS sono uno strumento unico. Il character-per-message limite di 160 significa che i tuoi messaggi devono essere concisi. Le tecniche che potresti utilizzare in altri canali di comunicazione, come la posta elettronica, potrebbero non essere applicabili al canale SMS e potrebbero persino sembrare non attendibili o ingannevoli se utilizzate con i messaggi SMS. Se il contenuto dei messaggi non è in linea con le best practice, i destinatari potrebbero ignorarli; nel peggiore dei casi, i gestori di telefonia mobile potrebbero identificare i messaggi come spam e bloccare i messaggi futuri ricevuti dal tuo numero di telefono.

Questa sezione fornisce alcuni suggerimenti e idee per creare un corpo efficace del messaggio SMS.

### Identificati come mittente
<a name="channels-sms-best-practices-appropriate-content-identify"></a>

I destinatari devono essere in grado di capire subito che un messaggio proviene da te. I mittenti che si attengono a questa best practice includono un identificativo ("nome del programma") all'inizio di ogni messaggio.

**Non fare questo:**  
`Your account has been accessed from a new device. Reply Y to confirm.`

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

### Non cercare di far sembrare il tuo messaggio un person-to-person messaggio
<a name="channels-sms-best-practices-appropriate-content-p2p"></a>

Alcuni esperti di marketing sono tentati di aggiungere un tocco personale ai loro messaggi SMS facendoli sembrare inviati da un individuo. Tuttavia, questa tecnica potrebbe essere fraintesa come un tentativo di phishing.

**Non fare questo:**  
`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.`

**Prova invece questo:**  
`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.`

### Fai attenzione quando parli di soldi
<a name="channels-sms-best-practices-appropriate-content-money"></a>

I truffatori spesso sfruttano il desiderio delle persone di risparmiare e ricevere denaro. Non far sembrare le offerte troppo belle per essere vere. Non usate il richiamo dei soldi per ingannare le persone. Non utilizzare simboli di valuta per fare riferimento al denaro.

**Non fare questo:**  
`Save big $$$ on your next car repair by going to https://www.example.com.`

**Prova invece questo:**  
`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.`

### Usa solo i caratteri necessari
<a name="channels-sms-best-practices-appropriate-content-characters"></a>

I marchi sono spesso propensi a proteggere la propria immagine includendo simboli come ™ o ® nei rispettivi messaggi. Tuttavia, questi simboli non fanno parte del set standard di caratteri (noto come alfabeto GSM) che può essere incluso in un messaggio SMS di 160 caratteri. Quando invii un messaggio contenente uno di questi caratteri, il messaggio viene inviato automaticamente utilizzando un sistema di codifica dei caratteri diverso, che supporta solo 70 caratteri per parte del messaggio. Di conseguenza, il messaggio potrebbe venire suddiviso in più parti. Poiché ti viene addebitato un costo per ogni parte del messaggio inviata, l'invio dell'intero messaggio potrebbe costarti più del previsto. Inoltre, i destinatari potrebbero ricevere più messaggi sequenziali, anziché un unico messaggio. Per ulteriori informazioni sulla codifica dei caratteri degli SMS, consulta [Limiti relativi ai caratteri per gli SMS in Amazon SNS](#channels-sms-limitations-characters).

**Non fare questo:**  
`ExampleCorp Alerts: Save 20% when you buy a new ExampleCorp Widget® at example.com and use the promo code WIDGET.`

**Prova invece questo:**  
`ExampleCorp Alerts: Save 20% when you buy a new ExampleCorp Widget(R) at example.com and use the promo code WIDGET.`

**Nota**  
I due esempi precedenti sono pressoché identici, ma il primo contiene il simbolo del marchio registrato (®), che non fa parte dell'alfabeto GSM. Di conseguenza, il primo esempio viene inviato come messaggio in due parti, mentre il secondo esempio viene inviato come messaggio unico.

### Usa collegamenti validi e sicuri
<a name="channels-sms-best-practices-appropriate-content-links"></a>

Se il messaggio include link, ricontrolla i link per assicurarti che funzionino. Verifica i link su un dispositivo esterno alla rete aziendale per assicurarti che vengano risolti correttamente. A causa del limite di 160 caratteri dei messaggi SMS, molto lunghi URLs potrebbero essere suddivisi in più messaggi. È necessario utilizzare i domini di reindirizzamento per fornire informazioni abbreviate. URLs Tuttavia, non dovresti usare servizi gratuiti di accorciamento dei link, come tinyurl.com o bitly.com, perché i gestori tendono a filtrare i messaggi che includono link su questi domini. Puoi tuttavia utilizzare servizi di abbreviazione dei link a pagamento, purché i tuoi link rimandino a un dominio dedicato all'uso esclusivo della tua azienda o organizzazione. 

**Non fare questo:**  
`Go to https://tinyurl.com/4585y8mr today for a special offer!`

**Prova invece questo:**  
`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.`

### Limita il numero di abbreviazioni da utilizzare
<a name="channels-sms-best-practices-appropriate-content-abbrev"></a>

La limitazione di 160 caratteri del canale SMS induce alcuni mittenti a credere di dover utilizzare ampiamente le abbreviazioni nei loro messaggi. Tuttavia, l'uso eccessivo di abbreviazioni può sembrare poco professionale per molti lettori e potrebbe indurre alcuni utenti a segnalare il tuo messaggio come spam. È possibile scrivere un messaggio coerente senza utilizzare un numero eccessivo di abbreviazioni.

**Non fare questo:**  
`Get a gr8 deal on ExampleCorp widgets when u buy a 4-pack 2day.`

**Prova invece questo:**  
`ExampleCorp Alerts: Today only—an exclusive deal on ExampleCorp Widgets at example.com. Text STOP to opt-out.`

## Invio di risposte appropriate
<a name="channels-sms-best-practices-respond-appropriately"></a>

Quando un destinatario risponde ai tuoi messaggi, assicurati di rispondere con informazioni utili. Quando un cliente risponde a uno dei tuoi messaggi con la parola chiave "HELP", ad esempio, invia informazioni sul programma a cui ha effettuato la sottoscrizione, sul numero di messaggi che invierai ogni mese e sui modi in cui potrà contattarti per ulteriori informazioni. Una risposta HELP potrebbe essere simile all'esempio seguente:

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

Quando un cliente risponde con la parola chiave "STOP", comunica al cliente che non riceverà ulteriori messaggi. Una risposta STOP potrebbe essere simile all'esempio seguente:

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

## Adattamento dell'invio al coinvolgimento
<a name="channels-sms-best-practices-adjust-engagement"></a>

Le priorità dei clienti possono cambiare nel tempo. Se i clienti non ritengono più utili i tuoi messaggi, potrebbero cancellarsi completamente dalla ricezione o addirittura segnalare i tuoi messaggi come non sollecitati. Per questi motivi, è importante adattare le tue procedure di invio al coinvolgimento dei clienti.

Per i clienti che raramente interagiscono con i tuoi messaggi, dovresti adattare la frequenza dei messaggi. Se ai clienti coinvolti invii messaggi settimanali, ad esempio, potresti creare un riepilogo mensile separato per i clienti meno coinvolti. 

Rimuovi infine dai tuoi elenchi i clienti che non sono affatto coinvolti. Questo evita che i tuoi messaggi generino frustrazione nei clienti e ti consente inoltre di risparmiare denaro e proteggere la tua reputazione come mittente.

## Invio in orari appropriati
<a name="channels-sms-best-practices-appropriate-times"></a>

Invia messaggi solo durante il normale orario di ufficio diurno. Se invii messaggi all'ora di cena o nel cuore della notte, è probabile che i clienti annullino la sottoscrizione ai tuoi elenchi per evitare di essere disturbati. Non è inoltre opportuno inviare messaggi SMS quando i tuoi clienti non possono rispondere immediatamente. 

Se invii campagne o percorsi a un pubblico molto vasto, ricontrolla la velocità di trasmissione effettiva dei numeri di origine. Dividi il numero di destinatari per la velocità di trasmissione effettiva per determinare il tempo necessario per inviare messaggi a tutti i destinatari.

## Astensione dalla ripetizione in più canali
<a name="channels-sms-best-practices-cross-channel-fatigue"></a>

Se nelle tue campagne utilizzi più canali di comunicazione (ad esempio e-mail, SMS e notifiche push), non inviare lo stesso messaggio in ogni canale. Se invii lo stesso messaggio tramite più canali contemporaneamente, il tuo comportamento di invio verrà probabilmente percepito dai clienti come fastidioso anziché utile.

## Utilizzo di codici brevi dedicati
<a name="channels-sms-best-practices-dedicated-short-codes"></a>

Se utilizzi codici brevi, mantieni un codice breve separato per ogni marchio e per ciascun tipo di messaggio. Se l'azienda possiede due marchi, ad esempio, utilizza un codice breve separato per ciascuno. Analogamente, se invii messaggi sia transazionali che promozionali, utilizza un codice breve separato per ciascun tipo di messaggio. Per ulteriori informazioni sulla richiesta di codici brevi, consulta [Richiesta di codici brevi per la messaggistica SMS AWS End User Messaging SMS nella Guida](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-request-short-code.html) per l'*AWS End User Messaging SMS utente*.

## Verifica i numeri di telefono di destinazione
<a name="channels-sms-best-practices-verify-destination-numbers"></a>

Quando invii messaggi SMS tramite Amazon SNS, ti viene addebitato un costo per ogni parte di messaggio inviata. Il prezzo da pagare per parte di messaggio varia in base al Paese o all'area geografica del destinatario. Per ulteriori informazioni sui prezzi degli SMS, consulta la pagina Prezzi [AWS mondiali degli SMS](https://aws.amazon.com/sns/sms-pricing).

Quando Amazon SNS accetta una richiesta di invio di un messaggio SMS (come risultato di una chiamata all'[SendMessages](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#SendMessages)API o come risultato del lancio di una campagna o di un viaggio), ti viene addebitato un costo per l'invio di quel messaggio. Questa affermazione è vera anche se il destinatario previsto non riceve effettivamente il messaggio. Ad esempio, se il numero di telefono del destinatario non è più operativo o se il numero a cui hai inviato il messaggio non è un numero di cellulare valido, ti verrà comunque addebitato il costo dell'invio del messaggio.

Amazon SNS accetta richieste valide di invio di messaggi SMS e tenta di recapitarli. Per questo motivo, è necessario verificare che i numeri di telefono a cui si inviano messaggi siano numeri di cellulare validi. È possibile utilizzare AWS End User Messaging SMS per inviare un messaggio di prova per determinare se un numero di telefono è valido e di che tipo di numero si tratta (ad esempio cellulare, rete fissa o VoIP). *Per ulteriori informazioni, consulta [Inviare un messaggio di prova con il simulatore SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/getting-started-tutorial.html#getting-started-tutorial-step3) nella Guida per l'AWS End User Messaging SMS utente.*

## Progetta considerando la ridondanza
<a name="channels-sms-best-practices-redundancy"></a>

Per i programmi di messaggistica mission critical, ti consigliamo di configurare Amazon SNS in più di una Regione AWS. Amazon SNS è disponibile in diverse versioni. Regioni AWS Per un elenco delle regioni in cui Amazon SNS è disponibile, consulta [Riferimenti generali di AWS](https://docs.aws.amazon.com/general/latest/gr/sns.html). 

I numeri di telefono utilizzati per i messaggi SMS, inclusi codici brevi, codici lunghi, numeri gratuiti e numeri 10DLC, non possono essere replicati nelle Regioni AWS. Di conseguenza, per utilizzare Amazon SNS in più regioni, devi richiedere numeri di telefono distinti in ogni regione in cui desideri utilizzare Amazon SNS. Ad esempio, se utilizzi un codice breve per inviare messaggi di testo a destinatari negli Stati Uniti d'America, devi richiedere codici brevi separati per ciascuno Regione AWS che intendi utilizzare.

In alcuni Paesi, puoi anche utilizzare più tipi di numeri di telefono per una maggiore ridondanza. Ad esempio, negli Stati Uniti, puoi richiedere codici brevi, numeri 10DLC e numeri gratuiti. Ciascuno di questi tipi di numeri di telefono segue un percorso diverso per raggiungere il destinatario. La disponibilità di più tipi di numeri di telefono, uguali Regione AWS o distribuiti su più numeri, Regioni AWS offre un ulteriore livello di ridondanza, che può contribuire a migliorare la resilienza.

## Limiti e restrizioni degli SMS
<a name="channels-sms-best-practices-limits"></a>

*Per i limiti e le restrizioni relativi agli [SMS, consulta Limiti e restrizioni relativi agli SMS e MMS nella Guida](https://docs.aws.amazon.com/sms-voice/latest/userguide/sms-limitations.html) per l'AWS End User Messaging SMS utente.*

## Gestione delle parole chiave di esclusione
<a name="channels-sms-best-practices-optout-keywords"></a>

I destinatari degli SMS possono utilizzare i propri dispositivi per disattivare i messaggi rispondendo con una parola chiave. Per ulteriori informazioni, consulta [Richiesta di non ricevere i messaggi SMS](sms_manage.md#sms_manage_optout).

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

Utilizza l'azione API `CreatePool` per creare un nuovo pool e associare un'identità di origine specificata al pool. Per ulteriori informazioni, consulta [CreatePool AWS End User Messaging SMS](https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_CreatePool.html)*API Reference*.

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

Utilizza l'azione `PutKeyword` API per creare o aggiornare una configurazione di parole chiave su un numero di telefono o un pool di origine. Per ulteriori informazioni, consulta la sezione [PutKeyword AWS End User Messaging SMS](https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_PutKeyword.html)*API Reference.*

## Gestione delle impostazioni del numero
<a name="channels-sms-best-practices-number-settings"></a>

Per gestire le impostazioni per i codici brevi e i codici lunghi dedicati che hai richiesto al AWS Supporto e assegnati al tuo account, vedi [Modificare le funzionalità di un numero di telefono con l' AWS CLI](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-change-capabilitiy.html)in *AWS End User Messaging SMS*.

## Limiti relativi ai caratteri per gli SMS in Amazon SNS
<a name="channels-sms-limitations-characters"></a>

Un singolo messaggio SMS può contenere fino a 140 byte di informazioni. Il numero di caratteri che può essere incluso in un singolo messaggio SMS dipende dal tipo di caratteri che il messaggio contiene.

Se utilizza solo [caratteri del set di caratteri GSM 03.38](#channels-sms-limitations-characters-gsm-alphabet), noto anche come alfabeto GSM a 7 bit, il messaggio può contenere fino a 160 caratteri. Se il messaggio contiene caratteri non appartenenti al set di caratteri GSM 03.38, il messaggio può includere fino a 70 caratteri. Quando si invia un messaggio SMS, Amazon SNS determina automaticamente la codifica più efficiente da utilizzare.

Quando un messaggio contiene più caratteri del numero massimo, il messaggio viene suddiviso in più parti. Quando i messaggi vengono suddivisi in più parti, ogni parte contiene informazioni aggiuntive sulla parte del messaggio che lo precede. Quando il dispositivo del destinatario riceve parti del messaggio separate in questo modo, utilizza queste informazioni aggiuntive per garantire che tutte le parti del messaggio vengano visualizzate nell'ordine corretto. A seconda dell'operatore e del dispositivo mobile del destinatario, è possibile che più messaggi vengano visualizzati come un singolo messaggio o come una sequenza di messaggi separati. Di conseguenza, il numero di caratteri per ogni parte di un messaggio viene ridotto a 153 (per i messaggi contenenti solo caratteri GSM 03.38) o a 67 (per i messaggi contenenti altri caratteri). È possibile stimare quante parti di messaggio contiene il messaggio prima di inviarlo utilizzando gli strumenti di calcolo della lunghezza degli SMS, molti dei quali sono disponibili online. La dimensione massima supportata di qualsiasi messaggio è 1.600 caratteri GSM o 630 caratteri non GSM. Per ulteriori informazioni sul throughput (velocità di trasmissione effettiva) e sulla dimensione dei messaggi, consulta la pagina relativa ai [limiti di caratteri per gli SMS in Amazon Pinpoint](https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-sms-limitations-mps.html) nella *guida per l'utente di Amazon Pinpoint*.

Per visualizzare il numero di parti per ogni messaggio inviato, è innanzitutto necessario abilitare le impostazioni relative allo [streaming di eventi](https://docs.aws.amazon.com/pinpoint/latest/userguide/settings-event-streams.html). Quando si esegue questa operazione, Amazon SNS produce un evento `_SMS.SUCCESS` quando il messaggio viene recapitato al fornitore di servizi mobili del destinatario. Il record di evento `_SMS.SUCCESS` contiene un attributo denominato `attributes.number_of_message_parts`. Questo attributo specifica il numero di parti di messaggio contenute nel messaggio.

**Importante**  
Quando si invia un messaggio che contiene più di una parte, viene addebitato il numero di parti contenute nel messaggio.

### Set di caratteri GSM 03.38
<a name="channels-sms-limitations-characters-gsm-alphabet"></a>

Nella tabella seguente sono elencati tutti i caratteri presenti nel set di caratteri GSM 03.38. Se invii un messaggio che include solo i caratteri riportati nella tabella seguente, il messaggio può contenere fino a 160 caratteri. 


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

In aggiunta ai caratteri riportati nella tabella precedente, il set di caratteri GSM 03.38 include diversi simboli. Ognuno di essi, tuttavia, viene conteggiato come due caratteri poiché include anche un carattere di escape non visibile:
+ ^
+ \$1
+ \$1
+ \$1
+ [
+ ]
+ \$1
+ \$1
+ €

Il set di caratteri GSM 03.38 include, infine, anche i caratteri non stampati seguenti:
+ Carattere di spazio
+ Controllo di avanzamento riga, che indica la fine di una riga di testo e l'inizio di un'altra
+ Controllo di ritorno a capo, che passa all'inizio di una riga di testo (in genere dopo un carattere di avanzamento riga)
+ Controllo di escape, che viene aggiunto automaticamente ai caratteri dell'elenco precedente

### Messaggi di esempio
<a name="channels-sms-limitations-characters-example-messages"></a>

Questa sezione contiene vari messaggi SMS di esempio. Per ogni esempio, questa sezione mostra il numero totale di caratteri e il numero di parti del messaggio.

**Esempio 1: messaggio lungo che contiene solo caratteri presenti nell'alfabeto GSM 03.38**  
Il seguente messaggio contiene solo caratteri presenti nell'alfabeto GSM 03.38.

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

Il messaggio precedente contiene 180 caratteri, quindi deve essere diviso in più parti. Quando un messaggio è diviso in più parti, ogni parte può contenere 153 caratteri GSM 03.38. Di conseguenza, questo messaggio viene inviato come messaggio in due parti.

**Esempio 2: un messaggio che contiene caratteri multibyte**  
Il seguente messaggio contiene diversi caratteri cinesi, tutti al di fuori dell'alfabeto GSM 03.38. 

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

Il messaggio precedente contiene 71 caratteri. Tuttavia, poiché quasi tutti i caratteri nel messaggio sono al di fuori dell'alfabeto GSM 03.38, viene inviato come messaggio in due parti. Ciascuna di queste parti può contenere un massimo di 67 caratteri.

**Esempio 3: messaggio che contiene un singolo carattere non GSM**  
Il seguente messaggio contiene un singolo carattere che non fa parte dell'alfabeto GSM 03.38. In questo esempio, il carattere è una virgoletta singola di chiusura (’), che è un carattere diverso da un normale apostrofo ('). Le applicazioni di elaborazione testi come Microsoft Word spesso sostituiscono automaticamente gli apostrofi con le virgolette singole di chiusura. Se si redigono messaggi SMS in Microsoft Word e si incollano in Amazon SNS, è necessario rimuovere questi caratteri speciali e sostituirli con apostrofi.

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

Il messaggio precedente contiene 130 caratteri. Tuttavia, poiché contiene il carattere di virgoletta singola di chiusura, che non fa parte dell'alfabeto GSM 03.38, viene inviato come messaggio in due parti.

Se si sostituisce il carattere di virgoletta singola di chiusura in questo messaggio con un apostrofo (che fa parte dell'alfabeto GSM 03.38), il messaggio viene inviato come un messaggio singolo.

# Invio di notifiche push per dispositivi mobili con Amazon SNS
<a name="sns-mobile-application-as-subscriber"></a>

Puoi usare Amazon SNS per inviare messaggi di notifica push direttamente alle app sui dispositivi mobili. I messaggi di notifica push inviati a un dispositivo mobile possono apparire nell'app mobile come avvisi di messaggi, aggiornamenti di badge o avvisi sonori. 

![\[Panoramica delle notifiche push per dispositivi mobili di Amazon SNS\]](http://docs.aws.amazon.com/it_it/sns/latest/dg/images/sns-mobile-push-notifications.png)


**Topics**
+ [

## Come funzionano le notifiche utente di Amazon SNS
](#sns-how-user-notifications-work)
+ [

## Configurazione delle notifiche push con Amazon SNS
](#sns-user-notifications-process-overview)
+ [

# Configurazione di un'app mobile in Amazon SNS
](mobile-push-send.md)
+ [

# Utilizzo di Amazon SNS per notifiche push su dispositivi mobili
](mobile-push-notifications.md)
+ [

# Attributi dell'app mobile Amazon SNS
](sns-msg-status.md)
+ [

# Notifiche degli eventi delle applicazioni Amazon SNS per applicazioni mobili
](application-event-notifications.md)
+ [

# Operazioni API push per dispositivi mobili
](mobile-push-api.md)
+ [

# Errori comuni dell'API push mobile di Amazon SNS
](mobile-push-api-error.md)
+ [

# Utilizzo dell'attributo time to live message di Amazon SNS per le notifiche push mobili
](sns-ttl.md)
+ [

# Regioni supportate dall'applicazione mobile Amazon SNS
](sns-mobile-push-supported-regions.md)
+ [

# Best practice per la gestione delle notifiche push mobili di Amazon SNS
](mobile-push-notifications-best-practices.md)

## Come funzionano le notifiche utente di Amazon SNS
<a name="sns-how-user-notifications-work"></a>

L'invio di messaggi di notifica push a desktop e dispositivi mobili viene eseguito mediante uno dei seguenti servizi di notifica push supportati: 
+ Amazon Device Messaging (ADM)
+ Servizio Apple Push Notification (APNs) per iOS e Mac OS X
+ Baidu Cloud Push (Baidu)
+ Firebase Cloud Messaging (FCM)
+ Servizio di notifica push Microsoft per Windows Phone (MPNS)
+ Windows Push Notification Services (WNS)

I servizi di notifica push, come APNs FCM, mantengono una connessione con ogni app e dispositivo mobile associato registrato per utilizzare il loro servizio. Quando si registra un'app e un dispositivo mobile, la notifica push restituisce un token di dispositivo. Amazon SNS utilizza il token di dispositivo per creare un endpoint mobile a cui può inviare direttamente messaggi di notifica push. Per consentire la comunicazione tra Amazon SNS e i differenti servizi di notifica push, devi inviare le tue credenziali del servizio di notifica push ad Amazon SNS affinché le utilizzi a tuo nome. Per ulteriori informazioni, consulta [Configurazione delle notifiche push con Amazon SNS](#sns-user-notifications-process-overview). 

 Oltre a inviare direttamente messaggi di notifica push, puoi anche utilizzare Amazon SNS per inviare messaggi a endpoint mobili che dispongono di una sottoscrizione a un argomento. Il concetto è lo stesso della sottoscrizione di altri tipi di endpoint, ad esempio Amazon SQS, HTTP/S, e-mail e SMS, a un argomento, come descritto in [Che cos'è Amazon SNS?](welcome.md). La differenza è che Amazon SNS comunica mediante i servizi di notifica push affinché gli endpoint mobili con sottoscrizione ricevano i messaggi di notifica push inviati all'argomento.

## Configurazione delle notifiche push con Amazon SNS
<a name="sns-user-notifications-process-overview"></a>

1. [Ottenere le credenziali e il token del dispositivo](sns-prerequisites-for-mobile-push-notifications.md) per le piattaforme mobili che si desidera supportare.

1. Utilizzare le credenziali per creare un oggetto application platform (`PlatformApplicationArn`) utilizzando Amazon SNS. Per ulteriori informazioni, consulta [Creazione di un'applicazione della piattaforma Amazon SNS](mobile-push-send-register.md).

1. Utilizza le credenziali ottenute per richiedere un token per il dispositivo mobile e l'app dal servizio di notifiche push. Il token che ottieni rappresenta il tuo dispositivo e la tua app per dispositivi mobili.

1. Utilizzare il token dispositivo e `PlatformApplicationArn` per creare un oggetto endpoint piattaforma (`EndpointArn`) utilizzando Amazon SNS. Per ulteriori informazioni, consulta [Configurazione di un endpoint della piattaforma Amazon SNS per le notifiche mobili](mobile-platform-endpoint.md).

1. `EndpointArn` viene quindi utilizzato per [pubblicare un messaggio in una app in un dispositivo mobile](mobile-push-send.md). Per ulteriori informazioni, consulta [Messaggistica diretta per dispositivi mobili Amazon SNS](mobile-push-notifications.md#mobile-push-send-directmobile) e API [Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html) (Pubblica) nella Guida API di Amazon Simple Notification Service.

# Configurazione di un'app mobile in Amazon SNS
<a name="mobile-push-send"></a>

Questo argomento descrive come configurare le applicazioni mobili Console di gestione AWS utilizzando le informazioni descritte in[Prerequisiti per le notifiche utente Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md).

# Prerequisiti per le notifiche utente Amazon SNS
<a name="sns-prerequisites-for-mobile-push-notifications"></a>

Per iniziare a utilizzare le notifiche push mobili di Amazon SNS, avrai bisogno di quanto segue:
+ Un set di credenziali per la connessione a uno dei servizi di notifica push supportati: ADM, Baidu, FCM APNs, MPNS o WNS.
+ Un token di dispositivo o un ID di registrazione per l'app per dispositivi mobili e il dispositivo.
+ Amazon SNS configurato per l'invio di messaggi di notifica push a endpoint mobili.
+ Un app per dispositivi mobili registrata e configurata per l'utilizzo di uno dei servizi di notifica push supportati.

La registrazione dell'applicazione a un servizio di notifica mobile comporta varie fasi. Amazon SNS necessita di alcune delle informazioni fornite al servizio di notifica push per inviare direttamente messaggi di notifica push all'endpoint mobile. In genere, hai bisogno delle credenziali necessarie per la connessione al servizio di notifica push, il token di dispositivo o l'ID di registrazione (che rappresenta il dispositivo mobile e l'app) ricevuti dal servizio di notifica push e l'app per dispositivi mobili registrata al servizio di notifica push. 

La forma esatta delle credenziali differisce a seconda della piattaforma mobile, ma in ogni caso, queste credenziali devono essere fornite durante una connessione alla piattaforma. Un set di credenziali viene generato per ogni app per dispositivi mobili e deve essere utilizzato per inviare un messaggio a qualsiasi istanza di quell'app. 

I nomi specifici variano a seconda del servizio di notifica push utilizzato. *Ad esempio, quando si utilizza APNs come servizio di notifica push, è necessario un token del dispositivo.* Quando invece utilizzi FCM, il token di dispositivo equivalente è denominato *ID di registrazione*. Il *token di dispositivo* o l'*ID di registrazione* è una stringa inviata all'applicazione dal sistema operativo del dispositivo mobile. Identifica in modo univoco un'istanza di un'app per dispositivi mobili eseguita su un determinato dispositivo mobile e può essere considerata come l'identificatore univoco di questa coppia app-dispositivo. 

Amazon SNS archivia le credenziali (e altre impostazioni) come risorsa di applicazione di piattaforma. I token del dispositivo (sempre con alcune impostazioni aggiuntive) sono rappresentati come oggetti chiamati *endpoint della piattaforma*. Ogni endpoint di piattaforma appartiene a una specifica applicazione di piattaforma ed è possibile comunicare con ognuno di questi endpoint utilizzando le credenziali archiviate nell'applicazione di piattaforma corrispondente.

Le sezioni seguenti includono i prerequisiti per ogni servizio di notifica push supportato. Una volta ottenute le informazioni sui prerequisiti, puoi inviare un messaggio di notifica push utilizzando il Console di gestione AWS o il push mobile di Amazon SNS. APIs Per ulteriori informazioni, consulta [Configurazione delle notifiche push con Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview). 

# Creazione di un'applicazione della piattaforma Amazon SNS
<a name="mobile-push-send-register"></a>

Per inviare notifiche da Amazon SNS agli endpoint mobili, direttamente o tramite abbonamenti a un argomento, devi prima creare un'applicazione di piattaforma. Dopo aver registrato l'app con AWS, devi creare un endpoint sia per l'app che per il dispositivo mobile. Questo endpoint consente ad Amazon SNS di inviare messaggi al dispositivo.

**Per creare un'applicazione della piattaforma**

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel riquadro di navigazione, seleziona Notifiche **push**.

1. Nella sezione **Platform applications** (Applicazioni di piattaforma), scegli **Create platform application** (Crea applicazione di piattaforma).

1. Scegli il tuo **Regione AWS**. Per un elenco delle regioni AWS in cui è possibile creare applicazioni per dispositivi mobili, consulta [Regioni supportate dall'applicazione mobile Amazon SNS](sns-mobile-push-supported-regions.md).

1. Inserisci i seguenti **dettagli dell'applicazione**:
   + **Nome dell'applicazione**: fornite un **nome** per l'applicazione della piattaforma. Il nome deve contenere da 1 a 256 caratteri e può contenere lettere maiuscole e minuscole, numeri, caratteri di sottolineatura, trattini e punti.
   + **Piattaforma di notifica push**: seleziona il **servizio di notifica** appropriato con cui è registrata l'app (ad esempio, Apple Push Notification Service (APNs), Firebase Cloud Messaging (FCM)).

1. A seconda della piattaforma selezionata, dovrai fornire credenziali specifiche:
   + **Per **APNs**(Apple Push Notification Service): scegli tra l'autenticazione **basata su token o quella basata su certificati**.**
     + Per l'autenticazione basata su token, carica un **file.p8** (generato tramite Keychain Access).
     + Per l'autenticazione basata su certificati, carica un **file.p12** (anch'esso esportato da Keychain Access).
   + **Per **FCM** (Firebase Cloud Messaging): inserisci la chiave del server dalla console Firebase.**
   + ****Per **altre piattaforme** (come ADM o GCM): inserisci le rispettive chiavi o credenziali API.****

1. Dopo aver inserito i dettagli necessari, scegli **Crea** applicazione della piattaforma. Questa azione registra l'app con Amazon SNS e crea l'oggetto applicativo della piattaforma corrispondente.

1. Al momento della creazione, Amazon SNS genera e restituisce 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). Questo ARN identifica in modo univoco l'applicazione della piattaforma e viene utilizzato per la creazione di endpoint per dispositivi mobili.

# Configurazione di un endpoint della piattaforma Amazon SNS per le notifiche mobili
<a name="mobile-platform-endpoint"></a>

Quando un'app e un dispositivo mobile si registrano con un servizio di notifica push (come APNs Firebase Cloud Messaging), il servizio di notifica push restituisce un token del dispositivo. Amazon SNS utilizza questo token del dispositivo per creare un endpoint della piattaforma, che funge da destinazione per l'invio di messaggi di notifica push diretti all'app sul dispositivo. L'endpoint della piattaforma funge da ponte, instradando i messaggi inviati da Amazon SNS al servizio di notifica push per la consegna al dispositivo mobile corrispondente. Per ulteriori informazioni, consultare [Prerequisiti per le notifiche utente Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md) e [Configurazione delle notifiche push con Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview).

## Comprendere i token dei dispositivi e gli endpoint della piattaforma
<a name="device-token-platform-endpoint"></a>

Un token del dispositivo identifica in modo univoco un dispositivo mobile registrato con un servizio di notifica push (ad esempio APNs, Firebase Cloud Messaging). Quando un'app si registra con il servizio di notifica push, genera un token di dispositivo specifico per quell'app e quel dispositivo. Amazon SNS utilizza questo token del dispositivo per creare un endpoint della piattaforma all'interno dell'applicazione della piattaforma corrispondente.

L'endpoint della piattaforma consente ad Amazon SNS di inviare messaggi di notifica push al dispositivo tramite il servizio di notifica push, mantenendo la connessione tra l'app e il dispositivo dell'utente.

## Creazione di un endpoint di piattaforma
<a name="mobile-platform-endpoint-create"></a>

Per inviare notifiche push a un'app con Amazon SNS, è necessario prima registrare il token di dispositivo di quell'app in Amazon SNS richiamando l'operazione di creazione di endpoint di piattaforma. Questa azione utilizza l'Amazon Resource Name (ARN) dell'applicazione di piattaforma e del token di dispositivo come parametri e restituisce l'ARN dell'endpoint di piattaforma creato.

L'[https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)azione esegue le seguenti operazioni:
+ Se l'endpoint della piattaforma esiste già, non crearlo di nuovo. Restituisce all'intermediario l'ARN dell'endpoint di piaffatorma esistente.
+ Se l'endpoint della piattaforma con lo stesso token del dispositivo ma impostazioni diverse esiste già, non crearlo di nuovo. Genera un'eccezione per l'intermediario.
+ Se l'endpoint della piattaforma non esiste, crealo. Restituisci all'intermediario l'ARN dell'endpoint di piattaforma appena creato.

Non devi chiamare immediatamente l'operazione di creazione di endpoint di piattaforma a ogni avvio di un'applicazione poiché questo approccio non fornisce sempre un endpoint funzionante. Ciò può verificarsi, ad esempio, quando un'app viene disinstallata e reinstallata nello stesso dispositivo e il relativo endpoint esiste ma è disattivato. Una procedura di registrazione corretta deve garantire quanto segue:

1. L'endpoint di piattaforma esiste già per la combinazione app-dispositivo.

1. Il token di dispositivo nell'endpoint di piattaforma è il token di dispositivo valido più recente.

1. L'endpoint di piattaforma è attivato e pronto all'uso.

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

Lo pseudocodice seguente descrive una pratica consigliata per la creazione di un endpoint di piattaforma funzionante, corrente e attivato in un'ampia gamma di condizioni di avvio. Questo approccio funziona indipendentemente se si tratta della prima registrazione dell'app, se l'endpoint di piattaforma per l'app esiste già, se l'endpoint di piattaforma è attivato, ha il token di dispositivo corretto e così via. Non è un problema chiamarlo più volte in successione, in quanto non creerà endpoint di piattaforma duplicati o modificherà l'endpoint di piattaforma esistente se è già aggiornato e attivato.

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

Questo approccio può essere utilizzato ogni volta che l'app vuole registrarsi o ripetere la registrazione e anche in caso di notifica della modifica di un token di dispositivo a Amazon SNS. In quest'ultimo caso, è sufficiente chiamare l'operazione con il valore di token di dispositivo più recente. Alcuni punti da considerare in relazione a questo approccio:
+ Esistono due casi in cui può chiamare l'operazione di creazione di endpoint di piattaforma. All'inizio, quando l'app non conosce il relativo ARN di endpoint di piattaforma, come avviene durante una prima registrazione, Viene chiamato anche se la chiamata all'`GetEndpointAttributes`azione iniziale fallisce con un'eccezione non trovata, come accadrebbe se l'applicazione conoscesse l'ARN dell'endpoint ma fosse stata eliminata.
+ L'`GetEndpointAttributes`azione viene richiamata per verificare lo stato dell'endpoint della piattaforma anche se l'endpoint della piattaforma è stato appena creato. Ciò avviene quando l'endpoint di piattaforma esiste già ma è disattivato. In tal caso, l'operazione di creazione di endpoint di piattaforma riesce ma non attiva l'endpoint di piattaforma, di conseguenza devi ricontrollare lo stato dell'endpoint di piattaforma prima di indicare l'operazione come riuscita.

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

Il codice seguente mostra come implementare lo pseudo codice precedente utilizzando i client Amazon SNS forniti da. AWS SDKs

Per utilizzare un AWS SDK, devi configurarlo con le tue credenziali. *Per ulteriori informazioni, consulta [I file di configurazione e credenziali condivisi nella and](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) Tools Reference AWS SDKs Guide.*

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

**AWS CLI**  
**Creazione di un endpoint dell’applicazione della piattaforma**  
Nell’esempio `create-platform-endpoint` seguente viene creato un endpoint per l’applicazione della piattaforma indicata utilizzando il token specificato.  

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

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

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

**SDK per Java 2.x**  
 C'è di più su. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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());
        }
    }
}
```

------

 Per ulteriori informazioni, consulta [Operazioni API push per dispositivi mobili](mobile-push-api.md).

## Risoluzione dei problemi
<a name="mobile-platform-endpoint-problems"></a>

### Chiamata ripetuta dell'operazione di creazione di endpoint di piattaforma con un token di dispositivo obsoleto
<a name="mobile-platform-endpoint-problems-outdated"></a>

Soprattutto per gli endpoint FCM, potreste pensare che sia meglio archiviare il primo token del dispositivo emesso dall'applicazione e quindi richiamare l'endpoint di creazione della piattaforma con quel token del dispositivo ogni volta all'avvio dell'applicazione. Ciò può sembrare corretto in quanto l'app non deve gestire lo stato del token di dispositivo e Amazon SNS aggiorna automaticamente il token di dispositivo al valore più recente. In verità, questa soluzione presenta alcuni seri inconvenienti:
+ Amazon SNS si basa sul feedback di FCM per aggiornare i token di dispositivo obsoleti a quelli nuovi. FCM conserva le informazioni sui token di dispositivo obsoleti per qualche tempo, ma non indefinitamente. Una volta che FCM dimentica la connessione tra il vecchio token di dispositivo e il nuovo, Amazon SNS non sarà più in grado di aggiornare il token archiviato nell'endpoint di piattaforma al valore corretto, ma disattiverà l'endpoint di piattaforma.
+ L'applicazione di piattaforma conterrà molteplici endpoint di piattaforma corrispondenti allo stesso token di dispositivo.
+ Amazon SNS impone una quota al numero di endpoint di piattaforma che è possibile creare a partire dallo stesso token di dispositivo. Alla fine, la creazione di nuovi endpoint non riuscirà con un'eccezione di parametro non valido e il messaggio di errore seguente: "This endpoint is already registered with a different token." (Questo endpoint è già registrato con un altro token.).

Per ulteriori informazioni sulla gestione degli endpoint FCM, consulta. [Gestione Amazon SNS degli endpoint Firebase Cloud Messaging](sns-fcm-endpoint-management.md)

### Riattivazione di un endpoint di piattaforma associato a un token di dispositivo non valido
<a name="mobile-platform-endpoint-problems-invalid"></a>

Quando una piattaforma mobile (come APNs o FCM) informa Amazon SNS che il token del dispositivo utilizzato nella richiesta di pubblicazione non era valido, Amazon SNS disabilita l'endpoint della piattaforma associato a quel token del dispositivo. Amazon SNS rifiuterà quindi le pubblicazioni successive in quel token di dispositivo. Sebbene si possa ritenere che la soluzione migliore consista semplicemente nel riattivare l'endpoint di piattaforma e continuare a pubblicare, nella maggior parte dei casi ciò non funzionerà: i messaggi pubblicati non verranno consegnati e l'endpoint di piattaforma sarà di nuovo disattivato poco tempo dopo.

Questo perché il token di dispositivo associato all'endpoint di piattaforma è effettivamente non valido. Le consegne a tale endpoint non possono riuscire in quanto non corrisponde più ad alcuna app installata. Al momento della pubblicazione successiva, la piattaforma mobile indicherà di nuovo aD Amazon SNS che il token di dispositivo non è valido e Amazon SNS disattiverà di nuovo l'endpoint di piattaforma.

Per riattivare un endpoint di piattaforma disattivato, è necessario associarlo a un token di dispositivo valido (con la chiamata dell'operazione di impostazione degli attributi di endpoint) e quindi attivarlo. Le consegne all'endpoint di piattaforma riusciranno solo dal momento dell'attivazione. L'unico caso in cui la riattivazione di un endpoint di piattaforma funziona senza l'aggiornamento del relativo token di dispositivo è quando un token di dispositivo associato a quell'endpoint che non era valido ridiventa valido. Ciò può verificarsi, ad esempio, quando un'app è stata disinstallata e quindi reinstallata nello stesso dispositivo mobile e riceve lo stesso token di dispositivo. L'approccio descritto qui sopra effettua questa operazione, assicurandosi di riattivare un endpoint di piattaforma solo dopo aver verificato che il token di dispositivo ad esso associato è quello più recente disponibile.

# Integrazione dei token dei dispositivi con Amazon SNS per le notifiche mobili
<a name="mobile-push-send-devicetoken"></a>

Quando registri per la prima volta un'app e un dispositivo mobile con un servizio di notifica, come Apple Push Notification Service (APNs) e Firebase Cloud Messaging (FCM), i token del dispositivo o la registrazione IDs vengono restituiti dal servizio. Questi tokens/IDs vengono aggiunti ad Amazon SNS per creare un endpoint per l'app e il dispositivo utilizzando l'API. [https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html) Una volta creato l'endpoint, [https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html)viene restituito un messaggio che Amazon SNS utilizza per indirizzare le notifiche all'app/dispositivo corretto.

Puoi aggiungere i token del dispositivo o la registrazione IDs ad Amazon SNS nei seguenti modi:
+ Aggiungi manualmente un singolo token tramite Console di gestione AWS
+ Caricamento di diversi token usando l'API [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)
+ Registra i token per i dispositivi futuri

****Per aggiungere manualmente un token del dispositivo o un ID di registrazione****

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel riquadro di navigazione, seleziona **Notifiche push**.

1. Nella sezione **Applicazioni della piattaforma**, seleziona l'applicazione, quindi scegli **Modifica**. Se non hai ancora creato un'applicazione di piattaforma, segui subito la [Creazione di un'applicazione della piattaforma Amazon SNS](mobile-push-send-register.md) guida per farlo.

1. Scegliere **Create Endpoint** (Crea endpoint).

1. Nella casella **Endpoint Token**, inserisci il **token** o l'**ID di registrazione**, a seconda del servizio di notifica che stai utilizzando (ad esempio, l'ID di registrazione FCM).

1. (Facoltativo) Inserisci dati aggiuntivi nel campo **Dati utente**. Questi dati devono essere codificati in UTF-8 e avere dimensioni inferiori a 2 KB.

1. Scegliere **Create Endpoint** (Crea endpoint).

Una volta creato l'endpoint, puoi inviare messaggi direttamente al dispositivo mobile o ai dispositivi mobili abbonati a un argomento di Amazon SNS.

****Per caricare diversi token utilizzando l'API `CreatePlatformEndpoint`****

I passaggi seguenti mostrano come utilizzare l'app Java di esempio (`bulkupload`pacchetto) fornita da AWS per caricare diversi token (token del dispositivo o registrazione IDs) su Amazon SNS. Puoi usare questa app di esempio per iniziare a caricare i token esistenti. 
**Nota**  
Nei passaggi seguenti viene utilizzata l'IDE Java Eclipse. I passaggi presuppongono che tu abbia installato AWS SDK per Java e che tu disponga delle credenziali AWS di sicurezza per il tuo. Account AWS Per ulteriori informazioni, consulta [AWS SDK per Java](https://aws.amazon.com/sdkforjava/). Per ulteriori informazioni sulle credenziali, consulta le [credenziali AWS di sicurezza](https://docs.aws.amazon.com/general/latest/gr/getting-aws-sec-creds.html) nella Guida per l'utente *IAM*. 

1. Download e decomprimi il file [snsmobilepush.zip](samples/snsmobilepush.zip). 

1. Crea un nuovo **progetto Java** in Eclipse e importa la `SNSSamples` cartella nel progetto. 

1. Scarica la libreria [OpenCSV e aggiungila al percorso](http://sourceforge.net/projects/opencsv/) di compilazione.

1. Nel `BulkUpload.properties` file, specifica quanto segue: 
   + Il tuo `ApplicationArn` (ARN dell'applicazione della piattaforma).
   + Il percorso assoluto del file CSV contenente i token.
   + Registrazione dei nomi di file per i token riusciti e non riusciti. Ad esempio `goodTokens.csv` e `badTokens.csv`.
   + (Facoltativo) Una configurazione per il delimitatore, il carattere di virgoletta e il numero di thread da utilizzare.

   L'elemento `BulkUpload.properties` completato si presenta in maniera analoga a quanto segue:

   ```
   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.  Esegui l'**BatchCreatePlatformEndpointSampleapplicazione.java** per caricare i token su Amazon SNS. I token caricati correttamente verranno registrati`goodTokens.csv`, mentre i token non validi verranno registrati. `badTokens.csv`

**Per registrare token dai dispositivi per future installazioni di app**

Sono disponibili due opzioni per questo processo:

**Usa il servizio Amazon Cognito**  
La tua app mobile può utilizzare credenziali di sicurezza temporanee per creare endpoint. Amazon Cognito è consigliato per generare credenziali temporanee. Per ulteriori informazioni, consulta la *[Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/)* Developer Guide   
Per tenere traccia [delle registrazioni delle](application-event-notifications.md) app, utilizza gli eventi Amazon SNS per ricevere notifiche quando vengono creati nuovi ARNs endpoint.  
In alternativa, puoi utilizzare l'[https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html)API per recuperare l'elenco degli endpoint registrati.

**Utilizza un server proxy**  
Se l'infrastruttura dell'app supporta già la registrazione dei dispositivi al momento dell'installazione, puoi utilizzare il server come proxy. Inoltrerà i token del dispositivo ad Amazon SNS tramite [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)l'API.  
L'ARN dell'endpoint creato da Amazon SNS verrà restituito e potrà essere archiviato dal server per future pubblicazioni di messaggi.

# Amazon SNS: metodi di autenticazione delle notifiche push di Apple
<a name="sns-apple-authentication-methods"></a>

Puoi autorizzare Amazon SNS a inviare notifiche push all'app iOS o macOS fornendo informazioni che identificano l'utente come sviluppatore dell'app. Per autenticarsi, fornire una *chiave* o un *certificato* [durante la creazione di un'applicazione di piattaforma](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html), entrambi possono essere ottenuti dal tuo account Apple Developer.

**Chiave di firma dei token**  
Una chiave di firma privata che Amazon SNS utilizza per firmare i token di autenticazione Apple Push Notification Service (APNs).  
Se fornisci una chiave di firma, Amazon SNS utilizza un token con cui autenticarsi APNs per ogni notifica push inviata. Con la tua chiave di firma, puoi inviare notifiche push agli ambienti di APNs produzione e sandbox.  
La chiave di firma non ha scadenza e puoi utilizzare la stessa chiave di firma per più app. Per ulteriori informazioni, consulta [Comunicare APNs utilizzando i token di autenticazione](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_token-based_connection_to_apns) nella sezione **Aiuto per gli account sviluppatore** del sito web di Apple.

**Certificate**  
Un certificato TLS che Amazon SNS utilizza per l'autenticazione quando APNs invii notifiche push. Si può ottenere il certificato dal proprio account sviluppatore Apple.  
I certificati scadono dopo un anno. Alla scadenza, è necessario creare un nuovo certificato da fornire ad Amazon SNS. Per ulteriori informazioni, consulta [Stabilire una connessione basata su certificati](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns) sul sito Web Apple Developer. APNs

**Per gestire le APNs impostazioni utilizzando la console di gestione AWS**

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel riquadro di navigazione, seleziona **Notifiche push**.

1. Nella sezione **Applicazioni della piattaforma**, seleziona l'**applicazione** di cui desideri modificare APNs le impostazioni, quindi scegli **Modifica**. Se non hai ancora creato un'applicazione di piattaforma, segui subito la [Creazione di un'applicazione della piattaforma Amazon SNS](mobile-push-send-register.md) guida per farlo.

1. Scegliete **Modifica** per modificare le impostazioni dell'applicazione della piattaforma.

1. Nella sezione **Tipo di autenticazione**, scegli una delle seguenti opzioni:
   + **Autenticazione basata su token** (consigliata per le integrazioni moderne APNs )
   + **Autenticazione basata su certificati (metodo precedente)**

1. Configura le tue **credenziali** in base al tipo di autenticazione:
   + **Per l'autenticazione basata su token:**
     + Carica il **file.p8**, che è la chiave di firma del token di autenticazione che hai scaricato dal tuo account Apple Developer.
     + Inserisci l'**ID della chiave di firma** che trovi nel tuo account Apple Developer. Vai su **Certificati**, **IDsProfili**, **Chiavi** e seleziona la **chiave** che desideri utilizzare.
     + Fornisci il **Team Identifier** dal tuo account Apple Developer. Puoi trovarlo nella pagina di iscrizione.
     + Inserisci il **Bundle Identifier** assegnato alla tua app. Puoi trovarlo in Certificati IDs e Profili, App. IDs
   + **Per l'autenticazione basata su certificati:**
     + Carica il **file.p12 per il tuo certificato TLS**. Questo file può essere esportato da Keychain Access su macOS dopo aver scaricato il certificato dal tuo account Apple Developer.
     + Se hai assegnato una **password** al tuo certificato .p12, inseriscila qui.

1. Dopo aver inserito le credenziali necessarie, scegli **Salva modifiche** per aggiornare le impostazioni.

# Integrazione di Amazon SNS con la configurazione dell'autenticazione di Firebase Cloud Messaging
<a name="sns-fcm-authentication-methods"></a>

Questo argomento descrive come ottenere le credenziali API FCM (HTTP v1) richieste da Google da utilizzare con l' AWS API e il. AWS CLI Console di gestione AWS

**Importante**  
26 marzo 2024 — Amazon SNS supporta l'API HTTP v1 FCM per dispositivi Apple e destinazioni Webpush. Ti consigliamo di migrare le tue applicazioni push mobili esistenti all'ultima API HTTP v1 di FCM entro il 1° giugno 2024 per evitare interruzioni delle applicazioni.  
18 gennaio 2024 — Amazon SNS ha introdotto il supporto per l'API HTTP v1 di FCM per la consegna di notifiche push mobili ai dispositivi Android.  
20 giugno 2023 — Google ha reso obsoleta la propria API HTTP legacy di Firebase Cloud Messaging (FCM). Amazon SNS ora supporta la distribuzione a tutti i tipi di dispositivi utilizzando l'API HTTP v1 di FCM. Ti consigliamo di migrare le tue applicazioni push mobili esistenti all'ultima API HTTP v1 di FCM entro il 1° giugno 2024 per evitare interruzioni.

Puoi autorizzare Amazon SNS a inviare notifiche push alle applicazioni fornendo informazioni che ti identificano come sviluppatore dell'app. Per l'autenticazione, fornisci una **chiave API** o un **token** [ durante la creazione di un'applicazione di piattaforma](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html). [Puoi ottenere le seguenti informazioni dalla console dell'applicazione Firebase:](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds)

**Chiave API**  
La chiave API rappresenta le credenziali utilizzate per chiamare l'API Legacy di Firebase. FCM Legacy APIs verrà rimosso da Google il 20 giugno 2024. Se attualmente utilizzi una chiave API come credenziali della piattaforma, puoi aggiornare le credenziali della piattaforma selezionando **Token** come opzione e caricando il file JSON associato all'applicazione Firebase.

**Token**  
Quando si chiama l'API HTTP v1, viene utilizzato un token di accesso di breve durata. Questa è l'API consigliata da Firebase per l'invio di notifiche push. Per generare token di accesso, Firebase fornisce agli sviluppatori un set di credenziali sotto forma di file di chiave privata (noto anche come file service.json).

## Prerequisito
<a name="sns-fcm-authentication-prerequisite"></a>

Prima di poter iniziare a gestire le impostazioni FCM in Amazon SNS, devi ottenere le credenziali FCM service.json. Per ottenere le tue credenziali service.json, consulta [Migrare dalla versione precedente di FCM APIs ](https://firebase.google.com/docs/cloud-messaging/migrate-v1) a HTTP v1 nella documentazione di Google Firebase.

## Gestione delle impostazioni FCM tramite la CLI
<a name="sns-fcm-authentication-api"></a>

Puoi creare notifiche push FCM utilizzando l' AWS API. Il numero e le dimensioni delle risorse Amazon SNS in un AWS account sono limitati. *Per ulteriori informazioni, consulta gli [endpoint e le quote di Amazon Simple Notification Service](https://docs.aws.amazon.com/general/latest/gr/sns.html) nella Riferimenti generali di AWS Guida.*

**Per creare una notifica push FCM insieme a un argomento AWS (API) di Amazon SNS**  
Quando utilizzi le credenziali **chiave**, `PlatformCredential` è `API key`. Quando utilizzi le credenziali **token**, `PlatformCredential` è un file di chiavi private in formato JSON:
+ [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)

**Per recuperare un tipo di credenziale FCM per un argomento (API) di Amazon SNS esistente AWS**  
Recupera il tipo di credenziali, `"AuthenticationMethod": "Token"` o ` "AuthenticationMethod": "Key"`:
+ [GetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetPlatformApplicationAttributes.html)

**Per impostare un attributo FCM per un argomento AWS (API) di Amazon SNS esistente**  
Configura l'attributo FCM:
+ [SetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html)

## Gestione delle impostazioni FCM tramite la console
<a name="sns-fcm-authentication-cli"></a>

È possibile creare notifiche push FCM utilizzando AWS Command Line Interface (CLI). Il numero e le dimensioni delle risorse Amazon SNS in un AWS account sono limitati. Per ulteriori informazioni, consulta [Endpoint e quote di Amazon Simple Notification Service](https://docs.aws.amazon.com/general/latest/gr/sns.html). 

**Creazione di una notifica push FCM insieme a un argomento SNS (AWS CLI)**  
Quando utilizzi le credenziali **chiave**, `PlatformCredential` è `API key`. Quando utilizzi le credenziali **token**, `PlatformCredential` è un file di chiavi private in formato JSON. Quando si utilizza la AWS CLI, il file deve essere in formato stringa e i caratteri speciali devono essere ignorati. Per formattare correttamente il file, Amazon SNS consiglia di utilizzare il seguente comando: `SERVICE_JSON=`jq @json <<< cat service.json``
+ [create-platform-application](https://docs.aws.amazon.com/cli/latest/reference/sns/create-platform-application.html)

**Recupero di un tipo di credenziali FCM per un argomento Amazon SNS esistente (AWS CLI)**  
Recupera il tipo di credenziali, `"AuthenticationMethod": "Token"` o ` "AuthenticationMethod": "Key"`:
+ [get-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/get-platform-application-attributes.html)

**Configurazione di un attributo FCM per un argomento Amazon SNS esistente (AWS CLI)**  
Configura l'attributo FCM:
+ [set-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/set-platform-application-attributes.html)

## Gestione delle impostazioni FCM (console)
<a name="sns-fcm-authentication-console"></a>

Utilizza i seguenti passaggi per inserire e gestire le tue credenziali Firebase Cloud Messaging (FCM) in Amazon SNS.

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. **Nel pannello di navigazione, seleziona Notifiche push.**

1. **Nella sezione **Applicazioni della piattaforma**, seleziona l'**applicazione della piattaforma FCM** di cui desideri modificare le credenziali, quindi scegli Modifica.**

1. Nella sezione **Firebase Cloud Messaging Credentials**, scegli una delle seguenti opzioni:
   + **Autenticazione basata su token** (metodo consigliato): carica il **file della chiave privata** (JSON) che hai scaricato dalla console Firebase. Questo file contiene le credenziali necessarie per generare token di accesso di breve durata per le notifiche FCM. Per ottenere questo file:

     1. Vai alla console dell'[applicazione Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds).

     1. Nelle **Impostazioni del progetto**, seleziona **Cloud** Messaging.

     1. Scarica il file JSON **con chiave privata** (da utilizzare nel metodo di autenticazione basato su token).
   + **Autenticazione con chiave API**: se preferisci utilizzare il vecchio metodo di autenticazione con chiave API, inserisci la **chiave API di Google** nel campo fornito. Per ottenere questo file:

     1. Vai alla console dell'[applicazione Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds).

     1. In **Impostazioni del progetto**, seleziona **Cloud** Messaging.

     1. Copia la **chiave del server** (chiave API) da utilizzare per l'invio di notifiche.

1. Al termine, scegliere **Save changes (Salva modifiche)**.

**Argomenti correlati**
+ [Utilizzo dei payload di Google Firebase Cloud Messaging v1 in Amazon SNS](sns-fcm-v1-payloads.md)

# Gestione Amazon SNS degli endpoint Firebase Cloud Messaging
<a name="sns-fcm-endpoint-management"></a>

## Gestione e manutenzione dei token dei dispositivi
<a name="sns-managing-device-tokens"></a>

Puoi garantire la consegna delle notifiche push della tua applicazione mobile seguendo questi passaggi:

1. Archivia tutti i token del dispositivo, l' ARNsendpoint Amazon SNS corrispondente e i timestamp sul tuo server delle applicazioni.

1. Rimuovi tutti i token obsoleti ed elimina l'endpoint Amazon SNS corrispondente. ARNs

All'avvio iniziale dell'app, riceverai un token del dispositivo (noto anche come token di registrazione) per il dispositivo. Questo token del dispositivo viene coniato dal sistema operativo del dispositivo ed è collegato all'applicazione FCM. Una volta ricevuto questo token del dispositivo, puoi registrarlo con Amazon SNS come endpoint della piattaforma. Ti consigliamo di archiviare il token del dispositivo, l'ARN dell'endpoint della piattaforma Amazon SNS e il timestamp salvandoli sul tuo server delle applicazioni o su un altro archivio persistente. *Per configurare l'applicazione FCM per recuperare e archiviare i token del dispositivo, consulta [Recuperare e archiviare i token di registrazione nella documentazione di Google su Firebase](https://firebase.google.com/docs/cloud-messaging/manage-tokens#retrieve-and-store-registration-tokens).*

È importante mantenere i token. up-to-date I token del dispositivo dell'utente possono cambiare nelle seguenti condizioni:

1. L'applicazione mobile viene ripristinata su un nuovo dispositivo.

1. L'utente disinstalla o aggiorna l'applicazione.

1. L'utente cancella i dati dell'applicazione.

Quando il token del dispositivo cambia, ti consigliamo di aggiornare l'endpoint Amazon SNS corrispondente con il nuovo token. Ciò consente ad Amazon SNS di continuare la comunicazione con il dispositivo registrato. Puoi farlo implementando il seguente pseudo codice all'interno della tua applicazione mobile. Descrive una pratica consigliata per la creazione e la manutenzione degli endpoint della piattaforma abilitati. Questo approccio può essere eseguito ogni volta che le applicazioni mobili vengono avviate o come processo pianificato in background.

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

Utilizza il seguente pseudo codice FCM per gestire e mantenere i token dei dispositivi.

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

*Per ulteriori informazioni sui requisiti di aggiornamento dei token, consulta [Aggiornare i token regolarmente nella documentazione di Google su Firebase](https://firebase.google.com/docs/cloud-messaging/manage-tokens#update-tokens-on-a-regular-basis).*

## Rilevamento di token non validi
<a name="sns-detecting-invalid-tokens"></a>

Quando un messaggio viene inviato a un endpoint FCM v1 con un token di dispositivo non valido, Amazon SNS riceverà una delle seguenti eccezioni:
+ `UNREGISTERED`(HTTP 404) — Quando Amazon SNS riceve questa eccezione, riceverai un evento di errore `FailureType` di `InvalidPlatformToken` consegna con un *token di piattaforma `FailureMessage` of e uno of associato all'endpoint non valido*. Amazon SNS disabiliterà l'endpoint della piattaforma quando una consegna fallisce, con questa eccezione.
+ `INVALID_ARGUMENT`(HTTP 400) — Quando Amazon SNS riceve questa eccezione, significa che il token del dispositivo o il payload del messaggio non sono validi. *Per ulteriori informazioni, consulta la documentazione di Google su [ErrorCode](https://firebase.google.com/docs/reference/fcm/rest/v1/ErrorCode)Firebase.*

Poiché `INVALID_ARGUMENT` può essere restituito in entrambi i casi, Amazon SNS restituirà un *corpo `FailureType` di `InvalidNotification` notifica e uno `FailureMessage` di non è valido*. Quando ricevi questo errore, verifica che il payload sia corretto. Se è corretto, verifica che il token del dispositivo lo sia up-to-date. Amazon SNS non disattiverà l'endpoint della piattaforma quando una consegna fallisce, con questa eccezione.

Un altro caso in cui si verificherà un errore di `InvalidPlatformToken` consegna è quando il token del dispositivo registrato non appartiene all'applicazione che tenta di inviare il messaggio. In questo caso, Google restituirà un errore *SENDER\$1ID\$1MISMATCH*. Amazon SNS disabiliterà l'endpoint della piattaforma quando una consegna fallisce, con questa eccezione.

Tutti i codici di errore rilevati ricevuti dall'API FCM v1 sono disponibili CloudWatch quando configuri la [registrazione dello stato di consegna](topics-attrib.md) per la tua applicazione. 

Per ricevere gli eventi di consegna della tua applicazione, consulta. [Eventi applicazione disponibili](application-event-notifications.md#application-event-notifications-events)

## Rimuovere i token obsoleti
<a name="sns-removing-stale-tokens"></a>

I token vengono considerati obsoleti una volta che il recapito dei messaggi al dispositivo endpoint inizia a fallire. Amazon SNS imposta questi token obsoleti come endpoint disabilitati per l'applicazione della tua piattaforma. Quando pubblichi su un endpoint disabilitato, Amazon SNS restituirà `EventDeliveryFailure` un evento con `FailureType` `EndpointDisabled` of e `FailureMessage` un *endpoint* disabilitato. Per ricevere eventi di consegna per la tua applicazione, consulta. [Eventi applicazione disponibili](application-event-notifications.md#application-event-notifications-events)

Quando ricevi questo errore da Amazon SNS, devi rimuovere o aggiornare il token obsoleto nell'applicazione della tua piattaforma.

# Utilizzo di Amazon SNS per notifiche push su dispositivi mobili
<a name="mobile-push-notifications"></a>

 Questa sezione descrive come inviare un messaggio di notifica push.

## Pubblicazione in un argomento
<a name="mobile-push-send-topicmobile"></a>

Puoi anche usare Amazon SNS per inviare i messaggi agli endpoint mobili che hanno effettuato la sottoscrizione a un argomento. Il concetto è lo stesso della sottoscrizione di altri tipi di endpoint, ad esempio Amazon SQS, HTTP/S, e-mail e SMS, a un argomento, come descritto in [Che cos'è Amazon SNS?](welcome.md). La differenza è che Amazon SNS comunica attraverso servizi di notifica come Apple Push Notification Service (APNS) e Google Firebase Cloud Messaging (FCM). Attraverso i servizi di notifica, gli endpoint mobili sottoscritti ricevano le notifiche inviate all'argomento. 

## Messaggistica diretta per dispositivi mobili Amazon SNS
<a name="mobile-push-send-directmobile"></a>

Invia i messaggi di notifica push Amazon SNS direttamente a un endpoint che rappresenta un'applicazione su un dispositivo mobile. 

**Per inviare un messaggio diretto**

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel pannello di navigazione, scegli **Push notifications** (Notifiche push).

1. Nella pagina delle **notifiche push per dispositivi mobili**, nella sezione **Applicazioni della piattaforma**, scegli, ad esempio***MyApp***, il nome dell'applicazione.

1. Nella ***MyApp*** pagina, nella sezione **Endpoints**, scegli un endpoint, quindi scegli **Pubblica** messaggio.

1. Nella pagina **Publish message to endpoint** (Pubblica messaggio a un endpoint), inserisci il messaggio da visualizzare nell'applicazione sul dispositivo mobile e quindi scegli **Publish message** (Pubblica messaggio).

   Amazon SNS invia il messaggio di notifica al servizio di notifica della piattaforma che, a sua volta, invia il messaggio all'applicazione.

# Pubblicazione di notifiche Amazon SNS con payload specifici della piattaforma
<a name="sns-send-custom-platform-specific-payloads-mobile-devices"></a>

Puoi utilizzare Amazon SNS APIs per inviare messaggi personalizzati con payload specifici della piattaforma ai dispositivi mobili. Console di gestione AWS Per informazioni sull'uso di Amazon SNS APIs, consulta [Operazioni API push per dispositivi mobili](mobile-push-api.md) e inserisci il `SNSMobilePush.java` file. `[snsmobilepush.zip](samples/snsmobilepush.zip)` 

## Invio di messaggi in formato JSON
<a name="mobile-push-send-json"></a>

Quando si inviano payload specifici della piattaforma, i dati devono essere stringhe coppia chiave-valore in formato JSON, con virgolette doppie con carattere di escape.

I seguenti esempi mostrano un messaggio personalizzato per la piattaforma FCM .

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

## Invio di messaggi specifici della piattaforma
<a name="mobile-push-send-platform"></a>

Oltre a inviare dati personalizzati come coppie chiave-valore, è possibile inviare coppie chiave-valore specifiche per la piattaforma.

L'esempio seguente mostra l'inclusione dei parametri FCM `time_to_live` e `collapse_key` dopo le coppie chiave-valore dei dati personalizzate nel parametro FCM `data`.

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

Per l'elenco delle coppie chiave-valore supportate in ciascuno dei servizi di notifica push supportati in Amazon SNS, consulta i collegamenti seguenti: 

**Importante**  
Amazon SNS ora supporta l'API HTTP v1 Firebase Cloud Messaging (FCM) per l'invio di notifiche push mobili ai dispositivi Android.  
26 marzo 2024 — Amazon SNS supporta l'API HTTP v1 FCM per dispositivi Apple e destinazioni Webpush. Ti consigliamo di migrare le tue applicazioni push mobili esistenti all'ultima API HTTP v1 di FCM entro il 1° giugno 2024 per evitare interruzioni delle applicazioni.
+ [Riferimento chiave di Payload](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html#/apple_ref/doc/uid/TP40008194-CH17-SW1) nella documentazione APNs 
+ [Firebase Cloud Messaging HTTP Protocol (Protocollo HTTP di Firebase Cloud Messaging)](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages) nella documentazione .
+ [Invio di un messaggio](https://developer.amazon.com/sdk/adm/sending-message.html) nella documentazione 

## Invio di messaggi a un'applicazione su più piattaforme
<a name="mobile-push-send-multiplatform"></a>

Per inviare un messaggio a un'applicazione installata su dispositivi per più piattaforme, come FCM e APNs, devi prima sottoscrivere gli endpoint mobili a un argomento in Amazon SNS e quindi pubblicare il messaggio sull'argomento.

L'esempio seguente mostra un messaggio da inviare agli endpoint mobili sottoscritti su APNs FCM e 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\"}}" 
}
```

## Invio di messaggi a notifiche di avviso o in APNs background
<a name="mobile-push-send-message-apns-background-notification"></a>

Amazon SNS può inviare messaggi ad APNs annunci `alert` o `background` notifiche (per ulteriori informazioni, consulta [Pushing Background Updates to Your App nella APNs documentazione](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app)).
+ Una `alert` APNs notifica informa l'utente visualizzando un messaggio di avviso, riproducendo un suono o aggiungendo un badge all'icona dell'applicazione.
+ Una `background` APNs notifica si attiva o indica all'applicazione di agire in base al contenuto della notifica, senza informare l'utente.

### Specificazione di valori di intestazione personalizzati APNs
<a name="specify-custom-header-value"></a>

Ti consigliamo di specificare valori personalizzati per l'[attributo del messaggio `AWS.SNS.MOBILE.APNS.PUSH_TYPE` riservato](sns-message-attributes.md#sns-attrib-mobile-reserved) utilizzando l'azione dell'API Amazon `Publish` SNS o AWS SDKs il. AWS CLI Il seguente esempio di CLI imposta `content-available` su `1` e `apns-push-type` su `background` per l'argomento specificato. 

```
aws sns publish \
--endpoint-url https://sns.us-east-1.amazonaws.com \
--target-arn arn:aws:sns:us-east-1:123456789012:endpoint/APNS_PLATFORM/MYAPP/1234a567-bc89-012d-3e45-6fg7h890123i \
--message '{"APNS_PLATFORM":"{\"aps\":{\"content-available\":1}}"}' \
--message-attributes '{ \
  "AWS.SNS.MOBILE.APNS.TOPIC":{"DataType":"String","StringValue":"com.amazon.mobile.messaging.myapp"}, \
  "AWS.SNS.MOBILE.APNS.PUSH_TYPE":{"DataType":"String","StringValue":"background"}, \
  "AWS.SNS.MOBILE.APNS.PRIORITY":{"DataType":"String","StringValue":"5"}}' \
--message-structure json
```

**Nota**  
Assicurati che la struttura JSON sia valida. Aggiungi una virgola dopo ogni coppia chiave-valore, tranne l'ultima.

### Dedurre l'intestazione del tipo di APNs push dal payload
<a name="inferring-push-type-header-from-payload"></a>

Se non imposti l'`apns-push-type` APNs intestazione, Amazon SNS imposta l'intestazione su `background` o in base `alert` alla chiave nel dizionario della configurazione `content-available` del payload in `aps` formato JSON. APNs 

**Nota**  
Amazon SNS è in grado di dedurre solo le intestazioni `alert` o `background`, anche se l'intestazione `apns-push-type` può essere impostata su altri valori.
+ `apns-push-type` è impostato su `alert`.
  + Se il dizionario `aps` contiene `content-available` impostato su `1` e *una o più chiavi* che attivano le interazioni dell'utente.
  + Se il dizionario `aps` contiene `content-available` impostato su `0` *o* se la chiave `content-available` è assente.
  + Se il valore della chiave `content-available` non è un numero intero o un valore booleano.
+ `apns-push-type` è impostato su `background`.
  + Se il dizionario `aps` contiene *solo* `content-available` impostato su `1` e *nessun'altra chiave* che attiva le interazioni dell'utente.
**Importante**  
Se Amazon SNS invia un oggetto di configurazione non elaborato APNs come notifica solo in background, devi includere `content-available` set to nel dizionario. `1` `aps` Sebbene sia possibile includere chiavi personalizzate, il dizionario `aps` non deve contenere chiavi che attivino interazioni dell'utente (ad esempio avvisi, badge o suoni).

Di seguito è riportato un esempio di oggetto configurazione non elaborato.

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

In questo esempio, Amazon SNS imposta l'`apns-push-type` APNs intestazione del messaggio su. `background` Quando Amazon SNS rileva che il dizionario `apn` contiene la chiave `content-available` impostata su `1` e non contiene altre chiavi che possono attivare interazioni utente imposta l'intestazione su `background`.

# Utilizzo dei payload di Google Firebase Cloud Messaging v1 in Amazon SNS
<a name="sns-fcm-v1-payloads"></a>

Amazon SNS supporta l'utilizzo dell'API HTTP v1 di FCM per inviare notifiche a destinazioni Android, iOS e Webpush. Questo argomento fornisce esempi della struttura del payload durante la pubblicazione di notifiche push per dispositivi mobili utilizzando la CLI o l'API Amazon SNS.

Puoi includere i seguenti tipi di messaggi nel tuo payload quando invii una notifica FCM:
+ **Messaggio di dati**: un messaggio di dati viene gestito dall'app client e contiene coppie chiave-valore personalizzate. Quando si crea un messaggio di dati, è necessario includere la `data` chiave con un oggetto JSON come valore, quindi inserire le coppie chiave-valore personalizzate.
+ Messaggio di **notifica o messaggio** **visualizzato: un messaggio** di notifica contiene un set predefinito di chiavi gestite da FCM SDK. Queste chiavi variano a seconda del tipo di dispositivo a cui vengono consegnate. Per ulteriori informazioni sui tasti di notifica specifici della piattaforma, consulta quanto segue:
  + [Tasti di notifica Android](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages)
  + [Chiavi di notifica APNS](https://developer.apple.com/documentation/usernotifications/generating-a-remote-notification)
  + [Chiavi di notifica Webpush](https://developer.mozilla.org/en-US/docs/Web/API/Notification)

Per ulteriori informazioni sui tipi di messaggi FCM, consulta Tipi [di messaggio nella documentazione di](https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages) *Firebase* di Google.

## Utilizzo della struttura di payload FCM v1 per inviare messaggi
<a name="sending-messages-using-v1-payload"></a>

Se state creando un'applicazione FCM per la prima volta o desiderate sfruttare le funzionalità di FCM v1, potete scegliere di inviare un payload in formato FCM v1. A tale scopo, è necessario includere la chiave di primo livello. `fcmV1Message` *Per ulteriori informazioni sulla creazione di payload FCM v1, consulta [Migrazione da FCM legacy APIs a HTTP v1](https://firebase.google.com/docs/cloud-messaging/migrate-v1) e [Personalizzazione di un](https://firebase.google.com/docs/cloud-messaging/concept-options#customizing-a-message-across-platforms) messaggio tra piattaforme nella documentazione Firebase di Google.*

**Payload di esempio FCM v1 inviato ad Amazon SNS:**

**Nota**  
Il valore della `GCM` chiave utilizzato nell'esempio seguente deve essere codificato come stringa quando si pubblica una notifica tramite 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\"
          }
        }
      }
    }
  }"
}
```

Quando invii un payload JSON, assicurati di includere l'`message-structure`attributo nella richiesta e di impostarlo su. `json`

**Esempio di 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
```

*Per ulteriori informazioni sull'invio di payload in formato FCM v1, consulta quanto segue nella documentazione di Firebase di Google:*
+ [Esegui la migrazione dalla versione precedente di FCM a HTTP v1 APIs ](https://firebase.google.com/docs/cloud-messaging/migrate-v1)
+ [Informazioni sui messaggi FCM](https://firebase.google.com/docs/cloud-messaging/concept-options#customizing_a_message_across_platforms)
+ [Risorsa REST: projects.messages](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages)

## Utilizzo della struttura di payload legacy per inviare messaggi all'API FCM v1
<a name="sns-fcm-v1-legacy-payload-structure"></a>

Durante la migrazione a FCM v1, non è necessario modificare la struttura del payload utilizzata per le credenziali legacy. Amazon SNS trasforma il tuo payload nella nuova struttura di payload FCM v1 e lo invia a Google.

Formato del payload del messaggio di input:

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

Messaggio inviato a Google:

```
{
  "message": {
    "token": "***",
    "notification": {
      "title": "string",
      "body": "string"
    },
    "android": {
      "priority": "high",
      "notification": {
        "body_loc_args": [
          "string"
        ],
        "title_loc_args": [
          "string"
        ],
        "color": "string",
        "sound": "string",
        "icon": "string",
        "tag": "string",
        "title_loc_key": "string",
        "title": "string",
        "body": "string",
        "click_action": "string",
        "channel_id": "string",
        "body_loc_key": "string"
      },
      "data": {
        "message": "priority message"
      }
    },
    "apns": {
      "payload": {
        "aps": {
          "alert": {
            "title-loc-args": [
              "string"
            ],
            "title-loc-key": "string",
            "loc-args": [
              "string"
            ],
            "loc-key": "string",
            "title": "string",
            "body": "string"
          },
          "category": "string",
          "sound": "string"
        }
      }
    },
    "webpush": {
      "notification": {
        "icon": "string",
        "tag": "string",
        "body": "string",
        "title": "string"
      },
      "data": {
        "message": "priority message"
      }
    },
    "data": {
      "message": "priority message"
    }
  }
}
```

**Rischi potenziali**
+ La mappatura dalla versione precedente alla versione 1 non supporta l'Apple Push Notification Service (APNS) `headers` o le chiavi. `fcm_options` Se desideri utilizzare questi campi, invia un payload FCM v1.
+ In alcuni casi, le intestazioni dei messaggi sono necessarie da FCM v1 per inviare notifiche silenziose ai tuoi dispositivi. APNs Se attualmente invii notifiche silenziose ai tuoi APNs dispositivi, queste non funzioneranno con l'approccio precedente. Consigliamo invece di utilizzare il payload FCM v1 per evitare problemi imprevisti. *Per un elenco delle APNs intestazioni e per cosa vengono utilizzate, consulta [Communicating with APNs](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html) nella Apple Developer Guide.*
+ Se utilizzi l'attributo `TTL` Amazon SNS per inviare la notifica, questo verrà aggiornato solo sul `android` campo. Se desideri impostare l'attributo `TTL` APNS, utilizza il payload FCM v1.
+ Le `webpush` chiavi `android``apns`, e verranno mappate e compilate con tutte le chiavi pertinenti fornite. Ad esempio, se fornisci `title` una chiave condivisa tra tutte e tre le piattaforme, la mappatura FCM v1 popolerà tutte e tre le piattaforme con il titolo che hai fornito.
+ Alcune chiavi condivise tra piattaforme prevedono tipi di valori diversi. Ad esempio, la `badge` chiave passata a `apns` prevede un valore intero, mentre la `badge` chiave passata a `webpush` prevede un valore String. Nei casi in cui si fornisce la `badge` chiave, la mappatura FCM v1 popolerà solo la chiave per la quale è stato fornito un valore valido.

## Eventi di mancata consegna da parte di FCM
<a name="sns-fcm-delivery-failure-events"></a>

La tabella seguente fornisce il tipo di errore di Amazon SNS che corrisponde ai codici di errore/stato ricevuti da Google per le richieste di notifica FCM v1. [Tutti i codici di errore osservati ricevuti dall'API FCM v1 sono disponibili CloudWatch quando configuri la registrazione dello stato di consegna per la tua applicazione.](topics-attrib.md)


|  error/status Codice FCM | Tipo di errore Amazon SNS | Messaggio di errore | Causa e mitigazione | 
| --- | --- | --- | --- | 
|  `UNREGISTERED`  |  `InvalidPlatformToken`  |  Il token di piattaforma associato all'endpoint non è valido.  |  Il token del dispositivo collegato all'endpoint è obsoleto o non valido. Amazon SNS ha disabilitato il tuo endpoint. Aggiorna l'endpoint Amazon SNS al token del dispositivo più recente.  | 
|  `INVALID_ARGUMENT`  |  `InvalidNotification`  |  Il corpo della notifica non è valido.  |  Il token del dispositivo o il payload del messaggio potrebbero non essere validi. Verifica che il payload del messaggio sia valido. Se il payload del messaggio è valido, aggiorna l'endpoint Amazon SNS al token del dispositivo più recente.  | 
|  `SENDER_ID_MISMATCH`  |  `InvalidPlatformToken`  |  Il token della piattaforma associato all'endpoint non è valido.  |  L'applicazione della piattaforma associata al token del dispositivo non dispone dell'autorizzazione per l'invio al token del dispositivo. Verifica di utilizzare le credenziali FCM corrette nell'applicazione della piattaforma Amazon SNS.  | 
|  `UNAVAILABLE`  |  `DependencyUnavailable`  |  La dipendenza non è disponibile.  |  FCM non è riuscito a elaborare la richiesta in tempo. Tutti i nuovi tentativi eseguiti da Amazon SNS non sono riusciti. Puoi archiviare questi messaggi in una coda di lettere morte (DLQ) e reindirizzarli in un secondo momento.  | 
|  `INTERNAL`  |  `UnexpectedFailure`  |  Errore imprevisto; contatta Amazon. Frase di errore [Errore interno].  |  Il server FCM ha riscontrato un errore durante il tentativo di elaborare la richiesta. Tutti i nuovi tentativi eseguiti da Amazon SNS non sono riusciti. Puoi archiviare questi messaggi in una coda di lettere morte (DLQ) e reindirizzarli in un secondo momento.  | 
|  `THIRD_PARTY_AUTH_ERROR`  |  `InvalidCredentials`  |  Le credenziali dell'applicazione della piattaforma non sono valide.  |  Non è stato possibile inviare un messaggio indirizzato a un dispositivo iOS o a un dispositivo Webpush. Verifica che le tue credenziali di sviluppo e produzione siano valide.  | 
|  `QUOTA_EXCEEDED`  |  `Throttled`  |  Richiesta limitata da [gcm].  |  È stata superata la quota per la frequenza dei messaggi, la quota per la velocità dei messaggi del dispositivo o la quota relativa alla frequenza dei messaggi per argomento. Per informazioni su come risolvere questo problema, consulta la [ErrorCode](https://firebase.google.com/docs/reference/fcm/rest/v1/ErrorCode)documentazione di *Firebase* di Google.  | 
|  `PERMISSION_DENIED`  |  `InvalidNotification`  |  Il corpo della notifica non è valido.  |  In caso di `PERMISSION_DENIED` eccezione, il chiamante (l'applicazione FCM) non è autorizzato a eseguire l'operazione specificata nel payload. Accedi alla console FCM e verifica che le tue credenziali abbiano abilitato le azioni API richieste.  | 

# Attributi dell'app mobile Amazon SNS
<a name="sns-msg-status"></a>

Amazon Simple Notification Service (Amazon SNS) fornisce supporto per la registrazione dello stato di consegna dei messaggi di notifica push. Dopo aver configurato gli attributi dell'applicazione, le voci di registro verranno inviate a CloudWatch Logs per i messaggi inviati da Amazon SNS agli endpoint mobili. La registrazione dello stato di consegna dei messaggi consente di ottenere informazioni operative più precise, ad esempio: 
+ Sapere se un messaggio di notifica push è stato consegnato da Amazon SNS al servizio di notifica push.
+ Identificare la risposta inviata dal servizio di notifica push a Amazon SNS.
+ Determinare il tempo di attesa dei messaggi (il periodo di tempo tra il timestamp di pubblicazione e l'istante immediatamente precedente alla consegna a un servizio di notifica push).

 Per configurare gli attributi dell'applicazione per lo stato di consegna dei messaggi, puoi utilizzare i Console di gestione AWS kit di sviluppo AWS software (SDKs) o l'API di interrogazione. 

## Configurazione degli attributi dello stato di recapito dei messaggi utilizzando Console di gestione AWS
<a name="sns-msg-console"></a>

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel riquadro di navigazione, scegliere **Mobile (Dispositivi mobili)**, **Push notifications (Notifiche push)**.

1. Nella sezione **Applicazioni della piattaforma**, scegli l'applicazione che contiene gli endpoint per i quali desideri ricevere CloudWatch i registri.

1. Scegli **Application Actions (Operazioni applicazione)**, quindi scegli **Delivery status (Stato consegna)**.

1. Nella finestra di dialogo **Delivery Status (Stato consegna)**, scegli **Create IAM Roles (Crea ruoli IAM)**.

   Si viene reindirizzati alla console IAM.

1. Scegli **Consenti per consentire** ad Amazon SNS l'accesso in scrittura per utilizzare CloudWatch i log per tuo conto.

1. Ora, tornando alla finestra di dialogo **Delivery Status**, inserisci un numero nel campo **Percentuale di successo su campione (0-100)** per indicare la percentuale di messaggi inviati con successo per i quali desideri ricevere i log. CloudWatch 
**Nota**  
Dopo aver configurato gli attributi dell'applicazione per lo stato di consegna dei messaggi, tutti i recapiti dei messaggi non riusciti generano registri. CloudWatch 

1. Infine scegli **Save Configuration (Salva configurazione)**. Ora sarai in grado di visualizzare e analizzare i CloudWatch registri contenenti lo stato di consegna dei messaggi. [Per ulteriori informazioni sull'utilizzo CloudWatch, consulta la CloudWatch documentazione.](https://aws.amazon.com/documentation/cloudwatch)

## Esempi di log sullo stato CloudWatch di consegna dei messaggi di Amazon SNS
<a name="sns-msg-examples"></a>

Dopo aver configurato gli attributi dello stato di consegna dei messaggi per un endpoint dell'applicazione, verranno CloudWatch generati i log. Di seguito vengono forniti degli esempi di log in formato JSON:

**RIUSCITO**

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

**NON RIUSCITO**

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

Per un elenco dei codici di risposta dei servizi di notifica push, consulta [Codici di risposta della piattaforma](#platform-returncodes).

## Configurazione degli attributi dello stato di consegna dei messaggi con AWS SDKs
<a name="sns-msg-sdk"></a>

[AWS SDKs](https://aws.amazon.com/tools/)Forniscono APIs in diverse lingue per l'utilizzo degli attributi dello stato di consegna dei messaggi con Amazon SNS. 

L'esempio Java seguente mostra come utilizzare l'API `SetPlatformApplicationAttributes` per configurare attributi di applicazione per lo stato di consegna dei messaggi di notifica push. Puoi utilizzare i seguenti attributi per lo stato di consegna dei messaggi: `SuccessFeedbackRoleArn`, `FailureFeedbackRoleArn` e `SuccessFeedbackSampleRate`. `FailureFeedbackRoleArn`Gli attributi `SuccessFeedbackRoleArn` and vengono utilizzati per consentire ad Amazon SNS l'accesso in scrittura per utilizzare CloudWatch i log per tuo conto. L'attributo `SuccessFeedbackSampleRate` consente di specificare la percentuale della frequenza di campionamento (0-100) dei messaggi consegnati. Dopo aver configurato l'`FailureFeedbackRoleArn`attributo, tutte le consegne di messaggi non riuscite generano log. CloudWatch 

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

Per ulteriori informazioni su SDK per Java, consulta [Nozioni di base su AWS SDK per Java](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html).

## Codici di risposta della piattaforma
<a name="platform-returncodes"></a>

Di seguito viene fornito un elenco dei collegamenti per i codici di risposta dei servizi di notifica push:


****  

| Servizio di notifiche push | Codice di risposta | 
| --- | --- | 
| Amazon Device Messaging (ADM) | Vedi [Formato di risposta](https://developer.amazon.com/docs/adm/send-message.html#response-format) nella documentazione ADM. | 
| Servizio di notifica push Apple () APNs | Vedi la risposta HTTP/2 APNs in [Comunicazione con APNs nella Guida](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html#/apple_ref/doc/uid/TP40008194-CH11-SW1) alla programmazione delle notifiche locali e remote. | 
| Firebase Cloud Messaging (FCM) | Vedi [Codici di risposta a messaggi di errore downstream](https://firebase.google.com/docs/cloud-messaging/http-server-ref#error-codes) nella documentazione di Firebase Cloud Messaging. | 
| Servizio di notifica push Microsoft per Windows Phone (MPNS) | Vedi [Push Notification Service Response Codes for Windows Phone 8](https://msdn.microsoft.com/en-us/library/windows/apps/ff941100%28v=vs.105%29.aspx#BKMK_PushNotificationServiceResponseCodes) nella documentazione di Windows 8 Development. | 
| Windows Push Notification Services (WNS) | Vedi "Codici di risposta" in [Intestazioni delle richieste e delle risposte per il servizio di notifica Push (app di Windows Runtime)](https://msdn.microsoft.com/en-us/library/windows/apps/hh465435.aspx) nella documentazione di sviluppo per Windows 8. | 

# Notifiche degli eventi delle applicazioni Amazon SNS per applicazioni mobili
<a name="application-event-notifications"></a>

Amazon SNS aiuta a capire come attivare le notifiche quando si verificano determinati eventi applicazione. Puoi intraprendere alcune azioni programmatiche su quell'evento. L'applicazione deve includere il supporto per un servizio di notifica push come Apple Push Notification Service (APNs), Firebase Cloud Messaging (FCM) e Windows Push Notification Services (WNS). Puoi impostare le notifiche degli eventi dell'applicazione utilizzando la console Amazon SNS o AWS CLI il. AWS SDKs

## Eventi applicazione disponibili
<a name="application-event-notifications-events"></a>

Le notifiche eventi applicazione tengono traccia degli eventi di creazione, eliminazione e aggiornamento dei singoli endpoint della piattaforma, nonché degli errori di consegna. Di seguito sono elencati i nomi degli attributi per gli eventi applicazione.


| Nome attributo | Trigger di notifica | 
| --- | --- | 
| EventEndpointCreated | Viene aggiunto un nuovo endpoint della piattaforma all'applicazione. | 
| EventEndpointDeleted | Viene eliminato un endpoint della piattaforma associato all'applicazione. | 
| EventEndpointUpdated | Viene modificato un attributo degli endpoint della piattaforma associati all'applicazione. | 
| EventDeliveryFailure | Una consegna a un qualsiasi endpoint della piattaforma associato all'applicazione restituisce un errore permanente.  Per tenere traccia degli errori di consegna relativamente alle applicazioni della piattaforma, effettua la sottoscrizione agli eventi sullo stato di consegna dei messaggi per l'applicazione. Per ulteriori informazioni, consulta la pagina sull'[utilizzo degli attributi di applicazione di Amazon SNS per lo stato di consegna dei messaggi](https://docs.aws.amazon.com/sns/latest/dg/sns-msg-status.html).  | 

È possibile associare qualsiasi attributo a un'applicazione che può quindi ricevere le notifiche di eventi. 

## Invio di notifiche push per dispositivi mobili
<a name="application-event-notifications-howto-set"></a>

Per inviare notifiche di eventi dell'applicazione, specifica un argomento per ricevere le notifiche per ciascun tipo di evento. Come Amazon SNS invia le notifiche, l'argomento può indirizzarle agli endpoint che intraprenderanno un'azione programmatica.

**Importante**  
Le applicazioni a volume elevato creeranno un gran numero di notifiche di eventi dell'applicazione (ad esempio, decine di migliaia), che sovraccaricheranno gli endpoint destinati all'uso umano, come indirizzi e-mail, numeri di telefono e applicazioni mobili. Considera le seguenti linee guida quando invii notifiche di eventi dell'applicazione a un argomento:  
Ogni argomento che riceve notifiche deve contenere solo sottoscrizioni per endpoint programmatici, come endpoint HTTP o HTTPS, code o funzioni Amazon SQS. AWS Lambda 
Per ridurre la quantità di elaborazione attivata dalle notifiche, limitare le sottoscrizioni di ciascun argomento a un numero ridotto (ad esempio, cinque o meno).

Puoi inviare notifiche sugli eventi dell'applicazione utilizzando la console Amazon SNS, il AWS Command Line Interface (AWS CLI) o il. AWS SDKs 

### Console di gestione AWS
<a name="application-event-notifications-howto-set-console"></a>

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel pannello di navigazione, scegli **Mobile** (Dispositivi mobili), **Push notifications** (Notifiche push).

1. Nella pagina delle **notifiche push per dispositivi mobili**, nella sezione **Applicazioni della piattaforma**, scegli un'applicazione, quindi scegli **Modifica**.

1. Espandere la sezione **Event notifications (Notifiche evento)**.

1. Seleziona **Actions** (Azioni), **Configure events** (Configura eventi).

1. Inserisci gli ARNs argomenti da utilizzare per i seguenti eventi:
   + Creazione endpoint
   + Eliminazione endpoint
   + Aggiornamento endpoint
   + Errore di consegna

1. Scegli **Save changes** (Salva modifiche).

### AWS CLI
<a name="awscli"></a>

Esegui il comando [set-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/set-platform-application-attributes.html).

L'esempio seguente imposta lo stesso argomento Amazon SNS per tutti e quattro gli eventi dell'applicazione:

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

Imposta le notifiche degli eventi dell'applicazione inviando una `SetPlatformApplicationAttributes` richiesta con l'API Amazon SNS utilizzando AWS un SDK.

Per un elenco completo di guide ed esempi di codice per sviluppatori AWS SDK, tra cui assistenza per iniziare e informazioni sulle versioni precedenti, consulta. [Utilizzo di Amazon SNS con un SDK AWS](sdk-general-information-section.md)

# Operazioni API push per dispositivi mobili
<a name="mobile-push-api"></a>

Per utilizzare il push mobile di Amazon SNS APIs, devi prima soddisfare i prerequisiti per il servizio di notifica push, come Apple Push Notification Service (APNs) e Firebase Cloud Messaging (FCM). Per ulteriori informazioni sui prerequisiti, consulta [Prerequisiti per le notifiche utente Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md). 

 Per inviare un messaggio di notifica push a un'app e a un dispositivo mobile utilizzando il APIs, devi prima utilizzare l'`CreatePlatformApplication`azione, che restituisce un attributo. `PlatformApplicationArn` L'attributo `PlatformApplicationArn` viene poi utilizzato da `CreatePlatformEndpoint`, che restituisce un attributo `EndpointArn`. Puoi utilizzare l'attributo `EndpointArn` insieme all'operazione `Publish` o inviare un messaggio di notifica a un'app e un dispositivo mobile oppure è possibile utilizzare l'attributo `EndpointArn` insieme all'operazione `Subscribe` per effettuare la sottoscrizione a un argomento. Per ulteriori informazioni, consulta [Configurazione delle notifiche push con Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview).

I push mobili di Amazon SNS APIs sono i seguenti: 

`[CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)`  
Crea un oggetto applicativo della piattaforma per uno dei servizi di notifica push supportati, come APNs FCM, a cui possono registrarsi dispositivi e app mobili. Restituisce un attributo `PlatformApplicationArn`, utilizzato dall'operazione `CreatePlatformEndpoint`.

`[CreatePlatformEndpoint](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)`  
Crea un endpoint per un dispositivo e un'app mobile su uno dei servizi di notifica push supportati. `CreatePlatformEndpoint` utilizza l'attributo `PlatformApplicationArn` restituito dall'operazione `CreatePlatformApplication`. L'attributo `EndpointArn` restituito quando si utilizza `CreatePlatformEndpoint` viene poi utilizzato insieme all'operazione `Publish` per inviare un messaggio di notifica a un'app e a un dispositivo mobile. 

`[CreateTopic](https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html)`  
Crea un argomento su cui e possibile pubblicare i messaggi. 

`[DeleteEndpoint](https://docs.aws.amazon.com/sns/latest/api/API_DeleteEndpoint.html)`  
Elimina l'endpoint per un dispositivo e un'app mobile su uno dei servizi di notifica push supportati.

`[DeletePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_DeletePlatformApplication.html)`  
Elimina un oggetto dell'applicazione di piattaforma.

`[DeleteTopic](https://docs.aws.amazon.com/sns/latest/api/API_DeleteTopic.html)`  
Elimina un argomento e tutte le sue sottoscrizioni.

`[GetEndpointAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetEndpointAttributes.html)`  
Recupera gli attributi endpoint per un dispositivo e un'app mobile.

`[GetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetPlatformApplicationAttributes.html)`  
Recupera gli attributi dell'oggetto della piattaforma.

`[ListEndpointsByPlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html)`  
Elenca gli endpoint e gli attributi degli endpoint per dispositivi e app mobili in un servizio di notifica push supportato.

`[ListPlatformApplications](https://docs.aws.amazon.com/sns/latest/api/API_ListPlatformApplications.html)`  
Elenca gli oggetti dell'applicazione di piattaforma per i servizi di notifica push supportati.

`[Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html)`  
Invia un messaggio di notifica a tutti gli endpoint sottoscritti di un argomento.

`[SetEndpointAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetEndpointAttributes.html)`  
Imposta gli attributi di un endpoint per un dispositivo e un'app mobile.

`[SetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html)`  
Imposta gli attributi dell'oggetto della piattaforma.

`[Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html)`  
Prepara la sottoscrizione di un endpoint inviando all'endpoint un messaggio di conferma. Per creare effettivamente un abbonamento, il proprietario dell'endpoint deve eseguire l' ConfirmSubscription azione con il token contenuto nel messaggio di conferma. 

`[Unsubscribe](https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html)`  
Elimina una sottoscrizione.

# Errori comuni dell'API push mobile di Amazon SNS
<a name="mobile-push-api-error"></a>

Gli errori restituiti da Amazon SNS APIs per dispositivi mobili push sono elencati nella tabella seguente. Per ulteriori informazioni su Amazon SNS APIs for mobile push, consulta. [Operazioni API push per dispositivi mobili](mobile-push-api.md)


| Errore | Descrizione | Codice di stato HTTPS | Operazione API | 
| --- | --- | --- | --- | 
| Application Name is null string (Nome applicazione è una stringa null) | Il nome di applicazione richiesto è impostato su null. | 400 | `CreatePlatformApplication` | 
| Platform Name is null string (Nome piattaforma è una stringa null) | Il nome di piattaforma richiesto è impostato su null. | 400 | `CreatePlatformApplication` | 
| Platform Name is invalid (Nome piattaforma non valido) | È stato fornito un out-of-range valore o non valido per il nome della piattaforma. | 400 | `CreatePlatformApplication` | 
| APNs — Il principale non è un certificato valido | È stato fornito un certificato non valido per il APNs principale, che è il certificato SSL. Per ulteriori informazioni, consulta il riferimento [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)all'API di Amazon Simple Notification Service. | 400 | `CreatePlatformApplication` | 
| APNs — Principal è un certificato valido ma non in formato.pem | Per il APNs principale, che è il certificato SSL, è stato fornito un certificato valido non in formato.pem. | 400 | `CreatePlatformApplication` | 
| APNs — Principal è un certificato scaduto | È stato fornito un certificato scaduto per il APNs principale, che è il certificato SSL. | 400 | `CreatePlatformApplication` | 
| APNs — Il principale non è un certificato emesso da Apple | Un certificato non Apple è stato fornito per il principale APNs, ovvero il certificato SSL. | 400 | `CreatePlatformApplication` | 
| APNs — Il preside non è fornito | Il APNs principale, che è il certificato SSL, non è stato fornito. | 400 | `CreatePlatformApplication` | 
| APNs — La credenziale non è stata fornita | La APNs credenziale, che è la chiave privata, non è stata fornita. Per ulteriori informazioni, consulta il riferimento [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)all'API di Amazon Simple Notification Service. | 400 | `CreatePlatformApplication` | 
| APNs — Le credenziali non sono in un formato .pem valido | La APNs credenziale, che è la chiave privata, non è in un formato .pem valido. | 400 | `CreatePlatformApplication` | 
| FCM: il server non è fornito APIKey  | La credenziale FCM, ovvero la chiave API, non è stata fornita. Per ulteriori informazioni, consulta il riferimento [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)all'API di Amazon Simple Notification Service. | 400 | `CreatePlatformApplication` | 
| FCM: il server APIKey è vuoto | La credenziale FCM, ovvero la chiave API, è vuota. | 400 | `CreatePlatformApplication` | 
| FCM: il server APIKey è una stringa nulla | La credenziale FCM, ovvero la chiave API, è null. | 400 | `CreatePlatformApplication` | 
| FCM: il server non è valido APIKey  | La credenziale FCM, ovvero la chiave API, non è valida. | 400 | `CreatePlatformApplication` | 
| ADM - clientsecret is not provided (ADM - clientsecret non fornita) | Il segreto client richiesto non è fornito. | 400 | `CreatePlatformApplication` | 
| ADM - clientsecret is a null string (ADM - clientsecret è una stringa null) | La stringa richiesta per il segreto client è null. | 400 | `CreatePlatformApplication` | 
| ADM - client\$1secret is empty string (ADM - client\$1secret è una stringa vuota) | La stringa richiesta per il segreto client è vuota. | 400 | `CreatePlatformApplication` | 
| ADM - client\$1secret is not valid (ADM - client\$1secret non valida) | La stringa richiesta per il segreto client non è valida. | 400 | `CreatePlatformApplication` | 
| ADM - client\$1id is empty string (ADM - client\$1id è una stringa vuota) | La stringa richiesta per l'ID client è vuota. | 400 | `CreatePlatformApplication` | 
| ADM - clientId is not provided (ADM - clientId non fornita) | La stringa richiesta per l'ID client non è fornita. | 400 | `CreatePlatformApplication` | 
| ADM - clientid is a null string (ADM - clientid è una stringa null) | La stringa richiesta per l'ID client è null. | 400 | `CreatePlatformApplication` | 
| ADM - client\$1id is not valid (ADM - client\$1id non valida) | La stringa richiesta per l'ID client non è valida. | 400 | `CreatePlatformApplication` | 
| EventEndpointCreated ha un formato ARN non valido | EventEndpointCreated ha un formato ARN non valido. | 400 | `CreatePlatformApplication` | 
| EventEndpointDeleted ha un formato ARN non valido | EventEndpointDeleted ha un formato ARN non valido. | 400 | `CreatePlatformApplication` | 
| EventEndpointUpdated ha un formato ARN non valido | EventEndpointUpdated ha un formato ARN non valido. | 400 | `CreatePlatformApplication` | 
| EventDeliveryAttemptFailure ha un formato ARN non valido | EventDeliveryAttemptFailure ha un formato ARN non valido. | 400 | `CreatePlatformApplication` | 
| EventDeliveryFailure ha un formato ARN non valido | EventDeliveryFailure ha un formato ARN non valido. | 400 | `CreatePlatformApplication` | 
| EventEndpointCreated non è un argomento esistente | EventEndpointCreated non è un argomento esistente. | 400 | `CreatePlatformApplication` | 
| EventEndpointDeleted non è un argomento esistente | EventEndpointDeleted non è un argomento esistente. | 400 | `CreatePlatformApplication` | 
| EventEndpointUpdated non è un argomento esistente | EventEndpointUpdated non è un argomento esistente. | 400 | `CreatePlatformApplication` | 
| EventDeliveryAttemptFailure non è un argomento esistente | EventDeliveryAttemptFailure non è un argomento esistente. | 400 | `CreatePlatformApplication` | 
| EventDeliveryFailure non è un argomento esistente | EventDeliveryFailure non è un argomento esistente. | 400 | `CreatePlatformApplication` | 
| Platform ARN is invalid (ARN piattaforma non valido) | L'ARN della piattaforma non è valido. | 400 | `SetPlatformAttributes` | 
| Platform ARN is valid but does not belong to the user (ARN piattaforma valido ma non appartiene all'utente) | L'ARN della piattaforma è valido ma non appartiene all'utente. | 400 | `SetPlatformAttributes` | 
| APNs — Il principale non è un certificato valido | È stato fornito un certificato non valido per il APNs principale, che è il certificato SSL. Per ulteriori informazioni, consulta il riferimento [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)all'API di Amazon Simple Notification Service. | 400 | `SetPlatformAttributes` | 
| APNs — Principal è un certificato valido ma non in formato.pem | Per il APNs principale, che è il certificato SSL, è stato fornito un certificato valido non in formato.pem. | 400 | `SetPlatformAttributes` | 
| APNs — Principal è un certificato scaduto | È stato fornito un certificato scaduto per il APNs principale, che è il certificato SSL. | 400 | `SetPlatformAttributes` | 
| APNs — Il principale non è un certificato emesso da Apple | Un certificato non Apple è stato fornito per il principale APNs, ovvero il certificato SSL. | 400 | `SetPlatformAttributes` | 
| APNs — Il preside non è fornito | Il APNs principale, che è il certificato SSL, non è stato fornito. | 400 | `SetPlatformAttributes` | 
| APNs — La credenziale non è stata fornita | La APNs credenziale, che è la chiave privata, non è stata fornita. Per ulteriori informazioni, consulta il riferimento [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)all'API di Amazon Simple Notification Service. | 400 | `SetPlatformAttributes` | 
| APNs — Le credenziali non sono in un formato .pem valido | La APNs credenziale, che è la chiave privata, non è in un formato .pem valido. | 400 | `SetPlatformAttributes` | 
| FCM: il server non è fornito APIKey  | La credenziale FCM, ovvero la chiave API, non è stata fornita. Per ulteriori informazioni, consulta il riferimento [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)all'API di Amazon Simple Notification Service. | 400 | `SetPlatformAttributes` | 
| FCM: il server APIKey è una stringa nulla | La credenziale FCM, ovvero la chiave API, è null. | 400 | `SetPlatformAttributes` | 
| ADM - clientId is not provided (ADM - clientId non fornita) | La stringa richiesta per l'ID client non è fornita. | 400 | `SetPlatformAttributes` | 
| ADM - clientid is a null string (ADM - clientid è una stringa null) | La stringa richiesta per l'ID client è null. | 400 | `SetPlatformAttributes` | 
| ADM - clientsecret is not provided (ADM - clientsecret non fornita) | Il segreto client richiesto non è fornito. | 400 | `SetPlatformAttributes` | 
| ADM - clientsecret is a null string (ADM - clientsecret è una stringa null) | La stringa richiesta per il segreto client è null. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated ha un formato ARN non valido | EventEndpointUpdated ha un formato ARN non valido. | 400 | `SetPlatformAttributes` | 
| EventEndpointDeleted ha un formato ARN non valido | EventEndpointDeleted ha un formato ARN non valido. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated ha un formato ARN non valido | EventEndpointUpdated ha un formato ARN non valido. | 400 | `SetPlatformAttributes` | 
| EventDeliveryAttemptFailure ha un formato ARN non valido | EventDeliveryAttemptFailure ha un formato ARN non valido. | 400 | `SetPlatformAttributes` | 
| EventDeliveryFailure ha un formato ARN non valido | EventDeliveryFailure ha un formato ARN non valido. | 400 | `SetPlatformAttributes` | 
| EventEndpointCreated non è un argomento esistente | EventEndpointCreated non è un argomento esistente. | 400 | `SetPlatformAttributes` | 
| EventEndpointDeleted non è un argomento esistente | EventEndpointDeleted non è un argomento esistente. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated non è un argomento esistente | EventEndpointUpdated non è un argomento esistente. | 400 | `SetPlatformAttributes` | 
| EventDeliveryAttemptFailure non è un argomento esistente | EventDeliveryAttemptFailure non è un argomento esistente. | 400 | `SetPlatformAttributes` | 
| EventDeliveryFailure non è un argomento esistente | EventDeliveryFailure non è un argomento esistente. | 400 | `SetPlatformAttributes` | 
| Platform ARN is invalid (ARN piattaforma non valido) | L'ARN della piattaforma non è valido. | 400 | `GetPlatformApplicationAttributes` | 
| Platform ARN is valid but does not belong to the user (ARN piattaforma valido ma non appartiene all'utente) | L'ARN della piattaforma è valido ma non appartiene all'utente. | 403 | `GetPlatformApplicationAttributes` | 
| Token specified is invalid (Token specificato non valido) | Il token specificato non è valido. | 400 | `ListPlatformApplications` | 
| Platform ARN is invalid (ARN piattaforma non valido) | L'ARN della piattaforma non è valido. | 400 | `ListEndpointsByPlatformApplication` | 
| Platform ARN is valid but does not belong to the user (ARN piattaforma valido ma non appartiene all'utente) | L'ARN della piattaforma è valido ma non appartiene all'utente. | 404 | `ListEndpointsByPlatformApplication` | 
| Token specified is invalid (Token specificato non valido) | Il token specificato non è valido. | 400 | `ListEndpointsByPlatformApplication` | 
| Platform ARN is invalid (ARN piattaforma non valido) | L'ARN della piattaforma non è valido. | 400 | `DeletePlatformApplication` | 
| Platform ARN is valid but does not belong to the user (ARN piattaforma valido ma non appartiene all'utente) | L'ARN della piattaforma è valido ma non appartiene all'utente. | 403 | `DeletePlatformApplication` | 
| Platform ARN is invalid (ARN piattaforma non valido) | L'ARN della piattaforma non è valido. | 400 | `CreatePlatformEndpoint` | 
| Platform ARN is valid but does not belong to the user (ARN piattaforma valido ma non appartiene all'utente) | L'ARN della piattaforma è valido ma non appartiene all'utente. | 404 | `CreatePlatformEndpoint` | 
| Token is not specified (Token non specificato) | Il token non è specificato. | 400 | `CreatePlatformEndpoint` | 
| Token is not of correct length (Lunghezza token non corretta) | La lunghezza del token non è corretta. | 400 | `CreatePlatformEndpoint` | 
| Customer User data is too large (Dimensione dati utente cliente troppo grande) | La dimensione dei dati utente cliente non può essere superiore a 2048 byte nella codifica UTF-8. | 400 | `CreatePlatformEndpoint` | 
| Endpoint ARN is invalid (ARN endpoint non valido) | L'ARN dell'endpoint non è valido. | 400 | `DeleteEndpoint` | 
| Endpoint ARN is valid but does not belong to the user (ARN endpoint valido ma non appartiene all'utente) | L'ARN dell'endpoint è valido ma non appartiene all'utente. | 403 | `DeleteEndpoint` | 
| Endpoint ARN is invalid (ARN endpoint non valido) | L'ARN dell'endpoint non è valido. | 400 | `SetEndpointAttributes` | 
| Endpoint ARN is valid but does not belong to the user (ARN endpoint valido ma non appartiene all'utente) | L'ARN dell'endpoint è valido ma non appartiene all'utente. | 403 | `SetEndpointAttributes` | 
| Token is not specified (Token non specificato) | Il token non è specificato. | 400 | `SetEndpointAttributes` | 
| Token is not of correct length (Lunghezza token non corretta) | La lunghezza del token non è corretta. | 400 | `SetEndpointAttributes` | 
| Customer User data is too large (Dimensione dati utente cliente troppo grande) | La dimensione dei dati utente cliente non può essere superiore a 2048 byte nella codifica UTF-8. | 400 | `SetEndpointAttributes` | 
| Endpoint ARN is invalid (ARN endpoint non valido) | L'ARN dell'endpoint non è valido. | 400 | `GetEndpointAttributes` | 
| Endpoint ARN is valid but does not belong to the user (ARN endpoint valido ma non appartiene all'utente) | L'ARN dell'endpoint è valido ma non appartiene all'utente. | 403 | `GetEndpointAttributes` | 
| Target ARN is invalid (ARN destinazione non valido) | L'ARN di destinazione non è valido. | 400 | `Publish` | 
| Target ARN is valid but does not belong to the user (ARN destinazione valido ma non appartiene all'utente) | L'ARN di destinazione è valido ma non appartiene all'utente. | 403 | `Publish` | 
| Message format is invalid (Formato messaggio non valido) | Il formato del messaggio non è valido. | 400 | `Publish` | 
| Message size is larger than supported by protocol/end-service (Dimensione messaggio superiore a quella supportata da protocollo/servizio finale) | La dimensione del messaggio è superiore a quella supportata dal protocollo/servizio finale. | 400 | `Publish` | 

# Utilizzo dell'attributo time to live message di Amazon SNS per le notifiche push mobili
<a name="sns-ttl"></a>

Amazon Simple Notification Service (Amazon SNS) ti aiuta a impostare un attributo messaggio *TTL (Time To Live)* per messaggi di notifica push per dispositivi mobili. Questa funzionalità si aggiunge alla capacità esistente di impostare il TTL all'interno del corpo del messaggio Amazon SNS per i servizi di notifica push mobili che lo supportano, come Amazon Device Messaging (ADM) e Firebase Cloud Messaging (FCM) durante l'invio ad Android.

L'attributo di messaggio TTL è utilizzato per specificare i metadati di scadenza strutturati su un messaggio. Ciò consente di specificare il periodo di tempo a disposizione del servizio di notifica push, come Apple Push Notification Service (APNs) o FCM, per recapitare il messaggio all'endpoint. Se per qualche motivo (per esempio il dispositivo mobile è stato disattivato) il messaggio non può essere consegnato entro il TTL specificato, verrà eliminato senza ulteriori tentativi di consegna. Per specificare il TTL all'interno degli attributi del messaggio, puoi utilizzare i Console di gestione AWS kit di sviluppo AWS software (SDKs) o l'API di interrogazione. 

## Gli attributi di messaggio TTL riservati ai servizi di notifica push
<a name="sns-ttl-msg-attrib"></a>

Di seguito è riportato un elenco degli attributi dei messaggi TTL per i servizi di notifica push che puoi utilizzare per impostare quando utilizzi l'API AWS SDKs o query:


****  

| Servizio di notifiche push | Attributo di messaggio TTL | 
| --- | --- | 
| Amazon Device Messaging (ADM) | AWS.SNS.MOBILE.ADM.TTL | 
| Servizio di notifica push Apple () APNs | AWS.SNS.MOBILE.APNS.TTL | 
| Sandbox del servizio di notifica push Apple (APNs\$1SANDBOX) | AWS.SNS.MOBILE.APNS\$1SANDBOX.TTL | 
| Baidu Cloud Push (Baidu) | AWS.SNS.MOBILE.BAIDU.TTL | 
| Firebase Cloud Messaging (FCM in caso di invio ad Android) | AWS.SNS.MOBILE.FCM.TTL | 
| Windows Push Notification Services (WNS) | AWS.SNS.MOBILE.WNS.TTL | 

Ogni servizio di notifica push gestisce il TTL in modo diverso. Amazon SNS offre una vista astratta del TTL su tutti i servizi di notifica push, il che rende più semplice specificare il TTL. Quando utilizzi il TTL Console di gestione AWS per specificare (in secondi), devi inserire il valore TTL una sola volta e Amazon SNS calcolerà il TTL per ciascuno dei servizi di notifica push selezionati durante la pubblicazione del messaggio. 

 Il TTL è relativo all'ora di pubblicazione. Prima di consegnare un messaggio di notifica push a un servizio di notifica push specifico, Amazon SNS calcola il tempo di sosta (il tempo tra il timestamp di pubblicazione e l'istante immediatamente precedente il passaggio a un servizio di notifica push) per la notifica push e passa il TTL rimanente al servizio di notifica push specifico. Se il TTL è più breve del tempo di sosta, Amazon SNS non proverà a pubblicare. 

Se si specifica un TTL per un messaggio di notifica push, il valore TTL deve essere un numero intero positivo, a meno che il valore di non `0` abbia un significato specifico per il servizio di notifica push, ad esempio con APNs e FCM (quando si invia ad Android). Se il valore TTL è impostato su `0` e il servizio di notifica push non ha un significato specifico per `0`, Amazon SNS non consegnerà il messaggio. [Per ulteriori informazioni sul parametro TTL impostato su `0` quando si utilizza APNs, vedere la *Tabella A-3 Identificatori di elementi* per le notifiche remote nella documentazione dell'API Binary Provider.](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/BinaryProviderAPI.html)

## Ordine di precedenza per determinare il TTL
<a name="sns-ttl-precedence"></a>

La precedenza che Amazon SNS utilizza per determinare il TTL per un messaggio di notifica push è basata sul seguente ordine, in cui il numero più basso ha la priorità più alta: 

1. TTL attributo di messaggio

1. TTL testo messaggio

1. TTL di default per il servizio di notifica push (varia in base al servizio)

1. TTL di default Amazon SNS (4 settimane)

Se imposti diversi valori TTL (uno negli attributi di messaggio e un altro nel corpo del messaggio) per lo stesso messaggio, Amazon SNS modificherà il TTL nel corpo del messaggio in modo che corrisponda al TTL specificato nell'attributo del messaggio stesso.

## Specificare il TTL utilizzando Console di gestione AWS
<a name="sns-ttl-console"></a>

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel pannello di navigazione, scegli **Mobile** (Dispositivi mobili), **Push notifications** (Notifiche push).

1. Nella pagina **Mobile push notifications (Notifiche push per dispositivi mobili)**, nella sezione **Platform applications (Applicazioni di piattaforma)**, selezionare un'applicazione.

1. **Nella ***MyApplication*** pagina, nella sezione **Endpoints, scegli un endpoint** dell'applicazione, quindi scegli Pubblica messaggio.**

1. Nella sezione **Message details (Dettagli messaggio)**, immettere il TTL (numero di secondi a disposizione del servizio di notifica push per recapitare il messaggio all'endpoint).

1. Seleziona **Publish message (Pubblica messaggio)**.

# Regioni supportate dall'applicazione mobile Amazon SNS
<a name="sns-mobile-push-supported-regions"></a>

Al momento, puoi creare applicazioni per dispositivi mobili nelle seguenti regioni:
+ Stati Uniti orientali (Ohio)
+ Stati Uniti orientali (Virginia settentrionale)
+ Stati Uniti occidentali (California settentrionale)
+ Stati Uniti occidentali (Oregon)
+ Africa (Città del Capo)
+ Asia Pacifico (Hong Kong)
+ Asia Pacifico (Giacarta)
+ Asia Pacifico (Mumbai)
+ Asia Pacifico (Osaka)
+ Asia Pacifico (Seoul)
+ Asia Pacifico (Singapore)
+ Asia Pacifico (Sydney)
+ Asia Pacifico (Tokyo)
+ Canada (Centrale)
+ Europa (Francoforte)
+ Europa (Irlanda)
+ Europa (Londra)
+ Europa (Milano)
+ Europa (Spagna)
+ Europa (Parigi)
+ Europa (Stoccolma)
+ Medio Oriente (Bahrein)
+ Medio Oriente (Emirati Arabi Uniti)
+ Sud America (San Paolo)
+ AWS GovCloud (Stati Uniti occidentali)

# Best practice per la gestione delle notifiche push mobili di Amazon SNS
<a name="mobile-push-notifications-best-practices"></a>

Questa sezione illustra diverse best practice che potrebbero rivelarsi utili per migliorare il coinvolgimento dei clienti.

## Gestione di endpoint
<a name="channels-sms-best-practices-endpoint-management"></a>

Potrebbero verificarsi problemi di consegna in situazioni in cui i token del dispositivo cambiano a causa di un'azione dell'utente sul dispositivo (ad esempio, un'app viene reinstallata sul dispositivo) o [gli aggiornamenti dei certificati](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns) riguardano i dispositivi che eseguono una particolare versione di iOS. La [registrazione](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#:~:text=Registering%20to%20Receive%20Remote%20Notifications) a APNs ogni avvio dell'app è una best practice consigliata da Apple.

Poiché il token del dispositivo non cambia ogni volta che un'app viene aperta da un utente, è possibile utilizzare l'API idempotente [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html). Tuttavia, ciò può introdurre duplicati per lo stesso dispositivo nei casi in cui il token stesso non è valido o se l'endpoint è valido ma disabilitato (ad esempio, una mancata corrispondenza tra gli ambienti di produzione e sandbox).

Può essere utilizzato un meccanismo di gestione dei token del dispositivo, come quello nello [pseudocodice](mobile-platform-endpoint.md#mobile-platform-endpoint-pseudo-code).

Per informazioni sulla gestione e la manutenzione dei token dei dispositivi FCM v1, vedere. [Gestione Amazon SNS degli endpoint Firebase Cloud Messaging](sns-fcm-endpoint-management.md)

## Registrazione dello stato della consegna
<a name="channels-sms-best-practices-delivery-logging"></a>

Per monitorare lo stato di consegna delle notifiche push, ti consigliamo di abilitare la registrazione dello stato di consegna per l'applicazione della piattaforma Amazon SNS. In questo modo è possibile risolvere i problemi di consegna, poiché i log contengono [codici di risposta](sns-msg-status.md#platform-returncodes) di provider restituiti dal servizio push della piattaforma. Per informazioni dettagliate sull'abilitazione della registrazione dello stato di consegna, vedere [Come posso accedere ai registri di consegna degli argomenti Amazon SNS per le notifiche push?](https://aws.amazon.com/premiumsupport/knowledge-center/troubleshoot-failed-sns-deliveries/).

## Notifiche degli eventi
<a name="channels-sms-best-practices-event-notifications"></a>

Per gestire gli endpoint in modo che siano basati su eventi, è possibile utilizzare la funzionalità [Notifiche eventi](application-event-notifications.md#application-event-notifications-sdk). Ciò consente all'argomento Amazon SNS configurato di eseguire il fanout degli eventi agli abbonati, come una funzione Lambda, per eventi applicativi della piattaforma di creazione, eliminazione, aggiornamenti e errori di consegna degli endpoint.

# Configurazione e gestione dell'abbonamento e-mail Amazon SNS
<a name="sns-email-notifications"></a>

Puoi iscrivere un [indirizzo e-mail](#sns-email-notifications) a un argomento di Amazon SNS utilizzando Console di gestione AWS AWS SDK per Java, o. AWS SDK per .NET

**Note**  
La personalizzazione del corpo del messaggio e-mail non è supportata. La funzione di recapito e-mail ha lo scopo di fornire avvisi interni di sistema, non messaggi di marketing.
La sottoscrizione diretta agli endpoint di e-mail è supportata solo per gli argomenti standard.
La velocità effettiva di recapito delle e-mail è limitata. Per ulteriori informazioni, consulta le [quote di Amazon SNS](https://docs.aws.amazon.com/general/latest/gr/sns.html#limits_sns).

**Importante**  
Per impedire ai destinatari della mailing list di annullare la sottoscrizione di tutti i destinatari dalle e-mail dell'argomento Amazon SNS, consulta [Configurare un abbonamento e-mail che richiede l'autenticazione per annullare l'iscrizione](https://aws.amazon.com/premiumsupport/knowledge-center/prevent-unsubscribe-all-sns-topic/) da AWS Support.
Il superamento del limite di 10 messaggi al secondo (TPS) per un endpoint e-mail o email-json attiverà una sospensione automatica dell'abbonamento, che passerà allo stato di conferma in sospeso. L'abbonamento rimane attivo per 30 giorni, dopodiché verrà automaticamente eliminato a meno che non venga intrapresa alcuna azione. PendingConfirmation 

## Sottoscrizione di un indirizzo e-mail a un argomento di Amazon SNS utilizzando il Console di gestione AWS
<a name="create-subscribe-endpoint-to-topic-console"></a>

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel pannello di navigazione sinistro scegli **Sottoscrizioni**.

1. Nella pagina **Sottoscrizioni** scegli **Crea sottoscrizione**.

1. Nella pagina **Crea sottoscrizione**, nella sezione **Dettagli**, eseguire queste operazioni:

   1. Per **ARN argomento** scegli l'Amazon Resource Name (ARN) di un argomento.

   1. Per **Protocol**, scegliere **Email**.

   1. Per **Endpoint**, immettere l’indirizzo e-mail.

   1. (Facoltativo) Per configurare un criterio filtro, espandere la sezione **Policy di filtro per sottoscrizione**. Per ulteriori informazioni, consulta [Policy di filtro degli abbonamenti Amazon SNS](sns-subscription-filter-policies.md).

   1. (Facoltativo) Per abilitare il filtro basato sul payload, imposta `Filter Policy Scope` su `MessageBody`. Per ulteriori informazioni, consulta [Ambito delle policy di filtro per le sottoscrizioni Amazon SNS](sns-message-filtering-scope.md).

   1. (Facoltativo) Per configurare una coda DLQ per la sottoscrizione, espandere la sezione **Policy di redrive (coda DLQ)**. Per ulteriori informazioni, consulta [Code di lettere non ricevute di Amazon SNS](sns-dead-letter-queues.md).

   1. Scegli **Create Subscription (Crea sottoscrizione)**.

      La console crea la sottoscrizione e apre la pagina **Dettagli**.

È necessario confermare la sottoscrizione prima che l'indirizzo e-mail possa iniziare a ricevere messaggi.

**Per confermare una sottoscrizione**

1. Controlla la tua casella di posta elettronica e scegli **Conferma sottoscrizione** nell'e-mail di Amazon SNS.

1. Amazon SNS apre il browser Web e visualizza una conferma dell'abbonamento con il tuo ID abbonamento.

## Sottoscrizione di un indirizzo e-mail a un argomento Amazon SNS utilizzando un SDK AWS
<a name="subscribe-email-to-topic-aws-sdks"></a>

Per utilizzare un AWS SDK, devi configurarlo con le tue credenziali. *Per ulteriori informazioni, consulta [I file di configurazione e credenziali condivisi nella and](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) Tools Reference AWS SDKs Guide.*

Gli esempi di codice seguenti mostrano come utilizzare `Subscribe`.

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

**SDK per .NET**  
 C'è di più su. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/SNS#code-examples). 
Sottoscrive un indirizzo e-mail a un argomento.  

```
        /// <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;
        }
```
Iscrivi una coda a un argomento con filtri opzionali.  

```
    /// <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;
    }
```
+  Per informazioni dettagliate sull’API, consulta [Sottoscrizione](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/Subscribe) nella *documentazione di riferimento dell’API AWS SDK per .NET *. 

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

**SDK per C\$1\$1**  
 C'è dell'altro GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sns#code-examples). 
Sottoscrive un indirizzo e-mail a un argomento.  

```
//! 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();
}
```
Sottoscrive un’applicazione mobile a un argomento.  

```
//! 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();
}
```
Sottoscrive una funzione Lambda a un argomento.  

```
//! 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();
}
```
Sottoscrive una coda SQS a un argomento.  

```
        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;
            }
```
Sottoscrive con un filtro a un argomento.  

```
        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;
}
```
+  Per informazioni dettagliate sull’API, consulta [Sottoscrizione](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/Subscribe) nella *documentazione di riferimento dell’API AWS SDK per C\$1\$1 *. 

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

**AWS CLI**  
**Effettuare la sottoscrizione a un argomento**  
Attraverso il comando `subscribe` seguente viene effettuata la sottoscrizione all’argomento specificato utilizzando un indirizzo e-mail.  

```
aws sns subscribe \
    --topic-arn arn:aws:sns:us-west-2:123456789012:my-topic \
    --protocol email \
    --notification-endpoint my-email@example.com
```
Output:  

```
{
    "SubscriptionArn": "pending confirmation"
}
```
+  Per informazioni dettagliate sull’API, consulta [Subscribe](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/subscribe.html) nella *documentazione di riferimento dei comandi della AWS CLI *. 

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

**SDK per Go V2**  
 C'è dell'altro GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/gov2/workflows/topics_and_queues#code-examples). 
Iscrivi una coda a un argomento con filtri opzionali.  

```
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
}
```
+  Per informazioni dettagliate sull’API, consulta [Sottoscrizione](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/sns#Client.Subscribe) nella *documentazione di riferimento dell’API AWS SDK per Go *. 

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

**SDK for Java 2.x**  
 C'è dell'altro GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 
Sottoscrive un indirizzo e-mail a un argomento.  

```
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);
        }
    }
}
```
Sottoscrive un endpoint HTTP a un argomento.  

```
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);
        }
    }
}
```
Sottoscrive una funzione Lambda a un argomento.  

```
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 "";
    }
}
```
+  Per informazioni dettagliate sull’API, consulta [Sottoscrizione](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Subscribe) nella *documentazione di riferimento dell’API AWS SDK for Java 2.x *. 

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

**SDK per JavaScript (v3)**  
 C'è altro da fare. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l’esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Creare il client in un modulo separato ed esportarlo.  

```
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({});
```
Importare l'SDK e i moduli client e chiamare 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'
  // }
};
```
Sottoscrive un’applicazione mobile a un argomento.  

```
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;
};
```
Sottoscrive una funzione Lambda a un argomento.  

```
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;
};
```
Sottoscrive una coda SQS a un argomento.  

```
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;
};
```
Sottoscrive con un filtro a un argomento.  

```
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;
};
```
+  Per ulteriori informazioni, consulta la [Guida per sviluppatori di AWS SDK per JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-subscribing-email). 
+  Per informazioni dettagliate sull’API, consulta [Sottoscrizione](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/SubscribeCommand) nella *documentazione di riferimento dell’API AWS SDK per JavaScript *. 

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

**SDK per Kotlin**  
 C'è dell'altro GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin/services/sns#code-examples). 
Sottoscrive un indirizzo e-mail a un argomento.  

```
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()
    }
}
```
Sottoscrive una funzione Lambda a un argomento.  

```
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}")
    }
}
```
+  Per informazioni dettagliate sull’API, consulta [Sottoscrizione](https://sdk.amazonaws.com/kotlin/api/latest/index.html) nella *documentazione di riferimento degli SDK AWS per Kotlin*. 

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

**SDK for PHP**  
 C'è dell'altro GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 
Sottoscrive un indirizzo e-mail a un argomento.  

```
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());
}
```
Sottoscrive un endpoint HTTP a un argomento.  

```
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());
}
```
+  Per informazioni dettagliate sull’API, consulta [Sottoscrizione](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/Subscribe) nella *documentazione di riferimento dell’API AWS SDK per PHP *. 

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

**SDK for Python (Boto3)**  
 C'è dell'altro GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/sns#code-examples). 
Sottoscrive un indirizzo e-mail a un argomento.  

```
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
```
Iscrivi una coda a un argomento con filtri opzionali.  

```
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
```
+  Per informazioni dettagliate sull’API, consulta [Sottoscrizione](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Subscribe) nella *documentazione di riferimento dell’API dell’SDK for Python (Boto3)AWS *. 

------
#### [ Ruby ]

**SDK for Ruby**  
 C'è dell'altro GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/ruby/example_code/sns#code-examples). 
Sottoscrive un indirizzo e-mail a un argomento.  

```
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
```
+  Per ulteriori informazioni, consulta la [Guida per sviluppatori di AWS SDK per Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/developer-guide/sns-example-create-subscription.html). 
+  Per informazioni dettagliate sull’API, consulta [Sottoscrizione](https://docs.aws.amazon.com/goto/SdkForRubyV3/sns-2010-03-31/Subscribe) nella *documentazione di riferimento dell’API AWS SDK per Ruby *. 

------
#### [ Rust ]

**SDK per Rust**  
 C'è altro da fare. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/rustv1/examples/sns#code-examples). 
Sottoscrive un indirizzo e-mail a un argomento.  

```
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(())
}
```
+  Per informazioni dettagliate sull’API, consulta [Sottoscrizione](https://docs.rs/aws-sdk-sns/latest/aws_sdk_sns/client/struct.Client.html#method.subscribe) nella *documentazione di riferimento degli SDK AWS per l’API Rust*. 

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

**SDK per SAP ABAP**  
 C'è altro da fare. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap/services/sns#code-examples). 
Sottoscrive un indirizzo e-mail a un argomento.  

```
    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.
```
+  Per informazioni dettagliate sull’API, consulta [Subscribe](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html) nella *documentazione di riferimento dell’API AWS SDK per SAP ABAP*. 

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

**SDK per Swift**  
 C'è altro da fare. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/swift/example_code/sns#code-examples). 
Sottoscrive un indirizzo e-mail a un argomento.  

```
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.")
```
Per sottoscrivere un numero di telefono a un argomento per ricevere le notifiche via 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.")
```
+  Per informazioni dettagliate sull’API, consulta [Subscribe](https://sdk.amazonaws.com/swift/api/awssns/latest/documentation/awssns/snsclient/subscribe(input:)) nella *documentazione di riferimento dell’API AWS SDK per Swift*. 

------