Mengirim pesan templat WhatsApp
Dokumen ini menyediakan panduan untuk mengirim pesan Templat WhatsApp menggunakan SDK Pesan Komunikasi Tingkat Lanjut.
Mengapa saya perlu mengirim pesan templat?
Bisnis hanya dapat mengirim pesan templat hingga pengguna mengirim pesan ke bisnis.
Bisnis atau pengguna dapat memulai jendela percakapan, tetapi bisnis terbatas pada jenis pesan yang dapat mereka kirim. Hanya setelah pengguna mengirim pesan ke bisnis, bisnis diizinkan untuk mengirim pesan teks atau media kepada pengguna selama percakapan aktif. Setelah jendela percakapan 24 jam kedaluwarsa, percakapan harus diinisiasi kembali. Untuk mempelajari selengkapnya tentang percakapan, lihat definisi di WhatsApp Business Platform.
Untuk persyaratan WhatsApp lebih lanjut tentang templat, lihat referensi WHATSApp Business Platform API:
- Membuat dan Mengelola Templat
- Komponen Templat
- Mengirim Pesan Templat
- Bisnis juga harus mematuhi persyaratan keikutsertaan sebelum mengirim pesan ke pengguna WhatsApp
Memilih templat
Saat Akun WhatsApp Business dibuat melalui portal Azure selama pendaftaran yang disematkan, serangkaian templat sampel mungkin tersedia secara otomatis untuk Anda coba. Lihat penggunaan untuk beberapa templat sampel ini di Contoh.
Buat templat
Untuk membuat templat Anda sendiri, gunakan Meta WhatsApp Manager. Ikuti instruksi di Pusat Bantuan Meta Business di Membuat templat pesan untuk akun WhatsApp Business Anda.
Mencantumkan templat
Anda bisa menampilkan templat Anda di portal Azure dengan masuk ke Templat sumber daya > Azure Communication Service Anda.
Dengan memilih templat, Anda dapat melihat detail templat.
Bidang content
detail templat mungkin menyertakan pengikatan parameter. Pengikatan parameter dapat ditandai sebagai:
- Bidang "format" dengan nilai seperti
IMAGE
. - Tanda kurung ganda mengelilingi angka, seperti
{{1}}
. Angka, yang diindeks dimulai pada 1, menunjukkan urutan di mana nilai pengikatan harus disediakan untuk membuat templat pesan.
Atau, Anda dapat melihat dan mengedit semua templat Akun WhatsApp Business Anda di templat Pesan alat> Akun Pengelola> WhatsApp.
Untuk mencantumkan templat Anda secara terprogram, Anda dapat mengambil semua templat untuk ID saluran Anda:
MessageTemplateClient messageTemplateClient = new MessageTemplateClient(connectionString);
Pageable<MessageTemplateItem> templates = messageTemplateClient.GetTemplates(channelRegistrationId);
Referensi cepat
Templat tanpa parameter
Jika templat tidak mengambil parameter, Anda tidak perlu menyediakan nilai atau pengikatan saat membuat MessageTemplate
.
var messageTemplate = new MessageTemplate(templateName, templateLanguage);
Contoh
Templat dengan parameter teks dalam isi
Gunakan MessageTemplateText
untuk menentukan parameter dalam isi yang ditandai dengan tanda kurung ganda di sekitar angka, seperti {{1}}
. Angka, yang diindeks dimulai pada 1, menunjukkan urutan di mana nilai pengikatan harus disediakan untuk membuat templat pesan.
Isi definisi templat:
{
"type": "BODY",
"text": "Message with two parameters: {{1}} and {{2}}"
},
Rakitan templat pesan:
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);
Contoh
- Gunakan contoh templat sample_shipping_confirmation
- Gunakan contoh templat sample_movie_ticket_confirmation
- Menggunakan contoh sample_happy_hour_announcement templat
- Menggunakan contoh sample_flight_confirmation templat
- Gunakan contoh templat sample_issue_resolution
- Menggunakan contoh sample_purchase_feedback templat
Templat dengan media di header
Gunakan MessageTemplateImage
, MessageTemplateVideo
, atau MessageTemplateDocument
untuk menentukan parameter media di header.
Header definisi templat yang memerlukan media gambar:
{
"type": "HEADER",
"format": "IMAGE"
},
"Format" dapat memerlukan jenis media yang berbeda. Di .NET SDK, setiap jenis media menggunakan jenis MessageTemplateValue yang sesuai.
Format | Jenis MessageTemplateValue | Tipe File |
---|---|---|
GAMBAR | MessageTemplateImage |
png, jpg |
VIDEO | MessageTemplateVideo |
mp4 |
DOKUMEN | MessageTemplateDocument |
Untuk informasi selengkapnya tentang jenis media dan batas ukuran yang didukung, lihat dokumentasi WhatsApp untuk media pesan.
Rakitan templat pesan untuk media gambar:
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);
Contoh
- GAMBAR: Gunakan contoh sample_movie_ticket_confirmation templat
- GAMBAR: Gunakan contoh templat sample_purchase_feedback
- VIDEO: Menggunakan contoh sample_happy_hour_announcement templat
- DOKUMEN: Gunakan contoh sample_flight_confirmation templat
Templat dengan tombol balasan cepat
Gunakan MessageTemplateQuickAction
untuk menentukan payload untuk tombol balasan cepat.
MessageTemplateQuickAction
objek dan memiliki tiga atribut berikut.
Khusus untuk tombol balasan cepat, ikuti panduan ini untuk membuat objek Anda MessageTemplateQuickAction
.
name
name
digunakan untuk mencari nilai diMessageTemplateWhatsAppBindings
.text
Atributtext
tidak digunakan.payload
Tombolpayload
yang ditetapkan ke tersedia dalam balasan pesan jika pengguna memilih tombol .
Tombol definisi templat:
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
Urutan tombol yang muncul dalam definisi templat harus cocok dengan urutan di mana tombol ditentukan saat membuat pengikatan dengan MessageTemplateWhatsAppBindings
.
Rakitan templat pesan:
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);
Untuk informasi selengkapnya tentang payload dalam respons balasan cepat dari pengguna, lihat dokumentasi WhatsApp untuk Menerima Panggilan Balik dari Tombol Balasan Cepat.
Contoh
Templat dengan tombol ajakan bertindak
Gunakan MessageTemplateQuickAction
untuk menentukan akhiran url untuk tombol ajakan bertindak.
MessageTemplateQuickAction
objek dan memiliki tiga atribut berikut.
Khusus untuk tombol ajakan bertindak, ikuti panduan ini untuk membuat objek Anda MessageTemplateQuickAction
.
name
name
digunakan untuk mencari nilai diMessageTemplateWhatsAppBindings
.text
Atributtext
menentukan teks yang ditambahkan ke URL.payload
Atributpayload
tidak diperlukan.
Tombol definisi templat:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Urutan tombol yang muncul dalam definisi templat harus cocok dengan urutan di mana tombol ditentukan saat membuat pengikatan dengan MessageTemplateWhatsAppBindings
.
Rakitan templat pesan:
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);
Contoh
Contoh
Contoh-contoh ini menggunakan templat sampel yang tersedia untuk Akun WhatsApp Business yang dibuat melalui pendaftaran yang disematkan portal Azure.
Gunakan contoh templat sample_template
Templat sampel bernama sample_template
tidak mengambil parameter.
Merakit MessageTemplate
dengan merujuk nama dan bahasa templat target.
string templateName = "sample_template";
string templateLanguage = "en_us";
var sampleTemplate = new MessageTemplate(templateName, templateLanguage);
Gunakan contoh templat sample_shipping_confirmation
Beberapa templat mengambil parameter. Hanya sertakan parameter yang diperlukan templat. Menyertakan parameter yang tidak ada dalam templat tidak valid.
Dalam sampel ini, isi templat memiliki satu parameter:
{
"type": "BODY",
"text": "Your package has been shipped. It will be delivered in {{1}} business days."
},
Parameter didefinisikan dengan MessageTemplateValue
nilai dan MessageTemplateWhatsAppBindings
pengikatan. Gunakan nilai dan pengikatan untuk merakit 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);
Gunakan contoh templat sample_movie_ticket_confirmation
Templat dapat memerlukan berbagai jenis parameter seperti teks dan gambar.
Dalam sampel ini, header templat memerlukan gambar:
{
"type": "HEADER",
"format": "IMAGE"
},
Dan isi templat memerlukan empat parameter teks:
{
"type": "BODY",
"text": "Your ticket for *{{1}}*\n*Time* - {{2}}\n*Venue* - {{3}}\n*Seats* - {{4}}"
},
Buat satu MessageTemplateImage
dan empat MessageTemplateText
variabel. Kemudian, kumpulkan daftar MessageTemplateValue
Dan Anda MessageTemplateWhatsAppBindings
dengan menyediakan parameter dalam urutan parameter muncul dalam konten templat.
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;
Menggunakan contoh sample_happy_hour_announcement templat
Templat sampel ini menggunakan video di header dan dua parameter teks dalam isi.
Di sini, header templat memerlukan video:
{
"type": "HEADER",
"format": "VIDEO"
},
Video harus berupa URL untuk menghosting video mp4. Untuk informasi selengkapnya tentang jenis media dan batas ukuran yang didukung, lihat dokumentasi WhatsApp untuk media pesan.
Dan isi templat memerlukan dua parameter teks:
{
"type": "BODY",
"text": "Happy hour is here! πΊππΈ\nPlease be merry and enjoy the day. π\nVenue: {{1}}\nTime: {{2}}"
},
Buat satu MessageTemplateVideo
dan dua MessageTemplateText
variabel. Kemudian, kumpulkan daftar MessageTemplateValue
Dan Anda MessageTemplateWhatsAppBindings
dengan menyediakan parameter dalam urutan parameter muncul dalam konten templat.
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;
Menggunakan contoh sample_flight_confirmation templat
Templat sampel ini menggunakan dokumen di header dan tiga parameter teks dalam isi.
Di sini, header templat memerlukan dokumen:
{
"type": "HEADER",
"format": "DOCUMENT"
},
Dokumen harus berupa URL untuk menghosting dokumen pdf. Untuk informasi selengkapnya tentang jenis media dan batas ukuran yang didukung, lihat dokumentasi WhatsApp untuk media pesan.
Dan isi templat memerlukan tiga parameter teks:
{
"type": "BODY",
"text": "This is your flight confirmation for {{1}}-{{2}} on {{3}}."
},
Buat satu MessageTemplateDocument
dan tiga MessageTemplateText
variabel. Kemudian, kumpulkan daftar MessageTemplateValue
Dan Anda MessageTemplateWhatsAppBindings
dengan menyediakan parameter dalam urutan parameter muncul dalam konten templat.
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;
Gunakan contoh templat sample_issue_resolution
Templat sampel ini menambahkan dua tombol balasan yang telah diisi sebelumnya ke pesan. Ini juga mencakup satu parameter teks dalam isi.
Di sini, isi templat memerlukan satu parameter teks:
{
"type": "BODY",
"text": "Hi {{1}}, were we able to solve the issue that you were facing?"
},
Dan templat menyertakan dua tombol balasan yang telah diisi sebelumnya, Yes
dan No
.
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
Tombol balasan cepat didefinisikan sebagai MessageTemplateQuickAction
objek dan memiliki tiga atribut:
name
name
digunakan untuk mencari nilai diMessageTemplateWhatsAppBindings
.text
Menggunakan tombol balasan cepat,text
atribut tidak digunakan.payload
Tombolpayload
yang ditetapkan ke tersedia dalam balasan pesan jika pengguna memilih tombol .
Untuk informasi selengkapnya tentang tombol, lihat dokumentasi WhatsApp untuk Objek Parameter Tombol.
Buat satu MessageTemplateText
dan dua MessageTemplateQuickAction
variabel. Kemudian, kumpulkan daftar MessageTemplateValue
Dan Anda MessageTemplateWhatsAppBindings
dengan menyediakan parameter dalam urutan parameter muncul dalam konten templat. Pesanan juga penting saat menentukan tombol pengikatan Anda.
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;
Menggunakan contoh sample_purchase_feedback templat
Templat sampel ini menambahkan tombol dengan tautan URL dinamis ke pesan. Ini juga menggunakan gambar di header dan parameter teks dalam isi.
Jika menggunakan templat sample_purchase_feedback
sampel yang dibuat sebelumnya, Anda perlu memodifikasi Jenis URL tombolnya dari Static
ke Dynamic
.
Buka Templat pesan Anda di manajer WhatsApp dan edit templat untuk sample_purchase_feedback
. Di menu dropdown untuk Jenis URL, ubah dari Static
ke Dynamic
. Sertakan URL sampel jika perlu.
Sekarang, jika Anda melihat detail templat di portal Azure, Anda akan melihat:
Dalam sampel ini, header templat memerlukan gambar:
{
"type": "HEADER",
"format": "IMAGE"
},
Di sini, isi templat memerlukan satu parameter teks:
{
"type": "BODY",
"text": "Thank you for purchasing {{1}}! We value your feedback and would like to learn more about your experience."
},
Dan templat menyertakan tombol URL dinamis dengan satu parameter:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Tombol ajakan bertindak untuk tautan situs web didefinisikan sebagai MessageTemplateQuickAction
objek dan memiliki tiga atribut:
name
name
digunakan untuk mencari nilai diMessageTemplateWhatsAppBindings
.text
Menggunakan tombol ajakan bertindak untuk tautan situs web,text
atribut menentukan teks yang ditambahkan ke URL.
Untuk contoh ini, nilai kamitext
adalahsurvey-code
. Dalam pesan yang diterima oleh pengguna, mereka disajikan dengan tombol yang menautkannya ke URLhttps://www.example.com/survey-code
.payload
Menggunakan tombol ajakan bertindak untuk tautan situs web,payload
atribut tidak diperlukan.
Untuk informasi selengkapnya tentang tombol, lihat dokumentasi WhatsApp untuk Objek Parameter Tombol.
Buat satu MessageTemplateImage
, satu MessageTemplateText
, dan satu MessageTemplateQuickAction
variabel. Kemudian, kumpulkan daftar MessageTemplateValue
Dan Anda MessageTemplateWhatsAppBindings
dengan menyediakan parameter dalam urutan parameter muncul dalam konten templat. Pesanan juga penting saat menentukan tombol pengikatan Anda.
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;
Contoh kode lengkap
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");
}
}
}
Langkah berikutnya
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk