Odeslání zpráv šablony WhatsApp
Tento dokument obsahuje pokyny k odesílání zpráv šablon Aplikace WhatsApp pomocí sady SDK pro pokročilé komunikační zprávy.
Proč potřebuji odeslat zprávu šablony?
Firma může posílat zprávy šablony jenom do doby, než uživatel odešle zprávu do firmy.
Firma nebo uživatel může zahájit okno konverzace, ale firma je omezená na typy zpráv, které může odeslat. Až po odeslání zprávy uživateli do firmy může firma během aktivní konverzace odesílat textové nebo mediální zprávy. Jakmile vyprší platnost 24hodinového okna konverzace, musí se konverzace znovu zahájit. Další informace o konverzacích najdete v definici aplikace WhatsApp Business Platform.
Další požadavky WhatsAppu na šablony najdete v referenčních informacích k rozhraní WhatsApp Business Platform API:
- Vytváření a správa šablon
- Součásti šablon
- Odesílání zpráv šablony
- Firmy musí také dodržovat požadavky na výslovný souhlas před odesíláním zpráv uživatelům WhatsAppu.
Výběr šablony
Když se během vložené registrace vytvoří účet WhatsApp Business prostřednictvím webu Azure Portal, může být sada ukázkových šablon automaticky k dispozici, abyste si to vyzkoušeli. Podívejte se na použití několika z těchto ukázkových šablon v příkladech.
Vytvoření šablony
Pokud chcete vytvořit vlastní šablony, použijte Meta WhatsApp Manager. Postupujte podle pokynů v Centru nápovědy Meta Business při vytváření šablon zpráv pro váš účet WhatsApp Business.
Výpis šablon
Šablony můžete zobrazit na webu Azure Portal tak, že přejdete na šablony prostředků > služby Azure Communication Service.
Výběrem šablony můžete zobrazit podrobnosti o šabloně.
Pole content
podrobností šablony může zahrnovat vazby parametrů. Vazby parametrů lze oznamovat takto:
- Pole "format" s hodnotou, například
IMAGE
. - Dvojité závorky obklopují číslo, například
{{1}}
. Číslo indexované na 1 označuje pořadí, ve kterém musí být zadány hodnoty vazby k vytvoření šablony zprávy.
Případně můžete zobrazit a upravit všechny šablony vašeho účtu WhatsApp Business v nástrojích> Pro účty WhatsApp Manageru> Šablony zpráv.
Pokud chcete zobrazit seznam šablon prostřednictvím kódu programu, můžete načíst všechny šablony pro ID kanálu:
MessageTemplateClient messageTemplateClient = new MessageTemplateClient(connectionString);
Pageable<MessageTemplateItem> templates = messageTemplateClient.GetTemplates(channelRegistrationId);
Stručná referenční příručka
Šablony bez parametrů
Pokud šablona nepřijímá žádné parametry, nemusíte při vytváření zadávat MessageTemplate
hodnoty ani vazby .
var messageTemplate = new MessageTemplate(templateName, templateLanguage);
Příklad
Šablony s textovými parametry v textu
Slouží MessageTemplateText
k definování parametrů v těle označeném dvojitými hranatými závorkami kolem čísla, například {{1}}
. Číslo indexované na 1 označuje pořadí, ve kterém musí být zadány hodnoty vazby k vytvoření šablony zprávy.
Tělo definice šablony:
{
"type": "BODY",
"text": "Message with two parameters: {{1}} and {{2}}"
},
Sestavení šablony zpráv:
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);
Příklady
- Použití ukázkové šablony sample_shipping_confirmation
- Použití ukázkové šablony sample_movie_ticket_confirmation
- Použití ukázkové šablony sample_happy_hour_announcement
- Použití ukázkové šablony sample_flight_confirmation
- Použití ukázkové šablony sample_issue_resolution
- Použití ukázkové šablony sample_purchase_feedback
Šablony s multimédii v záhlaví
Použijte MessageTemplateImage
, MessageTemplateVideo
nebo MessageTemplateDocument
definujte parametr média v hlavičce.
Hlavička definice šablony vyžadující médium obrázku:
{
"type": "HEADER",
"format": "IMAGE"
},
Formát může vyžadovat různé typy médií. V sadě .NET SDK každý typ média používá odpovídající typ MessageTemplateValue.
Formát | MessageTemplateValue – typ | Typ souboru |
---|---|---|
IMAGE | MessageTemplateImage |
png, jpg |
VIDEO | MessageTemplateVideo |
mp4 |
DOKUMENTU | MessageTemplateDocument |
Další informace o podporovaných typech médií a omezení velikosti najdete v dokumentaci aplikace WhatsApp k médiím zpráv.
Sestavení šablony zpráv pro médium obrázku:
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);
Příklady
- OBRÁZEK: Použití ukázkové šablony sample_movie_ticket_confirmation
- OBRÁZEK: Použití ukázkové šablony sample_purchase_feedback
- VIDEO: Použití ukázkové šablony sample_happy_hour_announcement
- DOKUMENT: Použití ukázkové šablony sample_flight_confirmation
Šablony s tlačítky pro rychlé odpovědi
Slouží MessageTemplateQuickAction
k definování datové části pro tlačítka pro rychlé odpovědi.
MessageTemplateQuickAction
objekty a mají následující tři atributy.
Konkrétně pro tlačítka rychlých odpovědí postupujte podle těchto pokynů a vytvořte objekt MessageTemplateQuickAction
.
name
Sloužíname
k vyhledání hodnoty vMessageTemplateWhatsAppBindings
.text
Atributtext
se nepoužívá.payload
Přiřazenípayload
k tlačítku je k dispozici ve zprávě odpovědět, pokud uživatel tlačítko vybere.
Tlačítka definice šablony:
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
Pořadí, ve kterém se tlačítka zobrazují v definici šablony, by se měla shodovat s pořadím, ve kterém jsou tlačítka definována při vytváření vazeb pomocí MessageTemplateWhatsAppBindings
.
Sestavení šablony zpráv:
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);
Další informace o datové části v rychlých odpovědích od uživatele najdete v dokumentaci aplikace WhatsApp k přijetí zpětného volání z tlačítka Rychlá odpověď.
Příklad
Šablony s tlačítky pro volání akcí
Slouží MessageTemplateQuickAction
k definování přípony adresy URL pro tlačítka akcí volání.
MessageTemplateQuickAction
objekty a mají následující tři atributy.
Konkrétně pro tlačítka akcí volání, postupujte podle těchto pokynů a vytvořte objekt MessageTemplateQuickAction
.
name
Sloužíname
k vyhledání hodnoty vMessageTemplateWhatsAppBindings
.text
Atributtext
definuje text, který je připojen k adrese URL.payload
Atributpayload
není povinný.
Tlačítka definice šablony:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Pořadí, ve kterém se tlačítka zobrazují v definici šablony, by se měla shodovat s pořadím, ve kterém jsou tlačítka definována při vytváření vazeb pomocí MessageTemplateWhatsAppBindings
.
Sestavení šablony zpráv:
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);
Příklad
Příklady
Tyto příklady využívají ukázkové šablony, které jsou k dispozici pro účty WhatsApp Business vytvořené prostřednictvím integrované registrace na webu Azure Portal.
Použití ukázkové šablony sample_template
Ukázková šablona s názvem sample_template
nepřijímá žádné parametry.
MessageTemplate
Sestavte odkazování na název a jazyk cílové šablony.
string templateName = "sample_template";
string templateLanguage = "en_us";
var sampleTemplate = new MessageTemplate(templateName, templateLanguage);
Použití ukázkové šablony sample_shipping_confirmation
Některé šablony přebírají parametry. Zahrnout pouze parametry, které šablona vyžaduje. Zahrnutí parametrů, které nejsou v šabloně, je neplatné.
V této ukázce má tělo šablony jeden parametr:
{
"type": "BODY",
"text": "Your package has been shipped. It will be delivered in {{1}} business days."
},
Parametry jsou definovány s MessageTemplateValue
hodnotami a MessageTemplateWhatsAppBindings
vazbami. K sestavení MessageTemplate
použijte hodnoty a vazby .
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);
Použití ukázkové šablony sample_movie_ticket_confirmation
Šablony mohou vyžadovat různé typy parametrů, jako je text a obrázky.
V této ukázce vyžaduje hlavička šablony obrázek:
{
"type": "HEADER",
"format": "IMAGE"
},
Text šablony vyžaduje čtyři textové parametry:
{
"type": "BODY",
"text": "Your ticket for *{{1}}*\n*Time* - {{2}}\n*Venue* - {{3}}\n*Seats* - {{4}}"
},
Vytvořte jednu MessageTemplateImage
a čtyři MessageTemplateText
proměnné. Pak seznam sestavíte tak, že poskytnete MessageTemplateValue
MessageTemplateWhatsAppBindings
parametry v pořadí, v jakém se parametry zobrazí v obsahu šablony.
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;
Použití ukázkové šablony sample_happy_hour_announcement
Tato ukázková šablona používá video v záhlaví a dva textové parametry v těle.
Záhlaví šablony vyžaduje video:
{
"type": "HEADER",
"format": "VIDEO"
},
Video by mělo být adresa URL hostovaného videa mp4. Další informace o podporovaných typech médií a omezení velikosti najdete v dokumentaci aplikace WhatsApp k médiím zpráv.
Text šablony vyžaduje dva textové parametry:
{
"type": "BODY",
"text": "Happy hour is here! 🍺😀🍸\nPlease be merry and enjoy the day. 🎉\nVenue: {{1}}\nTime: {{2}}"
},
Vytvořte jednu MessageTemplateVideo
a dvě MessageTemplateText
proměnné. Pak seznam sestavíte tak, že poskytnete MessageTemplateValue
MessageTemplateWhatsAppBindings
parametry v pořadí, v jakém se parametry zobrazí v obsahu šablony.
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;
Použití ukázkové šablony sample_flight_confirmation
Tato ukázková šablona používá dokument v záhlaví a tři textové parametry v textu.
Záhlaví šablony vyžaduje dokument:
{
"type": "HEADER",
"format": "DOCUMENT"
},
Dokument by měl být adresa URL hostovaného dokumentu PDF. Další informace o podporovaných typech médií a omezení velikosti najdete v dokumentaci aplikace WhatsApp k médiím zpráv.
Text šablony vyžaduje tři textové parametry:
{
"type": "BODY",
"text": "This is your flight confirmation for {{1}}-{{2}} on {{3}}."
},
Vytvořte jednu MessageTemplateDocument
a tři MessageTemplateText
proměnné. Pak seznam sestavíte tak, že poskytnete MessageTemplateValue
MessageTemplateWhatsAppBindings
parametry v pořadí, v jakém se parametry zobrazí v obsahu šablony.
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;
Použití ukázkové šablony sample_issue_resolution
Tato ukázková šablona přidá do zprávy dvě předvyplněná tlačítka pro odpovědi. Obsahuje také jeden textový parametr v těle.
Tady text šablony vyžaduje jeden textový parametr:
{
"type": "BODY",
"text": "Hi {{1}}, were we able to solve the issue that you were facing?"
},
Šablona obsahuje dvě předvyplněná tlačítka Yes
pro odpovědi a No
.
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
Tlačítka pro rychlé odpovědi jsou definována jako MessageTemplateQuickAction
objekty a mají tři atributy:
name
Sloužíname
k vyhledání hodnoty vMessageTemplateWhatsAppBindings
.text
Pomocí tlačítektext
pro rychlé odpovědi se atribut nepoužívá.payload
Přiřazenípayload
k tlačítku je k dispozici ve zprávě odpovědět, pokud uživatel tlačítko vybere.
Další informace o tlačítkách najdete v dokumentaci aplikace WhatsApp k objektu parametru tlačítka.
Vytvořte jednu MessageTemplateText
a dvě MessageTemplateQuickAction
proměnné. Pak seznam sestavíte tak, že poskytnete MessageTemplateValue
MessageTemplateWhatsAppBindings
parametry v pořadí, v jakém se parametry zobrazí v obsahu šablony. Pořadí také záleží při definování tlačítek vazby.
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;
Použití ukázkové šablony sample_purchase_feedback
Tato ukázková šablona přidá do zprávy tlačítko s dynamickým odkazem na adresu URL. Používá také obrázek v záhlaví a textový parametr v těle.
Pokud používáte předem vytvořenou ukázkovou šablonu sample_purchase_feedback
, je nutné upravit typ adresy URL jeho tlačítka z Static
do Dynamic
.
Přejděte do šablon zpráv ve Správci WhatsApp a upravte šablonu pro sample_purchase_feedback
. V rozevíracím seznamu pro typ adresy URL ho změňte na Static
Dynamic
. V případě potřeby zahrňte ukázkovou adresu URL.
Pokud teď na webu Azure Portal zobrazíte podrobnosti o šabloně, uvidíte:
V této ukázce vyžaduje hlavička šablony obrázek:
{
"type": "HEADER",
"format": "IMAGE"
},
Tady text šablony vyžaduje jeden textový parametr:
{
"type": "BODY",
"text": "Thank you for purchasing {{1}}! We value your feedback and would like to learn more about your experience."
},
Šablona obsahuje tlačítko dynamické adresy URL s jedním parametrem:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Tlačítka akcí volání pro odkazy na web jsou definována jako MessageTemplateQuickAction
objekty a mají tři atributy:
name
Sloužíname
k vyhledání hodnoty vMessageTemplateWhatsAppBindings
.text
Pomocí tlačítka akce volání pro odkazytext
na web definuje atribut text, který je připojen k adrese URL.
V tomto příkladu jesurvey-code
našetext
hodnota . Ve zprávě přijaté uživatelem se zobrazí tlačítko, které je propojí s adresou URLhttps://www.example.com/survey-code
.payload
Při použití tlačítka akce volat na odkazypayload
na web není atribut povinný.
Další informace o tlačítkách najdete v dokumentaci aplikace WhatsApp k objektu parametru tlačítka.
Vytvořte jednu MessageTemplateImage
, jednu MessageTemplateText
a jednu proměnnou MessageTemplateQuickAction
. Pak seznam sestavíte tak, že poskytnete MessageTemplateValue
MessageTemplateWhatsAppBindings
parametry v pořadí, v jakém se parametry zobrazí v obsahu šablony. Pořadí také záleží při definování tlačítek vazby.
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;
Příklad úplného kódu
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");
}
}
}
Další kroky
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro