WhatsApp şablon iletileri gönderme
Bu belge, Gelişmiş İletişim İletileri SDK'sını kullanarak WhatsApp Şablonu iletileri göndermek için rehberlik sağlar.
Neden şablon iletisi göndermem gerekiyor?
Bir işletme yalnızca kullanıcı işletmeye ileti gönderene kadar şablon iletileri gönderebilir.
bir işletme veya kullanıcı konuşma penceresi başlatabilir, ancak işletme gönderebileceği ileti türleriyle sınırlıdır. Yalnızca kullanıcı işletmeye bir ileti gönderdikten sonra, işletmenin etkin konuşma sırasında kullanıcıya metin veya medya iletileri göndermesine izin verilir. 24 saatlik konuşma penceresinin süresi dolduktan sonra konuşmanın yeniden başlatılması gerekir. Konuşmalar hakkında daha fazla bilgi edinmek için WhatsApp İş Platformu'ndaki tanıma bakın.
Şablonlarla ilgili diğer WhatsApp gereksinimleri için Bkz. WhatsApp İş Platformu API'sinin başvuruları:
- Şablon Oluşturma ve Yönetme
- Şablon Bileşenleri
- Şablon İletileri Gönderme
- İşletmelerin WhatsApp kullanıcılarına ileti göndermeden önce kabul etme gereksinimlerine de uyması gerekir
Şablon seçme
Ekli kayıt sırasında Azure portalı üzerinden bir WhatsApp Business Hesabı oluşturulduğunda, denemeniz için bir dizi örnek şablon otomatik olarak kullanılabilir. Örnekler'de bu örnek şablonlardan birkaçının kullanımına bakın.
Şablon oluşturma
Kendi şablonlarınızı oluşturmak için Meta WhatsApp Manager'ı kullanın. WhatsApp Business hesabınız için ileti şablonları oluşturma başlığındaki Meta İş Yardım Merkezi'ndeki yönergeleri izleyin.
Liste şablonları
Azure İletişim Hizmeti kaynak > Şablonlarınıza giderek şablonlarınızı Azure portalında görüntüleyebilirsiniz.
Şablon seçerek şablon ayrıntılarını görüntüleyebilirsiniz.
content
Şablon ayrıntılarının alanı parametre bağlamalarını içerebilir. Parametre bağlamaları şu şekilde belirtilebilir:
- gibi
IMAGE
bir değere sahip bir "biçim" alanı. - Bir sayıyı çevreleyen çift köşeli ayraçlar, örneğin
{{1}}
. 1'den başlanan dizine alınan sayı, ileti şablonunu oluşturmak için bağlama değerlerinin hangi sırada sağlanması gerektiğini gösterir.
Alternatif olarak, WhatsApp Business Hesabınızın tüm şablonlarını WhatsApp Manager> Hesap araçları >İleti şablonları'nda görüntüleyebilir ve düzenleyebilirsiniz.
Şablonlarınızı program aracılığıyla listelemek için kanal kimliğiniz için tüm şablonları getirebilirsiniz:
MessageTemplateClient messageTemplateClient = new MessageTemplateClient(connectionString);
Pageable<MessageTemplateItem> templates = messageTemplateClient.GetTemplates(channelRegistrationId);
Hızlı başvuru
Parametresiz şablonlar
Şablon parametre almazsa, oluştururken MessageTemplate
değerleri veya bağlamaları sağlamanız gerekmez.
var messageTemplate = new MessageTemplate(templateName, templateLanguage);
Örnek
Gövdede metin parametreleri olan şablonlar
Gövdede, gibi bir sayıyı çevreleyen çift köşeli ayraçlarla belirtilen parametreleri tanımlamak için {{1}}
kullanınMessageTemplateText
. 1'den başlanan dizine alınan sayı, ileti şablonunu oluşturmak için bağlama değerlerinin hangi sırada sağlanması gerektiğini gösterir.
Şablon tanımı gövdesi:
{
"type": "BODY",
"text": "Message with two parameters: {{1}} and {{2}}"
},
İleti şablonu derlemesi:
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);
Örnekler
- Örnek şablon sample_shipping_confirmation kullanma
- Örnek şablon sample_movie_ticket_confirmation kullanma
- Örnek şablon sample_happy_hour_announcement kullanma
- Örnek şablon sample_flight_confirmation kullanma
- Örnek şablon sample_issue_resolution kullanma
- Örnek şablon sample_purchase_feedback kullanma
Üst bilgide medya bulunan şablonlar
Bir üst bilgide media parametresini tanımlamak için , MessageTemplateVideo
veya MessageTemplateDocument
kullanınMessageTemplateImage
.
Görüntü medyası gerektiren şablon tanımı üst bilgisi:
{
"type": "HEADER",
"format": "IMAGE"
},
"Biçim" farklı medya türleri gerektirebilir. .NET SDK'sında, her medya türü karşılık gelen bir MessageTemplateValue türü kullanır.
Biçimlendir | MessageTemplateValue Türü | Dosya Türü |
---|---|---|
GÖRÜNTÜ | MessageTemplateImage |
png, jpg |
VİDEO | MessageTemplateVideo |
mp4 |
BELGE | MessageTemplateDocument |
Desteklenen medya türleri ve boyut sınırları hakkında daha fazla bilgi için bkz . WhatsApp'ın ileti medyası belgeleri.
Görüntü medyası için ileti şablonu derlemesi:
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);
Örnekler
- GÖRÜNTÜ: Örnek şablon sample_movie_ticket_confirmation kullanma
- GÖRÜNTÜ: Örnek şablon sample_purchase_feedback kullanma
- VİDEO: Örnek şablon sample_happy_hour_announcement kullanma
- BELGE: Örnek şablon sample_flight_confirmation kullanma
Hızlı yanıt düğmelerine sahip şablonlar
Hızlı yanıt düğmelerinin yükünü tanımlamak için kullanın MessageTemplateQuickAction
.
MessageTemplateQuickAction
ve aşağıdaki üç özniteliğe sahiptir.
Özellikle hızlı yanıt düğmeleri için, nesnenizi MessageTemplateQuickAction
oluşturmak için bu yönergeleri izleyin.
name
name
içindeki değeriMessageTemplateWhatsAppBindings
aramak için kullanılır.text
text
özniteliği kullanılmaz.payload
Birpayload
düğmeye atanan, kullanıcı düğmeyi seçerse ileti yanıtında kullanılabilir.
Şablon tanımı düğmeleri:
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
Düğmelerin şablon tanımında görünme sırası, ile bağlamaları oluştururken düğmelerin tanımlanma sırasıyla MessageTemplateWhatsAppBindings
eşleşmelidir.
İleti şablonu derlemesi:
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);
Kullanıcıdan gelen hızlı yanıt yanıtlarındaki yük hakkında daha fazla bilgi için Hızlı Yanıt Düğmesi'nden Geri Çağrı Alındı için WhatsApp belgelerine bakın.
Örnek
Eylem çağrısı düğmelerine sahip şablonlar
Eyleme çağrı düğmelerinin URL son ekini tanımlamak için kullanın MessageTemplateQuickAction
.
MessageTemplateQuickAction
ve aşağıdaki üç özniteliğe sahiptir.
Özellikle eyleme çağrı düğmeleri için, nesnenizi MessageTemplateQuickAction
oluşturmak için bu yönergeleri izleyin.
name
name
içindeki değeriMessageTemplateWhatsAppBindings
aramak için kullanılır.text
özniteliği,text
URL'ye eklenen metni tanımlar.payload
payload
Özniteliği gerekli değildir.
Şablon tanımı düğmeleri:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Düğmelerin şablon tanımında görünme sırası, ile bağlamaları oluştururken düğmelerin tanımlanma sırasıyla MessageTemplateWhatsAppBindings
eşleşmelidir.
İleti şablonu derlemesi:
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);
Örnek
Örnekler
Bu örneklerde, Azure portalı ekli kaydolma aracılığıyla oluşturulan WhatsApp Business Hesapları için sağlanan örnek şablonlar kullanılmaktadır.
Örnek şablon sample_template kullanma
adlı sample_template
örnek şablon parametre almaz.
Hedef şablonun MessageTemplate
adına ve diline başvurarak öğesini derleyin.
string templateName = "sample_template";
string templateLanguage = "en_us";
var sampleTemplate = new MessageTemplate(templateName, templateLanguage);
Örnek şablon sample_shipping_confirmation kullanma
Bazı şablonlar parametre alır. Yalnızca şablonun gerektirdiği parametreleri ekleyin. Şablonda olmayan parametrelerin dahil olması geçersiz.
Bu örnekte, şablonun gövdesinde bir parametre vardır:
{
"type": "BODY",
"text": "Your package has been shipped. It will be delivered in {{1}} business days."
},
Parametreler değerler ve MessageTemplateWhatsAppBindings
bağlamalarla MessageTemplateValue
tanımlanır. değerlerini ve bağlamalarını kullanarak derlemesini MessageTemplate
kullanın.
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);
Örnek şablon sample_movie_ticket_confirmation kullanma
Şablonlar, metin ve görüntü gibi çeşitli parametre türlerini gerektirebilir.
Bu örnekte, şablonun üst bilgisi bir görüntü gerektirir:
{
"type": "HEADER",
"format": "IMAGE"
},
Şablonun gövdesi dört metin parametresi gerektirir:
{
"type": "BODY",
"text": "Your ticket for *{{1}}*\n*Time* - {{2}}\n*Venue* - {{3}}\n*Seats* - {{4}}"
},
Bir MessageTemplateImage
ve dört MessageTemplateText
değişken oluşturun. Ardından, parametreleri şablon içeriğinde göründüğü sırayla sağlayarak ve listenizi MessageTemplateValue
MessageTemplateWhatsAppBindings
derleyin.
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;
Örnek şablon sample_happy_hour_announcement kullanma
Bu örnek şablon, üst bilgide bir video ve gövdede iki metin parametresi kullanır.
Burada, şablonun üst bilgisi için bir video gerekir:
{
"type": "HEADER",
"format": "VIDEO"
},
Video, barındırılan mp4 videonun URL'si olmalıdır. Desteklenen medya türleri ve boyut sınırları hakkında daha fazla bilgi için bkz . WhatsApp'ın ileti medyası belgeleri.
Şablonun gövdesi iki metin parametresi gerektirir:
{
"type": "BODY",
"text": "Happy hour is here! 🍺😀🍸\nPlease be merry and enjoy the day. 🎉\nVenue: {{1}}\nTime: {{2}}"
},
Bir MessageTemplateVideo
ve iki MessageTemplateText
değişken oluşturun. Ardından, parametreleri şablon içeriğinde göründüğü sırayla sağlayarak ve listenizi MessageTemplateValue
MessageTemplateWhatsAppBindings
derleyin.
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;
Örnek şablon sample_flight_confirmation kullanma
Bu örnek şablon, üst bilgide bir belge ve gövdede üç metin parametresi kullanır.
Burada, şablonun üst bilgisi için bir belge gerekir:
{
"type": "HEADER",
"format": "DOCUMENT"
},
Belge, barındırılan pdf belgesinin URL'si olmalıdır. Desteklenen medya türleri ve boyut sınırları hakkında daha fazla bilgi için bkz . WhatsApp'ın ileti medyası belgeleri.
Şablonun gövdesi için üç metin parametresi gerekir:
{
"type": "BODY",
"text": "This is your flight confirmation for {{1}}-{{2}} on {{3}}."
},
Bir MessageTemplateDocument
ve üç MessageTemplateText
değişken oluşturun. Ardından, parametreleri şablon içeriğinde göründüğü sırayla sağlayarak ve listenizi MessageTemplateValue
MessageTemplateWhatsAppBindings
derleyin.
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;
Örnek şablon sample_issue_resolution kullanma
Bu örnek şablon, iletiye önceden doldurulmuş iki yanıt düğmesi ekler. Ayrıca gövdede bir metin parametresi içerir.
Burada, şablonun gövdesi için bir metin parametresi gerekir:
{
"type": "BODY",
"text": "Hi {{1}}, were we able to solve the issue that you were facing?"
},
Şablonda önceden doldurulmuş iki yanıt düğmesi Yes
ve No
bulunur.
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
Hızlı yanıt düğmeleri nesne olarak MessageTemplateQuickAction
tanımlanır ve üç özniteliği vardır:
name
name
içindeki değeriMessageTemplateWhatsAppBindings
aramak için kullanılır.text
Hızlı yanıt düğmeleritext
kullanıldığında özniteliği kullanılmaz.payload
Birpayload
düğmeye atanan, kullanıcı düğmeyi seçerse ileti yanıtında kullanılabilir.
Düğmeler hakkında daha fazla bilgi için Bkz. WhatsApp'ın Düğme Parametresi Nesnesi belgeleri.
Bir MessageTemplateText
ve iki MessageTemplateQuickAction
değişken oluşturun. Ardından, parametreleri şablon içeriğinde göründüğü sırayla sağlayarak ve listenizi MessageTemplateValue
MessageTemplateWhatsAppBindings
derleyin. Sıralama, bağlamanızın düğmelerini tanımlarken de önemlidir.
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;
Örnek şablon sample_purchase_feedback kullanma
Bu örnek şablon, iletiye dinamik URL bağlantısı olan bir düğme ekler. Ayrıca üst bilgide bir resim ve gövdede bir metin parametresi kullanır.
Önceden oluşturulmuş örnek şablonu sample_purchase_feedback
kullanıyorsanız, düğmesinin URL Türünü olarak Static
Dynamic
değiştirmeniz gerekir.
WhatsApp yöneticisinde İleti şablonlarınıza gidin ve şablonunu sample_purchase_feedback
düzenleyin. URL Türü açılır listesinde olarak değiştirin Static
Dynamic
. Gerekirse örnek bir URL ekleyin.
Şimdi şablon ayrıntılarını Azure portalında görüntülerseniz şunları görürsünüz:
Bu örnekte, şablonun üst bilgisi bir görüntü gerektirir:
{
"type": "HEADER",
"format": "IMAGE"
},
Burada, şablonun gövdesi için bir metin parametresi gerekir:
{
"type": "BODY",
"text": "Thank you for purchasing {{1}}! We value your feedback and would like to learn more about your experience."
},
Şablonda tek parametreli bir dinamik URL düğmesi bulunur:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Web sitesi bağlantıları için eylem çağrısı düğmeleri nesne olarak MessageTemplateQuickAction
tanımlanır ve üç özniteliği vardır:
name
name
içindeki değeriMessageTemplateWhatsAppBindings
aramak için kullanılır.text
Web sitesi bağlantıları için eylem çağrısı düğmesini kullanan öznitelik,text
URL'ye eklenen metni tanımlar.
Bu örnekte değerimiztext
şeklindedirsurvey-code
. Kullanıcı tarafından alınan iletide, url'sinehttps://www.example.com/survey-code
bağlayan bir düğme gösterilir.payload
Web sitesi bağlantılarıpayload
için eylem çağrısı düğmesini kullanarak özniteliği gerekli değildir.
Düğmeler hakkında daha fazla bilgi için Bkz. WhatsApp'ın Düğme Parametresi Nesnesi belgeleri.
Bir MessageTemplateImage
, bir ve bir MessageTemplateText
MessageTemplateQuickAction
değişken oluşturun. Ardından, parametreleri şablon içeriğinde göründüğü sırayla sağlayarak ve listenizi MessageTemplateValue
MessageTemplateWhatsAppBindings
derleyin. Sıralama, bağlamanızın düğmelerini tanımlarken de önemlidir.
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;
Tam kod örneği
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");
}
}
}
Sonraki adımlar
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin