Envie mensagens modelo do WhatsApp usando o Advanced Messages
Este artigo descreve como enviar mensagens modelo do WhatsApp usando o Advanced Communication Messages SDK.
Pré-requisitos
- Registre a conta do WhatsApp Business com seu recurso dos Serviços de Comunicação do Azure.
- Crie uma mensagem de modelo do WhatsApp.
- Número de telefone ativo do WhatsApp para receber mensagens.
Modelo de objeto
As classes e interfaces a seguir lidam com alguns dos principais recursos do SDK de Mensagens dos Serviços de Comunicação do Azure para .NET.
Nome da classe | Description |
---|---|
NotificationMessagesClient |
Conecta-se ao seu recurso dos Serviços de Comunicação do Azure. Ele envia as mensagens. |
MessageTemplate |
Define qual modelo você usa e o conteúdo das propriedades do modelo para sua mensagem. |
TemplateNotificationContent |
Define o "quem" e o "o quê" da mensagem modelo que você pretende enviar. |
Nota
Para obter mais informações, consulte a referência do SDK do Azure para .NET Azure.Communication.Messages Namespace.
Tipos de modelos do WhatsApp suportados
Tipo de modelo | Description |
---|---|
Modelos de mensagens de texto | Os modelos de mensagens do WhatsApp são formatos de mensagem específicos com ou sem parâmetros. |
Modelos de mensagem baseados em mídia | Modelos de mensagens do WhatsApp com parâmetros de mídia para componentes de cabeçalho. |
Modelos de mensagens interativas | Os modelos de mensagem interativa expandem o conteúdo que você pode enviar aos destinatários, incluindo botões interativos usando o objeto components. Tanto a Call-to-Action como a Resposta Rápida são suportadas. |
Modelos de mensagem baseados em localização | Modelos de mensagens do WhatsApp com parâmetros de localização em termos de longitude e latitude para componentes de cabeçalho. |
Configuração comum
Siga estas etapas para adicionar os trechos de código necessários à função Principal do seu Program.cs
arquivo.
- Crie e gerencie mensagens de modelo do WhatsApp.
- Autentique o cliente.
- Defina o ID de registro do canal.
- Definir lista de destinatários.
Criar e gerenciar mensagens de modelo do WhatsApp
Os modelos de mensagens do WhatsApp são formatos de mensagem específicos que as empresas usam para enviar notificações ou mensagens de atendimento ao cliente para pessoas que optaram por receber notificações. As mensagens podem incluir lembretes de compromissos, informações de envio, resolução de problemas ou atualizações de pagamento. Antes de começar a usar o SDK de mensagens avançadas para enviar mensagens modeladas, o usuário precisa criar os modelos necessários na plataforma WhatsApp Business.
Para obter mais informações sobre os requisitos do WhatsApp para modelos, consulte as referências da API da plataforma WhatsApp Business:
- Crie e gerencie modelos.
- Exibir componentes de modelo.
- Enviar mensagens de modelo.
- As empresas também devem aderir aos requisitos de aceitação antes de enviar mensagens aos usuários do WhatsApp.
Autenticar o cliente
O SDK de mensagens usa o NotificationMessagesClient
para enviar mensagens. O NotificationMessagesClient
método autentica usando sua cadeia de conexão adquirida do recurso Serviços de Comunicação do Azure no portal do Azure. Para obter mais informações sobre cadeias de conexão, consulte access-your-connection-strings-and-service-endpoints.
Para simplificar, este guia de início rápido usa uma cadeia de conexão para autenticar. Em ambientes de produção, recomendamos o uso de entidades de serviço.
Obtenha a cadeia de conexão do seu recurso dos Serviços de Comunicação do Azure no portal do Azure. À esquerda, navegue até a Keys
guia. Copie o Connection string
campo da chave primária. A cadeia de conexão está no formato endpoint=https://{your Azure Communication Services resource name}.communication.azure.com/;accesskey={secret key}
.
Defina a variável COMMUNICATION_SERVICES_CONNECTION_STRING
de ambiente para o valor da sua cadeia de conexão.
Abra uma janela do console e digite o seguinte comando:
setx COMMUNICATION_SERVICES_CONNECTION_STRING "<your connection string>"
Depois de adicionar a variável de ambiente, talvez seja necessário reiniciar todos os programas em execução que precisarão ler a variável de ambiente, incluindo a janela do console. Por exemplo, se você estiver usando o Visual Studio como editor, reinicie o Visual Studio antes de executar o exemplo.
Para obter mais informações sobre como definir uma variável de ambiente para seu sistema, siga as etapas em Armazenar sua cadeia de conexão em uma variável de ambiente.
Para instanciar um NotificationMessagesClient
, adicione o seguinte código ao Main
método:
// Retrieve connection string from environment variable
string connectionString =
Environment.GetEnvironmentVariable("COMMUNICATION_SERVICES_CONNECTION_STRING");
// Instantiate the client
var notificationMessagesClient = new NotificationMessagesClient(connectionString);
Definir ID de registro do canal
Você criou o GUID do ID de registro do canal durante o registro do canal. Encontre-o no portal na guia Canais do seu recurso dos Serviços de Comunicação do Azure.
Atribua-o a uma variável chamada channelRegistrationId.
var channelRegistrationId = new Guid("<your channel registration ID GUID>");
Definir lista de destinatários
Você precisa fornecer um número de telefone ativo associado a uma conta do WhatsApp. Esta conta do WhatsApp recebe o modelo, o texto e as mensagens de mídia enviadas neste início rápido.
Para este exemplo, você pode usar seu número de telefone pessoal.
O número de telefone do destinatário não pode ser o número de telefone comercial (ID do remetente) associado ao registro do canal do WhatsApp. O ID do Remetente aparece como o remetente das mensagens de texto e mídia enviadas ao destinatário.
O número de telefone deve incluir o código do país. Para obter mais informações sobre a formatação do número de telefone, consulte a documentação do WhatsApp para formatos de número de telefone.
Nota
Atualmente, apenas um número de telefone é suportado na lista de destinatários.
Crie a lista de destinatários da seguinte forma:
var recipientList = new List<string> { "<to WhatsApp phone number>" };
Exemplo:
// Example only
var recipientList = new List<string> { "+14255550199" };
Comece a enviar mensagens entre uma empresa e um usuário do WhatsApp
As conversas entre uma conta do WhatsApp Business e um usuário do WhatsApp podem ser iniciadas de duas maneiras:
- A empresa envia uma mensagem modelo para o usuário do WhatsApp.
- O usuário do WhatsApp envia qualquer mensagem para o número comercial.
Uma empresa não pode iniciar uma conversa interativa. Uma empresa só pode enviar uma mensagem interativa depois de receber uma mensagem do utilizador. A empresa só pode enviar mensagens interativas para o usuário durante a conversa ativa. Quando a janela de conversa de 24 horas expirar, apenas o usuário poderá reiniciar a conversa interativa. Para obter mais informações sobre conversas, consulte a definição em WhatsApp Business Platform.
Para iniciar uma conversa interativa a partir da sua conta pessoal do WhatsApp, envie uma mensagem para o número da sua empresa (ID do remetente).
Configurar ambiente
Criar o projeto .NET
Para criar seu projeto, siga o tutorial em Criar um aplicativo de console .NET usando o Visual Studio.
Para compilar o código, pressione Ctrl+F7.
Instalar o pacote
Instale o pacote NuGet Azure.Communication.Messages em seu projeto C#.
- Abra o Gerenciador de Pacotes NuGet em
Project
>Manage NuGet Packages...
. - Procure o pacote
Azure.Communication.Messages
. - Instale a versão mais recente.
Configurar a estrutura do aplicativo
Abra o Program.cs
ficheiro num editor de texto.
Substitua os conteúdos de Program.cs
pelo seguinte código:
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
}
}
}
Para usar os recursos de Mensagens Avançadas, adicione uma using
diretiva para incluir o Azure.Communication.Messages
namespace.
using Azure.Communication.Messages;
Exemplos de código
Siga estas etapas para adicionar trechos de código necessários à função Principal do seu Program.cs
arquivo.
- Liste modelos do WhatsApp no portal do Azure.
- Enviar mensagem de modelo sem parâmetros.
- Enviar mensagem de modelo com parâmetros de texto no corpo.
- Enviar mensagem de modelo com parâmetro de mídia no cabeçalho.
- Enviar mensagem de modelo com localização no cabeçalho.
- Enviar mensagem de modelo com botões de resposta rápida.
- Enviar mensagem de modelo com botões de chamada para ação com link dinâmico.
- Enviar mensagem de modelo com botões de chamada para ação com link estático.
Listar modelos do WhatsApp no portal do Azure
Pode ver os seus modelos no portal do Azure acedendo aos Modelos >de Mensagens Avançadas>do recurso do Serviço de Comunicação do Azure.
Selecione um modelo para visualizar os detalhes.
O content
campo de detalhes do modelo pode incluir associações de parâmetros. As ligações de parâmetros podem ser indicadas como:
- Um
format
campo com um valor comoIMAGE
. - Colchetes duplos ao redor de um número, como
{{1}}
. O número, indexado iniciado em 1, indica a ordem na qual os valores de vinculação devem ser fornecidos para criar o modelo de mensagem.
Como alternativa, você pode visualizar e editar todos os seus modelos de Conta do WhatsApp Business nas ferramentas >de Conta do WhatsApp Manager> Modelos de mensagem.
Para listar seus modelos programaticamente, você pode buscar todos os modelos para o ID do canal da seguinte maneira:
MessageTemplateClient messageTemplateClient = new MessageTemplateClient(connectionString);
Pageable<MessageTemplateItem> templates = messageTemplateClient.GetTemplates(channelRegistrationId);
Enviar mensagem de modelo sem parâmetros
Se o modelo não exigir parâmetros, você não precisará fornecer valores ou associações ao criar o MessageTemplate
.
var messageTemplate = new MessageTemplate(templateName, templateLanguage);
Exemplo
O sample_template
não leva parâmetros.
Monte o MessageTemplate
fazendo referência ao nome e idioma do modelo de destino.
string templateName = "sample_template";
string templateLanguage = "en_us";
var sampleTemplate = new MessageTemplate(templateName, templateLanguage);
Enviar mensagem de modelo com parâmetros de texto no corpo
Use MessageTemplateText
para definir parâmetros no corpo indicados com colchetes duplos ao redor de um número, como {{1}}
. O número, índice iniciado em 1, indica a ordem na qual os valores de vinculação devem ser fornecidos para criar o modelo de mensagem. A inclusão de parâmetros que não estão no modelo é inválida.
Definição de modelo com dois parâmetros:
{
"type": "BODY",
"text": "Message with two parameters: {{1}} and {{2}}"
}
Exemplos
sample_shipping_confirmation
Modelo:
Neste exemplo, o corpo do modelo tem um parâmetro:
{
"type": "BODY",
"text": "Your package has been shipped. It will be delivered in {{1}} business days."
},
Os parâmetros são definidos com os MessageTemplateValue
valores e MessageTemplateWhatsAppBindings
ligações. Use os valores e as ligações para montar o MessageTemplate
arquivo .
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);
Enviar mensagem de modelo com parâmetro de mídia no cabeçalho
Use MessageTemplateImage
, MessageTemplateVideo
ou MessageTemplateDocument
para definir o parâmetro media em um cabeçalho.
Definição de modelo com parâmetro de mídia de imagem no cabeçalho:
{
"type": "HEADER",
"format": "IMAGE"
},
O format
pode ter diferentes tipos de mídia suportados pelo WhatsApp. No SDK do .NET, cada tipo de mídia usa um tipo MessageTemplateValue correspondente.
Formato | Tipo MessageTemplateValue | File Type |
---|---|---|
IMAGE |
MessageTemplateImage |
PNG, JPG |
VIDEO |
MessageTemplateVideo |
mp4 |
DOCUMENT |
MessageTemplateDocument |
Para obter mais informações sobre tipos de mídia suportados e limites de tamanho, consulte a documentação do WhatsApp para mídia de mensagens.
Montagem de modelo de mensagem para mídia de imagem:
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);
Exemplos
sample_movie_ticket_confirmation
Modelo:
Neste exemplo, o cabeçalho do modelo requer uma imagem:
{
"type": "HEADER",
"format": "IMAGE"
},
O corpo do modelo requer quatro parâmetros de texto:
{
"type": "BODY",
"text": "Your ticket for *{{1}}*\n*Time* - {{2}}\n*Venue* - {{3}}\n*Seats* - {{4}}"
},
Crie uma MessageTemplateImage
e quatro MessageTemplateText
variáveis. Em seguida, monte sua lista de e sua MessageTemplateWhatsAppBindings
fornecendo os parâmetros na ordem em que os parâmetros aparecem no conteúdo do MessageTemplateValue
modelo.
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;
Mais exemplos
- VÍDEO: Usar modelo de exemplo sample_happy_hour_announcement
- DOCUMENTO: Usar modelo de exemplo sample_flight_confirmation
Enviar mensagem de modelo com localização no cabeçalho
Use MessageTemplateLocation
para definir o parâmetro location em um cabeçalho.
Definição de modelo para o componente de cabeçalho que requer localização como:
{
"type": "header",
"parameters": [
{
"type": "location",
"location": {
"latitude": "<LATITUDE>",
"longitude": "<LONGITUDE>",
"name": "<NAME>",
"address": "<ADDRESS>"
}
}
]
}
O format
pode exigir diferentes tipos de mídia. No SDK do .NET, cada tipo de mídia usa um tipo MessageTemplateValue correspondente.
Propriedades | Description | Type |
---|---|---|
ADDRESS |
Endereço que aparece após o NAME valor, abaixo do mapa genérico na parte superior da mensagem. |
string |
LATITUDE |
Latitude de localização. | duplo |
LONGITUDE |
Localização longitude. | duplo |
LOCATIONNAME |
Texto que aparece imediatamente abaixo do mapa genérico na parte superior da mensagem. | string |
Para obter mais informações sobre modelos baseados em localização, consulte a documentação do WhatsApp para mídia de mensagens.
Exemplo
sample_movie_location
Modelo:
Montagem do modelo de mensagem com base no local:
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;
Enviar mensagem de modelo com botões de resposta rápida
Use MessageTemplateQuickAction
para definir a carga útil para resposta rápida Os botões e MessageTemplateQuickAction
objetos têm os três atributos a seguir.
Propriedades | Description | Type |
---|---|---|
Nome | O name usado para procurar o valor em MessageTemplateWhatsAppBindings . |
string |
Texto | A ação text rápida opcional . |
string |
Payload | O payload atribuído a um botão disponível em uma mensagem responde se o usuário seleciona o botão. |
string |
Definição de modelo com botões de resposta rápida:
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
A ordem em que os botões aparecem na definição do modelo deve corresponder à ordem na qual os botões são definidos ao criar as ligações com MessageTemplateWhatsAppBindings
.
Para obter mais informações sobre a carga em respostas rápidas do usuário, consulte a documentação do WhatsApp para Retorno de chamada recebido de um botão de resposta rápida.
Exemplo
sample_issue_resolution
Modelo:
O corpo do modelo requer um parâmetro de texto:
{
"type": "BODY",
"text": "Hi {{1}}, were we able to solve the issue that you were facing?"
},
O modelo inclui dois botões de resposta pré-preenchidos Yes
e No
.
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
Crie uma MessageTemplateText
e duas MessageTemplateQuickAction
variáveis. Em seguida, monte sua lista de MessageTemplateValue
e sua MessageTemplateWhatsAppBindings
fornecendo os parâmetros na ordem em que os parâmetros aparecem no conteúdo do modelo. A ordem também é importante ao definir os botões das suas ligações.
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;
Enviar mensagem de modelo com botões de chamada para ação com link dinâmico
Use MessageTemplateQuickAction
para definir o sufixo de URL para call to action, botões e MessageTemplateQuickAction
objeto têm os dois atributos a seguir.
Propriedades | Description | Type |
---|---|---|
Nome | O name é usado para procurar o valor em MessageTemplateWhatsAppBindings . |
string |
Texto | O text que é anexado ao URL. |
string |
Botões de definição de modelo:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
A ordem em que os botões aparecem na definição do modelo deve corresponder à ordem na qual os botões são definidos ao criar as ligações com MessageTemplateWhatsAppBindings
.
Exemplo
sample_purchase_feedback
Modelo:
Este modelo de exemplo adiciona um botão com um link de URL dinâmico para a mensagem. Ele também usa uma imagem no cabeçalho e um parâmetro de texto no corpo.
Neste exemplo, o cabeçalho do modelo requer uma imagem:
{
"type": "HEADER",
"format": "IMAGE"
},
O corpo do modelo requer um parâmetro de texto:
{
"type": "BODY",
"text": "Thank you for purchasing {{1}}! We value your feedback and would like to learn more about your experience."
},
O modelo inclui um botão de URL dinâmico com um parâmetro:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Crie uma MessageTemplateImage
, uma MessageTemplateText
e uma MessageTemplateQuickAction
variável. Em seguida, monte sua lista de MessageTemplateValue
e sua MessageTemplateWhatsAppBindings
fornecendo os parâmetros na ordem em que os parâmetros aparecem no conteúdo do modelo. A ordem também é importante ao definir os botões das suas ligações.
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;
Enviar mensagem de modelo com botões de chamada para ação com link estático
Para links estáticos, você não precisa incluir MessageTemplateQuickAction
modelo porque o modelo do WhatsApp tem um link estático CallToAction
sem necessidade de entrada do usuário.
Botões de definição de modelo:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Exemplo
purchase_feedback_static
Modelo:
Este modelo de exemplo adiciona um botão com um link de URL estático para a mensagem. Ele também usa uma imagem no cabeçalho e um parâmetro de texto no corpo.
Neste exemplo, o cabeçalho do modelo requer uma imagem:
{
"type": "HEADER",
"format": "IMAGE"
},
O corpo do modelo requer um parâmetro de texto:
{
"type": "BODY",
"text": "Hello {{1}}, \nHope you are great day!.\n Please click on given link to explore about our program.."
},
O modelo inclui um botão de URL dinâmico com um parâmetro:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/"
}
]
}
Crie um MessageTemplateImage
, um MessageTemplateText
. Em seguida, monte sua lista de MessageTemplateValue
e sua MessageTemplateWhatsAppBindings
fornecendo os parâmetros na ordem em que os parâmetros aparecem no conteúdo do modelo. A ordem também é importante ao definir os botões das suas ligações.
// 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);
Executar o código
Crie e execute o seu programa.
Para enviar uma mensagem de texto ou mídia para um usuário do WhatsApp, deve haver uma conversa ativa entre a conta do WhatsApp Business e o usuário do WhatsApp.
Se você não tiver uma conversa ativa, para os fins deste exemplo, você pode adicionar uma espera entre o envio da mensagem de modelo e o envio da mensagem de texto. Esse atraso adicional dá tempo suficiente para responder à empresa na conta do WhatsApp do usuário. Para referência, o exemplo fornecido solicita a entrada manual do usuário antes de enviar a próxima mensagem. Para obter mais informações, consulte o exemplo completo em Código de exemplo. Se for bem-sucedido, você receberá três mensagens na conta do WhatsApp do usuário.
Crie e execute o seu programa.
dotnet build
dotnet run
Exemplo de código completo
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");
}
}
}
Mais exemplos
Esses exemplos usam modelos de exemplo disponíveis para Contas do WhatsApp Business criadas por meio da inscrição incorporada do portal do Azure.
Usar modelo de exemplo sample_happy_hour_announcement
Este modelo de exemplo usa um vídeo no cabeçalho e dois parâmetros de texto no corpo.
O cabeçalho do modelo requer um vídeo:
{
"type": "HEADER",
"format": "VIDEO"
},
O vídeo deve ser um URL para o vídeo mp4 hospedado.
Para obter mais informações sobre tipos de mídia suportados e limites de tamanho, consulte a documentação do WhatsApp para mídia de mensagens.
O corpo do modelo requer dois parâmetros de texto:
{
"type": "BODY",
"text": "Happy hour is here! 🍺😀🍸\nPlease be merry and enjoy the day. 🎉\nVenue: {{1}}\nTime: {{2}}"
},
Crie uma MessageTemplateVideo
e duas MessageTemplateText
variáveis. Em seguida, monte sua lista de MessageTemplateValue
e sua MessageTemplateWhatsAppBindings
fornecendo os parâmetros na ordem em que os parâmetros aparecem no conteúdo do modelo.
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;
Usar modelo de exemplo sample_flight_confirmation
Este modelo de exemplo usa um documento no cabeçalho e três parâmetros de texto no corpo.
O cabeçalho do modelo requer um documento:
{
"type": "HEADER",
"format": "DOCUMENT"
},
O documento deve ser um URL para o documento PDF hospedado.
Para obter mais informações sobre tipos de mídia suportados e limites de tamanho, consulte a documentação do WhatsApp para mídia de mensagens.
O corpo do modelo requer três parâmetros de texto:
{
"type": "BODY",
"text": "This is your flight confirmation for {{1}}-{{2}} on {{3}}."
},
Crie uma MessageTemplateDocument
e três MessageTemplateText
variáveis. Em seguida, monte sua lista de MessageTemplateValue
e sua MessageTemplateWhatsAppBindings
fornecendo os parâmetros na ordem em que os parâmetros aparecem no conteúdo do modelo.
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;
Pré-requisitos
- Registre a conta do WhatsApp Business com seu recurso dos Serviços de Comunicação do Azure.
- Crie uma mensagem de modelo do WhatsApp.
- Número de telefone ativo do WhatsApp para receber mensagens.
Modelo de objeto
As classes e interfaces a seguir lidam com alguns dos principais recursos do SDK de Mensagens dos Serviços de Comunicação do Azure para Java.
Nome da classe | Description |
---|---|
NotificationMessagesClient |
Conecta-se ao seu recurso dos Serviços de Comunicação do Azure. Ele envia as mensagens. |
MessageTemplate |
Define qual modelo você usa e o conteúdo das propriedades do modelo para sua mensagem. |
TemplateNotificationContent |
Define o "quem" e o "o quê" da mensagem modelo que você pretende enviar. |
Nota
Para obter mais informações, consulte a referência do SDK do Azure para Java em com.azure.communication.messages Package.
Tipos de modelos do WhatsApp suportados
Tipo de modelo | Description |
---|---|
Modelos de mensagens de texto | Os modelos de mensagens do WhatsApp são formatos de mensagem específicos com ou sem parâmetros. |
Modelos de mensagem baseados em mídia | Modelos de mensagens do WhatsApp com parâmetros de mídia para componentes de cabeçalho. |
Modelos de mensagens interativas | Os modelos de mensagem interativa expandem o conteúdo que você pode enviar aos destinatários, incluindo botões interativos usando o objeto components. Tanto a Call-to-Action como a Resposta Rápida são suportadas. |
Modelos de mensagem baseados em localização | Modelos de mensagens do WhatsApp com parâmetros de localização em termos de longitude e latitude para componentes de cabeçalho. |
Configuração comum
Siga estas etapas para adicionar os trechos de código necessários à função principal do seu App.java
arquivo.
- Crie e gerencie mensagens de modelo do WhatsApp.
- Autentique o cliente.
- Defina o ID de registro do canal.
- Definir lista de destinatários.
Criar e gerenciar mensagens de modelo do WhatsApp
Os modelos de mensagens do WhatsApp são formatos de mensagem específicos que as empresas usam para enviar notificações ou mensagens de atendimento ao cliente para pessoas que optaram por receber notificações. As mensagens podem incluir lembretes de compromissos, informações de envio, resolução de problemas ou atualizações de pagamento. Antes de começar a usar o SDK de mensagens avançadas para enviar mensagens modeladas, o usuário precisa criar os modelos necessários na plataforma WhatsApp Business.
Para obter mais informações sobre os requisitos do WhatsApp para modelos, consulte as referências da API da plataforma WhatsApp Business:
- Crie e gerencie modelos.
- Exibir componentes de modelo.
- Enviar mensagens de modelo.
- As empresas também devem aderir aos requisitos de aceitação antes de enviar mensagens aos usuários do WhatsApp.
Comece a enviar mensagens entre uma empresa e um usuário do WhatsApp
As conversas entre uma conta do WhatsApp Business e um usuário do WhatsApp podem ser iniciadas de duas maneiras:
- A empresa envia uma mensagem modelo para o usuário do WhatsApp.
- O usuário do WhatsApp envia qualquer mensagem para o número comercial.
Independentemente de como a conversa foi iniciada, uma empresa só pode enviar mensagens de modelo até que o usuário envie uma mensagem para a empresa. Somente depois que o usuário envia uma mensagem para a empresa, a empresa tem permissão para enviar mensagens de texto ou mídia para o usuário durante a conversa ativa. Quando a janela de conversa de 24 horas expirar, a conversa deve ser reiniciada. Para saber mais sobre conversas, consulte a definição em Plataforma WhatsApp Business.
Autenticar o cliente
Existem algumas opções diferentes disponíveis para autenticar um cliente de mensagem:
Para autenticar um cliente, instancie um NotificationMessagesClient
ou MessageTemplateClient
com sua cadeia de conexão. Você também pode inicializar o cliente com qualquer cliente HTTP personalizado que implemente a com.azure.core.http.HttpClient
interface.
Para simplificar, este guia de início rápido usa uma cadeia de conexão para autenticar. Em ambientes de produção, recomendamos o uso de entidades de serviço.
Obtenha a cadeia de conexão do seu recurso dos Serviços de Comunicação do Azure no portal do Azure. À esquerda, navegue até a Keys
guia. Copie o Connection string
campo para o Primary key
. A cadeia de conexão está no formato endpoint=https://{your Azure Communication Services resource name}.communication.azure.com/;accesskey={secret key}
.
Defina a variável COMMUNICATION_SERVICES_CONNECTION_STRING
de ambiente para o valor da sua cadeia de conexão.
Abra uma janela do console e digite o seguinte comando:
setx COMMUNICATION_SERVICES_CONNECTION_STRING "<your connection string>"
Para obter mais informações sobre como definir uma variável de ambiente para seu sistema, siga as etapas em Armazenar sua cadeia de conexão em uma variável de ambiente.
Para instanciar um NotificationMessagesClient, adicione o seguinte código ao main
método:
// 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();
Definir ID de registro do canal
O GUID do ID de registro do canal foi criado durante o registro do canal. Você pode procurá-lo no portal na guia Canais do seu recurso dos Serviços de Comunicação do Azure.
Atribua-o a uma variável chamada channelRegistrationId.
String channelRegistrationId = "<your channel registration id GUID>";
Definir lista de destinatários
Você precisa fornecer um número de telefone real que tenha uma conta do WhatsApp associada a ele. Esta conta do WhatsApp recebe as mensagens de texto e mídia enviadas neste início rápido. Para este início rápido, este número de telefone pode ser o seu número de telefone pessoal.
O número de telefone do destinatário não pode ser o número de telefone comercial (ID do remetente) associado ao registro do canal do WhatsApp. O ID do Remetente aparece como o remetente das mensagens de texto e mídia enviadas ao destinatário.
O número de telefone deve incluir o código do país. Para obter mais informações sobre a formatação do número de telefone, consulte a documentação do WhatsApp para formatos de número de telefone.
Nota
Atualmente, apenas um número de telefone é suportado na lista de destinatários.
Crie a lista de destinatários da seguinte forma:
List<String> recipientList = new ArrayList<>();
recipientList.add("<to WhatsApp phone number>");
Exemplo:
// Example only
List<String> recipientList = new ArrayList<>();
recipientList.add("+14255550199");
Configurar ambiente
Para configurar um ambiente para enviar mensagens, conclua as etapas nas seções a seguir.
Pré-requisito
- Conta do WhatsApp Business registrada com seu recurso dos Serviços de Comunicação do Azure.
- Número de telefone ativo do WhatsApp para receber mensagens.
- Java Development Kit (JDK) versão 8 ou posterior.
- Apache Maven.
Criar uma nova aplicação Java
Abra um terminal ou janela de comando e navegue até o diretório onde você deseja criar seu aplicativo Java. Execute o seguinte comando para gerar o projeto Java a partir do maven-archetype-quickstart
modelo.
mvn archetype:generate -DgroupId="com.communication.quickstart" -DartifactId="communication-quickstart" -DarchetypeArtifactId="maven-archetype-quickstart" -DarchetypeVersion="1.4" -DinteractiveMode="false"
A generate
meta cria um diretório com o mesmo nome do artifactId
valor. Neste diretório, o src/main/java
diretório contém o código-fonte do projeto, o src/test/java
diretório contém a fonte de teste e o pom.xml
arquivo é o Project Object Model (POM) do projeto.
Instalar o pacote
Abra o arquivo no editor de pom.xml
texto. Adicione o seguinte elemento de dependência ao grupo de dependências.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-messages</artifactId>
</dependency>
Configurar a estrutura do aplicativo
Abra /src/main/java/com/communication/quickstart/App.java
em um editor de texto, adicione diretivas de importação e remova a System.out.println("Hello world!");
instrução:
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.
}
}
Exemplos de código
Siga estas etapas para adicionar trechos de código necessários à função principal do seu App.java
arquivo.
- Liste modelos do WhatsApp no portal do Azure.
- Enviar mensagem de modelo com parâmetros de texto no corpo.
- Enviar mensagem de modelo com o parâmetro media no cabeçalho.
- Envie uma mensagem de modelo com botões de resposta rápida.
- Enviar mensagem de modelo com botões de chamada para ação e link dinâmico.
Listar modelos do WhatsApp no portal do Azure
Para exibir seus modelos no portal do Azure, vá para o recurso >Modelos de Mensagens Avançadas>dos Serviços de Comunicação do Azure.
Selecionar um modelo para visualizar os detalhes do modelo.
O campo Conteúdo dos detalhes do modelo pode incluir associações de parâmetros. As ligações de parâmetros podem ser indicadas como:
- Um
"format"
campo com um valor comoIMAGE
. - Colchetes duplos ao redor de um número, como
{{1}}
. O número, índice iniciado em 1, indica a ordem na qual os valores de vinculação devem ser fornecidos para criar o modelo de mensagem.
Como alternativa, você pode visualizar e editar todos os seus modelos de Conta do WhatsApp Business nas ferramentas >de Conta do WhatsApp Manager> Modelos de mensagem.
Para listar seus modelos programaticamente, você pode buscar todos os modelos para o ID do canal usando o seguinte código:
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("===============================");
});
}
Enviar mensagem de modelo com parâmetros de texto no corpo
Se o modelo não tiver parâmetros, você não precisará fornecer valores ou associações ao criar o MessageTemplate
.
/*
* 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()));
}
Enviar mensagem de modelo com parâmetro de mídia no cabeçalho
Use MessageTemplateImage
, MessageTemplateVideo
ou MessageTemplateDocument
para definir o parâmetro media em um cabeçalho.
Definição de modelo com parâmetro de mídia de imagem no cabeçalho:
{
"type": "HEADER",
"format": "VIDEO"
},
O "format"
pode ser de quatro tipos diferentes de mídia suportados pelo WhatsApp. No SDK do .NET, cada tipo de mídia usa um tipo correspondente MessageTemplateValue
.
Formato | Tipo MessageTemplateValue | File Type |
---|---|---|
IMAGEM | MessageTemplateImage |
PNG, JPG |
VÍDEO | MessageTemplateVideo |
mp4 |
DOCUMENTO | MessageTemplateDocument |
Para obter mais informações sobre tipos de mídia suportados e limites de tamanho, consulte a documentação do WhatsApp para mídia de mensagens.
Exemplo
sample_happy_hour_announcement
Modelo:
Aqui, o cabeçalho do modelo requer um vídeo:
{
"type": "HEADER",
"format": "VIDEO"
},
O vídeo deve ser um URL para um vídeo mp4 hospedado.
Para obter mais informações sobre tipos de mídia suportados e limites de tamanho, consulte a documentação do WhatsApp para mídia de mensagens.
O corpo do modelo requer dois parâmetros de texto:
{
"type": "BODY",
"text": "Happy hour is here! 🍺😀🍸\nPlease be merry and enjoy the day. 🎉\nVenue: {{1}}\nTime: {{2}}"
},
Crie uma MessageTemplateVideo
e quatro MessageTemplateText
variáveis. Em seguida, monte sua lista de e sua MessageTemplateWhatsAppBindings
fornecendo os parâmetros na ordem em que os parâmetros aparecem no conteúdo do MessageTemplateValue
modelo.
/*
* 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()));
}
Enviar mensagem de modelo com botões de resposta rápida
Use MessageTemplateQuickAction
para definir a carga útil para resposta rápida Os botões e MessageTemplateQuickAction
objetos têm os três atributos a seguir.
Propriedades | Description | Type |
---|---|---|
Nome | O name usado para procurar o valor em MessageTemplateWhatsAppBindings . |
string |
Texto | A opção ação text rápida . |
string |
Payload | O payload atribuído a um botão disponível em uma mensagem responde se o usuário seleciona o botão. |
string |
Definição de modelo com botões de resposta rápida:
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
A ordem em que os botões aparecem na definição do modelo deve corresponder à ordem na qual os botões são definidos ao criar as ligações com MessageTemplateWhatsAppBindings
.
Para obter mais informações sobre a carga em respostas rápidas do usuário, consulte a documentação do WhatsApp para Retorno de chamada recebido de um botão de resposta rápida.
Exemplo
sample_issue_resolution
Modelo:
O corpo do modelo requer um parâmetro de texto:
/*
* 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()));
}
Enviar mensagem de modelo com botões de chamada para ação e link dinâmico
Use MessageTemplateQuickAction
para definir o sufixo de URL para call to action, botões e MessageTemplateQuickAction
objeto têm os dois atributos a seguir.
Propriedades | Description | Type |
---|---|---|
Nome | O name usado para procurar o valor em MessageTemplateWhatsAppBindings . |
string |
Texto | O text anexado ao URL. |
string |
Botões de definição de modelo:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
A ordem em que os botões aparecem na definição do modelo deve corresponder à ordem na qual os botões são definidos ao criar as ligações com MessageTemplateWhatsAppBindings
.
Exemplo
sample_purchase_feedback
Modelo:
Este modelo de exemplo adiciona um botão com um link de URL dinâmico para a mensagem. Ele também usa uma imagem no cabeçalho e um parâmetro de texto no corpo.
Neste exemplo, o cabeçalho do modelo requer uma imagem:
{
"type": "HEADER",
"format": "IMAGE"
},
O corpo do modelo requer um parâmetro de texto:
{
"type": "BODY",
"text": "Thank you for purchasing {{1}}! We value your feedback and would like to learn more about your experience."
},
O modelo inclui um botão de URL dinâmico com um parâmetro:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Crie uma MessageTemplateImage
, uma MessageTemplateText
e uma MessageTemplateQuickAction
variável. Em seguida, monte sua lista de e sua MessageTemplateWhatsAppBindings
fornecendo os parâmetros na ordem em que os parâmetros aparecem no conteúdo do MessageTemplateValue
modelo. A ordem também é importante ao definir os botões das suas ligações.
/*
* 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()));
}
Executar o código
Abra o diretório que contém o
pom.xml
arquivo e compile o projeto usando omvn
comando.mvn compile
Execute o aplicativo executando o seguinte
mvn
comando.mvn exec:java -D"exec.mainClass"="com.communication.quickstart.App" -D"exec.cleanupDaemonThreads"="false"
Código de exemplo completo
Encontre o código finalizado para este início rápido no GitHub.
Pré-requisitos
- Registre a conta do WhatsApp Business com seu recurso dos Serviços de Comunicação do Azure.
- Crie uma mensagem de modelo do WhatsApp.
- Número de telefone ativo do WhatsApp para receber mensagens.
- Node.js versões Ative LTS e Maintenance LTS (recomendamos 8.11.1 e 10.14.1).
-
Node.js versões Ative LTS e Maintenance LTS (8.11.1 e 10.14.1 são recomendadas)
- Em um terminal ou janela de comando, execute
node --version
para verificar se Node.js está instalado
- Em um terminal ou janela de comando, execute
Modelo de objeto
As classes e interfaces a seguir lidam com alguns dos principais recursos do SDK de Mensagens dos Serviços de Comunicação do Azure para Javascript.
Nome da classe | Description |
---|---|
NotificationMessagesClient |
Conecta-se ao seu recurso dos Serviços de Comunicação do Azure. Ele envia as mensagens. |
MessageTemplate |
Define qual modelo você usa e o conteúdo das propriedades do modelo para sua mensagem. |
TemplateNotificationContent |
Define o "quem" e o "o quê" da mensagem modelo que você pretende enviar. |
Nota
Para obter mais informações, consulte o pacote de referência do SDK do Azure para JavaScript @azure-rest/communication-messages
Tipos de modelos do WhatsApp suportados
Tipo de modelo | Description |
---|---|
Modelos de mensagens de texto | Os modelos de mensagens do WhatsApp são formatos de mensagem específicos com ou sem parâmetros. |
Modelos de mensagem baseados em mídia | Modelos de mensagens do WhatsApp com parâmetros de mídia para componentes de cabeçalho. |
Modelos de mensagens interativas | Os modelos de mensagem interativa expandem o conteúdo que você pode enviar aos destinatários, incluindo botões interativos usando o objeto components. Tanto a Call-to-Action como a Resposta Rápida são suportadas. |
Modelos de mensagem baseados em localização | Modelos de mensagens do WhatsApp com parâmetros de localização em termos de longitude e latitude para componentes de cabeçalho. |
Configuração comum
Siga estas etapas para adicionar os trechos de código necessários à função principal do seu send-messages.js
arquivo.
- Crie e gerencie mensagens de modelo do WhatsApp.
- Autentique o cliente.
- Defina o ID de registro do canal.
- Definir lista de destinatários.
Criar e gerenciar mensagens de modelo do WhatsApp
Os modelos de mensagens do WhatsApp são formatos de mensagem específicos que as empresas usam para enviar notificações ou mensagens de atendimento ao cliente para pessoas que optaram por receber notificações. As mensagens podem incluir lembretes de compromissos, informações de envio, resolução de problemas ou atualizações de pagamento. Antes de começar a usar o SDK de mensagens avançadas para enviar mensagens modeladas, o usuário precisa criar os modelos necessários na plataforma WhatsApp Business.
Para obter mais informações sobre os requisitos do WhatsApp para modelos, consulte as referências da API da plataforma WhatsApp Business:
- Crie e gerencie modelos.
- Exibir componentes de modelo.
- Enviar mensagens de modelo.
- As empresas também devem aderir aos requisitos de aceitação antes de enviar mensagens aos usuários do WhatsApp.
Comece a enviar mensagens entre uma empresa e um usuário do WhatsApp
As conversas entre uma conta do WhatsApp Business e um usuário do WhatsApp podem ser iniciadas de duas maneiras:
- A empresa envia uma mensagem modelo para o usuário do WhatsApp.
- O usuário do WhatsApp envia qualquer mensagem para o número comercial.
Independentemente de como a conversa foi iniciada, uma empresa só pode enviar mensagens de modelo até que o usuário envie uma mensagem para a empresa. Somente depois que o usuário envia uma mensagem para a empresa, a empresa tem permissão para enviar mensagens de texto ou mídia para o usuário durante a conversa ativa. Quando a janela de conversa de 24 horas expirar, a conversa deve ser reiniciada. Para saber mais sobre conversas, consulte a definição em Plataforma WhatsApp Business.
Autenticar o cliente
O código a seguir recupera a cadeia de conexão para o recurso de uma variável de ambiente nomeada COMMUNICATION_SERVICES_CONNECTION_STRING
usando o pacote dotenv.
Para simplificar, este guia de início rápido usa uma cadeia de conexão para autenticar. Em ambientes de produção, recomendamos o uso de entidades de serviço.
Obtenha a cadeia de conexão do seu recurso dos Serviços de Comunicação do Azure no portal do Azure. À esquerda, navegue até a Keys
guia. Copie o Connection string
campo para o Primary key
. A cadeia de conexão está no formato endpoint=https://{your Azure Communication Services resource name}.communication.azure.com/;accesskey={secret key}
.
Defina a variável COMMUNICATION_SERVICES_CONNECTION_STRING
de ambiente para o valor da sua cadeia de conexão.
Abra uma janela do console e digite o seguinte comando:
setx COMMUNICATION_SERVICES_CONNECTION_STRING "<your connection string>"
Para obter mais informações sobre como definir uma variável de ambiente para seu sistema, siga as etapas em Armazenar sua cadeia de conexão em uma variável de ambiente.
Para instanciar um NotificationClient, adicione o seguinte código ao Main
método:
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);
Definir ID de registro do canal
O GUID do ID de registro do canal foi criado durante o registro do canal. Você pode procurá-lo no portal na guia Canais do seu recurso dos Serviços de Comunicação do Azure.
Atribua-o a uma variável chamada channelRegistrationId.
const channelRegistrationId = "<your channel registration id GUID>";
Definir lista de destinatários
Você precisa fornecer um número de telefone real que tenha uma conta do WhatsApp associada a ele. Esta conta do WhatsApp recebe o modelo, o texto e as mensagens de mídia enviadas neste início rápido. Para este início rápido, este número de telefone pode ser o seu número de telefone pessoal.
O número de telefone do destinatário não pode ser o número de telefone comercial (ID do remetente) associado ao registro do canal do WhatsApp. O ID do Remetente aparece como o remetente das mensagens de texto e mídia enviadas ao destinatário.
O número de telefone deve incluir o código do país. Para obter mais informações sobre a formatação do número de telefone, consulte a documentação do WhatsApp para formatos de número de telefone.
Nota
Atualmente, apenas um número de telefone é suportado na lista de destinatários.
Crie a lista de destinatários da seguinte forma:
const recipientList = ["<to WhatsApp phone number>"];
Exemplo:
// Example only
const recipientList = ["+14255550199"];
Configuração
Para configurar um ambiente para enviar mensagens, conclua as etapas nas seções a seguir.
Criar uma nova aplicação Node.js
Crie um novo diretório para seu aplicativo e abra-o em um terminal ou janela de comando.
Execute o seguinte comando.
mkdir advance-messages-quickstart && cd advance-messages-quickstart
Execute o seguinte comando para criar um
package.json
arquivo com as configurações padrão.npm init -y
Use um editor de texto para criar um arquivo chamado
send-messages.js
no diretório raiz do projeto.Adicione o seguinte trecho de código ao arquivo
send-messages.js
.async function main() { // Quickstart code goes here. } main().catch((error) => { console.error("Encountered an error while sending message: ", error); process.exit(1); });
Conclua a seção a seguir para adicionar o código-fonte deste exemplo ao send-messages.js
arquivo que você criou.
Instalar o pacote
Use o npm install
comando para instalar o SDK de Mensagens Avançadas dos Serviços de Comunicação do Azure para JavaScript.
npm install @azure-rest/communication-messages --save
A --save
opção lista a biblioteca como uma dependência em seu arquivo package.json .
Exemplos de código
Siga estas etapas para adicionar trechos de código necessários à função principal do seu send-messages.js
arquivo.
- Liste modelos do WhatsApp no portal do Azure.
- Enviar mensagem de modelo com parâmetros de texto no corpo.
Listar modelos do WhatsApp no portal do Azure
Para exibir seus modelos no portal do Azure, vá para o recurso >Modelos de Mensagens Avançadas>dos Serviços de Comunicação do Azure.
Selecionar um modelo para visualizar os detalhes do modelo.
O campo Conteúdo dos detalhes do modelo pode incluir associações de parâmetros. As ligações de parâmetros podem ser indicadas como:
- Um
"format"
campo com um valor comoIMAGE
. - Colchetes duplos ao redor de um número, como
{{1}}
. O número, índice iniciado em 1, indica a ordem na qual os valores de vinculação devem ser fornecidos para criar o modelo de mensagem.
Como alternativa, você pode visualizar e editar todos os seus modelos de Conta do WhatsApp Business nas ferramentas >de Conta do WhatsApp Manager> Modelos de mensagem.
Para listar seus modelos programaticamente, você pode buscar todos os modelos para o ID do canal usando o seguinte código:
// 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;
});
Enviar mensagem de modelo com parâmetros de texto no corpo
sample_shipping_confirmation
Modelo:
Neste exemplo, o corpo do modelo tem um parâmetro:
{
"type": "BODY",
"text": "Your package has been shipped. It will be delivered in {{1}} business days."
},
Os parâmetros são definidos com os values
valores e bindings
ligações. Use os valores e associações para montar o template
objeto.
/*
* 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 };
Executar o código
Use o comando node para executar o código adicionado ao arquivo send-messages.js.
node ./send-messages.js
Código de exemplo completo
Encontre o código finalizado para este exemplo no GitHub.
Pré-requisitos
- Registre a conta do WhatsApp Business com seu recurso dos Serviços de Comunicação do Azure.
- Crie uma mensagem de modelo do WhatsApp.
- Número de telefone ativo do WhatsApp para receber mensagens.
Modelo de objeto
As classes e interfaces a seguir lidam com alguns dos principais recursos do SDK de Mensagens dos Serviços de Comunicação do Azure para Python.
Nome da classe | Description |
---|---|
NotificationMessagesClient |
Conecta-se ao seu recurso dos Serviços de Comunicação do Azure. Ele envia as mensagens. |
MessageTemplate |
Define qual modelo você usa e o conteúdo das propriedades do modelo para sua mensagem. |
TemplateNotificationContent |
Define o "quem" e o "o quê" da mensagem modelo que você pretende enviar. |
Nota
Para obter mais informações, consulte o Pacote de mensagens de referência do SDK do Azure para Python.
Tipos de modelos do WhatsApp suportados
Tipo de modelo | Description |
---|---|
Modelos de mensagens de texto | Os modelos de mensagens do WhatsApp são formatos de mensagem específicos com ou sem parâmetros. |
Modelos de mensagem baseados em mídia | Modelos de mensagens do WhatsApp com parâmetros de mídia para componentes de cabeçalho. |
Modelos de mensagens interativas | Os modelos de mensagem interativa expandem o conteúdo que você pode enviar aos destinatários, incluindo botões interativos usando o objeto components. Tanto a Call-to-Action como a Resposta Rápida são suportadas. |
Modelos de mensagem baseados em localização | Modelos de mensagens do WhatsApp com parâmetros de localização em termos de longitude e latitude para componentes de cabeçalho. |
Configuração comum
Siga estas etapas para adicionar os trechos de código necessários ao messages-quickstart.py
programa python.
- Crie e gerencie mensagens de modelo do WhatsApp.
- Autentique o cliente.
- Defina o ID de registro do canal.
- Definir lista de destinatários.
Criar e gerenciar mensagens de modelo do WhatsApp
Os modelos de mensagens do WhatsApp são formatos de mensagem específicos que as empresas usam para enviar notificações ou mensagens de atendimento ao cliente para pessoas que optaram por receber notificações. As mensagens podem incluir lembretes de compromissos, informações de envio, resolução de problemas ou atualizações de pagamento. Antes de começar a usar o SDK de mensagens avançadas para enviar mensagens modeladas, o usuário precisa criar os modelos necessários na plataforma WhatsApp Business.
Para obter mais informações sobre os requisitos do WhatsApp para modelos, consulte as referências da API da plataforma WhatsApp Business:
- Crie e gerencie modelos.
- Exibir componentes de modelo.
- Enviar mensagens de modelo.
- As empresas também devem aderir aos requisitos de aceitação antes de enviar mensagens aos usuários do WhatsApp.
Autenticar o cliente
O envio de mensagens é feito usando NotificationMessagesClient. NotificationMessagesClient é autenticado usando sua cadeia de conexão adquirida do recurso Serviços de Comunicação do Azure no portal do Azure. Para obter mais informações sobre cadeias de conexão, consulte access-your-connection-strings-and-service-endpoints.
Obtenha a cadeia de conexão do Recurso de Comunicação do Azure no portal do Azure, conforme indicado na captura de tela. À esquerda, navegue até a Keys
guia. Copie o Connection string
campo da chave primária. A cadeia de conexão está no formato endpoint=https://{your Azure Communication Services resource name}.communication.azure.com/;accesskey={secret key}
.
Defina a variável COMMUNICATION_SERVICES_CONNECTION_STRING
de ambiente para o valor da sua cadeia de conexão.
Abra uma janela do console e digite o seguinte comando:
setx COMMUNICATION_SERVICES_CONNECTION_STRING "<your connection string>"
Depois de adicionar a variável de ambiente, talvez seja necessário reiniciar todos os programas em execução que precisarão ler a variável de ambiente, incluindo a janela do console. Por exemplo, se você estiver usando o Visual Studio como editor, reinicie o Visual Studio antes de executar o exemplo.
Para obter mais informações sobre como definir uma variável de ambiente para seu sistema, siga as etapas em Armazenar sua cadeia de conexão em uma variável de ambiente.
# 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)
Definir ID de registro do canal
Você criou o GUID do ID de registro do canal durante o registro do canal. Encontre-o no portal na guia Canais do seu recurso dos Serviços de Comunicação do Azure.
Atribua-o a uma variável chamada channelRegistrationId.
channelRegistrationId = os.getenv("WHATSAPP_CHANNEL_ID_GUID")
Definir lista de destinatários
Você precisa fornecer um número de telefone ativo associado a uma conta do WhatsApp. Esta conta do WhatsApp recebe o modelo, o texto e as mensagens de mídia enviadas neste início rápido.
Para este exemplo, você pode usar seu número de telefone pessoal.
O número de telefone do destinatário não pode ser o número de telefone comercial (ID do remetente) associado ao registro do canal do WhatsApp. O ID do Remetente aparece como o remetente das mensagens de texto e mídia enviadas ao destinatário.
O número de telefone deve incluir o código do país. Para obter mais informações sobre a formatação do número de telefone, consulte a documentação do WhatsApp para formatos de número de telefone.
Nota
Atualmente, apenas um número de telefone é suportado na lista de destinatários.
Defina a lista de destinatários da seguinte forma:
phone_number = os.getenv("RECIPIENT_WHATSAPP_PHONE_NUMBER")
Exemplo de uso:
# Example only
to=[self.phone_number],
Comece a enviar mensagens entre uma empresa e um usuário do WhatsApp
As conversas entre uma conta do WhatsApp Business e um usuário do WhatsApp podem ser iniciadas de duas maneiras:
- A empresa envia uma mensagem modelo para o usuário do WhatsApp.
- O usuário do WhatsApp envia qualquer mensagem para o número comercial.
Uma empresa não pode iniciar uma conversa interativa. Uma empresa só pode enviar uma mensagem interativa depois de receber uma mensagem do utilizador. A empresa só pode enviar mensagens interativas para o usuário durante a conversa ativa. Quando a janela de conversa de 24 horas expirar, apenas o usuário poderá reiniciar a conversa interativa. Para obter mais informações sobre conversas, consulte a definição em WhatsApp Business Platform.
Para iniciar uma conversa interativa a partir da sua conta pessoal do WhatsApp, envie uma mensagem para o número da sua empresa (ID do remetente).
Configurar ambiente
Criar uma aplicação Python nova
Em uma janela de terminal ou console, crie uma nova pasta para seu aplicativo e abra-a.
mkdir messages-quickstart && cd messages-quickstart
Instalar o pacote
Use a biblioteca de cliente do Azure Communication Messages para Python 1.1.0 ou superior.
Em um prompt do console, execute o seguinte comando:
pip install azure-communication-messages
Para InteractiveMessages, Reactions e Stickers, use abaixo a versão Beta :
pip install azure-communication-messages==1.2.0b1
Configurar a estrutura do aplicativo
Crie um novo arquivo chamado messages-quickstart.py
e adicione a estrutura básica do programa.
type nul > messages-quickstart.py
Estrutura básica do programa
import os
class MessagesQuickstart(object):
print("Azure Communication Services - Advanced Messages SDK Quickstart")
if __name__ == '__main__':
messages = MessagesQuickstart()
Estrutura básica do programa
import os
class MessagesQuickstart(object):
print("Azure Communication Services - Advanced Messages SDK Quickstart")
if __name__ == '__main__':
messages = MessagesQuickstart()
Exemplos de código
Siga estas etapas para adicionar os trechos de código necessários ao messages-quickstart.py
programa python.
- Liste modelos do WhatsApp no portal do Azure.
- Enviar mensagem de modelo sem parâmetros.
- Enviar mensagem de modelo com parâmetros de texto no corpo.
- Enviar mensagem de modelo com parâmetro de mídia no cabeçalho.
- Enviar mensagem de modelo com localização no cabeçalho.
- Enviar mensagem de modelo com botões de resposta rápida.
- Enviar mensagem de modelo com botões de chamada para ação com link dinâmico.
Listar modelos do WhatsApp no portal do Azure
Pode ver os seus modelos no portal do Azure acedendo aos Modelos >de Mensagens Avançadas>do recurso do Serviço de Comunicação do Azure.
Selecione um modelo para exibir os detalhes do modelo.
O content
campo de detalhes do modelo pode incluir associações de parâmetros. As ligações de parâmetros podem ser indicadas como:
- Um
format
campo com um valor comoIMAGE
. - Colchetes duplos ao redor de um número, como
{{1}}
. O número, índice iniciado em 1, indica a ordem na qual os valores de vinculação devem ser fornecidos para criar o modelo de mensagem.
Como alternativa, você pode visualizar e editar todos os modelos da sua conta do WhatsApp Business nas ferramentas >de conta do WhatsApp Manager> Modelos de mensagem.
Para listar seus modelos programaticamente, você pode buscar todos os modelos para o ID do canal da seguinte maneira:
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))
Enviar mensagem de modelo sem parâmetros
Se o modelo não exigir parâmetros, você não precisará fornecer os valores ou associações ao criar o MessageTemplate
.
Exemplo
O sample_template
não tem parâmetros.
Monte o MessageTemplate
fazendo referência ao nome e idioma do modelo de destino.
input_template: MessageTemplate = MessageTemplate(name="gathering_invitation", language="ca") # Name of the WhatsApp Template
Enviar mensagem de modelo com parâmetros de texto no corpo
Use MessageTemplateText
para definir parâmetros no corpo indicados com colchetes duplos ao redor de um número, como {{1}}
. O número, índice iniciado em 1, indica a ordem na qual os valores de vinculação devem ser fornecidos para criar o modelo de mensagem. A tentativa de incluir parâmetros que não estão no modelo é inválida.
Definição de modelo com dois parâmetros:
{
"type": "BODY",
"text": "Message with two parameters: {{1}} and {{2}}"
}
Exemplos
sample_shipping_confirmation
Modelo:
Neste exemplo, o corpo do modelo tem um parâmetro:
{
"type": "BODY",
"text": "Your package has been shipped. It will be delivered in {{1}} business days."
},
Defina parâmetros usando os MessageTemplateValue
valores e MessageTemplateWhatsAppBindings
associações. Use os valores e as ligações para montar o MessageTemplate
arquivo .
# 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
)
Enviar mensagem de modelo com parâmetro de mídia no cabeçalho
Use MessageTemplateImage
, MessageTemplateVideo
ou MessageTemplateDocument
para definir o parâmetro media em um cabeçalho.
Definição de modelo com parâmetro de mídia de imagem no cabeçalho:
{
"type": "HEADER",
"format": "IMAGE"
},
O format
pode ter diferentes tipos de mídia suportados pelo WhatsApp. No SDK do .NET, cada tipo de mídia usa um tipo correspondente MessageTemplateValue
.
Formato | Tipo MessageTemplateValue | File Type |
---|---|---|
IMAGEM | MessageTemplateImage |
PNG, JPG |
VÍDEO | MessageTemplateVideo |
mp4 |
DOCUMENTO | MessageTemplateDocument |
Para obter mais informações sobre tipos de mídia suportados e limites de tamanho, consulte a documentação do WhatsApp para mídia de mensagens.
Exemplos
sample_movie_ticket_confirmation
Modelo:
Neste exemplo, o cabeçalho do modelo requer uma imagem:
{
"type": "HEADER",
"format": "IMAGE"
},
O corpo do modelo requer quatro parâmetros de texto:
{
"type": "BODY",
"text": "Your ticket for *{{1}}*\n*Time* - {{2}}\n*Venue* - {{3}}\n*Seats* - {{4}}"
},
Crie uma MessageTemplateImage
e quatro MessageTemplateText
variáveis. Em seguida, monte sua lista de MessageTemplateValue
e sua MessageTemplateWhatsAppBindings
fornecendo os parâmetros na ordem em que os parâmetros aparecem no conteúdo do modelo.
# 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)
Enviar mensagem de modelo com botões de resposta rápida
Use MessageTemplateQuickAction
para definir a carga útil para resposta rápida Os botões e MessageTemplateQuickAction
objetos têm os três atributos a seguir.
Propriedades | Description | Type |
---|---|---|
Nome | O name para procurar o valor em MessageTemplateWhatsAppBindings . |
string |
Texto | A opção ação text rápida . |
string |
Payload | O payload atribuído a um botão disponível em uma mensagem responde se o usuário seleciona o botão. |
string |
Definição de modelo com botões de resposta rápida:
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
A ordem em que os botões aparecem na definição do modelo deve corresponder à ordem na qual os botões são definidos ao criar as ligações com MessageTemplateWhatsAppBindings
.
Para obter mais informações sobre a carga em respostas rápidas do usuário, consulte a documentação do WhatsApp para Retorno de chamada recebido de um botão de resposta rápida.
Exemplo
sample_issue_resolution
Modelo:
O corpo do modelo requer um parâmetro de texto:
{
"type": "BODY",
"text": "Hi {{1}}, were we able to solve the issue that you were facing?"
},
O modelo inclui dois botões de resposta pré-preenchidos Yes
e No
.
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
Crie uma MessageTemplateText
e duas MessageTemplateQuickAction
variáveis. Em seguida, monte sua lista de MessageTemplateValue
e sua MessageTemplateWhatsAppBindings
fornecendo os parâmetros na ordem em que os parâmetros aparecem no conteúdo do modelo. A ordem também é importante ao definir os botões das suas ligações.
# 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
)
Enviar mensagem de modelo com localização no cabeçalho
Use MessageTemplateLocation
para definir o parâmetro location em um cabeçalho.
Definição de modelo para o componente de cabeçalho que requer localização como:
{
"type": "header",
"parameters": [
{
"type": "location",
"location": {
"latitude": "<LATITUDE>",
"longitude": "<LONGITUDE>",
"name": "<NAME>",
"address": "<ADDRESS>"
}
}
]
}
O format
pode exigir diferentes tipos de mídia. No SDK do .NET, cada tipo de mídia usa um tipo correspondente MessageTemplateValue
.
Propriedades | Description | Type |
---|---|---|
ADDRESS |
Endereço que aparece após o NAME valor, abaixo do mapa genérico na parte superior da mensagem. |
string |
LATITUDE |
Latitude de localização. | duplo |
LONGITUDE |
Localização longitude. | duplo |
LOCATIONNAME |
Texto que aparece imediatamente abaixo do mapa genérico na parte superior da mensagem. | string |
Para obter mais informações sobre modelos baseados em localização, consulte a documentação do WhatsApp para mídia de mensagens.
Exemplo
sample_movie_location
Modelo:
Montagem do modelo de mensagem baseado em localização:
# 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)
Enviar mensagem de modelo com botões de chamada para ação com link dinâmico
Use MessageTemplateQuickAction
para definir o sufixo de URL para call to action, botões e MessageTemplateQuickAction
objeto têm os dois atributos a seguir.
Propriedades | Description | Type |
---|---|---|
Nome | O name usado para procurar o valor em MessageTemplateWhatsAppBindings . |
string |
Texto | O text anexado ao URL. |
string |
Botões de definição de modelo:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
A ordem em que os botões aparecem na definição do modelo deve corresponder à ordem na qual os botões são definidos ao criar as ligações com MessageTemplateWhatsAppBindings
.
Exemplo
sample_purchase_feedback
Modelo:
Este modelo de exemplo adiciona um botão com um link de URL dinâmico para a mensagem. Ele também usa uma imagem no cabeçalho e um parâmetro de texto no corpo. Crie modelos de botão de chamada para ação com Dynamic
tipo de URL para View website
tipo de ação.
Neste exemplo, o cabeçalho do modelo requer uma imagem:
{
"type": "HEADER",
"format": "IMAGE"
},
O corpo do modelo requer um parâmetro de texto:
{
"type": "BODY",
"text": "Thank you for purchasing {{1}}! We value your feedback and would like to learn more about your experience."
},
O modelo inclui um botão de URL dinâmico com um parâmetro:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Crie uma MessageTemplateImage
, uma MessageTemplateText
e uma MessageTemplateQuickAction
variável. Em seguida, monte sua lista de MessageTemplateValue
e sua MessageTemplateWhatsAppBindings
fornecendo os parâmetros na ordem em que os parâmetros aparecem no conteúdo do modelo. A ordem também é importante ao definir os botões das suas ligações.
# 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)
Exemplo completo
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()
Executar o código
Para executar o código, certifique-se de que está no diretório onde messages-quickstart.py
se encontra o ficheiro.
python messages-quickstart.py
Azure Communication Services - Advanced Messages Quickstart
WhatsApp Templated Message with message id <<GUID>> was successfully sent to <<ToRecipient>>