Inviare messaggi modello WhatsApp
Importante
La funzionalità descritta in questo articolo è attualmente disponibile in anteprima pubblica. Questa versione di anteprima viene fornita senza un contratto di servizio e non è consigliabile per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.
Questo documento fornisce indicazioni per l'invio di messaggi modello WhatsApp tramite Advanced Communication Messages SDK.
Perché è necessario inviare un messaggio modello?
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 può inviare solo messaggi modello fino a quando l'utente non invia un messaggio all'azienda. Solo allora l'azienda può inviare sms o messaggi multimediali all'utente. Una volta scaduta la finestra di conversazione di 24 ore, è necessario reinizializzare la conversazione. Per altre informazioni sulle conversazioni, vedi la definizione in WhatsApp Business Platform
Per altri requisiti sui modelli, fare riferimento alle linee guida riportate nelle informazioni di riferimento sull'API WhatsApp Business Platform Creare e gestire modelli, componenti modello e invio di messaggi modello.
Le aziende devono inoltre rispettare i requisiti di consenso esplicito prima di inviare messaggi agli utenti di WhatsApp.
Scelta di un modello
Quando un account WhatsApp Business viene creato tramite il portale di Azure durante l'iscrizione incorporata, un set di modelli di esempio può essere automaticamente disponibile per voi per provare. Vedere l'utilizzo per alcuni di questi modelli di esempio in Esempi.
Creare il modello
Per creare modelli personalizzati, usa Meta WhatsApp Manager. Seguire le istruzioni nel Centro assistenza Meta Business in Creare modelli di messaggio per il tuo account WhatsApp Business.
Elencare i modelli
È possibile visualizzare i modelli nel portale di Azure passando ai modelli di risorse > del servizio di comunicazione di Azure.
Selezionando un modello, è possibile 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, 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 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:
MessageTemplateClient messageTemplateClient = new MessageTemplateClient(connectionString);
Pageable<MessageTemplateItem> templates = messageTemplateClient.GetTemplates(channelRegistrationId);
Riferimento rapido
Modelli senza parametri
Se il modello non accetta parametri, non è necessario specificare i valori o le associazioni durante la creazione di MessageTemplate
.
var messageTemplate = new MessageTemplate(templateName, templateLanguage);
Esempio
Modelli 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, indicizzato in corrispondenza di 1, indica l'ordine in cui devono essere specificati i valori di associazione per creare il modello di messaggio.
Corpo della definizione del modello:
{
"type": "BODY",
"text": "Message with two parameters: {{1}} and {{2}}"
},
Assembly del modello di messaggio:
var param1 = new MessageTemplateText(name: "first", text: "First Parameter");
var param2 = new MessageTemplateText(name: "second", text: "Second Parameter");
IEnumerable<MessageTemplateValue> values = new List<MessageTemplateValue>
{
param1,
param2
};
var bindings = new MessageTemplateWhatsAppBindings(
body: new[] { param1.Name, param2.Name });
var messageTemplate = new MessageTemplate(templateName, templateLanguage, values, bindings);
Esempi
- Usare sample_shipping_confirmation di modelli di esempio
- Usare un modello di esempio sample_movie_ticket_confirmation
- Usare sample_happy_hour_announcement modello di esempio
- Usare un modello di esempio sample_flight_confirmation
- Usare un modello di esempio sample_issue_resolution
- Usare sample_purchase_feedback modello di esempio
Modelli con supporti nell'intestazione
Usare MessageTemplateImage
, MessageTemplateVideo
o MessageTemplateDocument
per definire il parametro multimediale in un'intestazione.
Intestazione di definizione del modello che richiede supporti di immagine:
{
"type": "HEADER",
"format": "IMAGE"
},
Il "formato" può richiedere tipi di supporti diversi. In .NET SDK ogni tipo di supporto usa un tipo MessageTemplateValue corrispondente.
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.
Assembly del modello di messaggio per i supporti di immagine:
var url = new Uri("< Your media URL >");
var media = new MessageTemplateImage("image", url);
IEnumerable<MessageTemplateValue> values = new List<MessageTemplateValue>
{
media
};
var bindings = new MessageTemplateWhatsAppBindings(
header: new[] { media.Name });
var messageTemplate = new MessageTemplate(templateName, templateLanguage, values, bindings);
Esempi
- IMAGE: Usare un modello di esempio sample_movie_ticket_confirmation
- IMAGE: Usare un modello di esempio sample_purchase_feedback
- VIDEO: Usare un modello di esempio sample_happy_hour_announcement
- DOCUMENTO: Usare l'sample_flight_confirmation di modello di esempio
Modelli con pulsanti di risposta rapida
Usare MessageTemplateQuickAction
per definire il payload per i pulsanti di risposta rapida.
MessageTemplateQuickAction
gli oggetti e hanno i tre attributi seguenti.
In particolare per i pulsanti di risposta rapida, seguire queste linee guida per creare l'oggetto MessageTemplateQuickAction
.
name
Vienename
utilizzato per cercare il valore inMessageTemplateWhatsAppBindings
.text
L'attributotext
non viene usato.payload
L'oggettopayload
assegnato a un pulsante è disponibile in una risposta di messaggio se l'utente seleziona il pulsante.
Pulsanti di definizione del modello:
{
"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
.
Assembly del modello di messaggio:
var yes = new MessageTemplateQuickAction(name: "Yes", payload: "User said yes");
var no = new MessageTemplateQuickAction(name: "No", payload: "User said no");
IEnumerable<MessageTemplateValue> values = new List<MessageTemplateValue>
{
yes,
no
};
var bindings = new MessageTemplateWhatsAppBindings(
button: new[] {
new KeyValuePair<string, MessageTemplateValueWhatsAppSubType>(yes.Name,
MessageTemplateValueWhatsAppSubType.QuickReply),
new KeyValuePair<string, MessageTemplateValueWhatsAppSubType>(no.Name,
MessageTemplateValueWhatsAppSubType.QuickReply)
});
var messageTemplate = new MessageTemplate(templateName, templateLanguage, values, bindings);
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
Modelli con pulsanti di chiamata all'azione
Usare MessageTemplateQuickAction
per definire il suffisso url per i pulsanti di chiamata all'azione.
MessageTemplateQuickAction
gli oggetti e hanno i tre attributi seguenti.
In particolare per i pulsanti di chiamata all'azione, seguire queste linee guida per creare l'oggetto MessageTemplateQuickAction
.
name
Vienename
utilizzato per cercare il valore inMessageTemplateWhatsAppBindings
.text
L'attributotext
definisce il testo aggiunto all'URL.payload
L'attributopayload
non è obbligatorio.
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
.
Assembly del modello di messaggio:
var urlSuffix = new MessageTemplateQuickAction(name: "text", text: "url-suffix-text");
IEnumerable<MessageTemplateValue> values = new List<MessageTemplateValue>
{
urlSuffix
};
var bindings = new MessageTemplateWhatsAppBindings(
button: new[]
{
new KeyValuePair<string, MessageTemplateValueWhatsAppSubType>(urlSuffix.Name,
MessageTemplateValueWhatsAppSubType.Url)
});
var messageTemplate = new MessageTemplate(templateName, templateLanguage, values, bindings);
Esempio
Esempi
Questi esempi usano modelli di esempio disponibili per gli account WhatsApp Business creati tramite il portale di Azure iscrizione incorporata.
Usare un modello di esempio sample_template
Il modello di esempio denominato sample_template
non 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);
Usare sample_shipping_confirmation di modelli di esempio
Alcuni modelli accettano parametri. Includere solo i parametri richiesti dal modello. L'inclusione di parametri non presenti nel modello non è valida.
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");
IEnumerable<MessageTemplateValue> values =
new List<MessageTemplateValue> { threeDays };
MessageTemplateWhatsAppBindings bindings = new MessageTemplateWhatsAppBindings(
body: new[] { threeDays.Name });
var shippingConfirmationTemplate = new MessageTemplate(templateName, templateLanguage, values, bindings);
Usare un modello di esempio sample_movie_ticket_confirmation
I modelli possono richiedere diversi tipi di parametri, ad esempio testo e immagini.
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");
IEnumerable<MessageTemplateValue> values = new List<MessageTemplateValue>
{
image,
title,
time,
venue,
seats
};
var bindings = new MessageTemplateWhatsAppBindings(
header: new[] { image.Name },
body: new[] { title.Name, time.Name, venue.Name, seats.Name });
MessageTemplate movieTicketConfirmationTemplate = new MessageTemplate(templateName, templateLanguage, values, bindings);
Usare sample_happy_hour_announcement modello di esempio
Questo modello di esempio usa un video nell'intestazione e due parametri di testo nel corpo.
In questo caso, l'intestazione del modello richiede un video:
{
"type": "HEADER",
"format": "VIDEO"
},
Il video deve essere un URL per il 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 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");
IEnumerable<MessageTemplateValue> values = new List<MessageTemplateValue>
{
video,
venue,
time
};
var bindings = new MessageTemplateWhatsAppBindings(
header: new[] { video.Name },
body: new[] { venue.Name, time.Name });
var happyHourAnnouncementTemplate = MessageTemplate(templateName, templateLanguage, values, 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.
In questo caso, 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");
IEnumerable<MessageTemplateValue> values = new List<MessageTemplateValue>
{
document,
firstName,
lastName,
date
};
var bindings = new MessageTemplateWhatsAppBindings(
header: new[] { document.Name },
body: new[] { firstName.Name, lastName.Name, date.Name });
var flightConfirmationTemplate = new MessageTemplate(templateName, templateLanguage, values, bindings);
Usare un modello di esempio sample_issue_resolution
Questo modello di esempio aggiunge due pulsanti di risposta precompilato al messaggio. Include anche un parametro di testo nel corpo.
In questo caso, 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"
}
]
}
I pulsanti di risposta rapida sono definiti come MessageTemplateQuickAction
oggetti e hanno tre attributi:
name
Vienename
utilizzato per cercare il valore inMessageTemplateWhatsAppBindings
.text
Usando i pulsanti di risposta rapida, l'attributotext
non viene usato.payload
L'oggettopayload
assegnato a un pulsante è disponibile in una risposta di messaggio se l'utente seleziona il pulsante.
Per altre informazioni sui pulsanti, vedi la documentazione di WhatsApp per l'oggetto parametro button.
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 dell'associazione.
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");
IEnumerable<MessageTemplateValue> values = new List<MessageTemplateValue>
{
name,
yes,
no
};
var bindings = new MessageTemplateWhatsAppBindings(
body: new[] { name.Name },
button: new[] {
new KeyValuePair<string, MessageTemplateValueWhatsAppSubType>(yes.Name,
MessageTemplateValueWhatsAppSubType.QuickReply),
new KeyValuePair<string, MessageTemplateValueWhatsAppSubType>(no.Name,
MessageTemplateValueWhatsAppSubType.QuickReply)
});
var issueResolutionTemplate = new MessageTemplate(templateName, templateLanguage, values, bindings);
Usare sample_purchase_feedback modello di esempio
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.
Se si usa il modello sample_purchase_feedback
di esempio precreato, è necessario modificare il tipo di URL del relativo pulsante da Static
a Dynamic
.
Vai ai modelli di messaggio nel gestore WhatsApp e modifica il modello per sample_purchase_feedback
. Nell'elenco a discesa Tipo di URL modificarlo da Static
a Dynamic
. Se necessario, includere un URL di esempio.
Ora, se si visualizzano i dettagli del modello nella portale di Azure, viene visualizzato quanto segue:
In questo esempio l'intestazione del modello richiede un'immagine:
{
"type": "HEADER",
"format": "IMAGE"
},
In questo caso, 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}}"
}
]
}
I pulsanti di chiamata all'azione per i collegamenti al sito Web sono definiti come MessageTemplateQuickAction
oggetti e hanno tre attributi:
name
Vienename
utilizzato per cercare il valore inMessageTemplateWhatsAppBindings
.text
Usando il pulsante call to action per i collegamenti al sito Web, l'attributotext
definisce il testo aggiunto all'URL.
Per questo esempio, iltext
valore èsurvey-code
. Nel messaggio ricevuto dall'utente viene visualizzato un pulsante che li collega all'URLhttps://www.example.com/survey-code
.payload
Usando il pulsante call to action per i collegamenti al sito Web, l'attributopayload
non è obbligatorio.
Per altre informazioni sui pulsanti, vedi la documentazione di WhatsApp per l'oggetto parametro button.
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 dell'associazione.
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");
IEnumerable<MessageTemplateValue> values = new List<MessageTemplateValue>
{
image,
product,
urlSuffix
};
var bindings = new MessageTemplateWhatsAppBindings(
header: new[] { image.Name },
body: new[] { product.Name },
button: new[]
{
new KeyValuePair<string, MessageTemplateValueWhatsAppSubType>(urlSuffix.Name,
MessageTemplateValueWhatsAppSubType.Url)
});
var purchaseFeedbackTemplate = new MessageTemplate(templateName, templateLanguage, values, bindings);
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;
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);
string channelRegistrationId = "<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 (MessageTemplateItem template in templates)
{
Console.WriteLine("Name: {0}\tLanguage: {1}\tStatus: {2}\tChannelType: {3}\nContent: {4}\n",
template.Name, template.Language, template.Status, template.ChannelType, template.WhatsApp.Content);
}
// Send Sample Template sample_template
MessageTemplate sampleTemplate = AssembleSampleTemplate();
var sampleTemplateMessageOptions = new SendMessageOptions(channelRegistrationId, recipientList, sampleTemplate);
var result = await notificationMessagesClient.SendMessageAsync(sampleTemplateMessageOptions);
PrintResponse(result);
// Send sample template sample_shipping_confirmation
MessageTemplate shippingConfirmationTemplate = AssembleSampleShippingConfirmation();
var shippingConfirmationTemplateMessageOptions = new SendMessageOptions(channelRegistrationId, recipientList, shippingConfirmationTemplate);
result = await notificationMessagesClient.SendMessageAsync(shippingConfirmationTemplateMessageOptions);
PrintResponse(result);
// Send sample template sample_movie_ticket_confirmation
MessageTemplate movieTicketConfirmationTemplate = AssembleSampleMovieTicketConfirmation();
var movieTicketConfirmationTemplateMessageOptions = new SendMessageOptions(channelRegistrationId, recipientList, movieTicketConfirmationTemplate);
result = await notificationMessagesClient.SendMessageAsync(movieTicketConfirmationTemplateMessageOptions);
PrintResponse(result);
// Send sample template sample_happy_hour_announcement
MessageTemplate happyHourTemplate = AssembleSampleHappyHourAnnouncement();
var happyHourTemplateMessageOptions = new SendMessageOptions(channelRegistrationId, recipientList, happyHourTemplate);
result = await notificationMessagesClient.SendMessageAsync(happyHourTemplateMessageOptions);
PrintResponse(result);
// Send sample template sample_flight_confirmation
MessageTemplate flightConfirmationTemplate = AssembleSampleFlightConfirmation();
var flightConfirmationTemplateMessageOptions = new SendMessageOptions(channelRegistrationId, recipientList, flightConfirmationTemplate);
result = await notificationMessagesClient.SendMessageAsync(flightConfirmationTemplateMessageOptions);
PrintResponse(result);
// Send sample template sample_issue_resolution
MessageTemplate issueResolutionTemplate = AssembleSampleIssueResolution();
var issueResolutionTemplateMessageOptions = new SendMessageOptions(channelRegistrationId, recipientList, issueResolutionTemplate);
result = await notificationMessagesClient.SendMessageAsync(issueResolutionTemplateMessageOptions);
PrintResponse(result);
// Send sample template sample_purchase_feedback
MessageTemplate purchaseFeedbackTemplate = AssembleSamplePurchaseFeedback();
var purchaseFeedbackTemplateMessageOptions = new SendMessageOptions(channelRegistrationId, recipientList, purchaseFeedbackTemplate);
result = await notificationMessagesClient.SendMessageAsync(purchaseFeedbackTemplateMessageOptions);
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");
IEnumerable<MessageTemplateValue> values = new List<MessageTemplateValue>
{
threeDays
};
var bindings = new MessageTemplateWhatsAppBindings(
body: new[] { threeDays.Name });
return new MessageTemplate(templateName, templateLanguage, values, bindings);
}
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");
IEnumerable<MessageTemplateValue> values = new List<MessageTemplateValue>
{
image,
title,
time,
venue,
seats
};
var bindings = new MessageTemplateWhatsAppBindings(
header: new[] { image.Name },
body: new[] { title.Name, time.Name, venue.Name, seats.Name });
return new MessageTemplate(templateName, templateLanguage, values, bindings);
}
public static MessageTemplate AssembleSampleHappyHourAnnouncement()
{
string templateName = "sample_happy_hour_announcement";
string templateLanguage = "en_us";
var videoUrl = new Uri("< Your .mp4 Video URL >");
var venue = new MessageTemplateText("venue", "Fourth Coffee");
var time = new MessageTemplateText("time", "Today 2-4PM");
var video = new MessageTemplateVideo("video", videoUrl);
IEnumerable<MessageTemplateValue> values = new List<MessageTemplateValue>
{
venue,
time,
video
};
var bindings = new MessageTemplateWhatsAppBindings(
header: new[] { video.Name },
body: new[] { venue.Name, time.Name });
return new MessageTemplate(templateName, templateLanguage, values, bindings);
}
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");
IEnumerable<MessageTemplateValue> values = new List<MessageTemplateValue>
{
document,
firstName,
lastName,
date
};
var bindings = new MessageTemplateWhatsAppBindings(
header: new[] { document.Name },
body: new[] { firstName.Name, lastName.Name, date.Name });
return new MessageTemplate(templateName, templateLanguage, values, bindings);
}
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");
IEnumerable<MessageTemplateValue> values = new List<MessageTemplateValue>
{
name,
yes,
no
};
var bindings = new MessageTemplateWhatsAppBindings(
body: new[] { name.Name },
button: new[] {
new KeyValuePair<string, MessageTemplateValueWhatsAppSubType>(yes.Name,
MessageTemplateValueWhatsAppSubType.QuickReply),
new KeyValuePair<string, MessageTemplateValueWhatsAppSubType>(no.Name,
MessageTemplateValueWhatsAppSubType.QuickReply)
});
return new MessageTemplate(templateName, templateLanguage, values, bindings);
}
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");
IEnumerable<MessageTemplateValue> values = new List<MessageTemplateValue>
{
image,
product,
urlSuffix
};
var bindings = new MessageTemplateWhatsAppBindings(
header: new[] { image.Name },
body: new[] { product.Name },
button: new[]
{
new KeyValuePair<string, MessageTemplateValueWhatsAppSubType>(urlSuffix.Name,
MessageTemplateValueWhatsAppSubType.Url)
});
return new MessageTemplate(templateName, templateLanguage, values, bindings);
}
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");
}
}
}