Inviare messaggi di modello WhatsApp con i messaggi avanzati
Questo articolo descrive come inviare messaggi di modello WhatsApp usando Advanced Communication Messages SDK.
Prerequisiti
- Registrare l'account WhatsApp Business con la risorsa Servizi di comunicazione di Azure.
- Creare un messaggio di modello WhatsApp.
- Numero di telefono WhatsApp attivo per ricevere messaggi.
Modello a oggetti
Le classi e le interfacce seguenti gestiscono alcune delle principali funzionalità di Servizi di comunicazione di Azure Messages SDK per .NET.
Nome della classe | Descrizione |
---|---|
NotificationMessagesClient |
Si connette alla risorsa Servizi di comunicazione di Azure. Invia i messaggi. |
MessageTemplate |
Definisce il modello usato e il contenuto delle proprietà del modello per il messaggio. |
TemplateNotificationContent |
Definisce il "chi" e il "what" del messaggio del modello che si intende inviare. |
Nota
Per altre informazioni, vedere informazioni di riferimento su Azure SDK per .NET. Spazio dei nomi Azure.Communication.Messages.
Tipi di modello WhatsApp supportati
Tipo di modello | Descrizione |
---|---|
Modelli di messaggio basati su testo | I modelli di messaggio WhatsApp sono formati di messaggio specifici con o senza parametri. |
Modelli di messaggio basati su supporti | Modelli di messaggi WhatsApp con parametri multimediali per i componenti di intestazione. |
Modelli di messaggio interattivi | I modelli di messaggio interattivi espandono il contenuto che è possibile inviare ai destinatari, includendo pulsanti interattivi usando l'oggetto componenti. Sono supportati sia call-to-action che risposta rapida. |
Modelli di messaggio basati sulla posizione | Modelli di messaggio WhatsApp con parametri di posizione in termini longitudine e latitudine per i componenti di intestazione. |
Configurazione comune
Seguire questa procedura per aggiungere i frammenti di codice necessari alla funzione Main del Program.cs
file.
- Creare e gestire il messaggio del modello WhatsApp.
- Autenticare il client.
- Impostare l'ID di registrazione del canale.
- Impostare l'elenco dei destinatari.
Creare e gestire il messaggio del modello WhatsApp
I modelli di messaggio WhatsApp sono formati di messaggi specifici che le aziende usano per inviare notifiche o messaggi di assistenza clienti a persone che hanno accodato esplicitamente alle notifiche. I messaggi possono includere promemoria per gli appuntamenti, informazioni sulla spedizione, risoluzione dei problemi o aggiornamenti dei pagamenti. Prima di iniziare a usare Advanced messaging SDK per inviare messaggi modello, l'utente deve creare modelli necessari nella piattaforma WhatsApp Business.
Per altre informazioni sui requisiti di WhatsApp per i modelli, vedi i riferimenti all'API WhatsApp Business Platform:
- Creare e gestire modelli.
- Visualizzare i componenti del modello.
- Inviare messaggi modello.
- Le aziende devono inoltre rispettare i requisiti di consenso esplicito prima di inviare messaggi agli utenti di WhatsApp.
Autenticare il client
Messages SDK usa per NotificationMessagesClient
inviare messaggi. Il NotificationMessagesClient
metodo esegue l'autenticazione usando il stringa di connessione acquisito dalla risorsa Servizi di comunicazione di Azure nella portale di Azure. Per altre informazioni sulle stringa di connessione, vedere access-your-connection-strings-and-service-endpoints.
Per semplicità, questa guida introduttiva usa una stringa di connessione per l'autenticazione. Negli ambienti di produzione è consigliabile usare entità servizio.
Ottenere la stringa di connessione dalla risorsa Servizi di comunicazione di Azure nel portale di Azure. A sinistra passare alla scheda Keys
. Copiare il campo Connection string
per la chiave primaria. La stringa di connessione è nel formato endpoint=https://{your Azure Communication Services resource name}.communication.azure.com/;accesskey={secret key}
.
Impostare la variabile di ambiente COMMUNICATION_SERVICES_CONNECTION_STRING
sul valore della stringa di connessione.
Aprire una finestra della console e immettere il comando seguente:
setx COMMUNICATION_SERVICES_CONNECTION_STRING "<your connection string>"
Dopo l'aggiunta della variabile di ambiente potrebbe essere necessario riavviare eventuali programmi in esecuzione che necessitano di leggere la variabile di ambiente, inclusa la finestra della console. Se ad esempio si usa Visual Studio come editor, riavviare Visual Studio prima di eseguire l'esempio.
Per altre informazioni su come impostare una variabile di ambiente per il sistema, seguire la procedura descritta in Archiviare la stringa di connessione in una variabile di ambiente.
Per creare un'istanza NotificationMessagesClient
, aggiungere il codice seguente al metodo Main
:
// Retrieve connection string from environment variable
string connectionString =
Environment.GetEnvironmentVariable("COMMUNICATION_SERVICES_CONNECTION_STRING");
// Instantiate the client
var notificationMessagesClient = new NotificationMessagesClient(connectionString);
Configurare l’ID di registrazione del canale
È stato creato il GUID dell'ID registrazione canale durante la registrazione del canale. Trovarlo nel portale nella scheda Canali della risorsa Servizi di comunicazione di Azure.
Assegnarlo a una variabile denominata channelRegistrationId.
var channelRegistrationId = new Guid("<your channel registration ID GUID>");
Configurare l’elenco dei destinatari
Devi fornire un numero di telefono attivo associato a un account WhatsApp. Questo account WhatsApp riceve il modello, il testo e i messaggi multimediali inviati in questa guida introduttiva.
Per questo esempio, è possibile usare il numero di telefono personale.
Il numero di telefono del destinatario non può essere il numero di telefono commerciale (ID mittente) associato alla registrazione del canale WhatsApp. L'ID mittente viene visualizzato come mittente del testo e dei messaggi multimediali inviati al destinatario.
Il numero di telefono deve includere il codice paese. Per altre informazioni sulla formattazione dei numeri di telefono, vedi la documentazione di WhatsApp per formati di numeri di telefono.
Nota
Nell'elenco dei destinatari è attualmente supportato un solo numero di telefono.
Creare l'elenco dei destinatari nel seguente modo:
var recipientList = new List<string> { "<to WhatsApp phone number>" };
Esempio:
// Example only
var recipientList = new List<string> { "+14255550199" };
Iniziare a inviare messaggi tra un'azienda e un utente di WhatsApp
Le conversazioni tra un account WhatsApp Business e un utente WhatsApp possono essere avviate in uno dei due modi seguenti:
- L'azienda invia un messaggio modello all'utente WhatsApp.
- L'utente WhatsApp invia qualsiasi messaggio al numero di ufficio.
Un'azienda non può avviare una conversazione interattiva. Un'azienda può inviare un messaggio interattivo solo dopo aver ricevuto un messaggio dall'utente. L'azienda può inviare messaggi interattivi solo all'utente durante la conversazione attiva. Una volta scaduta la finestra di conversazione di 24 ore, solo l'utente può riavviare la conversazione interattiva. Per altre informazioni sulle conversazioni, vedi la definizione in WhatsApp Business Platform.
Per avviare una conversazione interattiva dal tuo account WhatsApp personale, invia un messaggio al tuo numero di azienda (ID mittente).
Set up environment (Configurare l'ambiente)
Creazione di un progetto .NET
Per creare il progetto, seguire l'esercitazione in Creare un'applicazione console .NET usando Visual Studio.
Per compilare il codice, premere CTRL+F7.
Installare il pacchetto
Installare il pacchetto NuGet Azure.Communication.Messages nel progetto C#.
- Aprire Gestione pacchetti NuGet in
Project
>Manage NuGet Packages...
. - Cercare il pacchetto
Azure.Communication.Messages
. - Installa la versione più recente.
Configurare il framework dell'app
Aprire il file Program.cs
in un editor di testo.
Sostituire il contenuto del file Program.cs
con il codice seguente:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Azure;
using Azure.Communication.Messages;
namespace AdvancedMessagingQuickstart
{
class Program
{
public static async Task Main(string[] args)
{
Console.WriteLine("Azure Communication Services - Advanced Messages quickstart samples.");
// Quickstart code goes here
}
}
}
Per usare le funzionalità di messaggistica avanzata, aggiungere una using
direttiva per includere lo spazio dei Azure.Communication.Messages
nomi.
using Azure.Communication.Messages;
Esempi di codice
Seguire questa procedura per aggiungere frammenti di codice necessari alla funzione Main del Program.cs
file.
- Elencare i modelli di WhatsApp in portale di Azure.
- Invia messaggio modello senza parametri.
- Invia messaggio modello con parametri di testo nel corpo.
- Inviare un messaggio modello con il parametro multimediale nell'intestazione.
- Invia messaggio modello con la posizione nell'intestazione.
- Invia messaggio modello con pulsanti di risposta rapida.
- Invia messaggio modello con pulsanti di chiamata all'azione con collegamento dinamico.
- Invia messaggio modello con pulsanti di chiamata all'azione con collegamento statico.
Elencare i modelli di WhatsApp in portale di Azure
È possibile visualizzare i modelli nella portale di Azure passando alla risorsa >del Servizio di comunicazione di Azure Modelli di messaggistica>avanzata.
Selezionare un modello per visualizzare i dettagli.
Il content
campo dei dettagli del modello può includere associazioni di parametri. Le associazioni di parametri possono essere indicate come:
- Campo
format
con un valore,IMAGE
ad esempio . - Parentesi doppie che circondano un numero, ad esempio
{{1}}
. Il numero, indicizzato in corrispondenza di 1, indica l'ordine in cui devono essere specificati i valori di associazione per creare il modello di messaggio.
In alternativa, puoi visualizzare e modificare tutti i modelli di account WhatsApp Business nei modelli di messaggio strumenti> account WhatsApp Manager>.
Per elencare i modelli a livello di codice, è possibile recuperare tutti i modelli per l'ID canale come indicato di seguito:
MessageTemplateClient messageTemplateClient = new MessageTemplateClient(connectionString);
Pageable<MessageTemplateItem> templates = messageTemplateClient.GetTemplates(channelRegistrationId);
Inviare un messaggio modello senza parametri
Se il modello non richiede parametri, non è necessario specificare valori o associazioni durante la creazione di MessageTemplate
.
var messageTemplate = new MessageTemplate(templateName, templateLanguage);
Esempio
non sample_template
accetta parametri.
Assemblare l'oggetto MessageTemplate
facendo riferimento al nome e alla lingua del modello di destinazione.
string templateName = "sample_template";
string templateLanguage = "en_us";
var sampleTemplate = new MessageTemplate(templateName, templateLanguage);
Inviare un messaggio modello con parametri di testo nel corpo
Usare MessageTemplateText
per definire i parametri nel corpo indicato con parentesi quadre doppie che circondano un numero, ad esempio {{1}}
. Il numero, indice avviato da 1, indica l'ordine in cui devono essere specificati i valori di associazione per creare il modello di messaggio. L'inclusione di parametri non presenti nel modello non è valida.
Definizione del modello con due parametri:
{
"type": "BODY",
"text": "Message with two parameters: {{1}} and {{2}}"
}
Esempi
sample_shipping_confirmation
sagoma:
In questo esempio il corpo del modello ha un parametro:
{
"type": "BODY",
"text": "Your package has been shipped. It will be delivered in {{1}} business days."
},
I parametri vengono definiti con i MessageTemplateValue
valori e MessageTemplateWhatsAppBindings
le associazioni. Usare i valori e le associazioni per assemblare .MessageTemplate
string templateName = "sample_shipping_confirmation";
string templateLanguage = "en_us";
var threeDays = new MessageTemplateText("threeDays", "3");
WhatsAppMessageTemplateBindings bindings = new();
bindings.Body.Add(new(threeDays.Name));
MessageTemplate shippingConfirmationTemplate = new(templateName, templateLanguage);
shippingConfirmationTemplate.Bindings = bindings;
shippingConfirmationTemplate.Values.Add(threeDays);
Inviare un messaggio modello con il parametro multimediale nell'intestazione
Usare MessageTemplateImage
, MessageTemplateVideo
o MessageTemplateDocument
per definire il parametro multimediale in un'intestazione.
Definizione del modello con il parametro image media nell'intestazione:
{
"type": "HEADER",
"format": "IMAGE"
},
Può format
avere diversi tipi di supporti supportati da WhatsApp. In .NET SDK ogni tipo di supporto usa un tipo MessageTemplateValue corrispondente.
Formato | Tipo MessageTemplateValue | Tipo di file |
---|---|---|
IMAGE |
MessageTemplateImage |
png, jpg |
VIDEO |
MessageTemplateVideo |
mp4 |
DOCUMENT |
MessageTemplateDocument |
Per altre informazioni sui tipi di supporti supportati e sui limiti di dimensioni, vedi la documentazione di WhatsApp per i supporti di messaggio.
Assembly del modello di messaggio per i supporti di immagine:
var url = new Uri("< Your media URL >");
var media = new MessageTemplateImage("image", url);
WhatsAppMessageTemplateBindings bindings = new();
bindings.Header.Add(new(media.Name));
var messageTemplate = new MessageTemplate(templateName, templateLanguage);
template.Bindings = bindings;
template.Values.Add(media);
Esempi
sample_movie_ticket_confirmation
sagoma:
In questo esempio l'intestazione del modello richiede un'immagine:
{
"type": "HEADER",
"format": "IMAGE"
},
Il corpo del modello richiede quattro parametri di testo:
{
"type": "BODY",
"text": "Your ticket for *{{1}}*\n*Time* - {{2}}\n*Venue* - {{3}}\n*Seats* - {{4}}"
},
Creare una MessageTemplateImage
e quattro MessageTemplateText
variabili. Assemblare quindi l'elenco di MessageTemplateValue
e MessageTemplateWhatsAppBindings
specificando i parametri nell'ordine in cui i parametri vengono visualizzati nel contenuto del modello.
string templateName = "sample_movie_ticket_confirmation";
string templateLanguage = "en_us";
var imageUrl = new Uri("https://aka.ms/acsicon1");
var image = new MessageTemplateImage("image", imageUrl);
var title = new MessageTemplateText("title", "Contoso");
var time = new MessageTemplateText("time", "July 1st, 2023 12:30PM");
var venue = new MessageTemplateText("venue", "Southridge Video");
var seats = new MessageTemplateText("seats", "Seat 1A");
WhatsAppMessageTemplateBindings bindings = new();
bindings.Header.Add(new(image.Name));
bindings.Body.Add(new(title.Name));
bindings.Body.Add(new(time.Name));
bindings.Body.Add(new(venue.Name));
bindings.Body.Add(new(seats.Name));
MessageTemplate movieTicketConfirmationTemplate = new(templateName, templateLanguage);
movieTicketConfirmationTemplate.Values.Add(image);
movieTicketConfirmationTemplate.Values.Add(title);
movieTicketConfirmationTemplate.Values.Add(time);
movieTicketConfirmationTemplate.Values.Add(venue);
movieTicketConfirmationTemplate.Values.Add(seats);
movieTicketConfirmationTemplate.Bindings = bindings;
Altri esempi
- VIDEO: Usare un modello di esempio sample_happy_hour_announcement
- DOCUMENTO: Usare l'sample_flight_confirmation di modello di esempio
Inviare un messaggio modello con la posizione nell'intestazione
Usare MessageTemplateLocation
per definire il parametro location in un'intestazione.
Definizione del modello per il componente di intestazione che richiede la posizione come:
{
"type": "header",
"parameters": [
{
"type": "location",
"location": {
"latitude": "<LATITUDE>",
"longitude": "<LONGITUDE>",
"name": "<NAME>",
"address": "<ADDRESS>"
}
}
]
}
può format
richiedere tipi di supporti diversi. In .NET SDK ogni tipo di supporto usa un tipo MessageTemplateValue corrispondente.
Proprietà | Descrizione | Tipo |
---|---|---|
ADDRESS |
Indirizzo visualizzato dopo il NAME valore, sotto la mappa generica nella parte superiore del messaggio. |
string |
LATITUDE |
Latitudine della posizione. | double |
LONGITUDE |
Longitudine della posizione. | double |
LOCATIONNAME |
Testo visualizzato immediatamente sotto la mappa generica nella parte superiore del messaggio. | string |
Per altre informazioni sui modelli basati sulla posizione, vedi la documentazione di WhatsApp per i supporti di messaggio.
Esempio
sample_movie_location
sagoma:
Assembly modello di messaggio basato sul percorso:
var location = new MessageTemplateLocation("location");
location.LocationName = "Pablo Morales";
location.Address = "1 Hacker Way, Menlo Park, CA 94025";
location.Position = new Azure.Core.GeoJson.GeoPosition(longitude: 122.148981, latitude: 37.483307);
WhatsAppMessageTemplateBindings location_bindings = new();
location_bindings.Header.Add(new(location.Name));
var messageTemplateWithLocation = new MessageTemplate(templateNameWithLocation, templateLanguage);
messageTemplateWithLocation.Values.Add(location);
messageTemplateWithLocation.Bindings = location_bindings;
Inviare un messaggio modello con pulsanti di risposta rapida
Usare MessageTemplateQuickAction
per definire il payload per i pulsanti di risposta rapida e MessageTemplateQuickAction
gli oggetti con i tre attributi seguenti.
Proprietà | Descrizione | Type |
---|---|---|
Nome | Oggetto name utilizzato per cercare il valore in MessageTemplateWhatsAppBindings . |
string |
Testo | Azione rapida text facoltativa. |
string |
Payload | L'oggetto payload assegnato a un pulsante disponibile in una risposta di messaggio se l'utente seleziona il pulsante. |
string |
Definizione del modello con pulsanti di risposta rapida:
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
L'ordine in cui i pulsanti vengono visualizzati nella definizione del modello deve corrispondere all'ordine in cui i pulsanti vengono definiti durante la creazione dei binding con MessageTemplateWhatsAppBindings
.
Per altre informazioni sul payload nelle risposte di risposta rapida dell'utente, vedi la documentazione di WhatsApp per il callback ricevuto da un pulsante di risposta rapida.
Esempio
sample_issue_resolution
sagoma:
Il corpo del modello richiede un parametro di testo:
{
"type": "BODY",
"text": "Hi {{1}}, were we able to solve the issue that you were facing?"
},
Il modello include due pulsanti di risposta precompilato e Yes
No
.
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
Creare una MessageTemplateText
e due MessageTemplateQuickAction
variabili. Assemblare quindi l'elenco di MessageTemplateValue
e MessageTemplateWhatsAppBindings
specificando i parametri nell'ordine in cui i parametri vengono visualizzati nel contenuto del modello. L'ordine è importante anche quando si definiscono i pulsanti dei binding.
string templateName = "sample_issue_resolution";
string templateLanguage = "en_us";
var name = new MessageTemplateText(name: "name", text: "Kat");
var yes = new MessageTemplateQuickAction(name: "Yes"){ Payload = "Kat said yes" };
var no = new MessageTemplateQuickAction(name: "No") { Payload = "Kat said no" };
WhatsAppMessageTemplateBindings bindings = new();
bindings.Body.Add(new(name.Name));
bindings.Buttons.Add(new(WhatsAppMessageButtonSubType.QuickReply.ToString(), yes.Name));
bindings.Buttons.Add(new(WhatsAppMessageButtonSubType.QuickReply.ToString(), no.Name));
MessageTemplate issueResolutionTemplate = new(templateName, templateLanguage);
issueResolutionTemplate.Values.Add(name);
issueResolutionTemplate.Values.Add(yes);
issueResolutionTemplate.Values.Add(no);
issueResolutionTemplate.Bindings = bindings;
Inviare un messaggio modello con pulsanti di chiamata all'azione con collegamento dinamico
Usare MessageTemplateQuickAction
per definire il suffisso URL per i pulsanti di chiamata all'azione e MessageTemplateQuickAction
l'oggetto hanno i due attributi seguenti.
Proprietà | Descrizione | Type |
---|---|---|
Nome | Viene name utilizzato per cercare il valore in MessageTemplateWhatsAppBindings . |
string |
Testo | Oggetto text aggiunto all'URL. |
string |
Pulsanti di definizione del modello:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
L'ordine in cui i pulsanti vengono visualizzati nella definizione del modello deve corrispondere all'ordine in cui i pulsanti vengono definiti durante la creazione dei binding con MessageTemplateWhatsAppBindings
.
Esempio
sample_purchase_feedback
sagoma:
Questo modello di esempio aggiunge un pulsante con un collegamento URL dinamico al messaggio. Usa anche un'immagine nell'intestazione e un parametro di testo nel corpo.
In questo esempio l'intestazione del modello richiede un'immagine:
{
"type": "HEADER",
"format": "IMAGE"
},
Il corpo del modello richiede un parametro di testo:
{
"type": "BODY",
"text": "Thank you for purchasing {{1}}! We value your feedback and would like to learn more about your experience."
},
Il modello include un pulsante URL dinamico con un parametro:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Creare un MessageTemplateImage
oggetto , uno MessageTemplateText
e una MessageTemplateQuickAction
variabile. Assemblare quindi l'elenco di MessageTemplateValue
e MessageTemplateWhatsAppBindings
specificando i parametri nell'ordine in cui i parametri vengono visualizzati nel contenuto del modello. L'ordine è importante anche quando si definiscono i pulsanti dei binding.
string templateName = "sample_purchase_feedback";
string templateLanguage = "en_us";
var imageUrl = new Uri("https://aka.ms/acsicon1");
var image = new MessageTemplateImage(name: "image", uri: imageUrl);
var product = new MessageTemplateText(name: "product", text: "coffee");
var urlSuffix = new MessageTemplateQuickAction(name: "text") { Text = "survey-code" };
WhatsAppMessageTemplateBindings bindings = new();
bindings.Header.Add(new(image.Name));
bindings.Body.Add(new(product.Name));
bindings.Buttons.Add(new(WhatsAppMessageButtonSubType.Url.ToString(), urlSuffix.Name));
MessageTemplate purchaseFeedbackTemplate = new("sample_purchase_feedback", "en_us");
purchaseFeedbackTemplate.Values.Add(image);
purchaseFeedbackTemplate.Values.Add(product);
purchaseFeedbackTemplate.Values.Add(urlSuffix);
purchaseFeedbackTemplate.Bindings = bindings;
Inviare un messaggio modello con pulsanti di chiamata all'azione con collegamento statico
Per i collegamenti statici, non è necessario includere MessageTemplateQuickAction
il modello perché il modello WhatsApp ha un collegamento statico CallToAction
senza input richiesto dall'utente.
Pulsanti di definizione del modello:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Esempio
purchase_feedback_static
sagoma:
Questo modello di esempio aggiunge un pulsante con un collegamento URL statico al messaggio. Usa anche un'immagine nell'intestazione e un parametro di testo nel corpo.
In questo esempio l'intestazione del modello richiede un'immagine:
{
"type": "HEADER",
"format": "IMAGE"
},
Il corpo del modello richiede un parametro di testo:
{
"type": "BODY",
"text": "Hello {{1}}, \nHope you are great day!.\n Please click on given link to explore about our program.."
},
Il modello include un pulsante URL dinamico con un parametro:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/"
}
]
}
Creare un MessageTemplateImage
oggetto , uno MessageTemplateText
. Assemblare quindi l'elenco di MessageTemplateValue
e MessageTemplateWhatsAppBindings
specificando i parametri nell'ordine in cui i parametri vengono visualizzati nel contenuto del modello. L'ordine è importante anche quando si definiscono i pulsanti dei binding.
// Send sample template sample_template
string templateNameWithcta = "purchase_feedback_static";
var bodyParam1 = new MessageTemplateText(name: "customer", text: "Joe");
var image = new MessageTemplateImage("image", new Uri("https://aka.ms/acsicon1"));
WhatsAppMessageTemplateBindings cta_bindings = new();
cta_bindings.Body.Add(new(bodyParam1.Name));
cta_bindings.Header.Add(new(image.Name));
var messageTemplateWithcta = new MessageTemplate(templateNameWithcta, templateLanguage);
messageTemplateWithcta.Values.Add(bodyParam1);
messageTemplateWithcta.Values.Add(image);
messageTemplateWithcta.Bindings = cta_bindings;
TemplateNotificationContent templateContent4 =
new TemplateNotificationContent(channelRegistrationId, recipientList, messageTemplateWithcta);
Response<SendMessageResult> sendTemplateMessageResult4 =
notificationMessagesClient.Send(templateContent4);
Eseguire il codice
Compilare ed eseguire il programma.
Per inviare un SMS o un messaggio multimediale a un utente WhatsApp, deve esserci una conversazione attiva tra l'account WhatsApp Business e l'utente WhatsApp.
Se non si dispone di una conversazione attiva, ai fini di questo esempio è possibile aggiungere un'attesa tra l'invio del messaggio modello e l'invio del messaggio di testo. Questo ritardo aggiunto concede abbastanza tempo per rispondere all'azienda sull’account WhatsApp dell'utente. Per riferimento, l'esempio specificato richiede l'input manuale dell'utente prima di inviare il messaggio successivo. Per altre informazioni, vedere l'esempio completo in Codice di esempio. Se ha esito positivo, ricevi tre messaggi sull'account WhatsApp dell'utente.
Compilare ed eseguire il programma.
dotnet build
dotnet run
Esempio di codice completo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using Azure;
using Azure.Communication.Messages;
using Azure.Communication.Messages.Models.Channels;
namespace SendTemplateMessages
{
class Program
{
public static async Task Main(string[] args)
{
Console.WriteLine("Azure Communication Services - Send WhatsApp Template Messages\n");
string connectionString = Environment.GetEnvironmentVariable("COMMUNICATION_SERVICES_CONNECTION_STRING");
NotificationMessagesClient notificationMessagesClient = new NotificationMessagesClient(connectionString);
var channelRegistrationId = new Guid("<Your Channel ID>");
var recipientList = new List<string> { "<Recipient's WhatsApp Phone Number>" };
// List out available templates for a channel ID
MessageTemplateClient messageTemplateClient = new MessageTemplateClient(connectionString);
Pageable<MessageTemplateItem> templates = messageTemplateClient.GetTemplates(channelRegistrationId);
foreach (WhatsAppMessageTemplateItem template in templates)
{
Console.WriteLine("Name: {0}\tLanguage: {1}\tStatus: {2}\tContent: {3}\n",
template.Name, template.Language, template.Status, template.Content);
}
// Send Sample Template sample_template
MessageTemplate sampleTemplate = AssembleSampleTemplate();
var sampleTemplateContent = new TemplateNotificationContent(channelRegistrationId, recipientList, sampleTemplate);
var result = await notificationMessagesClient.SendAsync(sampleTemplateContent);
PrintResponse(result);
// Send sample template sample_shipping_confirmation
MessageTemplate shippingConfirmationTemplate = AssembleSampleShippingConfirmation();
var shippingConfirmationTemplateContent = new TemplateNotificationContent(channelRegistrationId, recipientList, shippingConfirmationTemplate);
result = await notificationMessagesClient.SendAsync(shippingConfirmationTemplateContent);
PrintResponse(result);
// Send sample template sample_movie_ticket_confirmation
MessageTemplate movieTicketConfirmationTemplate = AssembleSampleMovieTicketConfirmation();
var movieTicketConfirmationTemplateContent = new TemplateNotificationContent(channelRegistrationId, recipientList, movieTicketConfirmationTemplate);
result = await notificationMessagesClient.SendAsync(movieTicketConfirmationTemplateContent);
PrintResponse(result);
// Send sample template sample_happy_hour_announcement
MessageTemplate happyHourTemplate = AssembleSampleHappyHourAnnouncement();
var happyHourTemplateContent = new TemplateNotificationContent(channelRegistrationId, recipientList, happyHourTemplate);
result = await notificationMessagesClient.SendAsync(happyHourTemplateContent);
PrintResponse(result);
// Send sample template sample_flight_confirmation
MessageTemplate flightConfirmationTemplate = AssembleSampleFlightConfirmation();
var flightConfirmationTemplateContent = new TemplateNotificationContent(channelRegistrationId, recipientList, flightConfirmationTemplate);
result = await notificationMessagesClient.SendAsync(flightConfirmationTemplateContent);
PrintResponse(result);
// Send sample template sample_issue_resolution
MessageTemplate issueResolutionTemplate = AssembleSampleIssueResolution();
var issueResolutionTemplateContent = new TemplateNotificationContent(channelRegistrationId, recipientList, issueResolutionTemplate);
result = await notificationMessagesClient.SendAsync(issueResolutionTemplateContent);
PrintResponse(result);
// Send sample template sample_purchase_feedback
MessageTemplate purchaseFeedbackTemplate = AssembleSamplePurchaseFeedback();
var purchaseFeedbackTemplateContent = new TemplateNotificationContent(channelRegistrationId, recipientList, purchaseFeedbackTemplate);
result = await notificationMessagesClient.SendAsync(purchaseFeedbackTemplateContent);
PrintResponse(result);
Console.WriteLine("Press any key to exit.");
Console.ReadKey(true);
}
public static MessageTemplate AssembleSampleTemplate()
{
string templateName = "sample_template";
string templateLanguage = "en_us";
return new MessageTemplate(templateName, templateLanguage);
}
public static MessageTemplate AssembleSampleShippingConfirmation()
{
string templateName = "sample_shipping_confirmation";
string templateLanguage = "en_us";
var threeDays = new MessageTemplateText("threeDays", "3");
WhatsAppMessageTemplateBindings bindings = new();
bindings.Body.Add(new(threeDays.Name));
MessageTemplate shippingConfirmationTemplate = new(templateName, templateLanguage);
shippingConfirmationTemplate.Bindings = bindings;
shippingConfirmationTemplate.Values.Add(threeDays);
return shippingConfirmationTemplate;
}
public static MessageTemplate AssembleSampleMovieTicketConfirmation()
{
string templateName = "sample_movie_ticket_confirmation";
string templateLanguage = "en_us";
var imageUrl = new Uri("https://aka.ms/acsicon1");
var image = new MessageTemplateImage("image", imageUrl);
var title = new MessageTemplateText("title", "Contoso");
var time = new MessageTemplateText("time", "July 1st, 2023 12:30PM");
var venue = new MessageTemplateText("venue", "Southridge Video");
var seats = new MessageTemplateText("seats", "Seat 1A");
WhatsAppMessageTemplateBindings bindings = new();
bindings.Header.Add(new(image.Name));
bindings.Body.Add(new(title.Name));
bindings.Body.Add(new(time.Name));
bindings.Body.Add(new(venue.Name));
bindings.Body.Add(new(seats.Name));
MessageTemplate movieTicketConfirmationTemplate = new(templateName, templateLanguage);
movieTicketConfirmationTemplate.Values.Add(image);
movieTicketConfirmationTemplate.Values.Add(title);
movieTicketConfirmationTemplate.Values.Add(time);
movieTicketConfirmationTemplate.Values.Add(venue);
movieTicketConfirmationTemplate.Values.Add(seats);
movieTicketConfirmationTemplate.Bindings = bindings;
return movieTicketConfirmationTemplate;
}
public static MessageTemplate AssembleSampleHappyHourAnnouncement()
{
string templateName = "sample_happy_hour_announcement";
string templateLanguage = "en_us";
var videoUrl = new Uri("< Your .mp4 Video URL >");
var video = new MessageTemplateVideo("video", videoUrl);
var venue = new MessageTemplateText("venue", "Fourth Coffee");
var time = new MessageTemplateText("time", "Today 2-4PM");
WhatsAppMessageTemplateBindings bindings = new();
bindings.Header.Add(new(video.Name));
bindings.Body.Add(new(venue.Name));
bindings.Body.Add(new(time.Name));
MessageTemplate happyHourAnnouncementTemplate = new(templateName, templateLanguage);
happyHourAnnouncementTemplate.Values.Add(venue);
happyHourAnnouncementTemplate.Values.Add(time);
happyHourAnnouncementTemplate.Values.Add(video);
happyHourAnnouncementTemplate.Bindings = bindings;
return happyHourAnnouncementTemplate;
}
public static MessageTemplate AssembleSampleFlightConfirmation()
{
string templateName = "sample_flight_confirmation";
string templateLanguage = "en_us";
var documentUrl = new Uri("< Your .pdf document URL >");
var document = new MessageTemplateDocument("document", documentUrl);
var firstName = new MessageTemplateText("firstName", "Kat");
var lastName = new MessageTemplateText("lastName", "Larssen");
var date = new MessageTemplateText("date", "July 1st, 2023");
WhatsAppMessageTemplateBindings bindings = new();
bindings.Header.Add(new(document.Name));
bindings.Body.Add(new(firstName.Name));
bindings.Body.Add(new(lastName.Name));
bindings.Body.Add(new(date.Name));
MessageTemplate flightConfirmationTemplate = new(templateName, templateLanguage);
flightConfirmationTemplate.Values.Add(document);
flightConfirmationTemplate.Values.Add(firstName);
flightConfirmationTemplate.Values.Add(lastName);
flightConfirmationTemplate.Values.Add(date);
flightConfirmationTemplate.Bindings = bindings;
return flightConfirmationTemplate;
}
public static MessageTemplate AssembleSampleIssueResolution()
{
string templateName = "sample_issue_resolution";
string templateLanguage = "en_us";
var name = new MessageTemplateText(name: "name", text: "Kat");
var yes = new MessageTemplateQuickAction(name: "Yes"){ Payload = "Kat said yes" };
var no = new MessageTemplateQuickAction(name: "No") { Payload = "Kat said no" };
WhatsAppMessageTemplateBindings bindings = new();
bindings.Body.Add(new(name.Name));
bindings.Buttons.Add(new(WhatsAppMessageButtonSubType.QuickReply.ToString(), yes.Name));
bindings.Buttons.Add(new(WhatsAppMessageButtonSubType.QuickReply.ToString(), no.Name));
MessageTemplate issueResolutionTemplate = new(templateName, templateLanguage);
issueResolutionTemplate.Values.Add(name);
issueResolutionTemplate.Values.Add(yes);
issueResolutionTemplate.Values.Add(no);
issueResolutionTemplate.Bindings = bindings;
return issueResolutionTemplate;
}
public static MessageTemplate AssembleSamplePurchaseFeedback()
{
string templateName = "sample_purchase_feedback";
string templateLanguage = "en_us";
var imageUrl = new Uri("https://aka.ms/acsicon1");
var image = new MessageTemplateImage(name: "image", uri: imageUrl);
var product = new MessageTemplateText(name: "product", text: "coffee");
var urlSuffix = new MessageTemplateQuickAction(name: "text") { Text = "survey-code"};
WhatsAppMessageTemplateBindings bindings = new();
bindings.Header.Add(new(image.Name));
bindings.Body.Add(new(product.Name));
bindings.Buttons.Add(new(WhatsAppMessageButtonSubType.Url.ToString(), urlSuffix.Name));
MessageTemplate purchaseFeedbackTemplate = new(templateName, templateLanguage);
purchaseFeedbackTemplate.Values.Add(image);
purchaseFeedbackTemplate.Values.Add(product);
purchaseFeedbackTemplate.Values.Add(urlSuffix);
purchaseFeedbackTemplate.Bindings = bindings;
return purchaseFeedbackTemplate;
}
public static void PrintResponse(Response<SendMessageResult> response)
{
Console.WriteLine($"Response: {response.GetRawResponse().Status} " +
$"({response.GetRawResponse().ReasonPhrase})");
Console.WriteLine($"Date: " +
$"{response.GetRawResponse().Headers.First(header => header.Name == "Date").Value}");
Console.WriteLine($"ClientRequestId: {response.GetRawResponse().ClientRequestId}");
Console.WriteLine($"MS-CV: " +
$"{response.GetRawResponse().Headers.First(header => header.Name == "MS-CV").Value}");
foreach (var receipts in response.Value.Receipts)
{
Console.WriteLine($"MessageId: {receipts.MessageId}");
}
Console.WriteLine($"\n");
}
}
}
Altri esempi
Questi esempi usano modelli di esempio disponibili per gli account WhatsApp Business creati tramite il portale di Azure iscrizione incorporata.
Usare sample_happy_hour_announcement modello di esempio
Questo modello di esempio usa un video nell'intestazione e due parametri di testo nel corpo.
L'intestazione del modello richiede un video:
{
"type": "HEADER",
"format": "VIDEO"
},
Il video deve essere un URL per ospitare il video mp4.
Per altre informazioni sui tipi di supporti supportati e sui limiti di dimensioni, vedi la documentazione di WhatsApp per i supporti di messaggio.
Il corpo del modello richiede due parametri di testo:
{
"type": "BODY",
"text": "Happy hour is here! 🍺😀🍸\nPlease be merry and enjoy the day. 🎉\nVenue: {{1}}\nTime: {{2}}"
},
Creare una MessageTemplateVideo
e due MessageTemplateText
variabili. Assemblare quindi l'elenco di MessageTemplateValue
e MessageTemplateWhatsAppBindings
specificando i parametri nell'ordine in cui i parametri vengono visualizzati nel contenuto del modello.
string templateName = "sample_happy_hour_announcement";
string templateLanguage = "en_us";
var videoUrl = new Uri("< Your .mp4 Video URL >");
var video = new MessageTemplateVideo("video", videoUrl);
var venue = new MessageTemplateText("venue", "Fourth Coffee");
var time = new MessageTemplateText("time", "Today 2-4PM");
WhatsAppMessageTemplateBindings bindings = new();
bindings.Header.Add(new(video.Name));
bindings.Body.Add(new(venue.Name));
bindings.Body.Add(new(time.Name));
MessageTemplate happyHourAnnouncementTemplate = new(templateName, templateLanguage);
happyHourAnnouncementTemplate.Values.Add(venue);
happyHourAnnouncementTemplate.Values.Add(time);
happyHourAnnouncementTemplate.Values.Add(video);
happyHourAnnouncementTemplate.Bindings = bindings;
Usare un modello di esempio sample_flight_confirmation
Questo modello di esempio usa un documento nell'intestazione e tre parametri di testo nel corpo.
L'intestazione del modello richiede un documento:
{
"type": "HEADER",
"format": "DOCUMENT"
},
Il documento deve essere un URL per il documento PDF ospitato.
Per altre informazioni sui tipi di supporti supportati e sui limiti di dimensioni, vedi la documentazione di WhatsApp per i supporti di messaggio.
Il corpo del modello richiede tre parametri di testo:
{
"type": "BODY",
"text": "This is your flight confirmation for {{1}}-{{2}} on {{3}}."
},
Creare una MessageTemplateDocument
e tre MessageTemplateText
variabili. Assemblare quindi l'elenco di MessageTemplateValue
e MessageTemplateWhatsAppBindings
specificando i parametri nell'ordine in cui i parametri vengono visualizzati nel contenuto del modello.
string templateName = "sample_flight_confirmation";
string templateLanguage = "en_us";
var documentUrl = new Uri("< Your .pdf document URL >");
var document = new MessageTemplateDocument("document", documentUrl);
var firstName = new MessageTemplateText("firstName", "Kat");
var lastName = new MessageTemplateText("lastName", "Larssen");
var date = new MessageTemplateText("date", "July 1st, 2023");
WhatsAppMessageTemplateBindings bindings = new();
bindings.Header.Add(new(document.Name));
bindings.Body.Add(new(firstName.Name));
bindings.Body.Add(new(lastName.Name));
bindings.Body.Add(new(date.Name));
MessageTemplate flightConfirmationTemplate = new(templateName, templateLanguage);
flightConfirmationTemplate.Values.Add(document);
flightConfirmationTemplate.Values.Add(firstName);
flightConfirmationTemplate.Values.Add(lastName);
flightConfirmationTemplate.Values.Add(date);
flightConfirmationTemplate.Bindings = bindings;
Prerequisiti
- Registrare l'account WhatsApp Business con la risorsa Servizi di comunicazione di Azure.
- Creare un messaggio di modello WhatsApp.
- Numero di telefono WhatsApp attivo per ricevere messaggi.
Modello a oggetti
Le classi e le interfacce seguenti gestiscono alcune delle principali funzionalità di Messages SDK per Java Servizi di comunicazione di Azure.
Nome della classe | Descrizione |
---|---|
NotificationMessagesClient |
Si connette alla risorsa Servizi di comunicazione di Azure. Invia i messaggi. |
MessageTemplate |
Definisce il modello usato e il contenuto delle proprietà del modello per il messaggio. |
TemplateNotificationContent |
Definisce il "chi" e il "what" del messaggio del modello che si intende inviare. |
Nota
Per altre informazioni, vedere Le informazioni di riferimento su Azure SDK per Java sono disponibili nel pacchetto com.azure.communication.messages.
Tipi di modello WhatsApp supportati
Tipo di modello | Descrizione |
---|---|
Modelli di messaggio basati su testo | I modelli di messaggio WhatsApp sono formati di messaggio specifici con o senza parametri. |
Modelli di messaggio basati su supporti | Modelli di messaggi WhatsApp con parametri multimediali per i componenti di intestazione. |
Modelli di messaggio interattivi | I modelli di messaggio interattivi espandono il contenuto che è possibile inviare ai destinatari, includendo pulsanti interattivi usando l'oggetto componenti. Sono supportati sia call-to-action che risposta rapida. |
Modelli di messaggio basati sulla posizione | Modelli di messaggio WhatsApp con parametri di posizione in termini longitudine e latitudine per i componenti di intestazione. |
Configurazione comune
Seguire questa procedura per aggiungere i frammenti di codice necessari alla funzione principale del App.java
file.
- Creare e gestire il messaggio del modello WhatsApp.
- Autenticare il client.
- Impostare l'ID di registrazione del canale.
- Impostare l'elenco dei destinatari.
Creare e gestire il messaggio del modello WhatsApp
I modelli di messaggio WhatsApp sono formati di messaggi specifici che le aziende usano per inviare notifiche o messaggi di assistenza clienti a persone che hanno accodato esplicitamente alle notifiche. I messaggi possono includere promemoria per gli appuntamenti, informazioni sulla spedizione, risoluzione dei problemi o aggiornamenti dei pagamenti. Prima di iniziare a usare Advanced messaging SDK per inviare messaggi modello, l'utente deve creare modelli necessari nella piattaforma WhatsApp Business.
Per altre informazioni sui requisiti di WhatsApp per i modelli, vedi i riferimenti all'API WhatsApp Business Platform:
- Creare e gestire modelli.
- Visualizzare i componenti del modello.
- Inviare messaggi modello.
- Le aziende devono inoltre rispettare i requisiti di consenso esplicito prima di inviare messaggi agli utenti di WhatsApp.
Iniziare a inviare messaggi tra un'azienda e un utente di WhatsApp
Le conversazioni tra un account WhatsApp Business e un utente WhatsApp possono essere avviate in uno dei due modi seguenti:
- L'azienda invia un messaggio modello all'utente WhatsApp.
- L'utente WhatsApp invia qualsiasi messaggio al numero di ufficio.
Indipendentemente dalla modalità di avvio della conversazione, un'azienda può inviare messaggi modello solo fino a quando l'utente non invia un messaggio all'azienda. Solo dopo che l'utente invia un messaggio all'azienda, l'azienda può inviare sms o messaggi multimediali all'utente durante la conversazione attiva. Una volta scaduta la finestra di conversazione di 24 ore, è necessario reinizializzare la conversazione. Per altre informazioni sulle conversazioni, vedi la definizione all'indirizzo Piattaforma WhatsApp Business.
Autenticare il client
Sono disponibili alcune opzioni diverse per l'autenticazione di un client di Messaggi:
Per autenticare un client, creare un'istanza di NotificationMessagesClient
o MessageTemplateClient
con la stringa di connessione. Inoltre, è possibile inizializzare il client con qualsiasi client HTTP personalizzato che implementi l'interfaccia com.azure.core.http.HttpClient
.
Per semplicità, questa guida introduttiva usa una stringa di connessione per l'autenticazione. Negli ambienti di produzione è consigliabile usare entità servizio.
Ottenere la stringa di connessione dalla risorsa Servizi di comunicazione di Azure nel portale di Azure. A sinistra passare alla scheda Keys
. Copiare il campo Connection string
per il Primary key
. La stringa di connessione è nel formato endpoint=https://{your Azure Communication Services resource name}.communication.azure.com/;accesskey={secret key}
.
Impostare la variabile di ambiente COMMUNICATION_SERVICES_CONNECTION_STRING
sul valore della stringa di connessione.
Aprire una finestra della console e immettere il comando seguente:
setx COMMUNICATION_SERVICES_CONNECTION_STRING "<your connection string>"
Per altre informazioni su come impostare una variabile di ambiente per il sistema, seguire la procedura descritta in Archiviare la stringa di connessione in una variabile di ambiente.
Per creare un'istanza di NotificationMessagesClient, aggiungere il codice seguente al metodo main
:
// You can get your connection string from your resource in the Azure portal.
String connectionString = System.getenv("COMMUNICATION_SERVICES_CONNECTION_STRING");
NotificationMessagesClient notificationClient = new NotificationMessagesClientBuilder()
.connectionString(connectionString)
.buildClient();
Configurare l’ID di registrazione del canale
Il GUID dell'ID di registrazione del canale è stato creato durante la registrazione del canale. È possibile cercarlo nel portale nella scheda Canali della risorsa di Servizi di comunicazione di Azure.
Assegnarlo a una variabile denominata channelRegistrationId.
String channelRegistrationId = "<your channel registration id GUID>";
Configurare l’elenco dei destinatari
È necessario fornire un numero di telefono reale che ha un account WhatsApp associato. Questo account WhatsApp riceve il testo e i messaggi multimediali inviati in questa guida introduttiva. Per questa guida introduttiva, questo numero di telefono potrebbe essere il numero di telefono personale.
Il numero di telefono del destinatario non può essere il numero di telefono commerciale (ID mittente) associato alla registrazione del canale WhatsApp. L'ID mittente viene visualizzato come mittente del testo e dei messaggi multimediali inviati al destinatario.
Il numero di telefono deve includere il prefisso internazionale. Per altre informazioni sulla formattazione dei numeri di telefono, vedi la documentazione di WhatsApp sui Formati di numeri di telefono.
Nota
Nell'elenco dei destinatari è attualmente supportato un solo numero di telefono.
Creare l'elenco dei destinatari nel seguente modo:
List<String> recipientList = new ArrayList<>();
recipientList.add("<to WhatsApp phone number>");
Esempio:
// Example only
List<String> recipientList = new ArrayList<>();
recipientList.add("+14255550199");
Set up environment (Configurare l'ambiente)
Per configurare un ambiente per l'invio di messaggi, completare la procedura descritta nelle sezioni seguenti.
Prerequisito
- Account WhatsApp Business registrato con la risorsa Servizi di comunicazione di Azure.
- Numero di telefono WhatsApp attivo per ricevere messaggi.
- Java Development Kit (JDK), versione 8 o successiva.
- Apache Maven.
Creare una nuova applicazione Java
Aprire un terminale o una finestra di comando e passare alla directory in cui si vuole creare l'applicazione Java. Eseguire il comando seguente per generare il progetto Java dal maven-archetype-quickstart
modello.
mvn archetype:generate -DgroupId="com.communication.quickstart" -DartifactId="communication-quickstart" -DarchetypeArtifactId="maven-archetype-quickstart" -DarchetypeVersion="1.4" -DinteractiveMode="false"
L'obiettivo generate
crea una directory con lo stesso nome del valore artifactId
. In questa directory la src/main/java
directory contiene il codice sorgente del progetto, la src/test/java
directory contiene l'origine di test e il pom.xml
file è il project Object Model (POM).
Installare il pacchetto
Aprire il file pom.xml
nell'editor di testo. Aggiungere l'elemento di dipendenza seguente al gruppo di dipendenze.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-messages</artifactId>
</dependency>
Configurare il framework dell'app
Aprire /src/main/java/com/communication/quickstart/App.java
in un editor di testo, aggiungere direttive import e rimuovere l'istruzione System.out.println("Hello world!");
:
package com.communication.quickstart;
import com.azure.communication.messages.*;
import com.azure.communication.messages.models.*;
import java.util.ArrayList;
import java.util.List;
public class App
{
public static void main( String[] args )
{
// Quickstart code goes here.
}
}
Esempi di codice
Seguire questa procedura per aggiungere frammenti di codice necessari alla funzione principale del App.java
file.
- Elencare i modelli WhatsApp nella portale di Azure.
- Inviare un messaggio modello con parametri di testo nel corpo.
- Inviare un messaggio modello con il parametro multimediale nell'intestazione.
- Inviare un messaggio modello con pulsanti di risposta rapida.
- Invia messaggio modello con pulsanti di chiamata all'azione e collegamento dinamico.
Elencare i modelli WhatsApp nel portale di Azure
Per visualizzare i modelli nella portale di Azure, passare alla risorsa >Servizi di comunicazione di Azure Modelli di messaggistica>avanzata.
Selezione di un modello per visualizzare i dettagli del modello.
Il campo Contenuto dei dettagli del modello può includere associazioni di parametri. Le associazioni di parametri possono essere indicate come:
- Campo
"format"
con un valore,IMAGE
ad esempio . - Parentesi doppie che circondano un numero, ad esempio
{{1}}
. Il numero, indice avviato da 1, indica l'ordine in cui devono essere specificati i valori di associazione per creare il modello di messaggio.
In alternativa, puoi visualizzare e modificare tutti i modelli di account WhatsApp Business nei modelli di messaggio strumenti> account WhatsApp Manager>.
Per elencare i modelli a livello di codice, è possibile recuperare tutti i modelli per l'ID canale usando il codice seguente:
public static void getMessageTemplateWithConnectionString() {
MessageTemplateClient templateClient =
new MessageTemplateClientBuilder()
.connectionString(connectionString)
.buildClient();
PagedIterable<MessageTemplateItem> response = templateClient.listTemplates(channelRegistrationId);
response.stream().forEach(t -> {
WhatsAppMessageTemplateItem template = (WhatsAppMessageTemplateItem) t ;
System.out.println("===============================");
System.out.println("Template Name :: "+template.getName());
System.out.println("Template Language :: "+template.getLanguage());
System.out.println("Template Status :: "+template.getStatus());
System.out.println("Template Content :: "+template.getContent());
System.out.println("===============================");
});
}
Inviare un messaggio modello con parametri di testo nel corpo
Se il modello non accetta parametri, non è necessario specificare valori o associazioni durante la creazione di MessageTemplate
.
/*
* This sample shows how to send template message with below details
* Name: sample_shipping_confirmation, Language: en_US
* [
{
"type": "BODY",
"text": "Your package has been shipped. It will be delivered in {{1}} business days."
},
{
"type": "FOOTER",
"text": "This message is from an unverified business."
}
]
* */
private static void sendTemplateMessage() {
//Update Template Name and language according your template associate to your channel.
MessageTemplate template = new MessageTemplate("sample_shipping_confirmation", "en_US");
//Update template parameter type and value
List<MessageTemplateValue> messageTemplateValues = new ArrayList<>();
messageTemplateValues.add(new MessageTemplateText("Days", "5"));
template.setValues(messageTemplateValues);
//Update template parameter binding
List<WhatsAppMessageTemplateBindingsComponent> components = new ArrayList<>();
components.add(new WhatsAppMessageTemplateBindingsComponent("Days"));
MessageTemplateBindings bindings =new WhatsAppMessageTemplateBindings()
.setBody(components);
template.setBindings(bindings);
NotificationMessagesClient client = createClientWithTokenCredential();
SendMessageResult result = client.send(
new TemplateNotificationContent(CHANNEL_ID, recipients, template));
result.getReceipts().forEach(r -> System.out.println("Message sent to:"+r.getTo() + " and message id:"+ r.getMessageId()));
}
Inviare un messaggio modello con il parametro media nell'intestazione
Usare MessageTemplateImage
, MessageTemplateVideo
o MessageTemplateDocument
per definire il parametro multimediale in un'intestazione.
Definizione del modello con il parametro image media nell'intestazione:
{
"type": "HEADER",
"format": "VIDEO"
},
Può "format"
essere su di quattro diversi tipi di supporti supportati da WhatsApp. In .NET SDK ogni tipo di supporto usa un tipo corrispondente MessageTemplateValue
.
Formato | Tipo MessageTemplateValue | Tipo di file |
---|---|---|
IMMAGINE | MessageTemplateImage |
png, jpg |
VIDEO | MessageTemplateVideo |
mp4 |
DOCUMENT | MessageTemplateDocument |
Per altre informazioni sui tipi di supporti supportati e sui limiti di dimensioni, vedi la documentazione di WhatsApp per i supporti di messaggio.
Esempio
sample_happy_hour_announcement
sagoma:
In questo caso, l'intestazione del modello richiede un video:
{
"type": "HEADER",
"format": "VIDEO"
},
Il video deve essere un URL di un video mp4 ospitato.
Per altre informazioni sui tipi di supporti supportati e sui limiti di dimensioni, vedi la documentazione di WhatsApp per i supporti di messaggio.
Il corpo del modello richiede due parametri di testo:
{
"type": "BODY",
"text": "Happy hour is here! 🍺😀🍸\nPlease be merry and enjoy the day. 🎉\nVenue: {{1}}\nTime: {{2}}"
},
Creare una MessageTemplateVideo
e quattro MessageTemplateText
variabili. Assemblare quindi l'elenco di MessageTemplateValue
e MessageTemplateWhatsAppBindings
specificando i parametri nell'ordine in cui i parametri vengono visualizzati nel contenuto del modello.
/*
* This sample shows how to send template message with below details
* Name: sample_happy_hour_announcement, Language: en_US
* [
{
"type": "HEADER",
"format": "VIDEO"
},
{
"type": "BODY",
"text": "Happy hour is here! 🍺😀🍸\nPlease be merry and enjoy the day. 🎉\nVenue: {{1}}\nTime: {{2}}"
},
{
"type": "FOOTER",
"text": "This message is from an unverified business."
}
]
* */
private static void sendTemplateMessageWithVideo() {
//Update Template Name and language according your template associate to your channel.
MessageTemplate template = new MessageTemplate("sample_happy_hour_announcement", "en_US");
//Add template parameter type with value in a list
List<MessageTemplateValue> messageTemplateValues = new ArrayList<>();
messageTemplateValues.add(new MessageTemplateVideo("HeaderVideo", "https://sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4"));
messageTemplateValues.add(new MessageTemplateText("VenueInfoInBody", "Starbucks"));
messageTemplateValues.add(new MessageTemplateText("TimeInfoInBody", "Today 2-4PM"));
// Add parameter binding for template header in a list
List<WhatsAppMessageTemplateBindingsComponent> templateHeaderBindings = new ArrayList<>();
templateHeaderBindings.add(new WhatsAppMessageTemplateBindingsComponent("HeaderVideo"));
// Add parameter binding for template body in a list
List<WhatsAppMessageTemplateBindingsComponent> templateBodyBindings = new ArrayList<>();
templateBodyBindings.add(new WhatsAppMessageTemplateBindingsComponent("VenueInfoInBody"));
templateBodyBindings.add(new WhatsAppMessageTemplateBindingsComponent("TimeInfoInBody"));
MessageTemplateBindings templateBindings = new WhatsAppMessageTemplateBindings()
.setHeaderProperty(templateHeaderBindings) // Set the parameter binding for template header
.setBody(templateBodyBindings); // Set the parameter binding for template body
template
.setBindings(templateBindings)
.setValues(messageTemplateValues);
NotificationMessagesClient client = createClientWithConnectionString();
SendMessageResult result = client.send(
new TemplateNotificationContent(CHANNEL_ID, recipients, template));
result.getReceipts().forEach(r -> System.out.println("Message sent to:"+r.getTo() + " and message id:"+ r.getMessageId()));
}
Inviare un messaggio modello con pulsanti di risposta rapida
Usare MessageTemplateQuickAction
per definire il payload per i pulsanti di risposta rapida e MessageTemplateQuickAction
gli oggetti con i tre attributi seguenti.
Proprietà | Descrizione | Type |
---|---|---|
Nome | Oggetto name utilizzato per cercare il valore in MessageTemplateWhatsAppBindings . |
string |
Testo | Azione rapida text dell'opzione . |
string |
Payload | L'oggetto payload assegnato a un pulsante disponibile in una risposta di messaggio se l'utente seleziona il pulsante. |
string |
Definizione del modello con pulsanti di risposta rapida:
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
L'ordine in cui i pulsanti vengono visualizzati nella definizione del modello deve corrispondere all'ordine in cui i pulsanti vengono definiti durante la creazione dei binding con MessageTemplateWhatsAppBindings
.
Per altre informazioni sul payload nelle risposte di risposta rapida dell'utente, vedi la documentazione di WhatsApp per il callback ricevuto da un pulsante di risposta rapida.
Esempio
sample_issue_resolution
sagoma:
Il corpo del modello richiede un parametro di testo:
/*
* This sample shows how to send template message with below details
* Name: sample_issue_resolution, Language: en_US
* [
{
"type": "BODY",
"text": "Hi {{1}}, were we able to solve the issue that you were facing?"
},
{
"type": "FOOTER",
"text": "This message is from an unverified business."
},
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
]
* */
private static void sendTextTemplateMessageWithQuickReply() {
//Add template parameter type with value in a list
List<MessageTemplateValue> messageTemplateValues = new ArrayList<>();
messageTemplateValues.add(new MessageTemplateText("Name", "Arif"));
messageTemplateValues.add(new MessageTemplateQuickAction("Yes").setPayload("Yes"));
messageTemplateValues.add(new MessageTemplateQuickAction("No").setPayload("No"));
// Add parameter binding for template body in a list
List<WhatsAppMessageTemplateBindingsComponent> templateBodyBindings = new ArrayList<>();
templateBodyBindings.add(new WhatsAppMessageTemplateBindingsComponent("Name"));
// Add parameter binding for template buttons in a list
List<WhatsAppMessageTemplateBindingsButton> templateButtonBindings = new ArrayList<>();
templateButtonBindings.add( new WhatsAppMessageTemplateBindingsButton(WhatsAppMessageButtonSubType.QUICK_REPLY, "Yes"));
templateButtonBindings.add( new WhatsAppMessageTemplateBindingsButton(WhatsAppMessageButtonSubType.QUICK_REPLY, "No"));
MessageTemplateBindings templateBindings = new WhatsAppMessageTemplateBindings()
.setBody(templateBodyBindings) // Set the parameter binding for template body
.setButtons(templateButtonBindings); // Set the parameter binding for template buttons
MessageTemplate messageTemplate = new MessageTemplate("sample_issue_resolution", "en_US")
.setBindings(templateBindings)
.setValues(messageTemplateValues);
NotificationMessagesClient client = createClientWithConnectionString();
SendMessageResult result = client.send(
new TemplateNotificationContent(CHANNEL_ID, recipients, messageTemplate));
result.getReceipts().forEach(r -> System.out.println("Message sent to:"+r.getTo() + " and message id:"+ r.getMessageId()));
}
Invia messaggio modello con pulsanti di chiamata all'azione e collegamento dinamico
Usare MessageTemplateQuickAction
per definire il suffisso URL per i pulsanti di chiamata all'azione e MessageTemplateQuickAction
l'oggetto hanno i due attributi seguenti.
Proprietà | Descrizione | Type |
---|---|---|
Nome | Oggetto name utilizzato per cercare il valore in MessageTemplateWhatsAppBindings . |
string |
Testo | Oggetto text aggiunto all'URL. |
string |
Pulsanti di definizione del modello:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
L'ordine in cui i pulsanti vengono visualizzati nella definizione del modello deve corrispondere all'ordine in cui i pulsanti vengono definiti durante la creazione dei binding con MessageTemplateWhatsAppBindings
.
Esempio
sample_purchase_feedback
sagoma:
Questo modello di esempio aggiunge un pulsante con un collegamento URL dinamico al messaggio. Usa anche un'immagine nell'intestazione e un parametro di testo nel corpo.
In questo esempio l'intestazione del modello richiede un'immagine:
{
"type": "HEADER",
"format": "IMAGE"
},
Il corpo del modello richiede un parametro di testo:
{
"type": "BODY",
"text": "Thank you for purchasing {{1}}! We value your feedback and would like to learn more about your experience."
},
Il modello include un pulsante URL dinamico con un parametro:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Creare un MessageTemplateImage
oggetto , uno MessageTemplateText
e una MessageTemplateQuickAction
variabile. Assemblare quindi l'elenco di MessageTemplateValue
e MessageTemplateWhatsAppBindings
specificando i parametri nell'ordine in cui i parametri vengono visualizzati nel contenuto del modello. L'ordine è importante anche quando si definiscono i pulsanti dei binding.
/*
* This sample shows how to send template message with below details
* Name: sample_purchase_feedback, Language: en_US
* [
{
"type": "HEADER",
"format": "IMAGE"
},
{
"type": "BODY",
"text": "Thank you for purchasing {{1}}! We value your feedback and would like to learn more about your experience."
},
{
"type": "FOOTER",
"text": "This message is from an unverified business."
},
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/"
}
]
}
]
* */
private static void sendTemplateMessageWithImage() {
//Update Template Name and language according your template associate to your channel.
MessageTemplate template = new MessageTemplate("sample_purchase_feedback", "en_US");
//Add template parameter type with value in a list
List<MessageTemplateValue> messageTemplateValues = new ArrayList<>();
messageTemplateValues.add(new MessageTemplateImage("HeaderImage", "https://upload.wikimedia.org/wikipedia/commons/3/30/Building92microsoft.jpg"));
messageTemplateValues.add(new MessageTemplateText("ProductInfoInBody", "Microsoft Office"));
// Add parameter binding for template header in a list
List<WhatsAppMessageTemplateBindingsComponent> templateHeaderBindings = new ArrayList<>();
templateHeaderBindings.add(new WhatsAppMessageTemplateBindingsComponent("HeaderImage"));
// Add parameter binding for template body in a list
List<WhatsAppMessageTemplateBindingsComponent> templateBodyBindings = new ArrayList<>();
templateBodyBindings.add(new WhatsAppMessageTemplateBindingsComponent("ProductInfoInBody"));
MessageTemplateBindings templateBindings = new WhatsAppMessageTemplateBindings()
.setHeaderProperty(templateHeaderBindings) // Set the parameter binding for template header
.setBody(templateBodyBindings); // Set the parameter binding for template body
template
.setBindings(templateBindings)
.setValues(messageTemplateValues);
NotificationMessagesClient client = createClientWithConnectionString();
SendMessageResult result = client.send(
new TemplateNotificationContent(CHANNEL_ID, recipients, template));
result.getReceipts().forEach(r -> System.out.println("Message sent to:"+r.getTo() + " and message id:"+ r.getMessageId()));
}
Eseguire il codice
Aprire la directory contenente il
pom.xml
file e compilare il progetto usando ilmvn
comando .mvn compile
Eseguire l'app usando il comando seguente
mvn
:mvn exec:java -D"exec.mainClass"="com.communication.quickstart.App" -D"exec.cleanupDaemonThreads"="false"
Codice di esempio completo
Trovare il codice finalizzato per questa guida introduttiva in GitHub.
Prerequisiti
- Registrare l'account WhatsApp Business con la risorsa Servizi di comunicazione di Azure.
- Creare un messaggio di modello WhatsApp.
- Numero di telefono WhatsApp attivo per ricevere messaggi.
- Node.js versioni di Active LTS e Maintenance LTS (è consigliabile 8.11.1 e 10.14.1).
-
Node.js versioni di Active LTS e Maintenance LTS (sono consigliate le versioni 8.11.1 e 10.14.1)
- In un terminale o una finestra di comando eseguire
node --version
per verificare che Node.js sia installato
- In un terminale o una finestra di comando eseguire
Modello a oggetti
Le classi e le interfacce seguenti gestiscono alcune delle principali funzionalità di Servizi di comunicazione di Azure Messages SDK per Javascript.
Nome della classe | Descrizione |
---|---|
NotificationMessagesClient |
Si connette alla risorsa Servizi di comunicazione di Azure. Invia i messaggi. |
MessageTemplate |
Definisce il modello usato e il contenuto delle proprietà del modello per il messaggio. |
TemplateNotificationContent |
Definisce il "chi" e il "what" del messaggio del modello che si intende inviare. |
Nota
Per altre informazioni, vedere il pacchetto azure SDK per JavaScript @azure-rest/communication-messages
Tipi di modello WhatsApp supportati
Tipo di modello | Descrizione |
---|---|
Modelli di messaggio basati su testo | I modelli di messaggio WhatsApp sono formati di messaggio specifici con o senza parametri. |
Modelli di messaggio basati su supporti | Modelli di messaggi WhatsApp con parametri multimediali per i componenti di intestazione. |
Modelli di messaggio interattivi | I modelli di messaggio interattivi espandono il contenuto che è possibile inviare ai destinatari, includendo pulsanti interattivi usando l'oggetto componenti. Sono supportati sia call-to-action che risposta rapida. |
Modelli di messaggio basati sulla posizione | Modelli di messaggio WhatsApp con parametri di posizione in termini longitudine e latitudine per i componenti di intestazione. |
Configurazione comune
Seguire questa procedura per aggiungere i frammenti di codice necessari alla funzione principale del send-messages.js
file.
- Creare e gestire il messaggio del modello WhatsApp.
- Autenticare il client.
- Impostare l'ID di registrazione del canale.
- Impostare l'elenco dei destinatari.
Creare e gestire il messaggio del modello WhatsApp
I modelli di messaggio WhatsApp sono formati di messaggi specifici che le aziende usano per inviare notifiche o messaggi di assistenza clienti a persone che hanno accodato esplicitamente alle notifiche. I messaggi possono includere promemoria per gli appuntamenti, informazioni sulla spedizione, risoluzione dei problemi o aggiornamenti dei pagamenti. Prima di iniziare a usare Advanced messaging SDK per inviare messaggi modello, l'utente deve creare modelli necessari nella piattaforma WhatsApp Business.
Per altre informazioni sui requisiti di WhatsApp per i modelli, vedi i riferimenti all'API WhatsApp Business Platform:
- Creare e gestire modelli.
- Visualizzare i componenti del modello.
- Inviare messaggi modello.
- Le aziende devono inoltre rispettare i requisiti di consenso esplicito prima di inviare messaggi agli utenti di WhatsApp.
Iniziare a inviare messaggi tra un'azienda e un utente di WhatsApp
Le conversazioni tra un account WhatsApp Business e un utente WhatsApp possono essere avviate in uno dei due modi seguenti:
- L'azienda invia un messaggio modello all'utente WhatsApp.
- L'utente WhatsApp invia qualsiasi messaggio al numero di ufficio.
Indipendentemente dalla modalità di avvio della conversazione, un'azienda può inviare messaggi modello solo fino a quando l'utente non invia un messaggio all'azienda. Solo dopo che l'utente invia un messaggio all'azienda, l'azienda può inviare sms o messaggi multimediali all'utente durante la conversazione attiva. Una volta scaduta la finestra di conversazione di 24 ore, è necessario reinizializzare la conversazione. Per altre informazioni sulle conversazioni, vedi la definizione all'indirizzo Piattaforma WhatsApp Business.
Autenticare il client
Il codice seguente recupera la stringa di connessione per la risorsa da una variabile di ambiente denominata COMMUNICATION_SERVICES_CONNECTION_STRING
usando il pacchetto dotenv.
Per semplicità, questa guida introduttiva usa una stringa di connessione per l'autenticazione. Negli ambienti di produzione è consigliabile usare entità servizio.
Ottenere la stringa di connessione dalla risorsa Servizi di comunicazione di Azure nel portale di Azure. A sinistra passare alla scheda Keys
. Copiare il campo Connection string
per il Primary key
. La stringa di connessione è nel formato endpoint=https://{your Azure Communication Services resource name}.communication.azure.com/;accesskey={secret key}
.
Impostare la variabile di ambiente COMMUNICATION_SERVICES_CONNECTION_STRING
sul valore della stringa di connessione.
Aprire una finestra della console e immettere il comando seguente:
setx COMMUNICATION_SERVICES_CONNECTION_STRING "<your connection string>"
Per altre informazioni su come impostare una variabile di ambiente per il sistema, seguire la procedura descritta in Archiviare la stringa di connessione in una variabile di ambiente.
Per creare un'istanza di NotificationClient, aggiungere il codice seguente al Main
metodo :
const NotificationClient = require("@azure-rest/communication-messages").default;
// Set Connection string
const connectionString = process.env["COMMUNICATION_SERVICES_CONNECTION_STRING"];
// Instantiate the client
const client = NotificationClient(connectionString);
Configurare l’ID di registrazione del canale
Il GUID DELL'ID di registrazione del canale è stato creato durante la registrazione del canale. È possibile cercarlo nel portale nella scheda Canali della risorsa di Servizi di comunicazione di Azure.
Assegnarlo a una variabile denominata channelRegistrationId.
const channelRegistrationId = "<your channel registration id GUID>";
Configurare l’elenco dei destinatari
È necessario fornire un numero di telefono reale che ha un account WhatsApp associato. Questo account WhatsApp riceve il modello, il testo e i messaggi multimediali inviati in questa guida introduttiva. Per questa guida introduttiva, questo numero di telefono potrebbe essere il numero di telefono personale.
Il numero di telefono del destinatario non può essere il numero di telefono commerciale (ID mittente) associato alla registrazione del canale WhatsApp. L'ID mittente viene visualizzato come mittente del testo e dei messaggi multimediali inviati al destinatario.
Il numero di telefono deve includere il prefisso internazionale. Per altre informazioni sulla formattazione dei numeri di telefono, vedi la documentazione di WhatsApp sui Formati di numeri di telefono.
Nota
Nell'elenco dei destinatari è attualmente supportato un solo numero di telefono.
Creare l'elenco dei destinatari nel seguente modo:
const recipientList = ["<to WhatsApp phone number>"];
Esempio:
// Example only
const recipientList = ["+14255550199"];
Configurazione
Per configurare un ambiente per l'invio di messaggi, completare la procedura descritta nelle sezioni seguenti.
Creare una nuova applicazione Node.js
Creare una nuova directory per l'app e aprirla in un terminale o in una finestra di comando.
Esegui il comando seguente:
mkdir advance-messages-quickstart && cd advance-messages-quickstart
Eseguire il comando seguente per creare un
package.json
file con le impostazioni predefinite.npm init -y
Usare un editor di testo per creare un file denominato
send-messages.js
nella directory radice del progetto.Aggiungere il frammento di codice seguente al file
send-messages.js
.async function main() { // Quickstart code goes here. } main().catch((error) => { console.error("Encountered an error while sending message: ", error); process.exit(1); });
Completare la sezione seguente per aggiungere il codice sorgente per questo esempio al send-messages.js
file creato.
Installare il pacchetto
Usare il comando npm install
per installare SDK di Messaggistica avanzata di Servizi di comunicazione di Azure per JavaScript.
npm install @azure-rest/communication-messages --save
L'opzione --save
elenca la libreria come dipendenza nel file package.json.
Esempi di codice
Seguire questa procedura per aggiungere frammenti di codice necessari alla funzione principale del send-messages.js
file.
- Elencare i modelli WhatsApp nella portale di Azure.
- Inviare un messaggio modello con parametri di testo nel corpo.
Elencare i modelli WhatsApp nel portale di Azure
Per visualizzare i modelli nella portale di Azure, passare alla risorsa >Servizi di comunicazione di Azure Modelli di messaggistica>avanzata.
Selezione di un modello per visualizzare i dettagli del modello.
Il campo Contenuto dei dettagli del modello può includere associazioni di parametri. Le associazioni di parametri possono essere indicate come:
- Campo
"format"
con un valore,IMAGE
ad esempio . - Parentesi doppie che circondano un numero, ad esempio
{{1}}
. Il numero, indice avviato da 1, indica l'ordine in cui devono essere specificati i valori di associazione per creare il modello di messaggio.
In alternativa, puoi visualizzare e modificare tutti i modelli di account WhatsApp Business nei modelli di messaggio strumenti> account WhatsApp Manager>.
Per elencare i modelli a livello di codice, è possibile recuperare tutti i modelli per l'ID canale usando il codice seguente:
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* @summary Get Template list for a channel
*/
const MessageTemplateClient = require("@azure-rest/communication-messages").default,
{ isUnexpected } = require("@azure-rest/communication-messages");
// Load the .env file if it exists
require("dotenv").config();
async function main() {
const connectionString = process.env.COMMUNICATION_LIVETEST_STATIC_CONNECTION_STRING || "";
const client = MessageTemplateClient(connectionString);
console.log("Fetch Templates...");
const response = await client
.path("/messages/channels/{channelId}/templates", process.env.CHANNEl_ID || "")
.get({
queryParameters: { maxPageSize: 2 },
});
if (isUnexpected(response)) {
throw new Error("Failed to get template for the channel.");
}
// The paginate helper creates a paged async iterator using metadata from the first page.
const items = paginate(client, response);
// We get an PageableAsyncIterator so we need to do `for await`.
for await (const item of items) {
console.log(JSON.stringify(item, null, 2));
}
}
main().catch((error) => {
console.error("Encountered an error while sending message: ", error);
throw error;
});
Inviare un messaggio modello con parametri di testo nel corpo
sample_shipping_confirmation
sagoma:
In questo esempio il corpo del modello ha un parametro:
{
"type": "BODY",
"text": "Your package has been shipped. It will be delivered in {{1}} business days."
},
I parametri vengono definiti con i values
valori e bindings
le associazioni. Utilizzare i valori e i binding per assemblare l'oggetto template
.
/*
* This sample shows how to send template message with below details
* Name: sample_shipping_confirmation, Language: en_US
* [
{
"type": "BODY",
"text": "Your package has been shipped. It will be delivered in {{1}} business days."
},
{
"type": "FOOTER",
"text": "This message is from an unverified business."
}
]
* */
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* @summary Use AAD token credentials when sending a whatsapp template message.
*/
const { isNode } = require("@azure/core-util");
const { ClientSecretCredential, DefaultAzureCredential } = require("@azure/identity");
const NotificationClient = require("@azure-rest/communication-messages").default,
{ isUnexpected } = require("@azure-rest/communication-messages");
// Load the .env file if it exists
require("dotenv").config();
async function main() {
// You will need to set this environment variable or edit the following values
const endpoint = process.env.ACS_URL || "";
// Azure AD Credential information is required to run this sample:
if (
!process.env.AZURE_TENANT_ID ||
!process.env.AZURE_CLIENT_ID ||
!process.env.AZURE_CLIENT_SECRET
) {
console.error(
"Azure AD authentication information not provided, but it is required to run this sample. Exiting.",
);
return;
}
// get credentials
const credential = isNode
? new DefaultAzureCredential()
: new ClientSecretCredential(
process.env.AZURE_TENANT_ID,
process.env.AZURE_CLIENT_ID,
process.env.AZURE_CLIENT_SECRET,
);
const client = NotificationClient(endpoint, credential);
const DaysTemplateValue = {
kind: "text",
name: "Days",
text: "5",
};
const templateBindings = {
kind: "whatsApp",
body: [
{
refValue: "Days",
},
],
};
const template = {
name: "sample_shipping_confirmation",
language: "en_US",
bindings: templateBindings,
values: [DaysTemplateValue],
};
const result = await client.path("/messages/notifications:send").post({
contentType: "application/json",
body: {
channelRegistrationId: process.env.CHANNEL_ID || "",
to: [process.env.RECIPIENT_PHONE_NUMBER || ""],
kind: "template",
template: template,
},
});
console.log("Response: " + JSON.stringify(result, null, 2));
if (isUnexpected(result)) {
throw new Error("Failed to send message");
}
const response = result;
response.body.receipts.forEach((receipt) => {
console.log("Message sent to:" + receipt.to + " with message id:" + receipt.messageId);
});
}
main().catch((error) => {
console.error("Encountered an error while sending message: ", error);
throw error;
});
module.exports = { main };
Eseguire il codice
Usare il comando node per eseguire il codice aggiunto al file send-messages.js.
node ./send-messages.js
Codice di esempio completo
Trovare il codice finalizzato per questo esempio in GitHub.
Prerequisiti
- Registrare l'account WhatsApp Business con la risorsa Servizi di comunicazione di Azure.
- Creare un messaggio di modello WhatsApp.
- Numero di telefono WhatsApp attivo per ricevere messaggi.
Modello a oggetti
Le classi e le interfacce seguenti gestiscono alcune delle principali funzionalità dell’SDK Messages di Servizi di comunicazione di Azure per Python.
Nome della classe | Descrizione |
---|---|
NotificationMessagesClient |
Si connette alla risorsa Servizi di comunicazione di Azure. Invia i messaggi. |
MessageTemplate |
Definisce il modello usato e il contenuto delle proprietà del modello per il messaggio. |
TemplateNotificationContent |
Definisce il "chi" e il "what" del messaggio del modello che si intende inviare. |
Nota
Per altre informazioni, impostare i messaggi di riferimento di Azure SDK per Python Package.
Tipi di modello WhatsApp supportati
Tipo di modello | Descrizione |
---|---|
Modelli di messaggio basati su testo | I modelli di messaggio WhatsApp sono formati di messaggio specifici con o senza parametri. |
Modelli di messaggio basati su supporti | Modelli di messaggi WhatsApp con parametri multimediali per i componenti di intestazione. |
Modelli di messaggio interattivi | I modelli di messaggio interattivi espandono il contenuto che è possibile inviare ai destinatari, includendo pulsanti interattivi usando l'oggetto componenti. Sono supportati sia call-to-action che risposta rapida. |
Modelli di messaggio basati sulla posizione | Modelli di messaggio WhatsApp con parametri di posizione in termini longitudine e latitudine per i componenti di intestazione. |
Configurazione comune
Seguire questa procedura per aggiungere i frammenti di codice necessari al messages-quickstart.py
programma Python.
- Creare e gestire il messaggio del modello WhatsApp.
- Autenticare il client.
- Impostare l'ID di registrazione del canale.
- Impostare l'elenco dei destinatari.
Creare e gestire il messaggio del modello WhatsApp
I modelli di messaggio WhatsApp sono formati di messaggi specifici che le aziende usano per inviare notifiche o messaggi di assistenza clienti a persone che hanno accodato esplicitamente alle notifiche. I messaggi possono includere promemoria per gli appuntamenti, informazioni sulla spedizione, risoluzione dei problemi o aggiornamenti dei pagamenti. Prima di iniziare a usare Advanced messaging SDK per inviare messaggi modello, l'utente deve creare modelli necessari nella piattaforma WhatsApp Business.
Per altre informazioni sui requisiti di WhatsApp per i modelli, vedi i riferimenti all'API WhatsApp Business Platform:
- Creare e gestire modelli.
- Visualizzare i componenti del modello.
- Inviare messaggi modello.
- Le aziende devono inoltre rispettare i requisiti di consenso esplicito prima di inviare messaggi agli utenti di WhatsApp.
Autenticare il client
L'invio dei messaggi viene eseguito tramite NotificationMessagesClient. NotificationMessagesClient viene autenticato usando la stringa di connessione acquisita dalla risorsa di Servizi di comunicazione di Azure nel portale di Azure. Per altre informazioni sulle stringhe di connessione, vedere access-your-connection-strings-and-service-endpoints.
Ottenere l'stringa di connessione delle risorse di comunicazione di Azure da portale di Azure come indicato nello screenshot. A sinistra passare alla scheda Keys
. Copiare il campo Connection string
per la chiave primaria. La stringa di connessione è nel formato endpoint=https://{your Azure Communication Services resource name}.communication.azure.com/;accesskey={secret key}
.
Impostare la variabile di ambiente COMMUNICATION_SERVICES_CONNECTION_STRING
sul valore della stringa di connessione.
Aprire una finestra della console e immettere il comando seguente:
setx COMMUNICATION_SERVICES_CONNECTION_STRING "<your connection string>"
Dopo l'aggiunta della variabile di ambiente potrebbe essere necessario riavviare eventuali programmi in esecuzione che necessitano di leggere la variabile di ambiente, inclusa la finestra della console. Se ad esempio si usa Visual Studio come editor, riavviare Visual Studio prima di eseguire l'esempio.
Per altre informazioni su come impostare una variabile di ambiente per il sistema, seguire la procedura descritta in Archiviare la stringa di connessione in una variabile di ambiente.
# Get a connection string to our Azure Communication Services resource.
connection_string = os.getenv("COMMUNICATION_SERVICES_CONNECTION_STRING")
def send_template_message(self):
from azure.communication.messages import NotificationMessagesClient
# Create NotificationMessagesClient Client
messaging_client = NotificationMessagesClient.from_connection_string(self.connection_string)
Configurare l’ID di registrazione del canale
È stato creato il GUID dell'ID registrazione canale durante la registrazione del canale. Trovarlo nel portale nella scheda Canali della risorsa Servizi di comunicazione di Azure.
Assegnarlo a una variabile denominata channelRegistrationId.
channelRegistrationId = os.getenv("WHATSAPP_CHANNEL_ID_GUID")
Configurare l’elenco dei destinatari
Devi fornire un numero di telefono attivo associato a un account WhatsApp. Questo account WhatsApp riceve il modello, il testo e i messaggi multimediali inviati in questa guida introduttiva.
Per questo esempio, è possibile usare il numero di telefono personale.
Il numero di telefono del destinatario non può essere il numero di telefono commerciale (ID mittente) associato alla registrazione del canale WhatsApp. L'ID mittente viene visualizzato come mittente del testo e dei messaggi multimediali inviati al destinatario.
Il numero di telefono deve includere il codice paese. Per altre informazioni sulla formattazione dei numeri di telefono, vedi la documentazione di WhatsApp per formati di numeri di telefono.
Nota
Nell'elenco dei destinatari è attualmente supportato un solo numero di telefono.
Configurare l'elenco dei destinatari nel seguente modo:
phone_number = os.getenv("RECIPIENT_WHATSAPP_PHONE_NUMBER")
Esempio di utilizzo:
# Example only
to=[self.phone_number],
Iniziare a inviare messaggi tra un'azienda e un utente di WhatsApp
Le conversazioni tra un account WhatsApp Business e un utente WhatsApp possono essere avviate in uno dei due modi seguenti:
- L'azienda invia un messaggio modello all'utente WhatsApp.
- L'utente WhatsApp invia qualsiasi messaggio al numero di ufficio.
Un'azienda non può avviare una conversazione interattiva. Un'azienda può inviare un messaggio interattivo solo dopo aver ricevuto un messaggio dall'utente. L'azienda può inviare messaggi interattivi solo all'utente durante la conversazione attiva. Una volta scaduta la finestra di conversazione di 24 ore, solo l'utente può riavviare la conversazione interattiva. Per altre informazioni sulle conversazioni, vedi la definizione in WhatsApp Business Platform.
Per avviare una conversazione interattiva dal tuo account WhatsApp personale, invia un messaggio al tuo numero di azienda (ID mittente).
Set up environment (Configurare l'ambiente)
Creare una nuova applicazione Python
In una finestra del terminale o della console creare una nuova cartella per l'applicazione e aprirla.
mkdir messages-quickstart && cd messages-quickstart
Installare il pacchetto
Usare la libreria client messaggi di comunicazione di Azure per Python 1.1.0 o versione successiva.
Da un prompt della console eseguire il comando seguente:
pip install azure-communication-messages
Per InteractiveMessages, Reazioni e Adesivi, usare la versione beta seguente:
pip install azure-communication-messages==1.2.0b1
Configurare il framework dell'app
Creare un nuovo file denominato messages-quickstart.py
e aggiungere la struttura del programma di base.
type nul > messages-quickstart.py
Struttura dei programmi di base
import os
class MessagesQuickstart(object):
print("Azure Communication Services - Advanced Messages SDK Quickstart")
if __name__ == '__main__':
messages = MessagesQuickstart()
Struttura dei programmi di base
import os
class MessagesQuickstart(object):
print("Azure Communication Services - Advanced Messages SDK Quickstart")
if __name__ == '__main__':
messages = MessagesQuickstart()
Esempi di codice
Seguire questa procedura per aggiungere i frammenti di codice necessari al messages-quickstart.py
programma Python.
- Elencare i modelli di WhatsApp in portale di Azure.
- Invia messaggio modello senza parametri.
- Invia messaggio modello con parametri di testo nel corpo.
- Inviare un messaggio modello con il parametro multimediale nell'intestazione.
- Invia messaggio modello con la posizione nell'intestazione.
- Invia messaggio modello con pulsanti di risposta rapida.
- Invia messaggio modello con pulsanti di chiamata all'azione con collegamento dinamico.
Elencare i modelli di WhatsApp in portale di Azure
È possibile visualizzare i modelli nella portale di Azure passando alla risorsa >del Servizio di comunicazione di Azure Modelli di messaggistica>avanzata.
Selezionare un modello per visualizzare i dettagli del modello.
Il content
campo dei dettagli del modello può includere associazioni di parametri. Le associazioni di parametri possono essere indicate come:
- Campo
format
con un valore,IMAGE
ad esempio . - Parentesi doppie che circondano un numero, ad esempio
{{1}}
. Il numero, indice avviato da 1, indica l'ordine in cui devono essere specificati i valori di associazione per creare il modello di messaggio.
In alternativa, puoi visualizzare e modificare tutti i modelli del tuo account WhatsApp Business nei modelli di messaggio strumenti> account WhatsApp Manager>.
Per elencare i modelli a livello di codice, è possibile recuperare tutti i modelli per l'ID canale come indicato di seguito:
def get_templates_list(self):
from azure.communication.messages import MessageTemplateClient
message_template_client = MessageTemplateClient.from_connection_string(self.connection_string)
# calling send() with whatsapp message details
template_list = message_template_client.list_templates(self.channel_id)
count_templates = len(list(template_list))
print("Successfully retrieved {} templates from channel_id {}.".format(count_templates, self.channel_id))
Inviare un messaggio modello senza parametri
Se il modello non richiede parametri, non è necessario specificare i valori o le associazioni durante la creazione di MessageTemplate
.
Esempio
l'oggetto sample_template
non ha parametri.
Assemblare l'oggetto MessageTemplate
facendo riferimento al nome e alla lingua del modello di destinazione.
input_template: MessageTemplate = MessageTemplate(name="gathering_invitation", language="ca") # Name of the WhatsApp Template
Inviare un messaggio modello con parametri di testo nel corpo
Usare MessageTemplateText
per definire i parametri nel corpo indicato con parentesi quadre doppie che circondano un numero, ad esempio {{1}}
. Il numero, indice avviato da 1, indica l'ordine in cui devono essere specificati i valori di associazione per creare il modello di messaggio. Il tentativo di includere parametri non nel modello non è valido.
Definizione del modello con due parametri:
{
"type": "BODY",
"text": "Message with two parameters: {{1}} and {{2}}"
}
Esempi
sample_shipping_confirmation
sagoma:
In questo esempio il corpo del modello ha un parametro:
{
"type": "BODY",
"text": "Your package has been shipped. It will be delivered in {{1}} business days."
},
Definire i parametri usando i MessageTemplateValue
valori e MessageTemplateWhatsAppBindings
le associazioni. Usare i valori e le associazioni per assemblare .MessageTemplate
# Setting template options
templateName = "sample_shipping_confirmation"
templateLanguage = "en_us"
shippingConfirmationTemplate: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
threeDays = MessageTemplateText(name="threeDays", text="3")
bindings = WhatsAppMessageTemplateBindings(body=[WhatsAppMessageTemplateBindingsComponent(ref_value=threeDays.name)])
shippingConfirmationTemplate.bindings = bindings
shippingConfirmationTemplate.template_values=[threeDays]
template_options = TemplateNotificationContent(
channel_registration_id=self.channel_id, to=[self.phone_number], template=shippingConfirmationTemplate
)
Inviare un messaggio modello con il parametro media nell'intestazione
Usare MessageTemplateImage
, MessageTemplateVideo
o MessageTemplateDocument
per definire il parametro multimediale in un'intestazione.
Definizione del modello con il parametro image media nell'intestazione:
{
"type": "HEADER",
"format": "IMAGE"
},
Può format
avere diversi tipi di supporti supportati da WhatsApp. In .NET SDK ogni tipo di supporto usa un tipo corrispondente MessageTemplateValue
.
Formato | Tipo MessageTemplateValue | Tipo di file |
---|---|---|
IMMAGINE | MessageTemplateImage |
png, jpg |
VIDEO | MessageTemplateVideo |
mp4 |
DOCUMENT | MessageTemplateDocument |
Per altre informazioni sui tipi di supporti supportati e sui limiti di dimensioni, vedi la documentazione di WhatsApp per i supporti di messaggio.
Esempi
sample_movie_ticket_confirmation
sagoma:
In questo esempio l'intestazione del modello richiede un'immagine:
{
"type": "HEADER",
"format": "IMAGE"
},
Il corpo del modello richiede quattro parametri di testo:
{
"type": "BODY",
"text": "Your ticket for *{{1}}*\n*Time* - {{2}}\n*Venue* - {{3}}\n*Seats* - {{4}}"
},
Creare una MessageTemplateImage
e quattro MessageTemplateText
variabili. Assemblare quindi l'elenco di MessageTemplateValue
e MessageTemplateWhatsAppBindings
specificando i parametri nell'ordine in cui i parametri vengono visualizzati nel contenuto del modello.
# Setting template options
templateName = "sample_movie_ticket_confirmation"
templateLanguage = "en_us"
imageUrl = "https://aka.ms/acsicon1"
sample_movie_ticket_confirmation: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
image = MessageTemplateImage(name="image", url=imageUrl)
title = MessageTemplateText(name="title", text="Contoso")
time = MessageTemplateText(name="time", text="July 1st, 2023 12:30PM")
venue = MessageTemplateText(name="venue", text="Southridge Video")
seats = MessageTemplateText(name="seats", text="Seat 1A")
bindings = WhatsAppMessageTemplateBindings(header=[WhatsAppMessageTemplateBindingsComponent(ref_value=image.name)],
body=[WhatsAppMessageTemplateBindingsComponent(ref_value=title.name),
WhatsAppMessageTemplateBindingsComponent(ref_value=time.name),
WhatsAppMessageTemplateBindingsComponent(ref_value=venue.name),
WhatsAppMessageTemplateBindingsComponent(ref_value=seats.name)])
sample_movie_ticket_confirmation.bindings = bindings
sample_movie_ticket_confirmation.template_values=[image,title,time,venue,seats]
template_options = TemplateNotificationContent(
channel_registration_id=self.channel_id, to=[self.phone_number], template=sample_movie_ticket_confirmation)
Inviare un messaggio modello con pulsanti di risposta rapida
Usare MessageTemplateQuickAction
per definire il payload per i pulsanti di risposta rapida e MessageTemplateQuickAction
gli oggetti con i tre attributi seguenti.
Proprietà | Descrizione | Type |
---|---|---|
Nome | Oggetto name da cercare il valore in MessageTemplateWhatsAppBindings . |
string |
Testo | Azione rapida text dell'opzione . |
string |
Payload | L'oggetto payload assegnato a un pulsante disponibile in una risposta di messaggio se l'utente seleziona il pulsante. |
string |
Definizione del modello con pulsanti di risposta rapida:
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
L'ordine in cui i pulsanti vengono visualizzati nella definizione del modello deve corrispondere all'ordine in cui i pulsanti vengono definiti durante la creazione dei binding con MessageTemplateWhatsAppBindings
.
Per altre informazioni sul payload nelle risposte di risposta rapida dell'utente, vedi la documentazione di WhatsApp per il callback ricevuto da un pulsante di risposta rapida.
Esempio
sample_issue_resolution
sagoma:
Il corpo del modello richiede un parametro di testo:
{
"type": "BODY",
"text": "Hi {{1}}, were we able to solve the issue that you were facing?"
},
Il modello include due pulsanti di risposta precompilato e Yes
No
.
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
Creare una MessageTemplateText
e due MessageTemplateQuickAction
variabili. Assemblare quindi l'elenco di MessageTemplateValue
e MessageTemplateWhatsAppBindings
specificando i parametri nell'ordine in cui i parametri vengono visualizzati nel contenuto del modello. L'ordine è importante anche quando si definiscono i pulsanti dei binding.
# Setting template options
templateName = "sample_issue_resolution"
templateLanguage = "en_us"
shippingConfirmationTemplate: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
name = MessageTemplateText(name="first", text="Joe")
yes = MessageTemplateQuickAction(name="Yes", payload="Joe said yes")
no = MessageTemplateQuickAction(name="No", payload = "Joe said no")
bindings = WhatsAppMessageTemplateBindings(body=[WhatsAppMessageTemplateBindingsComponent(ref_value=name.name)])
bindings.buttons = [WhatsAppMessageTemplateBindingsButton(sub_type=WhatsAppMessageButtonSubType.QUICK_REPLY, ref_value=yes.name),
WhatsAppMessageTemplateBindingsButton(sub_type=WhatsAppMessageButtonSubType.QUICK_REPLY, ref_value=no.name)]
shippingConfirmationTemplate.bindings = bindings
shippingConfirmationTemplate.template_values=[name,yes,no]
template_options = TemplateNotificationContent(
channel_registration_id=self.channel_id, to=[self.phone_number], template=shippingConfirmationTemplate
)
Inviare un messaggio modello con la posizione nell'intestazione
Usare MessageTemplateLocation
per definire il parametro location in un'intestazione.
Definizione del modello per il componente di intestazione che richiede la posizione come:
{
"type": "header",
"parameters": [
{
"type": "location",
"location": {
"latitude": "<LATITUDE>",
"longitude": "<LONGITUDE>",
"name": "<NAME>",
"address": "<ADDRESS>"
}
}
]
}
può format
richiedere tipi di supporti diversi. In .NET SDK ogni tipo di supporto usa un tipo corrispondente MessageTemplateValue
.
Proprietà | Descrizione | Tipo |
---|---|---|
ADDRESS |
Indirizzo visualizzato dopo il NAME valore, sotto la mappa generica nella parte superiore del messaggio. |
string |
LATITUDE |
Latitudine della posizione. | double |
LONGITUDE |
Longitudine della posizione. | double |
LOCATIONNAME |
Testo visualizzato immediatamente sotto la mappa generica nella parte superiore del messaggio. | string |
Per altre informazioni sui modelli basati sulla posizione, vedi la documentazione di WhatsApp per i supporti di messaggio.
Esempio
sample_movie_location
sagoma:
Assembly del modello di messaggio basato sul percorso:
# Setting template options
templateName = "sample_movie_location"
templateLanguage = "en_us"
sample_movie_location: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
name = MessageTemplateText(name="first", text="Joe")
location = MessageTemplateLocation(name="location", location_name="Pablo Morales",
address="1 Hacker Way, Menlo Park, CA 94025",
latitude=37.483307,longitude=122.148981)
bindings = WhatsAppMessageTemplateBindings(body=[WhatsAppMessageTemplateBindingsComponent(ref_value=name.name)],
header=[WhatsAppMessageTemplateBindingsComponent(ref_value=location.name)])
sample_movie_location.bindings = bindings
sample_movie_location.template_values=[name,location]
template_options = TemplateNotificationContent(
channel_registration_id=self.channel_id, to=[self.phone_number], template=sample_movie_location)
Inviare un messaggio modello con pulsanti di chiamata all'azione con collegamento dinamico
Usare MessageTemplateQuickAction
per definire il suffisso URL per i pulsanti di chiamata all'azione e MessageTemplateQuickAction
l'oggetto hanno i due attributi seguenti.
Proprietà | Descrizione | Type |
---|---|---|
Nome | Oggetto name utilizzato per cercare il valore in MessageTemplateWhatsAppBindings . |
string |
Testo | Oggetto text aggiunto all'URL. |
string |
Pulsanti di definizione del modello:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
L'ordine in cui i pulsanti vengono visualizzati nella definizione del modello deve corrispondere all'ordine in cui i pulsanti vengono definiti durante la creazione dei binding con MessageTemplateWhatsAppBindings
.
Esempio
sample_purchase_feedback
sagoma:
Questo modello di esempio aggiunge un pulsante con un collegamento URL dinamico al messaggio. Usa anche un'immagine nell'intestazione e un parametro di testo nel corpo. Creare modelli di pulsanti di chiamata all'azione con Dynamic
tipo di URL per View website
il tipo di azione.
In questo esempio l'intestazione del modello richiede un'immagine:
{
"type": "HEADER",
"format": "IMAGE"
},
Il corpo del modello richiede un parametro di testo:
{
"type": "BODY",
"text": "Thank you for purchasing {{1}}! We value your feedback and would like to learn more about your experience."
},
Il modello include un pulsante URL dinamico con un parametro:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Creare un MessageTemplateImage
oggetto , uno MessageTemplateText
e una MessageTemplateQuickAction
variabile. Assemblare quindi l'elenco di MessageTemplateValue
e MessageTemplateWhatsAppBindings
specificando i parametri nell'ordine in cui i parametri vengono visualizzati nel contenuto del modello. L'ordine è importante anche quando si definiscono i pulsanti dei binding.
# Setting template options
templateName = "sample_purchase_feedback"
templateLanguage = "en_us"
imageUrl = "https://aka.ms/acsicon1"
sample_purchase_feedback: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
name = MessageTemplateText(name="first", text="Joe")
image = MessageTemplateImage(name="image", url=imageUrl)
uri_to_click = MessageTemplateQuickAction(name="url", text="questions")
bindings = WhatsAppMessageTemplateBindings(body=[WhatsAppMessageTemplateBindingsComponent(ref_value=name.name)],
header=[WhatsAppMessageTemplateBindingsComponent(ref_value=image.name)],
buttons=[WhatsAppMessageTemplateBindingsButton(sub_type=WhatsAppMessageButtonSubType.URL,
ref_value=uri_to_click.name)])
sample_purchase_feedback.bindings = bindings
sample_purchase_feedback.template_values=[name, image, uri_to_click]
template_options = TemplateNotificationContent(
channel_registration_id=self.channel_id, to=[self.phone_number], template=sample_purchase_feedback)
Esempio completo
import os
import sys
sys.path.append("..")
class SendWhatsAppTemplateMessageSample(object):
connection_string = os.getenv("COMMUNICATION_SAMPLES_CONNECTION_STRING")
phone_number = os.getenv("RECIPIENT_PHONE_NUMBER")
channel_id = os.getenv("WHATSAPP_CHANNEL_ID")
def send_template_message_without_parameters(self):
from azure.communication.messages import NotificationMessagesClient
from azure.communication.messages.models import ( TemplateNotificationContent , MessageTemplate )
# client creation
messaging_client = NotificationMessagesClient.from_connection_string(self.connection_string)
input_template: MessageTemplate = MessageTemplate(
name="<<TEMPLATE_NAME>>",
language="<<LANGUAGE>>")
template_options = TemplateNotificationContent(
channel_registration_id=self.channelRegistrationId,
to=[self.phone_number],
template=input_template
)
# calling send() with WhatsApp template details.
message_responses = messaging_client.send(template_options)
response = message_responses.receipts[0]
if (response is not None):
print("WhatsApp Templated Message with message id {} was successfully sent to {}"
.format(response.message_id, response.to))
else:
print("Message failed to send")
def send_template_message_with_parameters(self):
from azure.communication.messages import NotificationMessagesClient
from azure.communication.messages.models import (TemplateNotificationContent, MessageTemplate,
MessageTemplateText, WhatsAppMessageTemplateBindings, WhatsAppMessageTemplateBindingsComponent)
messaging_client = NotificationMessagesClient.from_connection_string(self.connection_string)
# Setting template options
templateName = "sample_shipping_confirmation"
templateLanguage = "en_us"
shippingConfirmationTemplate: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
threeDays = MessageTemplateText(name="threeDays", text="3")
bindings = WhatsAppMessageTemplateBindings(body=[WhatsAppMessageTemplateBindingsComponent(ref_value=threeDays.name)])
shippingConfirmationTemplate.bindings = bindings
shippingConfirmationTemplate.template_values=[threeDays]
template_options = TemplateNotificationContent(
channel_registration_id=self.channel_id, to=[self.phone_number], template=shippingConfirmationTemplate
)
# calling send() with whatsapp message details
message_responses = messaging_client.send(template_options)
response = message_responses.receipts[0]
print("WhatsApp text parameters Templated Message with message id {} was successfully sent to {}"
.format(response.message_id, response.to))
def send_template_message_with_media(self):
from azure.communication.messages import NotificationMessagesClient
from azure.communication.messages.models import (TemplateNotificationContent, MessageTemplate,
MessageTemplateText, WhatsAppMessageTemplateBindings, WhatsAppMessageTemplateBindingsComponent,
MessageTemplateImage)
messaging_client = NotificationMessagesClient.from_connection_string(self.connection_string)
# Setting template options
templateName = "sample_movie_ticket_confirmation"
templateLanguage = "en_us"
imageUrl = "https://aka.ms/acsicon1"
sample_movie_ticket_confirmation: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
image = MessageTemplateImage(name="image", url=imageUrl)
title = MessageTemplateText(name="title", text="Contoso")
time = MessageTemplateText(name="time", text="July 1st, 2023 12:30PM")
venue = MessageTemplateText(name="venue", text="Southridge Video")
seats = MessageTemplateText(name="seats", text="Seat 1A")
bindings = WhatsAppMessageTemplateBindings(header=[WhatsAppMessageTemplateBindingsComponent(ref_value=image.name)],
body=[WhatsAppMessageTemplateBindingsComponent(ref_value=title.name),
WhatsAppMessageTemplateBindingsComponent(ref_value=time.name),
WhatsAppMessageTemplateBindingsComponent(ref_value=venue.name),
WhatsAppMessageTemplateBindingsComponent(ref_value=seats.name)])
sample_movie_ticket_confirmation.bindings = bindings
sample_movie_ticket_confirmation.template_values=[image,title,time,venue,seats]
template_options = TemplateNotificationContent(
channel_registration_id=self.channel_id, to=[self.phone_number], template=sample_movie_ticket_confirmation)
# calling send() with whatsapp message details
message_responses = messaging_client.send(template_options)
response = message_responses.receipts[0]
print("WhatsApp media parameters in templated message header with message id {} was successfully sent to {}"
.format(response.message_id, response.to))
def send_template_message_with_buttons(self):
from azure.communication.messages import NotificationMessagesClient
from azure.communication.messages.models import (TemplateNotificationContent, MessageTemplate,
MessageTemplateText, WhatsAppMessageTemplateBindings, WhatsAppMessageTemplateBindingsComponent,
MessageTemplateQuickAction, WhatsAppMessageTemplateBindingsButton, WhatsAppMessageButtonSubType)
messaging_client = NotificationMessagesClient.from_connection_string(self.connection_string)
# Setting template options
templateName = "sample_issue_resolution"
templateLanguage = "en_us"
shippingConfirmationTemplate: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
name = MessageTemplateText(name="first", text="Joe")
yes = MessageTemplateQuickAction(name="Yes", payload="Joe said yes")
no = MessageTemplateQuickAction(name="No", payload = "Joe said no")
bindings = WhatsAppMessageTemplateBindings(body=[WhatsAppMessageTemplateBindingsComponent(ref_value=name.name)])
bindings.buttons = [WhatsAppMessageTemplateBindingsButton(sub_type=WhatsAppMessageButtonSubType.QUICK_REPLY, ref_value=yes.name),
WhatsAppMessageTemplateBindingsButton(sub_type=WhatsAppMessageButtonSubType.QUICK_REPLY, ref_value=no.name)]
shippingConfirmationTemplate.bindings = bindings
shippingConfirmationTemplate.template_values=[name,yes,no]
template_options = TemplateNotificationContent(
channel_registration_id=self.channel_id, to=[self.phone_number], template=shippingConfirmationTemplate
)
# calling send() with whatsapp message details
message_responses = messaging_client.send(template_options)
response = message_responses.receipts[0]
print("WhatsApp Quick Button Templated Message with message id {} was successfully sent to {}"
.format(response.message_id, response.to))
def send_template_message_with_location(self):
from azure.communication.messages import NotificationMessagesClient
from azure.communication.messages.models import (TemplateNotificationContent, MessageTemplate,
MessageTemplateText, WhatsAppMessageTemplateBindings, WhatsAppMessageTemplateBindingsComponent,
MessageTemplateLocation)
messaging_client = NotificationMessagesClient.from_connection_string(self.connection_string)
# Setting template options
templateName = "sample_movie_location"
templateLanguage = "en_us"
sample_movie_location: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
name = MessageTemplateText(name="first", text="Joe")
location = MessageTemplateLocation(name="location", location_name="Pablo Morales",
address="1 Hacker Way, Menlo Park, CA 94025",
latitude=37.483307,longitude=122.148981)
bindings = WhatsAppMessageTemplateBindings(body=[WhatsAppMessageTemplateBindingsComponent(ref_value=name.name)],
header=[WhatsAppMessageTemplateBindingsComponent(ref_value=location.name)])
sample_movie_location.bindings = bindings
sample_movie_location.template_values=[name,location]
template_options = TemplateNotificationContent(
channel_registration_id=self.channel_id, to=[self.phone_number], template=sample_movie_location)
# calling send() with whatsapp message details
message_responses = messaging_client.send(template_options)
response = message_responses.receipts[0]
print("WhatsApp Location Templated Message with message id {} was successfully sent to {}"
.format(response.message_id, response.to))
def send_template_message_with_call_to_action(self):
from azure.communication.messages import NotificationMessagesClient
from azure.communication.messages.models import (TemplateNotificationContent, MessageTemplate,
MessageTemplateText, WhatsAppMessageTemplateBindings, WhatsAppMessageTemplateBindingsComponent,
MessageTemplateQuickAction, MessageTemplateImage, WhatsAppMessageTemplateBindingsButton,
WhatsAppMessageButtonSubType)
messaging_client = NotificationMessagesClient.from_connection_string(self.connection_string)
# Setting template options
templateName = "sample_purchase_feedback"
templateLanguage = "en_us"
imageUrl = "https://aka.ms/acsicon1"
sample_purchase_feedback: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
name = MessageTemplateText(name="first", text="Joe")
image = MessageTemplateImage(name="image", url=imageUrl)
uri_to_click = MessageTemplateQuickAction(name="url", text="questions")
bindings = WhatsAppMessageTemplateBindings(body=[WhatsAppMessageTemplateBindingsComponent(ref_value=name.name)],
header=[WhatsAppMessageTemplateBindingsComponent(ref_value=image.name)],
buttons=[WhatsAppMessageTemplateBindingsButton(sub_type=WhatsAppMessageButtonSubType.URL,
ref_value=uri_to_click.name)])
sample_purchase_feedback.bindings = bindings
sample_purchase_feedback.template_values=[name, image, uri_to_click]
template_options = TemplateNotificationContent(
channel_registration_id=self.channel_id, to=[self.phone_number], template=sample_purchase_feedback)
# calling send() with whatsapp message details
message_responses = messaging_client.send(template_options)
response = message_responses.receipts[0]
print("WhatsApp Call To Action Templated Message with message id {} was successfully sent to {}"
.format(response.message_id, response.to))
if __name__ == "__main__":
sample = SendWhatsAppTemplateMessageSample()
sample.send_template_message_without_parameters()
sample.send_template_message_with_parameters()
sample.send_template_message_with_buttons()
sample.send_template_message_with_location()
sample.send_template_message_with_call_to_action()
Eseguire il codice
Per eseguire il codice, assicurarsi di essere nella directory in cui si trova il file messages-quickstart.py
.
python messages-quickstart.py
Azure Communication Services - Advanced Messages Quickstart
WhatsApp Templated Message with message id <<GUID>> was successfully sent to <<ToRecipient>>