Skicka WhatsApp-mallmeddelanden
Det här dokumentet innehåller vägledning för att skicka WhatsApp-mallmeddelanden med hjälp av SDK för avancerade kommunikationsmeddelanden.
Varför behöver jag skicka ett mallmeddelande?
Ett företag kan bara skicka mallmeddelanden tills användaren skickar ett meddelande till företaget.
Ett företag eller en användare kan initiera ett konversationsfönster, men verksamheten är begränsad till vilka typer av meddelanden de kan skicka. Först när användaren har skickat ett meddelande till företaget kan företaget skicka text- eller mediemeddelanden till användaren under den aktiva konversationen. När konversationsfönstret på 24 timmar upphör att gälla måste konversationen initieras igen. Mer information om konversationer finns i definitionen på WhatsApp Business Platform.
Mer information om WhatsApp-krav för mallar finns i API-referenserna för WhatsApp Business Platform:
- Skapa och hantera mallar
- Mallkomponenter
- Skicka mallmeddelanden
- Företag måste också följa opt-in-kraven innan de skickar meddelanden till WhatsApp-användare
Välja en mall
När ett WhatsApp Business-konto skapas via Azure-portalen under inbäddad registrering kan en uppsättning exempelmallar vara automatiskt tillgängliga för dig att prova. Se användningen för några av dessa exempelmallar i Exempel.
Skapa mallen
Om du vill skapa egna mallar använder du Meta WhatsApp Manager. Följ anvisningarna i Meta Business Help Center i Skapa meddelandemallar för ditt WhatsApp Business-konto.
Lista mallar
Du kan visa dina mallar i Azure-portalen genom att gå till resursmallarna för Azure Communication Service > .
Genom att välja en mall kan du visa mallinformationen.
Fältet content
i mallinformationen kan innehålla parameterbindningar. Parameterbindningarna kan betecknas som:
- Ett formatfält med ett värde som
IMAGE
. - Dubbla hakparenteser som omger ett tal, till exempel
{{1}}
. Talet, indexerat som startades vid 1, anger i vilken ordning bindningsvärdena måste anges för att skapa meddelandemallen.
Du kan också visa och redigera alla mallar för ditt WhatsApp Business-konto i meddelandemallarna för WhatsApp Manager-kontoverktyg>>.
Om du vill visa en lista över dina mallar programmatiskt kan du hämta alla mallar för ditt kanal-ID:
MessageTemplateClient messageTemplateClient = new MessageTemplateClient(connectionString);
Pageable<MessageTemplateItem> templates = messageTemplateClient.GetTemplates(channelRegistrationId);
Snabbreferens
Mallar utan parametrar
Om mallen inte tar några parametrar behöver du inte ange värdena eller bindningarna när du MessageTemplate
skapar .
var messageTemplate = new MessageTemplate(templateName, templateLanguage);
Exempel
Mallar med textparametrar i brödtexten
Använd MessageTemplateText
för att definiera parametrar i brödtexten som anges med dubbla hakparenteser som omger ett tal, till exempel {{1}}
. Talet, indexerat som startades vid 1, anger i vilken ordning bindningsvärdena måste anges för att skapa meddelandemallen.
Malldefinitionstext:
{
"type": "BODY",
"text": "Message with two parameters: {{1}} and {{2}}"
},
Sammansättning av meddelandemall:
var param1 = new MessageTemplateText(name: "first", text: "First Parameter");
var param2 = new MessageTemplateText(name: "second", text: "Second Parameter");
WhatsAppMessageTemplateBindings bindings = new();
bindings.Body.Add(new(param1.Name));
bindings.Body.Add(new(param2.Name));
var messageTemplate = new MessageTemplate(templateName, templateLanguage);
messageTemplate.Bindings = bindings;
messageTemplate.Values.Add(param1);
messageTemplate.Values.Add(param2);
Exempel
- Använda exempelmallen sample_shipping_confirmation
- Använda exempelmallen sample_movie_ticket_confirmation
- Använda exempelmallen sample_happy_hour_announcement
- Använda exempelmallen sample_flight_confirmation
- Använda exempelmallen sample_issue_resolution
- Använda exempelmallen sample_purchase_feedback
Mallar med media i rubriken
Använd MessageTemplateImage
, MessageTemplateVideo
eller MessageTemplateDocument
för att definiera medieparametern i ett huvud.
Malldefinitionsrubrik som kräver bildmedia:
{
"type": "HEADER",
"format": "IMAGE"
},
Formatet kan kräva olika medietyper. I .NET SDK använder varje medietyp en motsvarande MessageTemplateValue-typ.
Format | MessageTemplateValue-typ | Filtyp |
---|---|---|
AVBILDNING | MessageTemplateImage |
png, jpg |
VIDEO | MessageTemplateVideo |
mp4 |
DOKUMENT | MessageTemplateDocument |
Mer information om medietyper och storleksbegränsningar som stöds finns i WhatsApps dokumentation för meddelandemedier.
Sammansättning av meddelandemallar för bildmedia:
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);
Exempel
- BILD: Använd exempelmallen sample_movie_ticket_confirmation
- BILD: Använd exempelmallen sample_purchase_feedback
- VIDEO: Använd exempelmallen sample_happy_hour_announcement
- DOKUMENT: Använd exempelmallen sample_flight_confirmation
Mallar med snabbsvarsknappar
Använd MessageTemplateQuickAction
för att definiera nyttolasten för snabbsvarsknappar.
MessageTemplateQuickAction
objekt och har följande tre attribut.
Mer specifikt för snabbsvarsknappar följer du dessa riktlinjer för att skapa ditt MessageTemplateQuickAction
objekt.
name
name
Används för att slå upp värdet iMessageTemplateWhatsAppBindings
.text
Attributettext
används inte.payload
Denpayload
tilldelade knappen är tillgänglig i ett meddelandesvar om användaren väljer knappen.
Malldefinitionsknappar:
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
Ordningen som knapparna visas i malldefinitionen ska matcha i vilken ordning knapparna definieras när bindningarna skapas med MessageTemplateWhatsAppBindings
.
Sammansättning av meddelandemall:
var yes = new MessageTemplateQuickAction(name: "Yes", payload: "User said yes");
var no = new MessageTemplateQuickAction(name: "No", payload: "User said no");
var yesButton = new WhatsAppMessageTemplateBindingsButton(WhatsAppMessageButtonSubType.QuickReply.ToString(), yes.Name);
var noButton = new WhatsAppMessageTemplateBindingsButton(WhatsAppMessageButtonSubType.QuickReply.ToString(), no.Name);
WhatsAppMessageTemplateBindings bindings = new();
bindings.Buttons.Add(yesButton);
bindings.Buttons.Add(noButton);
var messageTemplate = new MessageTemplate(templateName, templateLanguage);
messageTemplate.Bindings = bindings;
template.Values.Add(yes);
template.Values.Add(no);
Mer information om nyttolasten i snabba svarssvar från användaren finns i WhatsApps dokumentation för mottaget återanrop från en snabbsvarsknapp.
Exempel
Mallar med knappar för anrop till åtgärd
Använd MessageTemplateQuickAction
för att definiera url-suffixet för anrop till åtgärdsknappar.
MessageTemplateQuickAction
objekt och har följande tre attribut.
För knappar för anrop till åtgärd följer du dessa riktlinjer för att skapa ditt MessageTemplateQuickAction
objekt.
name
name
Används för att slå upp värdet iMessageTemplateWhatsAppBindings
.text
Attributettext
definierar den text som läggs till i URL:en.payload
Attributetpayload
krävs inte.
Malldefinitionsknappar:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Ordningen som knapparna visas i malldefinitionen ska matcha i vilken ordning knapparna definieras när bindningarna skapas med MessageTemplateWhatsAppBindings
.
Sammansättning av meddelandemall:
var urlSuffix = new MessageTemplateQuickAction(name: "text", text: "url-suffix-text");
var urlButton = new WhatsAppMessageTemplateBindingsButton(WhatsAppMessageButtonSubType.Url.ToString(), urlSuffix.Name);
WhatsAppMessageTemplateBindings bindings = new();
bindings.Buttons.Add(urlButton);
var messageTemplate = new MessageTemplate(templateName, templateLanguage);
messageTemplate.Bindings = bindings;
messageTemplate.Values.Add(urlSuffix);
Exempel
Exempel
I de här exemplen används exempelmallar som är tillgängliga för WhatsApp Business-konton som skapats via azure-portalens inbäddade registrering.
Använda exempelmallen sample_template
Exempelmallen med namnet sample_template
tar inga parametrar.
MessageTemplate
Sammanställ genom att referera till målmallens namn och språk.
string templateName = "sample_template";
string templateLanguage = "en_us";
var sampleTemplate = new MessageTemplate(templateName, templateLanguage);
Använda exempelmallen sample_shipping_confirmation
Vissa mallar tar parametrar. Inkludera endast de parametrar som mallen kräver. Att inkludera parametrar som inte finns i mallen är ogiltigt.
I det här exemplet har mallens brödtext en parameter:
{
"type": "BODY",
"text": "Your package has been shipped. It will be delivered in {{1}} business days."
},
Parametrar definieras med MessageTemplateValue
värden och MessageTemplateWhatsAppBindings
bindningar. Använd värdena och bindningarna för att montera 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);
Använda exempelmallen sample_movie_ticket_confirmation
Mallar kan kräva olika typer av parametrar, till exempel text och bilder.
I det här exemplet kräver mallens huvud en bild:
{
"type": "HEADER",
"format": "IMAGE"
},
Och brödtexten i mallen kräver fyra textparametrar:
{
"type": "BODY",
"text": "Your ticket for *{{1}}*\n*Time* - {{2}}\n*Venue* - {{3}}\n*Seats* - {{4}}"
},
Skapa en MessageTemplateImage
och fyra MessageTemplateText
variabler. Sedan sammanställer du din lista över MessageTemplateValue
och dina MessageTemplateWhatsAppBindings
genom att ange parametrarna i den ordning som parametrarna visas i mallinnehållet.
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;
Använda exempelmallen sample_happy_hour_announcement
Den här exempelmallen använder en video i rubriken och två textparametrar i brödtexten.
Här kräver mallens huvud en video:
{
"type": "HEADER",
"format": "VIDEO"
},
Videon ska vara en URL till mp4-video som värd. Mer information om medietyper och storleksbegränsningar som stöds finns i WhatsApps dokumentation för meddelandemedier.
Och brödtexten i mallen kräver två textparametrar:
{
"type": "BODY",
"text": "Happy hour is here! 🍺😀🍸\nPlease be merry and enjoy the day. 🎉\nVenue: {{1}}\nTime: {{2}}"
},
Skapa en MessageTemplateVideo
och två MessageTemplateText
variabler. Sedan sammanställer du din lista över MessageTemplateValue
och dina MessageTemplateWhatsAppBindings
genom att ange parametrarna i den ordning som parametrarna visas i mallinnehållet.
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;
Använda exempelmallen sample_flight_confirmation
Den här exempelmallen använder ett dokument i rubriken och tre textparametrar i brödtexten.
Här kräver mallens huvud ett dokument:
{
"type": "HEADER",
"format": "DOCUMENT"
},
Dokumentet ska vara en URL till ett pdf-dokument med värd. Mer information om medietyper och storleksbegränsningar som stöds finns i WhatsApps dokumentation för meddelandemedier.
Och brödtexten i mallen kräver tre textparametrar:
{
"type": "BODY",
"text": "This is your flight confirmation for {{1}}-{{2}} on {{3}}."
},
Skapa en MessageTemplateDocument
och tre MessageTemplateText
variabler. Sedan sammanställer du din lista över MessageTemplateValue
och dina MessageTemplateWhatsAppBindings
genom att ange parametrarna i den ordning som parametrarna visas i mallinnehållet.
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;
Använda exempelmallen sample_issue_resolution
Den här exempelmallen lägger till två förifyllda svarsknappar i meddelandet. Den innehåller också en textparameter i brödtexten.
Här kräver brödtexten i mallen en textparameter:
{
"type": "BODY",
"text": "Hi {{1}}, were we able to solve the issue that you were facing?"
},
Och mallen innehåller två förifyllda svarsknappar och Yes
No
.
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
Snabbsvarsknappar definieras som MessageTemplateQuickAction
objekt och har tre attribut:
name
name
Används för att slå upp värdet iMessageTemplateWhatsAppBindings
.text
Med snabbsvarsknapparnatext
används inte attributet.payload
Denpayload
tilldelade knappen är tillgänglig i ett meddelandesvar om användaren väljer knappen.
Mer information om knappar finns i WhatsApps dokumentation för Knappparameterobjekt.
Skapa en MessageTemplateText
och två MessageTemplateQuickAction
variabler. Sedan sammanställer du din lista över MessageTemplateValue
och dina MessageTemplateWhatsAppBindings
genom att ange parametrarna i den ordning som parametrarna visas i mallinnehållet. Ordningen är också viktig när du definierar bindningens knappar.
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;
Använda exempelmallen sample_purchase_feedback
Den här exempelmallen lägger till en knapp med en dynamisk URL-länk till meddelandet. Den använder också en bild i rubriken och en textparameter i brödtexten.
Om du använder den förskapade exempelmallen sample_purchase_feedback
måste du ändra URL-typen för dess knapp från Static
till Dynamic
.
Gå till dina meddelandemallar i WhatsApp Manager och redigera mallen för sample_purchase_feedback
. I listrutan för URL-typ ändrar du den från Static
till Dynamic
. Inkludera en exempel-URL om det behövs.
Om du nu visar mallinformationen i Azure-portalen ser du:
I det här exemplet kräver mallens huvud en bild:
{
"type": "HEADER",
"format": "IMAGE"
},
Här kräver brödtexten i mallen en textparameter:
{
"type": "BODY",
"text": "Thank you for purchasing {{1}}! We value your feedback and would like to learn more about your experience."
},
Och mallen innehåller en dynamisk URL-knapp med en parameter:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Anrop till åtgärdsknappar för webbplatslänkar definieras som MessageTemplateQuickAction
objekt och har tre attribut:
name
name
Används för att slå upp värdet iMessageTemplateWhatsAppBindings
.text
Med knappen anrop till åtgärd för webbplatslänkartext
definierar attributet den text som läggs till i URL:en.
I det här exemplet ärsurvey-code
vårttext
värde . I meddelandet som tas emot av användaren visas en knapp som länkar dem till URL:enhttps://www.example.com/survey-code
.payload
Med knappen anrop till åtgärd för webbplatslänkarpayload
krävs inte attributet.
Mer information om knappar finns i WhatsApps dokumentation för Knappparameterobjekt.
Skapa en MessageTemplateImage
, en MessageTemplateText
och en MessageTemplateQuickAction
variabel. Sedan sammanställer du din lista över MessageTemplateValue
och dina MessageTemplateWhatsAppBindings
genom att ange parametrarna i den ordning som parametrarna visas i mallinnehållet. Ordningen är också viktig när du definierar bindningens knappar.
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;
Fullständigt kodexempel
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");
}
}
}
Nästa steg
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för