Sdílet prostřednictvím


Odesílání zpráv šablon WhatsApp pomocí rozšířených zpráv

Tento článek popisuje, jak odesílat zprávy šablony WhatsApp pomocí sady SDK pokročilých komunikačních zpráv.

Požadavky

Objektový model

Následující třídy a rozhraní zpracovávají některé z hlavních funkcí sady SDK zpráv služby Azure Communication Services pro .NET.

Název třídy Popis
NotificationMessagesClient Připojí se k prostředku Azure Communication Services. Odesílá zprávy.
MessageTemplate Definuje, kterou šablonu použijete, a obsah vlastností šablony pro vaši zprávu.
TemplateNotificationContent Definuje "kdo" a "co" zprávy šablony, kterou chcete odeslat.

Poznámka:

Další informace najdete v sadě Azure SDK pro .NET s referenčními informacemi o oboru názvů Azure.Communication.Messages.

Podporované typy šablon WhatsApp

Typ šablony Popis
Textové šablony zpráv Šablony zpráv WhatsApp jsou specifické formáty zpráv s parametry nebo bez parametrů.
Šablony zpráv založené na médiích Šablony zpráv WhatsApp s parametry médií pro součásti záhlaví.
Interaktivní šablony zpráv Interaktivní šablony zpráv rozšiřují obsah, který můžete příjemcům posílat, včetně interaktivních tlačítek pomocí objektu komponent. Podporují se jak volání k akci, tak rychlá odpověď.
Šablony zpráv založené na poloze Šablony zpráv WhatsApp s parametry umístění v zeměpisná délka a zeměpisná šířka pro součásti záhlaví.

Běžná konfigurace

Podle těchto kroků přidejte potřebné fragmenty kódu do funkce Main souboru Program.cs .

Vytvoření a správa zprávy šablony WhatsApp

Šablony zpráv WhatsApp jsou specifické formáty zpráv, které firmy používají k odesílání oznámení nebo zpráv péče o zákazníky lidem, kteří se přihlásili k oznámením. Zprávy můžou zahrnovat připomenutí událostí, dodací informace, řešení problému nebo aktualizace plateb. Než začnete používat sadu SDK pro pokročilé zasílání zpráv k odesílání šablonovaných zpráv, musí uživatel vytvořit požadované šablony na platformě WhatsApp Business Platform.

Další informace o požadavcích Na WhatsApp pro šablony najdete v referenčních informacích k rozhraní API whatsApp Business Platform:

Ověření klienta

Sada Sdk pro zprávy používá NotificationMessagesClient k odesílání zpráv. Metoda NotificationMessagesClient se ověřuje pomocí vašeho připojovací řetězec získaného z prostředku Azure Communication Services na webu Azure Portal. Další informace o připojovací řetězec najdete v tématu access-your-connection-strings-and-service-endpoints.

Pro zjednodušení tento rychlý start používá k ověření připojovací řetězec. V produkčních prostředích doporučujeme používat instanční objekty.

Získejte připojovací řetězec z prostředku Azure Communication Services na webu Azure Portal. Vlevo přejděte na Keys kartu. Zkopírujte Connection string pole pro primární klíč. Připojovací řetězec je ve formátu endpoint=https://{your Azure Communication Services resource name}.communication.azure.com/;accesskey={secret key}.

Snímek obrazovky znázorňující prostředek Azure Communication Services na webu Azure Portal zobrazte pole Připojovací řetězec v části Primární klíč.

Nastavte proměnnou COMMUNICATION_SERVICES_CONNECTION_STRING prostředí na hodnotu připojovací řetězec.
Otevřete okno konzoly a zadejte následující příkaz:

setx COMMUNICATION_SERVICES_CONNECTION_STRING "<your connection string>"

Po přidání proměnné prostředí možná budete muset restartovat všechny spuštěné programy, které budou muset přečíst proměnnou prostředí, včetně okna konzoly. Pokud například jako editor používáte Sadu Visual Studio, restartujte sadu Visual Studio před spuštěním příkladu.

Další informace o tom, jak nastavit proměnnou prostředí pro váš systém, najdete v postupu při ukládání připojovací řetězec do proměnné prostředí.

Pokud chcete vytvořit instanci , NotificationMessagesClientpřidejte do Main metody následující kód:

// Retrieve connection string from environment variable
string connectionString = 
    Environment.GetEnvironmentVariable("COMMUNICATION_SERVICES_CONNECTION_STRING");

// Instantiate the client
var notificationMessagesClient = new NotificationMessagesClient(connectionString);

Nastavení ID registrace kanálu

Během registrace kanálu jste vytvořili identifikátor GUID ID registrace kanálu. Najdete ho na portálu na kartě Kanály vašeho prostředku Azure Communication Services.

Snímek obrazovky znázorňující prostředek Azure Communication Services na webu Azure Portal zobrazte kartu Kanály Pozornost je umístěna na akci kopírování pole

Přiřaďte ji k proměnné s názvem channelRegistrationId.

var channelRegistrationId = new Guid("<your channel registration ID GUID>");

Nastavení seznamu příjemců

Musíte zadat aktivní telefonní číslo přidružené k účtu WhatsApp. Tento účet WhatsApp obdrží šablonu, text a mediální zprávy odeslané v tomto rychlém startu.

V tomto příkladu můžete použít svoje osobní telefonní číslo.

Telefonní číslo příjemce nemůže být firemní telefonní číslo (ID odesílatele) přidružené k registraci kanálu WhatsApp. ID odesílatele se zobrazí jako odesílatel textu a mediálních zpráv odeslaných příjemci.

Telefonní číslo musí obsahovat kód země. Další informace o formátování telefonních čísel naleznete v dokumentaci WhatsApp pro formáty telefonních čísel.

Poznámka:

V seznamu příjemců se aktuálně podporuje jenom jedno telefonní číslo.

Vytvořte seznam příjemců takto:

var recipientList = new List<string> { "<to WhatsApp phone number>" };

Příklad:

// Example only
var recipientList = new List<string> { "+14255550199" };

Zahájení odesílání zpráv mezi firmou a uživatelem WhatsApp

Konverzace mezi účtem WhatsApp Business a uživatelem WhatsApp je možné zahájit jedním ze dvou způsobů:

  • Firma odešle uživateli WhatsApp zprávu šablony.
  • Uživatel WhatsApp odešle jakoukoli zprávu na firemní číslo.

Firma nemůže zahájit interaktivní konverzaci. Firma může odeslat interaktivní zprávu jenom po přijetí zprávy od uživatele. Firma může uživateli posílat jenom interaktivní zprávy během aktivní konverzace. Jakmile vyprší platnost 24hodinového okna konverzace, může interaktivní konverzaci restartovat jenom uživatel. Další informace o konverzacích najdete v definici aplikace WhatsApp Business Platform.

Pokud chcete zahájit interaktivní konverzaci z vašeho osobního účtu WhatsApp, pošlete zprávu na vaše firemní číslo (ID odesílatele).

Konverzace WhatsApp zobrazená na webu zobrazující zprávu uživatele poslanou na číslo obchodního účtu WhatsApp.

Nastavení prostředí

Vytvoření projektu .NET

Pokud chcete vytvořit projekt, postupujte podle kurzu v tématu Vytvoření konzolové aplikace .NET pomocí sady Visual Studio.

Pokud chcete kód zkompilovat, stiskněte Ctrl+F7.

Nainstalujte balíček .

Nainstalujte balíček NuGet Azure.Communication.Messages do projektu jazyka C#.

  1. Otevřete Správce balíčků NuGet na adrese Project>Manage NuGet Packages....
  2. Vyhledejte balíček Azure.Communication.Messages.
  3. Nainstalujte nejnovější verzi.

Nastavení architektury aplikace

Otevřete soubor Program.cs v textovém editoru.

Obsah souboru Program.cs nahraďte následujícím kódem:

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Azure;
using Azure.Communication.Messages;

namespace AdvancedMessagingQuickstart
{
    class Program
    {
        public static async Task Main(string[] args)
        {
            Console.WriteLine("Azure Communication Services - Advanced Messages quickstart samples.");

            // Quickstart code goes here
        }
    }
}

Pokud chcete použít funkce rozšířeného zasílání zpráv, přidejte direktivu usingAzure.Communication.Messages pro zahrnutí oboru názvů.

using Azure.Communication.Messages;

Příklady kódu

Podle těchto kroků přidejte požadované fragmenty kódu do funkce Main souboru Program.cs .

Výpis šablon WhatsApp na webu Azure Portal

Šablony můžete zobrazit na webu Azure Portal tak, že přejdete na pokročilé šablony zasílání zpráv>prostředků >služby Azure Communication Service.

Snímek obrazovky znázorňující prostředek Azure Communication Services na webu Azure Portal zobrazte kartu Pokročilé šablony zasílání zpráv >

Výběrem šablony zobrazíte podrobnosti.

Pole content podrobností šablony může obsahovat 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.

Snímek obrazovky znázorňující podrobnosti šablony

Případně můžete zobrazit a upravit všechny šablony účtu WhatsApp Business v šablonách zpráv v nástrojích> účtu WhatsApp Manager.>

Pokud chcete zobrazit seznam šablon prostřednictvím kódu programu, můžete načíst všechny šablony pro ID kanálu následujícím způsobem:

MessageTemplateClient messageTemplateClient = new MessageTemplateClient(connectionString);
Pageable<MessageTemplateItem> templates = messageTemplateClient.GetTemplates(channelRegistrationId);

Odeslání zprávy šablony bez parametrů

Pokud šablona nevyžaduje parametry, nemusíte při vytváření zadávat MessageTemplatežádné hodnoty ani vazby.

var messageTemplate = new MessageTemplate(templateName, templateLanguage); 

Příklad

Nepřebíná sample_template žádné parametry.

Snímek obrazovky znázorňující podrobnosti šablony pro šablonu s názvem sample_template

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); 

Odeslání zprávy š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, index zahájený na 1, označuje pořadí, ve kterém musí být zadány hodnoty vazby k vytvoření šablony zprávy. Zahrnutí parametrů, které nejsou v šabloně, je neplatné.

Definice šablony se dvěma parametry:

{
  "type": "BODY",
  "text": "Message with two parameters: {{1}} and {{2}}"
}

Příklady

sample_shipping_confirmation šablona:

Snímek obrazovky znázorňující podrobnosti šablony pro šablonu s názvem sample_shipping_confirmation

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í MessageTemplatepouž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);

Odeslání zprávy šablony s parametrem média v hlavičce

Použijte MessageTemplateImage, MessageTemplateVideonebo MessageTemplateDocument definujte parametr média v hlavičce.

Definice šablony s parametrem média obrázku v hlavičce:

{
  "type": "HEADER",
  "format": "IMAGE"
},

Aplikace format WhatsApp podporuje 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
DOCUMENT MessageTemplateDocument pdf

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

sample_movie_ticket_confirmation šablona:

Snímek obrazovky znázorňující podrobnosti šablony pro šablonu s názvem sample_movie_ticket_confirmation

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 MessageTemplateValueMessageTemplateWhatsAppBindings 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;

Další příklady

Odeslání zprávy šablony s umístěním v záhlaví

Slouží MessageTemplateLocation k definování parametru umístění v hlavičce.

Definice šablony pro součást záhlaví vyžadující umístění jako:

{
  "type": "header",
  "parameters": [
    {
      "type": "location",
      "location": {
        "latitude": "<LATITUDE>",
        "longitude": "<LONGITUDE>",
        "name": "<NAME>",
        "address": "<ADDRESS>"
      }
    }
  ]
}

format Můžou vyžadovat různé typy médií. V sadě .NET SDK každý typ média používá odpovídající typ MessageTemplateValue.

Vlastnosti Popis Typ
ADDRESS Adresa, která se zobrazí za NAME hodnotou pod obecnou mapou v horní části zprávy. string
LATITUDE Zeměpisná šířka umístění. double
LONGITUDE Zeměpisná délka umístění. double
LOCATIONNAME Text, který se zobrazí bezprostředně pod obecnou mapou v horní části zprávy string

Další informace o šablonách založených na poloze najdete v dokumentaci aplikace WhatsApp k médiím zpráv.

Příklad

sample_movie_location šablona:

Snímek obrazovky znázorňující podrobnosti šablony pro šablonu s názvem sample_location_template

Sestavení šablony zprávy založené na umístění:

 var location = new MessageTemplateLocation("location");
 location.LocationName = "Pablo Morales";
 location.Address = "1 Hacker Way, Menlo Park, CA 94025";
 location.Position = new Azure.Core.GeoJson.GeoPosition(longitude: 122.148981, latitude: 37.483307);

 WhatsAppMessageTemplateBindings location_bindings = new();
 location_bindings.Header.Add(new(location.Name));

 var messageTemplateWithLocation = new MessageTemplate(templateNameWithLocation, templateLanguage);
 messageTemplateWithLocation.Values.Add(location);
 messageTemplateWithLocation.Bindings = location_bindings;

Odeslání zprávy šablony pomocí tlačítek pro rychlé odpovědi

Slouží MessageTemplateQuickAction k definování datové části pro tlačítka rychlých odpovědí a MessageTemplateQuickAction objekty s následujícími třemi atributy.

Vlastnosti Popis Typ
Název Použitý name k vyhledání hodnoty v MessageTemplateWhatsAppBindings. string
Text Volitelná rychlá akce text. string
Datová část Přiřazení payload k tlačítku dostupnému ve zprávě odpovědět, pokud uživatel tlačítko vybere. string

Definice šablony s tlačítky pro rychlé odpovědi:

{
  "type": "BUTTONS",
  "buttons": [
    {
      "type": "QUICK_REPLY",
      "text": "Yes"
    },
    {
      "type": "QUICK_REPLY",
      "text": "No"
    }
  ]
}

Pořadí zobrazení tlačítek v definici šablony musí odpovídat pořadí, ve kterém jsou tlačítka definována při vytváření vazeb pomocí MessageTemplateWhatsAppBindings.

Další informace o datové části v odpovědích rychlých odpovědí od uživatele najdete v dokumentaci WhatsApp k přijetí zpětného volání z tlačítka Rychlá odpověď.

Příklad

sample_issue_resolution šablona:

Snímek obrazovky znázorňující podrobnosti šablony pro šablonu s názvem sample_issue_resolution

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"
    }
  ]
}

Vytvořte jednu MessageTemplateText a dvě MessageTemplateQuickAction proměnné. Pak seznam sestavíte tak, že poskytnete MessageTemplateValueMessageTemplateWhatsAppBindings parametry v pořadí, v jakém se parametry zobrazí v obsahu šablony. Pořadí je také důležité při definování tlačítek vazeb.

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;

Slouží MessageTemplateQuickAction k definování přípony ADRESY URL pro tlačítka akcí volání a MessageTemplateQuickAction objektu mají následující dva atributy.

Vlastnosti Popis Typ
Název Slouží name k vyhledání hodnoty v MessageTemplateWhatsAppBindings. string
Text Ten text se připojí k adrese URL. string

Tlačítka definice šablony:

{
  "type": "BUTTONS",
  "buttons": [
    {
      "type": "URL",
      "text": "Take Survey",
      "url": "https://www.example.com/{{1}}"
    }
  ]
}

Pořadí zobrazení tlačítek v definici šablony musí odpovídat pořadí, ve kterém jsou tlačítka definována při vytváření vazeb pomocí MessageTemplateWhatsAppBindings.

Příklad

sample_purchase_feedback šablona:

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.

Snímek obrazovky editoru tlačítek WhatsApp Manager Call to action panel, který zobrazuje tlačítko Typ adresy URL, které můžete použít k výběru mezi statickou a dynamickou.

V této ukázce vyžaduje hlavička šablony obrázek:

{
  "type": "HEADER",
  "format": "IMAGE"
},

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}}"
    }
  ]
}

Vytvořte jednu MessageTemplateImage, jednu MessageTemplateTexta jednu proměnnou MessageTemplateQuickAction . Pak seznam sestavíte tak, že poskytnete MessageTemplateValueMessageTemplateWhatsAppBindings parametry v pořadí, v jakém se parametry zobrazí v obsahu šablony. Pořadí je také důležité při definování tlačítek vazeb.

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;

U statických odkazů nemusíte zahrnout MessageTemplateQuickAction model, protože šablona WhatsApp obsahuje statický CallToAction odkaz bez nutnosti vstupu od uživatele.

Tlačítka definice šablony:

{
  "type": "BUTTONS",
  "buttons": [
    {
      "type": "URL",
      "text": "Take Survey",
      "url": "https://www.example.com/{{1}}"
    }
  ]
}

Příklad

purchase_feedback_static šablona:

Tato ukázková šablona přidá tlačítko se statickým odkazem na adresu URL zprávy. Používá také obrázek v záhlaví a textový parametr v těle.

Snímek obrazovky, který zobrazuje podrobnosti o šabloně purchase-feedback-static-template

V této ukázce vyžaduje hlavička šablony obrázek:

{
  "type": "HEADER",
  "format": "IMAGE"
},

Text šablony vyžaduje jeden textový parametr:

{
  "type": "BODY",
  "text": "Hello {{1}}, \nHope you are great day!.\n Please click on given link to explore about our program.."
},

Šablona obsahuje tlačítko dynamické adresy URL s jedním parametrem:

{
  "type": "BUTTONS",
  "buttons": [
    {
      "type": "URL",
      "text": "Take Survey",
      "url": "https://www.example.com/"
    }
  ]
}

Vytvořit jeden MessageTemplateImage, jeden MessageTemplateText. Pak seznam sestavíte tak, že poskytnete MessageTemplateValueMessageTemplateWhatsAppBindings parametry v pořadí, v jakém se parametry zobrazí v obsahu šablony. Pořadí je také důležité při definování tlačítek vazeb.

// Send sample template sample_template
string templateNameWithcta = "purchase_feedback_static";
var bodyParam1 = new MessageTemplateText(name: "customer", text: "Joe");
var image = new MessageTemplateImage("image", new Uri("https://aka.ms/acsicon1"));

WhatsAppMessageTemplateBindings cta_bindings = new();
cta_bindings.Body.Add(new(bodyParam1.Name));
cta_bindings.Header.Add(new(image.Name));

var messageTemplateWithcta = new MessageTemplate(templateNameWithcta, templateLanguage);
messageTemplateWithcta.Values.Add(bodyParam1);
messageTemplateWithcta.Values.Add(image);
messageTemplateWithcta.Bindings = cta_bindings;

TemplateNotificationContent templateContent4 =
    new TemplateNotificationContent(channelRegistrationId, recipientList, messageTemplateWithcta);
Response<SendMessageResult> sendTemplateMessageResult4 =
    notificationMessagesClient.Send(templateContent4);

Spuštění kódu

Sestavte a spusťte program.

Pokud chcete uživateli WhatsApp poslat textovou nebo mediální zprávu, musí existovat aktivní konverzace mezi účtem WhatsApp Business a uživatelem WhatsApp.

Pokud nemáte aktivní konverzaci, můžete pro účely tohoto příkladu přidat čekání mezi odesláním zprávy šablony a odesláním textové zprávy. Toto přidané zpoždění vám poskytne dostatek času na odpověď na firmu na účtu WhatsApp uživatele. Pro referenci se v uvedeném příkladu před odesláním další zprávy zobrazí výzva k ručnímu zadání uživatele. Další informace najdete v úplném příkladu ukázkového kódu. V případě úspěchu obdržíte tři zprávy na účtu WhatsApp uživatele.

Sestavte a spusťte program.

dotnet build
dotnet run

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ší příklady

Tyto příklady používají ukázkové šablony, které jsou k dispozici pro účty WhatsApp Business vytvořené prostřednictvím vložené registrace na webu Azure Portal.

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.

Snímek obrazovky znázorňující podrobnosti šablony pro šablonu s názvem sample_happy_hour_announcement

Záhlaví šablony vyžaduje video:

{
  "type": "HEADER",
  "format": "VIDEO"
},

Video musí 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 MessageTemplateValueMessageTemplateWhatsAppBindings 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.

Snímek obrazovky znázorňující podrobnosti šablony pro šablonu s názvem sample_flight_confirmation

Hlavička šablony vyžaduje dokument:

{
  "type": "HEADER",
  "format": "DOCUMENT"
},

Dokument musí 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 MessageTemplateValueMessageTemplateWhatsAppBindings 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;

Požadavky

Objektový model

Následující třídy a rozhraní zpracovávají některé z hlavních funkcí sady AZURE Communication Services Messages SDK pro Javu.

Název třídy Popis
NotificationMessagesClient Připojí se k prostředku Azure Communication Services. Odesílá zprávy.
MessageTemplate Definuje, kterou šablonu použijete, a obsah vlastností šablony pro vaši zprávu.
TemplateNotificationContent Definuje "kdo" a "co" zprávy šablony, kterou chcete odeslat.

Poznámka:

Další informace najdete v referenčních informacích k sadě Azure SDK pro Javu na webu com.azure.communication.messages Package.

Podporované typy šablon WhatsApp

Typ šablony Popis
Textové šablony zpráv Šablony zpráv WhatsApp jsou specifické formáty zpráv s parametry nebo bez parametrů.
Šablony zpráv založené na médiích Šablony zpráv WhatsApp s parametry médií pro součásti záhlaví.
Interaktivní šablony zpráv Interaktivní šablony zpráv rozšiřují obsah, který můžete příjemcům posílat, včetně interaktivních tlačítek pomocí objektu komponent. Podporují se jak volání k akci, tak rychlá odpověď.
Šablony zpráv založené na poloze Šablony zpráv WhatsApp s parametry umístění v zeměpisná délka a zeměpisná šířka pro součásti záhlaví.

Běžná konfigurace

Podle těchto kroků přidejte potřebné fragmenty kódu do hlavní funkce souboru App.java .

Vytvoření a správa zprávy šablony WhatsApp

Šablony zpráv WhatsApp jsou specifické formáty zpráv, které firmy používají k odesílání oznámení nebo zpráv péče o zákazníky lidem, kteří se přihlásili k oznámením. Zprávy můžou zahrnovat připomenutí událostí, dodací informace, řešení problému nebo aktualizace plateb. Než začnete používat sadu SDK pro pokročilé zasílání zpráv k odesílání šablonovaných zpráv, musí uživatel vytvořit požadované šablony na platformě WhatsApp Business Platform.

Další informace o požadavcích Na WhatsApp pro šablony najdete v referenčních informacích k rozhraní API whatsApp Business Platform:

Zahájení odesílání zpráv mezi firmou a uživatelem WhatsApp

Konverzace mezi účtem WhatsApp Business a uživatelem WhatsApp je možné zahájit jedním ze dvou způsobů:

  • Firma odešle uživateli WhatsApp zprávu šablony.
  • Uživatel WhatsApp odešle jakoukoli zprávu na firemní číslo.

Bez ohledu na to, jak byla konverzace spuštěna, může firma odesílat zprávy šablony jenom do doby, než uživatel odešle zprávu do firmy. 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.

Ověření klienta

Pro ověření klienta zprávy je k dispozici několik různých možností:

Pokud chcete ověřit klienta, vytvořte instanci NotificationMessagesClient instance nebo MessageTemplateClient pomocí připojovací řetězec. Klienta můžete také inicializovat pomocí libovolného vlastního klienta HTTP, který implementuje com.azure.core.http.HttpClient rozhraní.

Pro zjednodušení tento rychlý start používá k ověření připojovací řetězec. V produkčních prostředích doporučujeme používat instanční objekty.

Získejte připojovací řetězec z prostředku Azure Communication Services na webu Azure Portal. Vlevo přejděte na Keys kartu. Zkopírujte Connection string pole pro Primary keypole . Připojovací řetězec je ve formátu endpoint=https://{your Azure Communication Services resource name}.communication.azure.com/;accesskey={secret key}.

Snímek obrazovky znázorňující prostředek Azure Communication Services na webu Azure Portal zobrazte pole Připojovací řetězec v části Primární klíč.

Nastavte proměnnou COMMUNICATION_SERVICES_CONNECTION_STRING prostředí na hodnotu připojovací řetězec.
Otevřete okno konzoly a zadejte následující příkaz:

setx COMMUNICATION_SERVICES_CONNECTION_STRING "<your connection string>"

Další informace o tom, jak nastavit proměnnou prostředí pro váš systém, najdete v postupu při ukládání připojovací řetězec do proměnné prostředí.

Pokud chcete vytvořit instanci NotificationMessagesClient, přidejte do main metody následující kód:

// You can get your connection string from your resource in the Azure portal.
String connectionString = System.getenv("COMMUNICATION_SERVICES_CONNECTION_STRING");

NotificationMessagesClient notificationClient = new NotificationMessagesClientBuilder()
    .connectionString(connectionString)
    .buildClient();

Nastavení ID registrace kanálu

Identifikátor GUID ID registrace kanálu byl vytvořen během registrace kanálu. Můžete ho vyhledat na portálu na kartě Kanály vašeho prostředku Azure Communication Services.

Snímek obrazovky znázorňující prostředek Azure Communication Services na webu Azure Portal zobrazte kartu Kanály Pozornost je umístěna na akci kopírování pole

Přiřaďte ji k proměnné s názvem channelRegistrationId.

String channelRegistrationId = "<your channel registration id GUID>";

Nastavení seznamu příjemců

Musíte zadat skutečné telefonní číslo, které má přidružený účet WhatsApp. Tento účet WhatsApp obdrží textové a mediální zprávy odeslané v tomto rychlém startu. Pro účely tohoto rychlého startu může být toto telefonní číslo vaše osobní telefonní číslo.

Telefonní číslo příjemce nemůže být firemní telefonní číslo (ID odesílatele) přidružené k registraci kanálu WhatsApp. ID odesílatele se zobrazí jako odesílatel textu a mediálních zpráv odeslaných příjemci.

Telefonní číslo by mělo obsahovat kód země. Další informace o formátování telefonních čísel naleznete v dokumentaci WhatsApp pro formáty telefonních čísel.

Poznámka:

V seznamu příjemců se aktuálně podporuje jenom jedno telefonní číslo.

Vytvořte seznam příjemců takto:

List<String> recipientList = new ArrayList<>();
recipientList.add("<to WhatsApp phone number>");

Příklad:

// Example only
List<String> recipientList = new ArrayList<>();
recipientList.add("+14255550199");

Nastavení prostředí

Pokud chcete nastavit prostředí pro odesílání zpráv, proveďte kroky v následujících částech.

Požadavek

Vytvoření nové aplikace v Javě

Otevřete terminál nebo příkazové okno a přejděte do adresáře, do kterého chcete vytvořit aplikaci v Javě. Spuštěním následujícího příkazu vygenerujte projekt Java ze maven-archetype-quickstart šablony.

mvn archetype:generate -DgroupId="com.communication.quickstart" -DartifactId="communication-quickstart" -DarchetypeArtifactId="maven-archetype-quickstart" -DarchetypeVersion="1.4" -DinteractiveMode="false"

Cíl generate vytvoří adresář se stejným názvem jako artifactId hodnota. V tomto adresáři src/main/java adresář obsahuje zdrojový kód projektu, src/test/java adresář obsahuje zdroj testů a pom.xml soubor je projektový objektový model (POM).

Nainstalujte balíček .

Otevřete soubor v textovém pom.xml editoru. Do skupiny závislostí přidejte následující prvek závislosti.

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-communication-messages</artifactId>
</dependency>

Nastavení architektury aplikace

Otevřete /src/main/java/com/communication/quickstart/App.java v textovém editoru, přidejte direktivy importu a odeberte System.out.println("Hello world!"); příkaz:

package com.communication.quickstart;

import com.azure.communication.messages.*;
import com.azure.communication.messages.models.*;

import java.util.ArrayList;
import java.util.List;
public class App
{
    public static void main( String[] args )
    {
        // Quickstart code goes here.
    }
}

Příklady kódu

Podle těchto kroků přidejte požadované fragmenty kódu do hlavní funkce App.java souboru.

Výpis šablon WhatsApp na webu Azure Portal

Pokud chcete zobrazit šablony na webu Azure Portal, přejděte k prostředkům Azure Communication Services – Pokročilé šablony zasílání zpráv>.>

Snímek obrazovky znázorňující prostředek Azure Communication Services na webu Azure Portal zobrazte kartu pokročilé šablony zasílání zpráv

Výběrem šablony zobrazíte podrobnosti o šabloně.

Pole Obsah podrobností šablony může obsahovat vazby parametrů. Vazby parametrů lze oznamovat takto:

  • Pole "format" s hodnotou, například IMAGE.
  • Dvojité závorky obklopují číslo, například {{1}}. Číslo, index zahájený na 1, označuje pořadí, ve kterém musí být zadány hodnoty vazby k vytvoření šablony zprávy.

Snímek obrazovky znázorňující podrobnosti šablony

Případně můžete zobrazit a upravit všechny šablony účtu WhatsApp Business v šablonách zpráv v nástrojích> účtu WhatsApp Manager.>

Pokud chcete zobrazit seznam šablon prostřednictvím kódu programu, můžete pomocí následujícího kódu načíst všechny šablony pro ID kanálu:

public static void getMessageTemplateWithConnectionString() {
    MessageTemplateClient templateClient =
        new MessageTemplateClientBuilder()
            .connectionString(connectionString)
            .buildClient();

    PagedIterable<MessageTemplateItem> response = templateClient.listTemplates(channelRegistrationId);

    response.stream().forEach(t -> {
        WhatsAppMessageTemplateItem template = (WhatsAppMessageTemplateItem) t ;
        System.out.println("===============================");
        System.out.println("Template Name :: "+template.getName());
        System.out.println("Template Language :: "+template.getLanguage());
        System.out.println("Template Status :: "+template.getStatus());
        System.out.println("Template Content :: "+template.getContent());
        System.out.println("===============================");
    });
    }

Odeslání zprávy šablony s textovými parametry v textu

Pokud šablona nepřijímá žádné parametry, nemusíte při vytváření MessageTemplatezadávat žádné hodnoty ani vazby .

 /*
    * This sample shows how to send template message with below details
    * Name: sample_shipping_confirmation, Language: en_US
    *  [
          {
            "type": "BODY",
            "text": "Your package has been shipped. It will be delivered in {{1}} business days."
          },
          {
            "type": "FOOTER",
            "text": "This message is from an unverified business."
          }
        ]
* */
private static void sendTemplateMessage() {

    //Update Template Name and language according your template associate to your channel.
    MessageTemplate template = new MessageTemplate("sample_shipping_confirmation", "en_US");

    //Update template parameter type and value
    List<MessageTemplateValue> messageTemplateValues = new ArrayList<>();
    messageTemplateValues.add(new MessageTemplateText("Days", "5"));
    template.setValues(messageTemplateValues);

    //Update template parameter binding
    List<WhatsAppMessageTemplateBindingsComponent> components = new ArrayList<>();
    components.add(new WhatsAppMessageTemplateBindingsComponent("Days"));
    MessageTemplateBindings bindings =new WhatsAppMessageTemplateBindings()
        .setBody(components);
    template.setBindings(bindings);

    NotificationMessagesClient client = createClientWithTokenCredential();
    SendMessageResult result = client.send(
        new TemplateNotificationContent(CHANNEL_ID, recipients, template));

    result.getReceipts().forEach(r -> System.out.println("Message sent to:"+r.getTo() + " and message id:"+ r.getMessageId()));
    }

Odeslání zprávy šablony s parametrem média v hlavičce

Použijte MessageTemplateImage, MessageTemplateVideonebo MessageTemplateDocument definujte parametr média v hlavičce.

Definice šablony s parametrem média obrázku v hlavičce:

{
  "type": "HEADER",
  "format": "VIDEO"
},

"format" Můžou být na čtyřech různých typech médií podporovaných aplikací WhatsApp. V sadě .NET SDK každý typ média používá odpovídající MessageTemplateValue typ.

Formát MessageTemplateValue – typ Typ souboru
IMAGE MessageTemplateImage png, jpg
VIDEO MessageTemplateVideo mp4
DOKUMENT MessageTemplateDocument pdf

Další informace o podporovaných typech médií a omezení velikosti najdete v dokumentaci aplikace WhatsApp k médiím zpráv.

Příklad

sample_happy_hour_announcement šablona:

Snímek obrazovky znázorňující podrobnosti šablony pro šablonu s názvem sample_happy_hour_announcement

Záhlaví šablony vyžaduje video:

{
  "type": "HEADER",
  "format": "VIDEO"
},

Video musí 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 čtyři MessageTemplateText proměnné. Pak seznam sestavíte tak, že poskytnete MessageTemplateValueMessageTemplateWhatsAppBindings parametry v pořadí, v jakém se parametry zobrazí v obsahu šablony.

 /*
    * This sample shows how to send template message with below details
    * Name: sample_happy_hour_announcement, Language: en_US
    *  [
          {
            "type": "HEADER",
            "format": "VIDEO"
          },
          {
            "type": "BODY",
            "text": "Happy hour is here! 🍺😀🍸\nPlease be merry and enjoy the day. 🎉\nVenue: {{1}}\nTime: {{2}}"
          },
          {
            "type": "FOOTER",
            "text": "This message is from an unverified business."
          }
        ]
* */
private static void sendTemplateMessageWithVideo() {

    //Update Template Name and language according your template associate to your channel.
    MessageTemplate template = new MessageTemplate("sample_happy_hour_announcement", "en_US");

    //Add template parameter type with value in a list
    List<MessageTemplateValue> messageTemplateValues = new ArrayList<>();
    messageTemplateValues.add(new MessageTemplateVideo("HeaderVideo", "https://sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4"));
    messageTemplateValues.add(new MessageTemplateText("VenueInfoInBody", "Starbucks"));
    messageTemplateValues.add(new MessageTemplateText("TimeInfoInBody", "Today 2-4PM"));

    // Add parameter binding for template header in a list
    List<WhatsAppMessageTemplateBindingsComponent> templateHeaderBindings = new ArrayList<>();
    templateHeaderBindings.add(new WhatsAppMessageTemplateBindingsComponent("HeaderVideo"));

    // Add parameter binding for template body in a list
    List<WhatsAppMessageTemplateBindingsComponent> templateBodyBindings = new ArrayList<>();
    templateBodyBindings.add(new WhatsAppMessageTemplateBindingsComponent("VenueInfoInBody"));
    templateBodyBindings.add(new WhatsAppMessageTemplateBindingsComponent("TimeInfoInBody"));

    MessageTemplateBindings templateBindings = new WhatsAppMessageTemplateBindings()
        .setHeaderProperty(templateHeaderBindings) // Set the parameter binding for template header
        .setBody(templateBodyBindings); // Set the parameter binding for template body

    template
        .setBindings(templateBindings)
        .setValues(messageTemplateValues);

    NotificationMessagesClient client = createClientWithConnectionString();
    SendMessageResult result = client.send(
        new TemplateNotificationContent(CHANNEL_ID, recipients, template));

    result.getReceipts().forEach(r -> System.out.println("Message sent to:"+r.getTo() + " and message id:"+ r.getMessageId()));
}

Odeslání zprávy šablony pomocí tlačítek pro rychlé odpovědi

Slouží MessageTemplateQuickAction k definování datové části pro tlačítka rychlých odpovědí a MessageTemplateQuickAction objekty s následujícími třemi atributy.

Vlastnosti Popis Typ
Název Použitý name k vyhledání hodnoty v MessageTemplateWhatsAppBindings. string
Text Rychlá akce možnosti text. string
Datová část Přiřazení payload k tlačítku dostupnému ve zprávě odpovědět, pokud uživatel tlačítko vybere. string

Definice šablony s tlačítky pro rychlé odpovědi:

{
  "type": "BUTTONS",
  "buttons": [
    {
      "type": "QUICK_REPLY",
      "text": "Yes"
    },
    {
      "type": "QUICK_REPLY",
      "text": "No"
    }
  ]
}

Pořadí zobrazení tlačítek v definici šablony musí odpovídat pořadí, ve kterém jsou tlačítka definována při vytváření vazeb pomocí MessageTemplateWhatsAppBindings.

Další informace o datové části v odpovědích rychlých odpovědí od uživatele najdete v dokumentaci aplikace WhatsApp k přijetí zpětného volání z tlačítka Rychlá odpověď.

Příklad

sample_issue_resolution šablona:

Snímek obrazovky znázorňující podrobnosti šablony pro šablonu s názvem sample_issue_resolution

Text šablony vyžaduje jeden textový parametr:

/*
    * This sample shows how to send template message with below details
    * Name: sample_issue_resolution, Language: en_US
    *  [
          {
            "type": "BODY",
            "text": "Hi {{1}}, were we able to solve the issue that you were facing?"
          },
          {
            "type": "FOOTER",
            "text": "This message is from an unverified business."
          },
          {
            "type": "BUTTONS",
            "buttons": [
              {
                "type": "QUICK_REPLY",
                "text": "Yes"
              },
              {
                "type": "QUICK_REPLY",
                "text": "No"
              }
            ]
          }
        ]
* */
private static void sendTextTemplateMessageWithQuickReply() {

    //Add template parameter type with value in a list
    List<MessageTemplateValue> messageTemplateValues = new ArrayList<>();
    messageTemplateValues.add(new MessageTemplateText("Name", "Arif"));
    messageTemplateValues.add(new MessageTemplateQuickAction("Yes").setPayload("Yes"));
    messageTemplateValues.add(new MessageTemplateQuickAction("No").setPayload("No"));

    // Add parameter binding for template body in a list
    List<WhatsAppMessageTemplateBindingsComponent> templateBodyBindings = new ArrayList<>();
    templateBodyBindings.add(new WhatsAppMessageTemplateBindingsComponent("Name"));

    // Add parameter binding for template buttons in a list
    List<WhatsAppMessageTemplateBindingsButton> templateButtonBindings = new ArrayList<>();
    templateButtonBindings.add( new WhatsAppMessageTemplateBindingsButton(WhatsAppMessageButtonSubType.QUICK_REPLY, "Yes"));
    templateButtonBindings.add( new WhatsAppMessageTemplateBindingsButton(WhatsAppMessageButtonSubType.QUICK_REPLY, "No"));

    MessageTemplateBindings templateBindings = new WhatsAppMessageTemplateBindings()
        .setBody(templateBodyBindings) // Set the parameter binding for template body
        .setButtons(templateButtonBindings); // Set the parameter binding for template buttons

    MessageTemplate messageTemplate = new MessageTemplate("sample_issue_resolution", "en_US")
        .setBindings(templateBindings)
        .setValues(messageTemplateValues);

    NotificationMessagesClient client = createClientWithConnectionString();
    SendMessageResult result = client.send(
        new TemplateNotificationContent(CHANNEL_ID, recipients, messageTemplate));

    result.getReceipts().forEach(r -> System.out.println("Message sent to:"+r.getTo() + " and message id:"+ r.getMessageId()));
}

Slouží MessageTemplateQuickAction k definování přípony ADRESY URL pro tlačítka akcí volání a MessageTemplateQuickAction objektu mají následující dva atributy.

Vlastnosti Popis Typ
Název Použitý name k vyhledání hodnoty v MessageTemplateWhatsAppBindings. string
Text Připojeno text k adrese URL. string

Tlačítka definice šablony:

{
  "type": "BUTTONS",
  "buttons": [
    {
      "type": "URL",
      "text": "Take Survey",
      "url": "https://www.example.com/{{1}}"
    }
  ]
}

Pořadí zobrazení tlačítek v definici šablony musí odpovídat pořadí, ve kterém jsou tlačítka definována při vytváření vazeb pomocí MessageTemplateWhatsAppBindings.

Příklad

sample_purchase_feedback šablona:

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.

Snímek obrazovky znázorňující úpravu typu adresy URL ve Správci WhatsApp

V této ukázce vyžaduje hlavička šablony obrázek:

{
  "type": "HEADER",
  "format": "IMAGE"
},

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}}"
    }
  ]
}

Vytvořte jednu MessageTemplateImage, jednu MessageTemplateTexta jednu proměnnou MessageTemplateQuickAction . Pak seznam sestavíte tak, že poskytnete MessageTemplateValueMessageTemplateWhatsAppBindings parametry v pořadí, v jakém se parametry zobrazí v obsahu šablony. Pořadí je také důležité při definování tlačítek vazeb.

/*
* This sample shows how to send template message with below details
* Name: sample_purchase_feedback, Language: en_US
*  [
        {
        "type": "HEADER",
        "format": "IMAGE"
        },
        {
        "type": "BODY",
        "text": "Thank you for purchasing {{1}}! We value your feedback and would like to learn more about your experience."
        },
        {
        "type": "FOOTER",
        "text": "This message is from an unverified business."
        },
        {
        "type": "BUTTONS",
        "buttons": [
            {
            "type": "URL",
            "text": "Take Survey",
            "url": "https://www.example.com/"
            }
        ]
        }
    ]
* */
private static void sendTemplateMessageWithImage() {

    //Update Template Name and language according your template associate to your channel.
    MessageTemplate template = new MessageTemplate("sample_purchase_feedback", "en_US");

    //Add template parameter type with value in a list
    List<MessageTemplateValue> messageTemplateValues = new ArrayList<>();
    messageTemplateValues.add(new MessageTemplateImage("HeaderImage", "https://upload.wikimedia.org/wikipedia/commons/3/30/Building92microsoft.jpg"));
    messageTemplateValues.add(new MessageTemplateText("ProductInfoInBody", "Microsoft Office"));

    // Add parameter binding for template header in a list
    List<WhatsAppMessageTemplateBindingsComponent> templateHeaderBindings = new ArrayList<>();
    templateHeaderBindings.add(new WhatsAppMessageTemplateBindingsComponent("HeaderImage"));

    // Add parameter binding for template body in a list
    List<WhatsAppMessageTemplateBindingsComponent> templateBodyBindings = new ArrayList<>();
    templateBodyBindings.add(new WhatsAppMessageTemplateBindingsComponent("ProductInfoInBody"));

    MessageTemplateBindings templateBindings = new WhatsAppMessageTemplateBindings()
        .setHeaderProperty(templateHeaderBindings) // Set the parameter binding for template header
        .setBody(templateBodyBindings); // Set the parameter binding for template body

    template
        .setBindings(templateBindings)
        .setValues(messageTemplateValues);

    NotificationMessagesClient client = createClientWithConnectionString();
    SendMessageResult result = client.send(
        new TemplateNotificationContent(CHANNEL_ID, recipients, template));

    result.getReceipts().forEach(r -> System.out.println("Message sent to:"+r.getTo() + " and message id:"+ r.getMessageId()));
}

Spuštění kódu

  1. Pomocí příkazu otevřete adresář, který obsahuje pom.xml soubor, a zkompilujte projekt mvn .

    mvn compile
    
  2. Spusťte aplikaci spuštěním následujícího mvn příkazu.

    mvn exec:java -D"exec.mainClass"="com.communication.quickstart.App" -D"exec.cleanupDaemonThreads"="false"
    

Celý ukázkový kód

Najděte finalizovaný kód pro tento rychlý start na GitHubu.

Požadavky

  • Zaregistrujte účet WhatsApp Business ve svém prostředku Azure Communication Services.
  • Vytvořte zprávu šablony WhatsApp.
  • Aktivní telefonní číslo Aplikace WhatsApp pro příjem zpráv.
  • Node.js verze ACTIVE LTS a maintenance LTS (doporučujeme verze 8.11.1 a 10.14.1).
  • Node.js se doporučuje verze LTS a údržba Active LTS (8.11.1 a 10.14.1)
    • Spuštěním příkazu v terminálu nebo příkazovém okně zkontrolujte, node --version jestli je nainstalovaná Node.js.

Objektový model

Následující třídy a rozhraní zpracovávají některé z hlavních funkcí sady SDK zpráv služby Azure Communication Services pro JavaScript.

Název třídy Popis
NotificationMessagesClient Připojí se k prostředku Azure Communication Services. Odesílá zprávy.
MessageTemplate Definuje, kterou šablonu použijete, a obsah vlastností šablony pro vaši zprávu.
TemplateNotificationContent Definuje "kdo" a "co" zprávy šablony, kterou chcete odeslat.

Podporované typy šablon WhatsApp

Typ šablony Popis
Textové šablony zpráv Šablony zpráv WhatsApp jsou specifické formáty zpráv s parametry nebo bez parametrů.
Šablony zpráv založené na médiích Šablony zpráv WhatsApp s parametry médií pro součásti záhlaví.
Interaktivní šablony zpráv Interaktivní šablony zpráv rozšiřují obsah, který můžete příjemcům posílat, včetně interaktivních tlačítek pomocí objektu komponent. Podporují se jak volání k akci, tak rychlá odpověď.
Šablony zpráv založené na poloze Šablony zpráv WhatsApp s parametry umístění v zeměpisná délka a zeměpisná šířka pro součásti záhlaví.

Běžná konfigurace

Podle těchto kroků přidejte potřebné fragmenty kódu do hlavní funkce souboru send-messages.js .

Vytvoření a správa zprávy šablony WhatsApp

Šablony zpráv WhatsApp jsou specifické formáty zpráv, které firmy používají k odesílání oznámení nebo zpráv péče o zákazníky lidem, kteří se přihlásili k oznámením. Zprávy můžou zahrnovat připomenutí událostí, dodací informace, řešení problému nebo aktualizace plateb. Než začnete používat sadu SDK pro pokročilé zasílání zpráv k odesílání šablonovaných zpráv, musí uživatel vytvořit požadované šablony na platformě WhatsApp Business Platform.

Další informace o požadavcích Na WhatsApp pro šablony najdete v referenčních informacích k rozhraní API whatsApp Business Platform:

Zahájení odesílání zpráv mezi firmou a uživatelem WhatsApp

Konverzace mezi účtem WhatsApp Business a uživatelem WhatsApp je možné zahájit jedním ze dvou způsobů:

  • Firma odešle uživateli WhatsApp zprávu šablony.
  • Uživatel WhatsApp odešle jakoukoli zprávu na firemní číslo.

Bez ohledu na to, jak byla konverzace spuštěna, může firma odesílat zprávy šablony jenom do doby, než uživatel odešle zprávu do firmy. 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.

Ověření klienta

Následující kód načte připojovací řetězec prostředku z proměnné prostředí pojmenované COMMUNICATION_SERVICES_CONNECTION_STRING pomocí balíčku dotenv.

Pro zjednodušení tento rychlý start používá k ověření připojovací řetězec. V produkčních prostředích doporučujeme používat instanční objekty.

Získejte připojovací řetězec z prostředku Azure Communication Services na webu Azure Portal. Vlevo přejděte na Keys kartu. Zkopírujte Connection string pole pro Primary keypole . Připojovací řetězec je ve formátu endpoint=https://{your Azure Communication Services resource name}.communication.azure.com/;accesskey={secret key}.

Snímek obrazovky znázorňující prostředek Azure Communication Services na webu Azure Portal zobrazte pole Připojovací řetězec v části Primární klíč.

Nastavte proměnnou COMMUNICATION_SERVICES_CONNECTION_STRING prostředí na hodnotu připojovací řetězec.
Otevřete okno konzoly a zadejte následující příkaz:

setx COMMUNICATION_SERVICES_CONNECTION_STRING "<your connection string>"

Další informace o tom, jak nastavit proměnnou prostředí pro váš systém, najdete v postupu při ukládání připojovací řetězec do proměnné prostředí.

Pokud chcete vytvořit instanci NotificationClient, přidejte do Main metody následující kód:

const NotificationClient = require("@azure-rest/communication-messages").default;

// Set Connection string
const connectionString = process.env["COMMUNICATION_SERVICES_CONNECTION_STRING"];

// Instantiate the client
const client = NotificationClient(connectionString);

Nastavení ID registrace kanálu

Identifikátor GUID ID registrace kanálu byl vytvořen během registrace kanálu. Můžete ho vyhledat na portálu na kartě Kanály vašeho prostředku Azure Communication Services.

Snímek obrazovky znázorňující prostředek Azure Communication Services na webu Azure Portal zobrazte kartu Kanály Pozornost je umístěna na akci kopírování pole

Přiřaďte ji k proměnné s názvem channelRegistrationId.

const channelRegistrationId = "<your channel registration id GUID>";

Nastavení seznamu příjemců

Musíte zadat skutečné telefonní číslo, které má přidružený účet WhatsApp. Tento účet WhatsApp obdrží šablonu, text a mediální zprávy odeslané v tomto rychlém startu. Pro účely tohoto rychlého startu může být toto telefonní číslo vaše osobní telefonní číslo.

Telefonní číslo příjemce nemůže být firemní telefonní číslo (ID odesílatele) přidružené k registraci kanálu WhatsApp. ID odesílatele se zobrazí jako odesílatel textu a mediálních zpráv odeslaných příjemci.

Telefonní číslo by mělo obsahovat kód země. Další informace o formátování telefonních čísel naleznete v dokumentaci WhatsApp pro formáty telefonních čísel.

Poznámka:

V seznamu příjemců se aktuálně podporuje jenom jedno telefonní číslo.

Vytvořte seznam příjemců takto:

const recipientList = ["<to WhatsApp phone number>"];

Příklad:

// Example only
const recipientList = ["+14255550199"];

Nastavení

Pokud chcete nastavit prostředí pro odesílání zpráv, proveďte kroky v následujících částech.

Vytvoření nové aplikace Node.js

  1. Vytvořte pro aplikaci nový adresář a otevřete ho v terminálu nebo příkazovém okně.

  2. Spusťte následující příkaz:

    mkdir advance-messages-quickstart && cd advance-messages-quickstart
    
  3. Spuštěním následujícího příkazu vytvořte package.json soubor s výchozím nastavením.

    npm init -y
    
  4. Pomocí textového editoru vytvořte soubor volaný send-messages.js v kořenovém adresáři projektu.

  5. Do souboru send-messages.jspřidejte následující fragment kódu .

    async function main() {
        // Quickstart code goes here.
    }
    
    main().catch((error) => {
        console.error("Encountered an error while sending message: ", error);
        process.exit(1);
    });
    

V následující části přidejte zdrojový kód pro tento příklad do send-messages.js souboru, který jste vytvořili.

Nainstalujte balíček .

npm install Pomocí příkazu nainstalujte sadu AZURE Communication Services Advance Messaging SDK pro JavaScript.

npm install @azure-rest/communication-messages --save

Tato --save možnost vypíše knihovnu jako závislost v souboru package.json .

Příklady kódu

Podle těchto kroků přidejte požadované fragmenty kódu do hlavní funkce send-messages.js souboru.

Výpis šablon WhatsApp na webu Azure Portal

Pokud chcete zobrazit šablony na webu Azure Portal, přejděte k prostředkům Azure Communication Services – Pokročilé šablony zasílání zpráv>.>

Snímek obrazovky znázorňující prostředek Azure Communication Services na webu Azure Portal zobrazte kartu pokročilé šablony zasílání zpráv

Výběrem šablony zobrazíte podrobnosti o šabloně.

Pole Obsah podrobností šablony může obsahovat vazby parametrů. Vazby parametrů lze oznamovat takto:

  • Pole "format" s hodnotou, například IMAGE.
  • Dvojité závorky obklopují číslo, například {{1}}. Číslo, index zahájený na 1, označuje pořadí, ve kterém musí být zadány hodnoty vazby k vytvoření šablony zprávy.

Snímek obrazovky znázorňující podrobnosti šablony

Případně můžete zobrazit a upravit všechny šablony účtu WhatsApp Business v šablonách zpráv v nástrojích> účtu WhatsApp Manager.>

Pokud chcete zobrazit seznam šablon prostřednictvím kódu programu, můžete pomocí následujícího kódu načíst všechny šablony pro ID kanálu:

// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

/**
 * @summary Get Template list for a channel
 */

const MessageTemplateClient = require("@azure-rest/communication-messages").default,
  { isUnexpected } = require("@azure-rest/communication-messages");

// Load the .env file if it exists
require("dotenv").config();

async function main() {
  const connectionString = process.env.COMMUNICATION_LIVETEST_STATIC_CONNECTION_STRING || "";
  const client = MessageTemplateClient(connectionString);
  console.log("Fetch Templates...");
  const response = await client
    .path("/messages/channels/{channelId}/templates", process.env.CHANNEl_ID || "")
    .get({
      queryParameters: { maxPageSize: 2 },
    });

  if (isUnexpected(response)) {
    throw new Error("Failed to get template for the channel.");
  }

  // The paginate helper creates a paged async iterator using metadata from the first page.
  const items = paginate(client, response);

  // We get an PageableAsyncIterator so we need to do `for await`.
  for await (const item of items) {
    console.log(JSON.stringify(item, null, 2));
  }
}

main().catch((error) => {
  console.error("Encountered an error while sending message: ", error);
  throw error;
});

Odeslání zprávy šablony s textovými parametry v textu

sample_shipping_confirmation šablona:

Snímek obrazovky znázorňující podrobnosti šablony pro šablonu s názvem sample_shipping_confirmation

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 values hodnotami a bindings vazbami. K sestavení objektu template použijte hodnoty a vazby.

 /*
    * This sample shows how to send template message with below details
    * Name: sample_shipping_confirmation, Language: en_US
    *  [
          {
            "type": "BODY",
            "text": "Your package has been shipped. It will be delivered in {{1}} business days."
          },
          {
            "type": "FOOTER",
            "text": "This message is from an unverified business."
          }
        ]
* */
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

/**
 * @summary Use AAD token credentials when sending a whatsapp template message.
 */

const { isNode } = require("@azure/core-util");
const { ClientSecretCredential, DefaultAzureCredential } = require("@azure/identity");
const NotificationClient = require("@azure-rest/communication-messages").default,
  { isUnexpected } = require("@azure-rest/communication-messages");

// Load the .env file if it exists
require("dotenv").config();

async function main() {
  // You will need to set this environment variable or edit the following values
  const endpoint = process.env.ACS_URL || "";

  // Azure AD Credential information is required to run this sample:
  if (
    !process.env.AZURE_TENANT_ID ||
    !process.env.AZURE_CLIENT_ID ||
    !process.env.AZURE_CLIENT_SECRET
  ) {
    console.error(
      "Azure AD authentication information not provided, but it is required to run this sample. Exiting.",
    );
    return;
  }

  // get credentials
  const credential = isNode
    ? new DefaultAzureCredential()
    : new ClientSecretCredential(
        process.env.AZURE_TENANT_ID,
        process.env.AZURE_CLIENT_ID,
        process.env.AZURE_CLIENT_SECRET,
      );

  const client = NotificationClient(endpoint, credential);

  const DaysTemplateValue = {
    kind: "text",
    name: "Days",
    text: "5",
  };

  const templateBindings = {
    kind: "whatsApp",
    body: [
      {
        refValue: "Days",
      },
    ],
  };

  const template = {
    name: "sample_shipping_confirmation",
    language: "en_US",
    bindings: templateBindings,
    values: [DaysTemplateValue],
  };

  const result = await client.path("/messages/notifications:send").post({
    contentType: "application/json",
    body: {
      channelRegistrationId: process.env.CHANNEL_ID || "",
      to: [process.env.RECIPIENT_PHONE_NUMBER || ""],
      kind: "template",
      template: template,
    },
  });

  console.log("Response: " + JSON.stringify(result, null, 2));

  if (isUnexpected(result)) {
    throw new Error("Failed to send message");
  }

  const response = result;
  response.body.receipts.forEach((receipt) => {
    console.log("Message sent to:" + receipt.to + " with message id:" + receipt.messageId);
  });
}

main().catch((error) => {
  console.error("Encountered an error while sending message: ", error);
  throw error;
});

module.exports = { main };

Spuštění kódu

Pomocí příkazu node spusťte kód, který jste přidali do souboru send-messages.js.

node ./send-messages.js

Celý ukázkový kód

Najděte finalizovaný kód pro tuto ukázku na GitHubu.

Požadavky

Objektový model

Následující třídy a rozhraní zpracovávají některé z hlavních funkcí sady AZURE Communication Services Messages SDK pro Python.

Název třídy Popis
NotificationMessagesClient Připojí se k prostředku Azure Communication Services. Odesílá zprávy.
MessageTemplate Definuje, kterou šablonu použijete, a obsah vlastností šablony pro vaši zprávu.
TemplateNotificationContent Definuje "kdo" a "co" zprávy šablony, kterou chcete odeslat.

Poznámka:

Další informace najdete v tématu Balíček referenčních zpráv sady Azure SDK pro Python.

Podporované typy šablon WhatsApp

Typ šablony Popis
Textové šablony zpráv Šablony zpráv WhatsApp jsou specifické formáty zpráv s parametry nebo bez parametrů.
Šablony zpráv založené na médiích Šablony zpráv WhatsApp s parametry médií pro součásti záhlaví.
Interaktivní šablony zpráv Interaktivní šablony zpráv rozšiřují obsah, který můžete příjemcům posílat, včetně interaktivních tlačítek pomocí objektu komponent. Podporují se jak volání k akci, tak rychlá odpověď.
Šablony zpráv založené na poloze Šablony zpráv WhatsApp s parametry umístění v zeměpisná délka a zeměpisná šířka pro součásti záhlaví.

Běžná konfigurace

Podle těchto kroků přidejte do programu Python potřebné fragmenty messages-quickstart.py kódu.

Vytvoření a správa zprávy šablony WhatsApp

Šablony zpráv WhatsApp jsou specifické formáty zpráv, které firmy používají k odesílání oznámení nebo zpráv péče o zákazníky lidem, kteří se přihlásili k oznámením. Zprávy můžou zahrnovat připomenutí událostí, dodací informace, řešení problému nebo aktualizace plateb. Než začnete používat sadu SDK pro pokročilé zasílání zpráv k odesílání šablonovaných zpráv, musí uživatel vytvořit požadované šablony na platformě WhatsApp Business Platform.

Další informace o požadavcích Na WhatsApp pro šablony najdete v referenčních informacích k rozhraní API whatsApp Business Platform:

Ověření klienta

Odesílání zpráv se provádí pomocí NotificationMessagesClient. NotificationMessagesClient se ověřuje pomocí vašeho připojovací řetězec získaného z prostředku Azure Communication Services na webu Azure Portal. Další informace o připojovací řetězec najdete v tématu access-your-connection-strings-and-service-endpoints.

Získejte připojovací řetězec prostředku komunikace Azure z webu Azure Portal, jak je znázorněno na snímku obrazovky. Vlevo přejděte na Keys kartu. Zkopírujte Connection string pole pro primární klíč. Připojovací řetězec je ve formátu endpoint=https://{your Azure Communication Services resource name}.communication.azure.com/;accesskey={secret key}.

Snímek obrazovky znázorňující prostředek služby Azure Communication Services na webu Azure Portal, který zobrazuje pole Primární klíč v části Klíče

Nastavte proměnnou COMMUNICATION_SERVICES_CONNECTION_STRING prostředí na hodnotu připojovací řetězec.
Otevřete okno konzoly a zadejte následující příkaz:

setx COMMUNICATION_SERVICES_CONNECTION_STRING "<your connection string>"

Po přidání proměnné prostředí možná budete muset restartovat všechny spuštěné programy, které budou muset přečíst proměnnou prostředí, včetně okna konzoly. Pokud například jako editor používáte Sadu Visual Studio, restartujte sadu Visual Studio před spuštěním příkladu.

Další informace o tom, jak nastavit proměnnou prostředí pro váš systém, najdete v postupu při ukládání připojovací řetězec do proměnné prostředí.

    # Get a connection string to our Azure Communication Services resource.
    connection_string = os.getenv("COMMUNICATION_SERVICES_CONNECTION_STRING")
    
    def send_template_message(self):
        from azure.communication.messages import NotificationMessagesClient

        # Create NotificationMessagesClient Client
        messaging_client = NotificationMessagesClient.from_connection_string(self.connection_string)

Nastavení ID registrace kanálu

Během registrace kanálu jste vytvořili identifikátor GUID ID registrace kanálu. Najdete ho na portálu na kartě Kanály vašeho prostředku Azure Communication Services.

Snímek obrazovky znázorňující prostředek Azure Communication Services na webu Azure Portal zobrazte kartu Kanály Pozornost je umístěna na akci kopírování pole

Přiřaďte ji k proměnné s názvem channelRegistrationId.

    channelRegistrationId = os.getenv("WHATSAPP_CHANNEL_ID_GUID")

Nastavení seznamu příjemců

Musíte zadat aktivní telefonní číslo přidružené k účtu WhatsApp. Tento účet WhatsApp obdrží šablonu, text a mediální zprávy odeslané v tomto rychlém startu.

V tomto příkladu můžete použít svoje osobní telefonní číslo.

Telefonní číslo příjemce nemůže být firemní telefonní číslo (ID odesílatele) přidružené k registraci kanálu WhatsApp. ID odesílatele se zobrazí jako odesílatel textu a mediálních zpráv odeslaných příjemci.

Telefonní číslo musí obsahovat kód země. Další informace o formátování telefonních čísel naleznete v dokumentaci WhatsApp pro formáty telefonních čísel.

Poznámka:

V seznamu příjemců se aktuálně podporuje jenom jedno telefonní číslo.

Nastavte seznam příjemců takto:

    phone_number = os.getenv("RECIPIENT_WHATSAPP_PHONE_NUMBER")

Příklad použití:

    # Example only
    to=[self.phone_number],

Zahájení odesílání zpráv mezi firmou a uživatelem WhatsApp

Konverzace mezi účtem WhatsApp Business a uživatelem WhatsApp je možné zahájit jedním ze dvou způsobů:

  • Firma odešle uživateli WhatsApp zprávu šablony.
  • Uživatel WhatsApp odešle jakoukoli zprávu na firemní číslo.

Firma nemůže zahájit interaktivní konverzaci. Firma může odeslat interaktivní zprávu jenom po přijetí zprávy od uživatele. Firma může uživateli posílat jenom interaktivní zprávy během aktivní konverzace. Jakmile vyprší platnost 24hodinového okna konverzace, může interaktivní konverzaci restartovat jenom uživatel. Další informace o konverzacích najdete v definici aplikace WhatsApp Business Platform.

Pokud chcete zahájit interaktivní konverzaci z vašeho osobního účtu WhatsApp, pošlete zprávu na vaše firemní číslo (ID odesílatele).

Konverzace WhatsApp zobrazená na webu zobrazující zprávu uživatele poslanou na číslo obchodního účtu WhatsApp.

Nastavení prostředí

Vytvoření nové aplikace v Pythonu

V okně terminálu nebo konzoly vytvořte pro aplikaci novou složku a otevřete ji.

mkdir messages-quickstart && cd messages-quickstart

Nainstalujte balíček .

Použijte klientskou knihovnu Azure Communication Messages pro Python 1.1.0 nebo novější.

Z příkazového řádku konzoly spusťte následující příkaz:

pip install azure-communication-messages

Pro InteractiveMessages, Reakce a nálepky použijte následující beta verzi:

pip install azure-communication-messages==1.2.0b1

Nastavení architektury aplikace

Vytvořte volaný messages-quickstart.py nový soubor a přidejte základní strukturu programu.

type nul > messages-quickstart.py   

Základní struktura programu

import os

class MessagesQuickstart(object):
    print("Azure Communication Services - Advanced Messages SDK Quickstart")

if __name__ == '__main__':
    messages = MessagesQuickstart()

Základní struktura programu

import os

class MessagesQuickstart(object):
    print("Azure Communication Services - Advanced Messages SDK Quickstart")

if __name__ == '__main__':
    messages = MessagesQuickstart()

Příklady kódu

Podle těchto kroků přidejte do programu Python potřebné fragmenty messages-quickstart.py kódu.

Výpis šablon WhatsApp na webu Azure Portal

Šablony můžete zobrazit na webu Azure Portal tak, že přejdete na pokročilé šablony zasílání zpráv>prostředků >služby Azure Communication Service.

Snímek obrazovky znázorňující prostředek Azure Communication Services na webu Azure Portal zobrazte kartu Šablony

Výběrem šablony zobrazíte podrobnosti šablony.

Pole content podrobností šablony může obsahovat vazby parametrů. Vazby parametrů lze oznamovat takto:

  • Pole format s hodnotou, například IMAGE.
  • Dvojité závorky obklopují číslo, například {{1}}. Číslo, index zahájený na 1, označuje pořadí, ve kterém musí být zadány hodnoty vazby k vytvoření šablony zprávy.

Snímek obrazovky znázorňující podrobnosti šablony

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 následujícím způsobem:

def get_templates_list(self):

    from azure.communication.messages import MessageTemplateClient
    message_template_client = MessageTemplateClient.from_connection_string(self.connection_string)
    # calling send() with whatsapp message details
    template_list = message_template_client.list_templates(self.channel_id)
    count_templates = len(list(template_list))
    print("Successfully retrieved {} templates from channel_id {}.".format(count_templates, self.channel_id))

Odeslání zprávy šablony bez parametrů

Pokud šablona nevyžaduje parametry, nemusíte při vytváření zadávat MessageTemplatehodnoty ani vazby.

Příklad

Nemá sample_template parametry.

Snímek obrazovky znázorňující podrobnosti šablony pro šablonu s názvem sample_template

MessageTemplate Sestavte odkazování na název a jazyk cílové šablony.

input_template: MessageTemplate = MessageTemplate(name="gathering_invitation", language="ca")  # Name of the WhatsApp Template

Odeslání zprávy š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, index zahájený na 1, označuje pořadí, ve kterém musí být zadány hodnoty vazby k vytvoření šablony zprávy. Pokus o zahrnutí parametrů, které nejsou v šabloně, je neplatný.

Definice šablony se dvěma parametry:

{
  "type": "BODY",
  "text": "Message with two parameters: {{1}} and {{2}}"
}

Příklady

sample_shipping_confirmation šablona:

Snímek obrazovky znázorňující podrobnosti šablony pro šablonu s názvem sample_shipping_confirmation

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."
},

Definujte parametry pomocí MessageTemplateValue hodnot a MessageTemplateWhatsAppBindings vazeb. K sestavení MessageTemplatepoužijte hodnoty a vazby .

# Setting template options
templateName = "sample_shipping_confirmation"
templateLanguage = "en_us" 
shippingConfirmationTemplate: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
threeDays = MessageTemplateText(name="threeDays", text="3")
bindings = WhatsAppMessageTemplateBindings(body=[WhatsAppMessageTemplateBindingsComponent(ref_value=threeDays.name)])
shippingConfirmationTemplate.bindings = bindings
shippingConfirmationTemplate.template_values=[threeDays]
template_options = TemplateNotificationContent(
    channel_registration_id=self.channel_id, to=[self.phone_number], template=shippingConfirmationTemplate
)

Odeslání zprávy šablony s parametrem média v hlavičce

Použijte MessageTemplateImage, MessageTemplateVideonebo MessageTemplateDocument definujte parametr média v hlavičce.

Definice šablony s parametrem média obrázku v hlavičce:

{
  "type": "HEADER",
  "format": "IMAGE"
},

Aplikace format WhatsApp podporuje různé typy médií. V sadě .NET SDK každý typ média používá odpovídající MessageTemplateValue typ.

Formát MessageTemplateValue – typ Typ souboru
IMAGE MessageTemplateImage png, jpg
VIDEO MessageTemplateVideo mp4
DOKUMENT MessageTemplateDocument pdf

Další informace o podporovaných typech médií a omezení velikosti najdete v dokumentaci aplikace WhatsApp k médiím zpráv.

Příklady

sample_movie_ticket_confirmation šablona:

Snímek obrazovky znázorňující podrobnosti šablony pro šablonu s názvem sample_movie_ticket_confirmation

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 MessageTemplateValueMessageTemplateWhatsAppBindings parametry v pořadí, v jakém se parametry zobrazí v obsahu šablony.

 # Setting template options
templateName = "sample_movie_ticket_confirmation"
templateLanguage = "en_us" 
imageUrl = "https://aka.ms/acsicon1"
sample_movie_ticket_confirmation: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
image = MessageTemplateImage(name="image", url=imageUrl)
title = MessageTemplateText(name="title", text="Contoso")
time = MessageTemplateText(name="time", text="July 1st, 2023 12:30PM")
venue = MessageTemplateText(name="venue", text="Southridge Video")
seats = MessageTemplateText(name="seats", text="Seat 1A")

bindings = WhatsAppMessageTemplateBindings(header=[WhatsAppMessageTemplateBindingsComponent(ref_value=image.name)],
                                            body=[WhatsAppMessageTemplateBindingsComponent(ref_value=title.name),
                                                    WhatsAppMessageTemplateBindingsComponent(ref_value=time.name),
                                                    WhatsAppMessageTemplateBindingsComponent(ref_value=venue.name),
                                                    WhatsAppMessageTemplateBindingsComponent(ref_value=seats.name)])
sample_movie_ticket_confirmation.bindings = bindings
sample_movie_ticket_confirmation.template_values=[image,title,time,venue,seats]
template_options = TemplateNotificationContent(
    channel_registration_id=self.channel_id, to=[self.phone_number], template=sample_movie_ticket_confirmation)

Odeslání zprávy šablony pomocí tlačítek pro rychlé odpovědi

Slouží MessageTemplateQuickAction k definování datové části pro tlačítka rychlých odpovědí a MessageTemplateQuickAction objekty s následujícími třemi atributy.

Vlastnosti Popis Typ
Název Vyhledání name hodnoty v MessageTemplateWhatsAppBindings. string
Text Rychlá akce možnosti text. string
Datová část Přiřazení payload k tlačítku dostupnému ve zprávě odpovědět, pokud uživatel tlačítko vybere. string

Definice šablony s tlačítky pro rychlé odpovědi:

{
  "type": "BUTTONS",
  "buttons": [
    {
      "type": "QUICK_REPLY",
      "text": "Yes"
    },
    {
      "type": "QUICK_REPLY",
      "text": "No"
    }
  ]
}

Pořadí zobrazení tlačítek v definici šablony musí odpovídat pořadí, ve kterém jsou tlačítka definována při vytváření vazeb pomocí MessageTemplateWhatsAppBindings.

Další informace o datové části v odpovědích rychlých odpovědí od uživatele najdete v dokumentaci aplikace WhatsApp k přijetí zpětného volání z tlačítka Rychlá odpověď.

Příklad

sample_issue_resolution šablona:

Snímek obrazovky znázorňující podrobnosti šablony pro šablonu s názvem sample_issue_resolution

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"
    }
  ]
}

Vytvořte jednu MessageTemplateText a dvě MessageTemplateQuickAction proměnné. Pak seznam sestavíte tak, že poskytnete MessageTemplateValueMessageTemplateWhatsAppBindings parametry v pořadí, v jakém se parametry zobrazí v obsahu šablony. Pořadí je také důležité při definování tlačítek vazeb.

# Setting template options
templateName = "sample_issue_resolution"
templateLanguage = "en_us" 
shippingConfirmationTemplate: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
name = MessageTemplateText(name="first", text="Joe")
yes = MessageTemplateQuickAction(name="Yes", payload="Joe said yes")
no = MessageTemplateQuickAction(name="No", payload = "Joe said no")
bindings = WhatsAppMessageTemplateBindings(body=[WhatsAppMessageTemplateBindingsComponent(ref_value=name.name)])
bindings.buttons = [WhatsAppMessageTemplateBindingsButton(sub_type=WhatsAppMessageButtonSubType.QUICK_REPLY, ref_value=yes.name),
                    WhatsAppMessageTemplateBindingsButton(sub_type=WhatsAppMessageButtonSubType.QUICK_REPLY, ref_value=no.name)]
shippingConfirmationTemplate.bindings = bindings
shippingConfirmationTemplate.template_values=[name,yes,no]
template_options = TemplateNotificationContent(
    channel_registration_id=self.channel_id, to=[self.phone_number], template=shippingConfirmationTemplate
)

Odeslání zprávy šablony s umístěním v záhlaví

Slouží MessageTemplateLocation k definování parametru umístění v hlavičce.

Definice šablony pro součást záhlaví vyžadující umístění jako:

{
  "type": "header",
  "parameters": [
    {
      "type": "location",
      "location": {
        "latitude": "<LATITUDE>",
        "longitude": "<LONGITUDE>",
        "name": "<NAME>",
        "address": "<ADDRESS>"
      }
    }
  ]
}

format Můžou vyžadovat různé typy médií. V sadě .NET SDK každý typ média používá odpovídající MessageTemplateValue typ.

Vlastnosti Popis Typ
ADDRESS Adresa, která se zobrazí za NAME hodnotou pod obecnou mapou v horní části zprávy. string
LATITUDE Zeměpisná šířka umístění. double
LONGITUDE Zeměpisná délka umístění. double
LOCATIONNAME Text, který se zobrazí bezprostředně pod obecnou mapou v horní části zprávy string

Další informace o šablonách založených na poloze najdete v dokumentaci aplikace WhatsApp k médiím zpráv.

Příklad

sample_movie_location šablona:

Snímek obrazovky znázorňující podrobnosti šablony pro šablonu s názvem sample_location_template

Sestavení šablony zprávy založené na umístění:

 # Setting template options
        templateName = "sample_movie_location"
        templateLanguage = "en_us" 
        sample_movie_location: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
        name = MessageTemplateText(name="first", text="Joe")
        location = MessageTemplateLocation(name="location", location_name="Pablo Morales",
                                            address="1 Hacker Way, Menlo Park, CA 94025",
                                            latitude=37.483307,longitude=122.148981)
        bindings = WhatsAppMessageTemplateBindings(body=[WhatsAppMessageTemplateBindingsComponent(ref_value=name.name)],
                                                    header=[WhatsAppMessageTemplateBindingsComponent(ref_value=location.name)])
        sample_movie_location.bindings = bindings
        sample_movie_location.template_values=[name,location]
        template_options = TemplateNotificationContent(
            channel_registration_id=self.channel_id, to=[self.phone_number], template=sample_movie_location)

Slouží MessageTemplateQuickAction k definování přípony ADRESY URL pro tlačítka akcí volání a MessageTemplateQuickAction objektu mají následující dva atributy.

Vlastnosti Popis Typ
Název Použitý name k vyhledání hodnoty v MessageTemplateWhatsAppBindings. string
Text Připojeno text k adrese URL. string

Tlačítka definice šablony:

{
  "type": "BUTTONS",
  "buttons": [
    {
      "type": "URL",
      "text": "Take Survey",
      "url": "https://www.example.com/{{1}}"
    }
  ]
}

Pořadí zobrazení tlačítek v definici šablony musí odpovídat pořadí, ve kterém jsou tlačítka definována při vytváření vazeb pomocí MessageTemplateWhatsAppBindings.

Příklad

sample_purchase_feedback šablona:

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. Vytvořte šablony tlačítek akce s typem Dynamic adresy URL pro View website typ akce.

Snímek obrazovky znázorňující úpravu typu adresy URL ve Správci WhatsApp

V této ukázce vyžaduje hlavička šablony obrázek:

{
  "type": "HEADER",
  "format": "IMAGE"
},

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}}"
    }
  ]
}

Vytvořte jednu MessageTemplateImage, jednu MessageTemplateTexta jednu proměnnou MessageTemplateQuickAction . Pak seznam sestavíte tak, že poskytnete MessageTemplateValueMessageTemplateWhatsAppBindings parametry v pořadí, v jakém se parametry zobrazí v obsahu šablony. Pořadí je také důležité při definování tlačítek vazeb.

# Setting template options
        templateName = "sample_purchase_feedback"
        templateLanguage = "en_us"
        imageUrl = "https://aka.ms/acsicon1" 
        sample_purchase_feedback: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
        name = MessageTemplateText(name="first", text="Joe")
        image = MessageTemplateImage(name="image", url=imageUrl)
        uri_to_click = MessageTemplateQuickAction(name="url", text="questions")

        bindings = WhatsAppMessageTemplateBindings(body=[WhatsAppMessageTemplateBindingsComponent(ref_value=name.name)],
                                                    header=[WhatsAppMessageTemplateBindingsComponent(ref_value=image.name)],
                                                    buttons=[WhatsAppMessageTemplateBindingsButton(sub_type=WhatsAppMessageButtonSubType.URL,
                                                    ref_value=uri_to_click.name)])
        sample_purchase_feedback.bindings = bindings
        sample_purchase_feedback.template_values=[name, image, uri_to_click]
        template_options = TemplateNotificationContent(
            channel_registration_id=self.channel_id, to=[self.phone_number], template=sample_purchase_feedback)

Úplný příklad

import os
import sys

sys.path.append("..")

class SendWhatsAppTemplateMessageSample(object):

    connection_string = os.getenv("COMMUNICATION_SAMPLES_CONNECTION_STRING")
    phone_number = os.getenv("RECIPIENT_PHONE_NUMBER")
    channel_id = os.getenv("WHATSAPP_CHANNEL_ID")

    def send_template_message_without_parameters(self):
        from azure.communication.messages import NotificationMessagesClient
        from azure.communication.messages.models import ( TemplateNotificationContent , MessageTemplate )

        # client creation
        messaging_client = NotificationMessagesClient.from_connection_string(self.connection_string)
        input_template: MessageTemplate = MessageTemplate(
            name="<<TEMPLATE_NAME>>",
            language="<<LANGUAGE>>")
        template_options = TemplateNotificationContent(
            channel_registration_id=self.channelRegistrationId,
            to=[self.phone_number],
            template=input_template
        )

        # calling send() with WhatsApp template details.
        message_responses = messaging_client.send(template_options)
        response = message_responses.receipts[0]
        
        if (response is not None):
            print("WhatsApp Templated Message with message id {} was successfully sent to {}"
            .format(response.message_id, response.to))
        else:
            print("Message failed to send")

    def send_template_message_with_parameters(self):

        from azure.communication.messages import NotificationMessagesClient
        from azure.communication.messages.models import (TemplateNotificationContent, MessageTemplate,
        MessageTemplateText, WhatsAppMessageTemplateBindings, WhatsAppMessageTemplateBindingsComponent)

        messaging_client = NotificationMessagesClient.from_connection_string(self.connection_string)

        # Setting template options
        templateName = "sample_shipping_confirmation"
        templateLanguage = "en_us" 
        shippingConfirmationTemplate: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
        threeDays = MessageTemplateText(name="threeDays", text="3")
        bindings = WhatsAppMessageTemplateBindings(body=[WhatsAppMessageTemplateBindingsComponent(ref_value=threeDays.name)])
        shippingConfirmationTemplate.bindings = bindings
        shippingConfirmationTemplate.template_values=[threeDays]
        template_options = TemplateNotificationContent(
            channel_registration_id=self.channel_id, to=[self.phone_number], template=shippingConfirmationTemplate
        )

        # calling send() with whatsapp message details
        message_responses = messaging_client.send(template_options)
        response = message_responses.receipts[0]
        print("WhatsApp text parameters Templated Message with message id {} was successfully sent to {}"
            .format(response.message_id, response.to))

    def send_template_message_with_media(self):

        from azure.communication.messages import NotificationMessagesClient
        from azure.communication.messages.models import (TemplateNotificationContent, MessageTemplate,
        MessageTemplateText, WhatsAppMessageTemplateBindings, WhatsAppMessageTemplateBindingsComponent,
        MessageTemplateImage)

        messaging_client = NotificationMessagesClient.from_connection_string(self.connection_string)

        # Setting template options
        templateName = "sample_movie_ticket_confirmation"
        templateLanguage = "en_us" 
        imageUrl = "https://aka.ms/acsicon1"
        sample_movie_ticket_confirmation: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
        image = MessageTemplateImage(name="image", url=imageUrl)
        title = MessageTemplateText(name="title", text="Contoso")
        time = MessageTemplateText(name="time", text="July 1st, 2023 12:30PM")
        venue = MessageTemplateText(name="venue", text="Southridge Video")
        seats = MessageTemplateText(name="seats", text="Seat 1A")

        bindings = WhatsAppMessageTemplateBindings(header=[WhatsAppMessageTemplateBindingsComponent(ref_value=image.name)],
                                                   body=[WhatsAppMessageTemplateBindingsComponent(ref_value=title.name),
                                                         WhatsAppMessageTemplateBindingsComponent(ref_value=time.name),
                                                         WhatsAppMessageTemplateBindingsComponent(ref_value=venue.name),
                                                         WhatsAppMessageTemplateBindingsComponent(ref_value=seats.name)])

        sample_movie_ticket_confirmation.bindings = bindings
        sample_movie_ticket_confirmation.template_values=[image,title,time,venue,seats]
        template_options = TemplateNotificationContent(
            channel_registration_id=self.channel_id, to=[self.phone_number], template=sample_movie_ticket_confirmation)

        # calling send() with whatsapp message details
        message_responses = messaging_client.send(template_options)
        response = message_responses.receipts[0]
        print("WhatsApp media parameters in templated message header with message id {} was successfully sent to {}"
            .format(response.message_id, response.to))

    def send_template_message_with_buttons(self):

        from azure.communication.messages import NotificationMessagesClient
        from azure.communication.messages.models import (TemplateNotificationContent, MessageTemplate,
        MessageTemplateText, WhatsAppMessageTemplateBindings, WhatsAppMessageTemplateBindingsComponent,
        MessageTemplateQuickAction, WhatsAppMessageTemplateBindingsButton, WhatsAppMessageButtonSubType)

        messaging_client = NotificationMessagesClient.from_connection_string(self.connection_string)

        # Setting template options
        templateName = "sample_issue_resolution"
        templateLanguage = "en_us" 
        shippingConfirmationTemplate: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
        name = MessageTemplateText(name="first", text="Joe")
        yes = MessageTemplateQuickAction(name="Yes", payload="Joe said yes")
        no = MessageTemplateQuickAction(name="No", payload = "Joe said no")
        bindings = WhatsAppMessageTemplateBindings(body=[WhatsAppMessageTemplateBindingsComponent(ref_value=name.name)])
        bindings.buttons = [WhatsAppMessageTemplateBindingsButton(sub_type=WhatsAppMessageButtonSubType.QUICK_REPLY, ref_value=yes.name),
                            WhatsAppMessageTemplateBindingsButton(sub_type=WhatsAppMessageButtonSubType.QUICK_REPLY, ref_value=no.name)]
        shippingConfirmationTemplate.bindings = bindings
        shippingConfirmationTemplate.template_values=[name,yes,no]
        template_options = TemplateNotificationContent(
            channel_registration_id=self.channel_id, to=[self.phone_number], template=shippingConfirmationTemplate
        )

        # calling send() with whatsapp message details
        message_responses = messaging_client.send(template_options)
        response = message_responses.receipts[0]
        print("WhatsApp Quick Button Templated Message with message id {} was successfully sent to {}"
            .format(response.message_id, response.to))

    def send_template_message_with_location(self):

        from azure.communication.messages import NotificationMessagesClient
        from azure.communication.messages.models import (TemplateNotificationContent, MessageTemplate,
        MessageTemplateText, WhatsAppMessageTemplateBindings, WhatsAppMessageTemplateBindingsComponent,
        MessageTemplateLocation)

        messaging_client = NotificationMessagesClient.from_connection_string(self.connection_string)

        # Setting template options
        templateName = "sample_movie_location"
        templateLanguage = "en_us" 
        sample_movie_location: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
        name = MessageTemplateText(name="first", text="Joe")
        location = MessageTemplateLocation(name="location", location_name="Pablo Morales",
                                            address="1 Hacker Way, Menlo Park, CA 94025",
                                            latitude=37.483307,longitude=122.148981)
        bindings = WhatsAppMessageTemplateBindings(body=[WhatsAppMessageTemplateBindingsComponent(ref_value=name.name)],
                                                    header=[WhatsAppMessageTemplateBindingsComponent(ref_value=location.name)])
        sample_movie_location.bindings = bindings
        sample_movie_location.template_values=[name,location]
        template_options = TemplateNotificationContent(
            channel_registration_id=self.channel_id, to=[self.phone_number], template=sample_movie_location)

        # calling send() with whatsapp message details
        message_responses = messaging_client.send(template_options)
        response = message_responses.receipts[0]
        print("WhatsApp Location Templated Message with message id {} was successfully sent to {}"
            .format(response.message_id, response.to))

    def send_template_message_with_call_to_action(self):

        from azure.communication.messages import NotificationMessagesClient
        from azure.communication.messages.models import (TemplateNotificationContent, MessageTemplate,
        MessageTemplateText, WhatsAppMessageTemplateBindings, WhatsAppMessageTemplateBindingsComponent,
        MessageTemplateQuickAction, MessageTemplateImage, WhatsAppMessageTemplateBindingsButton,
        WhatsAppMessageButtonSubType)

        messaging_client = NotificationMessagesClient.from_connection_string(self.connection_string)

        # Setting template options
        templateName = "sample_purchase_feedback"
        templateLanguage = "en_us"
        imageUrl = "https://aka.ms/acsicon1" 
        sample_purchase_feedback: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
        name = MessageTemplateText(name="first", text="Joe")
        image = MessageTemplateImage(name="image", url=imageUrl)
        uri_to_click = MessageTemplateQuickAction(name="url", text="questions")

        bindings = WhatsAppMessageTemplateBindings(body=[WhatsAppMessageTemplateBindingsComponent(ref_value=name.name)],
                                                    header=[WhatsAppMessageTemplateBindingsComponent(ref_value=image.name)],
                                                    buttons=[WhatsAppMessageTemplateBindingsButton(sub_type=WhatsAppMessageButtonSubType.URL,
                                                                                                    ref_value=uri_to_click.name)])
        sample_purchase_feedback.bindings = bindings
        sample_purchase_feedback.template_values=[name, image, uri_to_click]
        template_options = TemplateNotificationContent(
            channel_registration_id=self.channel_id, to=[self.phone_number], template=sample_purchase_feedback)

        # calling send() with whatsapp message details
        message_responses = messaging_client.send(template_options)
        response = message_responses.receipts[0]
        print("WhatsApp Call To Action Templated Message with message id {} was successfully sent to {}"
        .format(response.message_id, response.to))

if __name__ == "__main__":
    sample = SendWhatsAppTemplateMessageSample()
    sample.send_template_message_without_parameters()
    sample.send_template_message_with_parameters()
    sample.send_template_message_with_buttons()
    sample.send_template_message_with_location()
    sample.send_template_message_with_call_to_action()

Spuštění kódu

Pokud chcete kód spustit, ujistěte se, že jste v adresáři, kde je váš messages-quickstart.py soubor.

python messages-quickstart.py
Azure Communication Services - Advanced Messages Quickstart
WhatsApp Templated Message with message id <<GUID>> was successfully sent to <<ToRecipient>>

Další kroky