Enviar mensajes de plantilla de WhatsApp mediante Mensajes avanzados
En este artículo se describe cómo enviar mensajes de plantilla de WhatsApp mediante el SDK de Mensajes de comunicación avanzada.
Requisitos previos
- Registre una cuenta de WhatsApp Business con su recurso Azure Communication Services.
- Cree un mensaje de plantilla de WhatsApp.
- Número de teléfono de WhatsApp activo para recibir mensajes.
Modelo de objetos
Las siguientes clases e interfaces controlan algunas de las características principales del SDK de mensajes de Azure Communication Services para .NET.
Class Name (Nombre de clase) | Descripción |
---|---|
NotificationMessagesClient |
Esta clase se conecta a su recurso de Azure Communication Services. Envía los mensajes. |
MessageTemplate |
Esta clase define qué plantilla utiliza y el contenido de las propiedades de la plantilla para su mensaje. |
TemplateNotificationContent |
Esta clase define el "quién" y el "qué" del mensaje de plantilla que pretende enviar. |
Nota:
Para obtener más información, consulte la referencia de Azure SDK para .NET Espacio de nombres de Azure.Communication.Messages.
Tipos de plantilla de WhatsApp admitidas
Tipo de plantilla | Descripción |
---|---|
Plantillas de mensaje basadas en texto | Las plantillas de mensaje de WhatsApp son formatos de mensaje específicos con o sin parámetros. |
Plantillas de mensaje basadas en medios | Plantillas de mensajes de WhatsApp con parámetros multimedia para componentes del encabezado. |
Plantillas de mensajes interactivos | Las plantillas de mensajes interactivos amplían el contenido que puede enviar a los destinatarios, incluyendo botones interactivos mediante el objeto "components". Se admiten tanto la llamada a la acción como la respuesta rápida. |
Plantillas de mensaje basadas en la ubicación | Plantillas de mensajes de WhatsApp con parámetros de ubicación en términos longitud y latitud para los componentes del encabezado. |
Configuración común
Siga estos pasos para agregar los fragmentos de código necesarios a la función principal de su archivo Program.cs
.
- Cree y administre el mensaje de plantilla de WhatsApp.
- Autentique al cliente.
- Establezca el Id. de registro del canal.
- Establezca la lista de destinatarios.
Creación y administración del mensaje de plantilla de WhatsApp
Las plantillas de mensaje de WhatsApp son formatos de mensaje específicos que las empresas usan para enviar notificaciones o mensajes de atención al cliente a personas que optaron por recibir notificaciones. Los mensajes pueden incluir recordatorios de citas, información de envío, resolución de problemas o actualizaciones de pago. Antes de empezar a usar el SDK de Mensajería avanzada para enviar mensajes con plantilla, el usuario debe crear las plantillas necesarias en la Plataforma de WhatsApp Business.
Para obtener más información sobre los requisitos de WhatsApp para plantillas, consulte las referencias de la API de la Plataforma de WhatsApp Business:
- Creación y administración de plantillas.
- Ver los componentes de la plantilla.
- Enviar un mensaje de plantilla.
- Las empresas también deben cumplir requisitos de participación antes de enviar mensajes a los usuarios de WhatsApp.
Autenticar el cliente
El SDK de mensajes usa NotificationMessagesClient
para enviar mensajes. El método NotificationMessagesClient
se autentica mediante la cadena de conexión adquirida desde el recurso de Azure Communication Services en Azure Portal. Para más información sobre las cadenas de conexión, consulte access-your-connection-strings-and-service-endpoints.
Para simplificar, este inicio rápido utiliza una cadena de conexión para autenticarse. En entornos de producción, se recomienda utilizar los servicios principales.
Obtenga la cadena de conexión del recurso de Azure Communication Services en Azure Portal. A la izquierda, navegue hasta la pestaña Keys
. Copie el campo Connection string
para la clave primaria. La cadena de conexión tiene el formato endpoint=https://{your Azure Communication Services resource name}.communication.azure.com/;accesskey={secret key}
.
Establezca la variable de entorno COMMUNICATION_SERVICES_CONNECTION_STRING
en el valor de la cadena de conexión.
Abra una ventana de consola y escriba el siguiente comando:
setx COMMUNICATION_SERVICES_CONNECTION_STRING "<your connection string>"
Tras agregar la variable de entorno, es posible que tenga que reiniciar todos los programas en ejecución que necesiten leer la variable de entorno, incluida la ventana de la consola. Por ejemplo, si usa Visual Studio como editor, reinícielo antes de ejecutar el ejemplo.
Para obtener más información sobre cómo configurar una variable de entorno para su sistema, siga los pasos indicados en Almacene su cadena de conexión en una variable de entorno.
Para crear una instancia un NotificationMessagesClient
, agregue el siguiente código al método Main
:
// Retrieve connection string from environment variable
string connectionString =
Environment.GetEnvironmentVariable("COMMUNICATION_SERVICES_CONNECTION_STRING");
// Instantiate the client
var notificationMessagesClient = new NotificationMessagesClient(connectionString);
Establecimiento del identificador de registro de canales
El Id. GUID del registro del canal se creó durante el registro del canal. Puede buscarlo en el portal en la pestaña Canales del recurso de Azure Communication Services.
Asígnelo a una variable llamada channelRegistrationId.
var channelRegistrationId = new Guid("<your channel registration ID GUID>");
Establecimiento de la lista de destinatarios
Debe proporcionar un número de teléfono activo asociado a una cuenta de WhatsApp. Esta cuenta de WhatsApp recibe la plantilla, el texto y los mensajes multimedia enviados en este inicio rápido.
En este ejemplo, puede usar su número de teléfono personal.
El número de teléfono del destinatario no puede ser el número de teléfono del trabajo (id. de remitente) asociado al registro de canales de WhatsApp. El id. de remitente aparece como remitente de los mensajes de texto y multimedia enviados al destinatario.
El número de teléfono debe incluir el código de país. Para obtener más información sobre el formato del número de teléfono, consulte la documentación de WhatsApp sobre Formatos de número de teléfono.
Nota:
Actualmente solo se admite un número de teléfono en la lista de destinatarios.
Cree la lista de destinatarios de la siguiente manera:
var recipientList = new List<string> { "<to WhatsApp phone number>" };
Ejemplo:
// Example only
var recipientList = new List<string> { "+14255550199" };
Comience a enviar mensajes entre una empresa y un usuario de WhatsApp
Las conversaciones entre una cuenta empresarial de WhatsApp y un usuario de WhatsApp se pueden iniciar de una de estas dos maneras:
- La empresa envía un mensaje de plantilla al usuario de WhatsApp.
- El usuario de WhatsApp envía cualquier mensaje al número del trabajo.
Una empresa no puede iniciar una conversación interactiva. Solo puede enviar un mensaje interactivo después de recibir un mensaje del usuario. La empresa solo puede enviar mensajes interactivos al usuario durante la conversación activa. Una vez que expire la ventana de conversación de 24 horas, solo el usuario puede reiniciar la conversación interactiva. Para obtener más información sobre las conversaciones, consulte la definición en la Plataforma de WhatsApp Business.
Para iniciar una conversación interactiva desde su cuenta personal de WhatsApp, envíe un mensaje al número de empresarial (id. de remitente).
Configuración de entorno
Crear el proyecto .NET
Para crear su proyecto, siga el tutorial en Crear una aplicación de consola .NET con Visual Studio.
Para compilar su código, presione Ctrl+F7.
Instalar el paquete
Instale el paquete Azure.Communication.Messages NuGet en su proyecto C#.
- Abra el Administrador de paquetes NuGet en
Project
>Manage NuGet Packages...
. - Buscar el paquete
Azure.Communication.Messages
. - Instale la última versión.
Instalación del marco de la aplicación
Abra el archivo Program.cs
en un editor de texto.
Reemplace el contenido de Program.cs
por el código siguiente:
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 utilizar las funciones de Mensajería avanzada, agregue una directiva using
para incluir el espacio de nombres Azure.Communication.Messages
.
using Azure.Communication.Messages;
Ejemplos de código
Siga estos pasos para agregar los fragmentos de código necesarios a la función Main del archivo Program.cs
.
- Enumere las plantillas de WhatsApp en Azure Portal.
- Envíe un mensaje de plantilla sin parámetros.
- Envíe un mensaje de plantilla con parámetros de texto en el cuerpo.
- Envíe un mensaje de plantilla con el parámetro multimedia en el encabezado.
- Envíe un mensaje de plantilla con la ubicación en el encabezado.
- Envíe un mensaje de plantilla con botones de respuesta rápida.
- Envíe un mensaje de plantilla con botones de llamada a la acción con un vínculo dinámico.
- Envíe un mensaje de plantilla con botones de llamada a la acción con un vínculo estático.
Enumeración de plantillas de WhatsApp en Azure Portal
Para ver las plantillas en Azure Portal, vaya al recurso de Azure Communication Service >Mensajería avanzada>Plantillas.
Seleccione una plantilla para ver los detalles.
El campo content
de los detalles de la plantilla puede incluir enlaces de parámetros. Los enlaces de parámetros se pueden indicar como:
- Un campo
format
con un valor comoIMAGE
. - Corchetes dobles que rodean un número, como
{{1}}
. El número, indizado iniciado en 1, indica el orden en el que se deben proporcionar los valores de enlace para crear la plantilla de mensaje.
Como alternativa, puede ver y editar todas las plantillas de la cuenta de WhatsApp Business en Administrador de WhatsApp> Herramientas de la cuenta >Plantillas de mensajes.
Para enumerar las plantillas mediante programación, puede capturar todas las plantillas para el id. de canal de la siguiente manera:
MessageTemplateClient messageTemplateClient = new MessageTemplateClient(connectionString);
Pageable<MessageTemplateItem> templates = messageTemplateClient.GetTemplates(channelRegistrationId);
Enviar un mensaje de plantilla sin parámetros
Si la plantilla no requiere parámetros, no es necesario proporcionar ningún valor ni enlace al crear MessageTemplate
.
var messageTemplate = new MessageTemplate(templateName, templateLanguage);
Ejemplo
sample_template
no toma parámetros.
Ensamble el MessageTemplate
haciendo referencia al nombre y el idioma de la plantilla de destino.
string templateName = "sample_template";
string templateLanguage = "en_us";
var sampleTemplate = new MessageTemplate(templateName, templateLanguage);
Enviar un mensaje de plantilla con parámetros de texto en el cuerpo
Use MessageTemplateText
para definir parámetros en el cuerpo indicados con corchetes dobles que rodean un número, como {{1}}
. El número, índice iniciado en 1, indica el orden en el que se deben proporcionar los valores del enlace para crear la plantilla de mensaje. La inclusión de parámetros que no están en la plantilla no es válida.
Definición de la plantilla con dos parámetros:
{
"type": "BODY",
"text": "Message with two parameters: {{1}} and {{2}}"
}
Ejemplos
Plantilla sample_shipping_confirmation
:
En este ejemplo, el cuerpo de la plantilla tiene un parámetro:
{
"type": "BODY",
"text": "Your package has been shipped. It will be delivered in {{1}} business days."
},
Los parámetros se definen con los valores MessageTemplateValue
y los enlaces de MessageTemplateWhatsAppBindings
. Use los valores y enlaces para ensamblar el MessageTemplate
.
string templateName = "sample_shipping_confirmation";
string templateLanguage = "en_us";
var threeDays = new MessageTemplateText("threeDays", "3");
WhatsAppMessageTemplateBindings bindings = new();
bindings.Body.Add(new(threeDays.Name));
MessageTemplate shippingConfirmationTemplate = new(templateName, templateLanguage);
shippingConfirmationTemplate.Bindings = bindings;
shippingConfirmationTemplate.Values.Add(threeDays);
Enviar un mensaje de plantilla con el parámetro multimedia en el encabezado
Use MessageTemplateImage
, MessageTemplateVideo
o MessageTemplateDocument
para definir el parámetro multimedia en un encabezado.
Definición de plantilla con el parámetro de imagen multimedia en el encabezado:
{
"type": "HEADER",
"format": "IMAGE"
},
format
puede tener diferentes tipos multimedia compatibles con WhatsApp. En el SDK de .NET, cada tipo de medio usa un tipo MessageTemplateValue correspondiente.
Format | Tipo MessageTemplateValue | Tipo de archivo |
---|---|---|
IMAGE |
MessageTemplateImage |
png, jpg |
VIDEO |
MessageTemplateVideo |
mp4 |
DOCUMENT |
MessageTemplateDocument |
Para obtener más información sobre los tipos de contenido multimedia admitidos y los límites de tamaño, consulte Documentación de WhatsApp para los mensajes multimedia.
Ensamblado de plantilla de mensaje para medios de imagen:
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);
Ejemplos
Plantilla sample_movie_ticket_confirmation
:
En este ejemplo, el encabezado de la plantilla requiere una imagen:
{
"type": "HEADER",
"format": "IMAGE"
},
Y el cuerpo de la plantilla requiere cuatro parámetros de texto:
{
"type": "BODY",
"text": "Your ticket for *{{1}}*\n*Time* - {{2}}\n*Venue* - {{3}}\n*Seats* - {{4}}"
},
Cree una MessageTemplateImage
y cuatro variables de MessageTemplateText
. A continuación, reúna la lista de MessageTemplateValue
y el MessageTemplateWhatsAppBindings
proporcionando los parámetros en el orden en que los parámetros aparecen en el contenido de la plantilla.
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;
Más ejemplos
- VÍDEO: Use sample_happy_hour_announcement de plantilla de ejemplo
- DOCUMENTO: Use sample_flight_confirmation de plantilla de ejemplo
Enviar un mensaje de plantilla con la ubicación en el encabezado
Use MessageTemplateLocation
para definir el parámetro location en un encabezado.
Definición de plantilla para el componente del encabezado que requiere la ubicación como:
{
"type": "header",
"parameters": [
{
"type": "location",
"location": {
"latitude": "<LATITUDE>",
"longitude": "<LONGITUDE>",
"name": "<NAME>",
"address": "<ADDRESS>"
}
}
]
}
format
puede requerir diferentes tipos de contenido multimedia. En el SDK de .NET, cada tipo de medio usa un tipo MessageTemplateValue correspondiente.
Propiedades | Descripción | Tipo |
---|---|---|
ADDRESS |
Dirección que aparecerá después del valor NAME , debajo del mapa genérico que hay en la parte superior del mensaje. |
string |
LATITUDE |
Latitud de ubicación. | doble |
LONGITUDE |
Longitud de ubicación. | doble |
LOCATIONNAME |
Texto que aparecerá inmediatamente debajo del mapa genérico de la parte superior del mensaje. | string |
Para más información sobre las plantillas basadas en ubicaciones, consulte la Documentación de WhatsApp para mensajes multimedia.
Ejemplo
Plantilla sample_movie_location
:
Ensamblado de plantilla de mensajes basado en ubicación:
var location = new MessageTemplateLocation("location");
location.LocationName = "Pablo Morales";
location.Address = "1 Hacker Way, Menlo Park, CA 94025";
location.Position = new Azure.Core.GeoJson.GeoPosition(longitude: 122.148981, latitude: 37.483307);
WhatsAppMessageTemplateBindings location_bindings = new();
location_bindings.Header.Add(new(location.Name));
var messageTemplateWithLocation = new MessageTemplate(templateNameWithLocation, templateLanguage);
messageTemplateWithLocation.Values.Add(location);
messageTemplateWithLocation.Bindings = location_bindings;
Enviar un mensaje de plantilla con los botones de respuesta rápida
Use MessageTemplateQuickAction
para definir la carga útil para los botones de respuesta rápida y los objetos MessageTemplateQuickAction
tienen los tres atributos siguientes.
Propiedades | Descripción | Tipo |
---|---|---|
Nombre | El name se usa para buscar el valor en MessageTemplateWhatsAppBindings . |
string |
Texto | Acción rápida text opcional. |
string |
Carga útil | El payload asignado a un botón está disponible en una respuesta de mensaje si el usuario selecciona el botón. |
string |
Definición de plantilla con botones de respuesta rápida:
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
El orden en que aparecen los botones en la definición de plantilla debe coincidir con el orden en que se definen los botones al crear los enlaces con MessageTemplateWhatsAppBindings
.
Para obtener más información sobre la carga de las respuestas rápidas del usuario, consulte la documentación de WhatsApp sobre Devolución de una llamada recibida desde un botón de respuesta rápida.
Ejemplo
Plantilla sample_issue_resolution
:
Aquí, el cuerpo de la plantilla requiere un parámetro de texto:
{
"type": "BODY",
"text": "Hi {{1}}, were we able to solve the issue that you were facing?"
},
La plantilla incluye dos botones de respuesta rellenados previamente: Yes
y No
.
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
Cree una MessageTemplateText
y dos variables de MessageTemplateQuickAction
. A continuación, reúna la lista de MessageTemplateValue
y el MessageTemplateWhatsAppBindings
proporcionando los parámetros en el orden en que aparecen en el contenido de la plantilla. El orden también es importante al definir los botones del enlace.
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 un mensaje de plantilla con botones de llamada a la acción con vínculo dinámico
Use MessageTemplateQuickAction
para definir el sufijo URL para los botones de llamada a la acción y el objeto MessageTemplateQuickAction
tiene los dos atributos siguientes.
Propiedades | Descripción | Tipo |
---|---|---|
Nombre | El name se usa para buscar el valor en MessageTemplateWhatsAppBindings . |
string |
Texto | El text que se anexa a la dirección URL. |
string |
Botones de definición de plantilla:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
El orden en que aparecen los botones en la definición de plantilla debe coincidir con el orden en que se definen los botones al crear los enlaces con MessageTemplateWhatsAppBindings
.
Ejemplo
Plantilla sample_purchase_feedback
:
Esta plantilla de ejemplo agrega un botón con un vínculo de dirección URL dinámica al mensaje. También usa una imagen en el encabezado y un parámetro de texto en el cuerpo.
En este ejemplo, el encabezado de la plantilla requiere una imagen:
{
"type": "HEADER",
"format": "IMAGE"
},
Aquí, el cuerpo de la plantilla requiere un 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."
},
Y la plantilla incluye un botón de dirección URL dinámica con un parámetro:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Cree una MessageTemplateImage
, una MessageTemplateText
y una variable MessageTemplateQuickAction
. A continuación, reúna la lista de MessageTemplateValue
y el MessageTemplateWhatsAppBindings
proporcionando los parámetros en el orden en que aparecen en el contenido de la plantilla. El orden también es importante al definir los botones del enlace.
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 un mensaje de plantilla con botones de llamada a la acción con vínculo estático
En el caso de los vínculos estáticos, no es necesario incluir el modelo MessageTemplateQuickAction
porque la plantilla de WhatsApp tiene un vínculo estático CallToAction
sin necesidad de una entrada del usuario.
Botones de definición de plantilla:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Ejemplo
Plantilla purchase_feedback_static
:
Esta plantilla de ejemplo agrega un botón con un vínculo de dirección URL estática al mensaje. También usa una imagen en el encabezado y un parámetro de texto en el cuerpo.
En este ejemplo, el encabezado de la plantilla requiere una imagen:
{
"type": "HEADER",
"format": "IMAGE"
},
Aquí, el cuerpo de la plantilla requiere un 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.."
},
Y la plantilla incluye un botón de dirección URL dinámica con un parámetro:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/"
}
]
}
Cree una MessageTemplateImage
, una MessageTemplateText
. A continuación, reúna la lista de MessageTemplateValue
y el MessageTemplateWhatsAppBindings
proporcionando los parámetros en el orden en que aparecen en el contenido de la plantilla. El orden también es importante al definir los botones del enlace.
// 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);
Ejecución del código
Compile y ejecute el programa.
Para enviar un mensaje de texto o multimedia a un usuario de WhatsApp, debe haber una conversación activa entre la cuenta de WhatsApp Business y el usuario de WhatsApp.
Si no tiene una conversación activa, a efectos de este ejemplo, debe agregar una espera entre el envío del mensaje de plantilla y el envío del mensaje de texto. Este retraso adicional le da tiempo suficiente para responder a la empresa en la cuenta de WhatsApp del usuario. Como referencia, el ejemplo dado solicita la entrada manual del usuario antes de enviar el siguiente mensaje. Para obtener más información, vea el ejemplo completo en Código de ejemplo. Si tiene éxito, recibirá tres mensajes en la cuenta de WhatsApp del usuario.
Compile y ejecute el programa.
dotnet build
dotnet run
Ejemplo 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");
}
}
}
Más ejemplos
En estos ejemplos se usan las plantillas de muestra disponibles para las cuentas de WhatsApp Business creadas a través del registro insertado de Azure Portal.
Uso de sample_happy_hour_announcement de plantilla de ejemplo
Esta plantilla de ejemplo usa un vídeo en el encabezado y dos parámetros de texto en el cuerpo.
Aquí, el encabezado de la plantilla requiere un vídeo:
{
"type": "HEADER",
"format": "VIDEO"
},
El vídeo debe ser una dirección URL al vídeo mp4 hospedado.
Para obtener más información sobre los tipos de contenido multimedia admitidos y los límites de tamaño, consulte Documentación de WhatsApp para los mensajes multimedia.
Y el cuerpo de la plantilla requiere dos parámetros de texto:
{
"type": "BODY",
"text": "Happy hour is here! 🍺😀🍸\nPlease be merry and enjoy the day. 🎉\nVenue: {{1}}\nTime: {{2}}"
},
Cree una MessageTemplateVideo
y dos variables de MessageTemplateText
. A continuación, reúna la lista de MessageTemplateValue
y el MessageTemplateWhatsAppBindings
proporcionando los parámetros en el orden en que aparecen en el contenido de la plantilla.
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;
Uso de sample_flight_confirmation de plantilla de ejemplo
Esta plantilla de ejemplo usa un documento en el encabezado y tres parámetros de texto en el cuerpo.
El encabezado de la plantilla requiere un documento:
{
"type": "HEADER",
"format": "DOCUMENT"
},
El documento debe ser una dirección URL al documento PDF hospedado.
Para obtener más información sobre los tipos de contenido multimedia admitidos y los límites de tamaño, consulte Documentación de WhatsApp para los mensajes multimedia.
Y el cuerpo de la plantilla requiere tres parámetros de texto:
{
"type": "BODY",
"text": "This is your flight confirmation for {{1}}-{{2}} on {{3}}."
},
Cree una MessageTemplateDocument
y tres variables de MessageTemplateText
. A continuación, reúna la lista de MessageTemplateValue
y el MessageTemplateWhatsAppBindings
proporcionando los parámetros en el orden en que aparecen en el contenido de la plantilla.
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;
Requisitos previos
- Registre una cuenta de WhatsApp Business con su recurso Azure Communication Services.
- Cree un mensaje de plantilla de WhatsApp.
- Número de teléfono de WhatsApp activo para recibir mensajes.
Modelo de objetos
Las siguientes clases e interfaces controlan algunas de las características principales del SDK de mensajes de Azure Communication Services para Java.
Class Name (Nombre de clase) | Descripción |
---|---|
NotificationMessagesClient |
Esta clase se conecta a su recurso de Azure Communication Services. Envía los mensajes. |
MessageTemplate |
Esta clase define qué plantilla utiliza y el contenido de las propiedades de la plantilla para su mensaje. |
TemplateNotificationContent |
Esta clase define el "quién" y el "qué" del mensaje de plantilla que pretende enviar. |
Nota:
Para más información, consulte la referencia del SDK de Azure para Java en Paquete com.azure.communication.messages.
Tipos de plantilla de WhatsApp admitidas
Tipo de plantilla | Descripción |
---|---|
Plantillas de mensaje basadas en texto | Las plantillas de mensaje de WhatsApp son formatos de mensaje específicos con o sin parámetros. |
Plantillas de mensaje basadas en medios | Plantillas de mensajes de WhatsApp con parámetros multimedia para componentes del encabezado. |
Plantillas de mensajes interactivos | Las plantillas de mensajes interactivos amplían el contenido que puede enviar a los destinatarios, incluyendo botones interactivos mediante el objeto "components". Se admiten tanto la llamada a la acción como la respuesta rápida. |
Plantillas de mensaje basadas en la ubicación | Plantillas de mensajes de WhatsApp con parámetros de ubicación en términos longitud y latitud para los componentes del encabezado. |
Configuración común
Siga estos pasos para agregar los fragmentos de código necesarios a la función principal de su archivo App.java
.
- Cree y administre el mensaje de plantilla de WhatsApp.
- Autentique al cliente.
- Establezca el Id. de registro del canal.
- Establezca la lista de destinatarios.
Creación y administración del mensaje de plantilla de WhatsApp
Las plantillas de mensaje de WhatsApp son formatos de mensaje específicos que las empresas usan para enviar notificaciones o mensajes de atención al cliente a personas que optaron por recibir notificaciones. Los mensajes pueden incluir recordatorios de citas, información de envío, resolución de problemas o actualizaciones de pago. Antes de empezar a usar el SDK de Mensajería avanzada para enviar mensajes con plantilla, el usuario debe crear las plantillas necesarias en la Plataforma de WhatsApp Business.
Para obtener más información sobre los requisitos de WhatsApp para plantillas, consulte las referencias de la API de la Plataforma de WhatsApp Business:
- Creación y administración de plantillas.
- Ver los componentes de la plantilla.
- Enviar un mensaje de plantilla.
- Las empresas también deben cumplir requisitos de participación antes de enviar mensajes a los usuarios de WhatsApp.
Comience a enviar mensajes entre una empresa y un usuario de WhatsApp
Las conversaciones entre una cuenta empresarial de WhatsApp y un usuario de WhatsApp se pueden iniciar de una de estas dos maneras:
- La empresa envía un mensaje de plantilla al usuario de WhatsApp.
- El usuario de WhatsApp envía cualquier mensaje al número del trabajo.
Independientemente de cómo se haya iniciado la conversación, una empresa solo puede enviar mensajes de plantilla hasta que el usuario envíe un mensaje a la empresa. Solo después de que el usuario envíe un mensaje a la empresa, ésta podrá enviarle mensajes de texto o multimedia durante la conversación activa. Una vez transcurrido el plazo de 24 horas, la conversación debe reiniciarse. Para obtener más información sobre las conversaciones, consulte la definición en Plataforma de WhatsApp Business.
Autenticar el cliente
Existen varias opciones para autenticar a un cliente de mensajes:
Para autenticar a un cliente, cree una instancia NotificationMessagesClient
o MessageTemplateClient
con su cadena de conexión. También puede iniciar el cliente con cualquier cliente HTTP personalizado que implemente la interfaz com.azure.core.http.HttpClient
.
Para simplificar, este inicio rápido utiliza una cadena de conexión para autenticarse. En entornos de producción, se recomienda utilizar los servicios principales.
Obtenga la cadena de conexión del recurso de Azure Communication Services en Azure Portal. A la izquierda, navegue hasta la pestaña Keys
. Copie el campo Connection string
para el Primary key
. La cadena de conexión tiene el formato endpoint=https://{your Azure Communication Services resource name}.communication.azure.com/;accesskey={secret key}
.
Establezca la variable de entorno COMMUNICATION_SERVICES_CONNECTION_STRING
en el valor de la cadena de conexión.
Abra una ventana de consola y escriba el siguiente comando:
setx COMMUNICATION_SERVICES_CONNECTION_STRING "<your connection string>"
Para obtener más información sobre cómo configurar una variable de entorno para su sistema, siga los pasos indicados en Almacene su cadena de conexión en una variable de entorno.
Para crear una instancia de NotificationMessagesClient, agregue el siguiente código al método main
:
// 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();
Establecimiento del identificador de registro de canales
El Id. GUID de registro de canal se creó durante el registro del canal. Puede buscarlo en el portal en la pestaña Canales del recurso de Azure Communication Services.
Asígnelo a una variable llamada channelRegistrationId.
String channelRegistrationId = "<your channel registration id GUID>";
Establecimiento de la lista de destinatarios
Debe proporcionar un número de teléfono real que tenga una cuenta de WhatsApp asociada. Esta cuenta de WhatsApp recibe los mensajes de texto y multimedia enviados en este inicio rápido. Para este inicio rápido, este número de teléfono puede ser su número de teléfono personal.
El número de teléfono del destinatario no puede ser el número de teléfono del trabajo (id. de remitente) asociado al registro de canales de WhatsApp. El id. de remitente aparece como remitente de los mensajes de texto y multimedia enviados al destinatario.
El número de teléfono debe incluir el código de país. Para obtener más información sobre el formato del número de teléfono, consulte la documentación de WhatsApp sobre formatos de número de teléfono.
Nota:
Actualmente solo se admite un número de teléfono en la lista de destinatarios.
Cree la lista de destinatarios de la siguiente manera:
List<String> recipientList = new ArrayList<>();
recipientList.add("<to WhatsApp phone number>");
Ejemplo:
// Example only
List<String> recipientList = new ArrayList<>();
recipientList.add("+14255550199");
Configuración de entorno
Para configurar un entorno para enviar mensajes, siga los pasos descritos en las secciones siguientes.
Requisito previo
- Cuenta de WhatsApp Business registrada con su recurso Azure Communication Services.
- Número de teléfono de WhatsApp activo para recibir mensajes.
- Kit de desarrollo de Java (JDK) versión 8 o posterior.
- Apache Maven.
Creación de una aplicación Java
Abra la ventana Comandos o el terminal y navegue hasta el directorio en el que quiere crear la aplicación de Java. Ejecute el comando siguiente para generar el proyecto de Java a partir de la plantilla maven-archetype-quickstart
.
mvn archetype:generate -DgroupId="com.communication.quickstart" -DartifactId="communication-quickstart" -DarchetypeArtifactId="maven-archetype-quickstart" -DarchetypeVersion="1.4" -DinteractiveMode="false"
El objetivo generate
crea un directorio con el mismo nombre que el valor artifactId
. En este directorio, el directorio src/main/java
contiene el código fuente del proyecto, el directorio src/test/java
contiene el origen de la prueba y el archivo pom.xml
es el modelo de objetos del proyecto o POM.
Instalar el paquete
Abra el archivo pom.xml
en el editor de texto. Agregue el siguiente elemento de dependencia al grupo de dependencias.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-messages</artifactId>
</dependency>
Instalación del marco de la aplicación
Abra /src/main/java/com/communication/quickstart/App.java
en un editor de texto, agregue directivas de importación y quite la instrucción System.out.println("Hello world!");
:
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.
}
}
Ejemplos de código
Siga estos pasos para agregar los fragmentos de código necesarios a la función principal del archivo App.java
.
- Enumere las plantillas de WhatsApp en Azure Portal.
- Envíe un mensaje de plantilla con parámetros de texto en el cuerpo.
- Envíe un mensaje de plantilla con el parámetro multimedia en el encabezado.
- Envíe un mensaje de plantilla con botones de respuesta rápida.
- Envíe un mensaje de plantilla con botones de llamada a la acción y un vínculo dinámico.
Enumeración de plantillas de WhatsApp en Azure Portal
Para ver las plantillas en Azure Portal, vaya al recurso de Azure Communication Services >Mensajería avanzada>Plantillas.
Seleccione una plantilla para ver los detalles de la plantilla.
El campo Contenido de los detalles de la plantilla puede incluir los enlaces del parámetro. Los enlaces de parámetros se pueden indicar como:
- Un campo
"format"
con un valor comoIMAGE
. - Corchetes dobles que rodean un número, como
{{1}}
. El número, índice iniciado en 1, indica el orden en el que se deben proporcionar los valores del enlace para crear la plantilla de mensaje.
Como alternativa, puede ver y editar todas las plantillas de la cuenta de WhatsApp Business en Administrador de WhatsApp> Herramientas de la cuenta >Plantillas de mensajes.
Para enumerar las plantillas mediante programación, puede capturar todas las plantillas para el id. de canal con el siguiente 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 un mensaje de plantilla con parámetros de texto en el cuerpo
Si la plantilla no toma parámetros, no es necesario proporcionar los valores ni enlaces al crear el 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 un mensaje de plantilla con el parámetro multimedia en el encabezado
Use MessageTemplateImage
, MessageTemplateVideo
o MessageTemplateDocument
para definir el parámetro multimedia en un encabezado.
Definición de plantilla con un parámetro multimedia de imagen en el encabezado:
{
"type": "HEADER",
"format": "VIDEO"
},
"format"
puede estar en cuatro tipos de medios diferentes compatibles con WhatsApp. En el SDK de .NET, cada tipo de medio usa un tipo MessageTemplateValue
correspondiente.
Format | Tipo MessageTemplateValue | Tipo de archivo |
---|---|---|
IMAGE | MessageTemplateImage |
png, jpg |
VÍDEO | MessageTemplateVideo |
mp4 |
DOCUMENT | MessageTemplateDocument |
Para obtener más información sobre los tipos de contenido multimedia admitidos y los límites de tamaño, consulte Documentación de WhatsApp para los mensajes multimedia.
Ejemplo
Plantilla sample_happy_hour_announcement
:
Aquí, el encabezado de la plantilla requiere un vídeo:
{
"type": "HEADER",
"format": "VIDEO"
},
El vídeo debe ser una dirección URL al vídeo mp4 hospedado.
Para obtener más información sobre los tipos de contenido multimedia admitidos y los límites de tamaño, consulte Documentación de WhatsApp para los mensajes multimedia.
Y el cuerpo de la plantilla requiere dos parámetros de texto:
{
"type": "BODY",
"text": "Happy hour is here! 🍺😀🍸\nPlease be merry and enjoy the day. 🎉\nVenue: {{1}}\nTime: {{2}}"
},
Cree una MessageTemplateVideo
y cuatro variables de MessageTemplateText
. A continuación, reúna la lista de MessageTemplateValue
y el MessageTemplateWhatsAppBindings
proporcionando los parámetros en el orden en que los parámetros aparecen en el contenido de la plantilla.
/*
* 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 un mensaje de plantilla con los botones de respuesta rápida
Use MessageTemplateQuickAction
para definir la carga útil para los botones de respuesta rápida y los objetos MessageTemplateQuickAction
tienen los tres atributos siguientes.
Propiedades | Descripción | Tipo |
---|---|---|
Nombre | El name se usa para buscar el valor en MessageTemplateWhatsAppBindings . |
string |
Texto | La opción de acción rápida text . |
string |
Carga útil | El payload asignado a un botón está disponible en una respuesta de mensaje si el usuario selecciona el botón. |
string |
Definición de plantilla con botones de respuesta rápida:
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
El orden en que aparecen los botones en la definición de plantilla debe coincidir con el orden en que se definen los botones al crear los enlaces con MessageTemplateWhatsAppBindings
.
Para obtener más información sobre la carga de respuestas rápidas del usuario, consulte la documentación de WhatsApp sobre Devolución de una llamada recibida desde un botón de respuesta rápida.
Ejemplo
Plantilla sample_issue_resolution
:
Aquí, el cuerpo de la plantilla requiere un 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 un mensaje de plantilla con botones de llamada a la acción y un vínculo dinámico
Use MessageTemplateQuickAction
para definir el sufijo URL para los botones de llamada a la acción y el objeto MessageTemplateQuickAction
tiene los dos atributos siguientes.
Propiedades | Descripción | Tipo |
---|---|---|
Nombre | El name se usa para buscar el valor en MessageTemplateWhatsAppBindings . |
string |
Texto | El text anexado a la dirección URL. |
string |
Botones de definición de plantilla:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
El orden en que aparecen los botones en la definición de plantilla debe coincidir con el orden en que se definen los botones al crear los enlaces con MessageTemplateWhatsAppBindings
.
Ejemplo
Plantilla sample_purchase_feedback
:
Esta plantilla de ejemplo agrega un botón con un vínculo de dirección URL dinámica al mensaje. También usa una imagen en el encabezado y un parámetro de texto en el cuerpo.
En este ejemplo, el encabezado de la plantilla requiere una imagen:
{
"type": "HEADER",
"format": "IMAGE"
},
Aquí, el cuerpo de la plantilla requiere un 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."
},
Y la plantilla incluye un botón de dirección URL dinámica con un parámetro:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Cree una MessageTemplateImage
, una MessageTemplateText
y una variable MessageTemplateQuickAction
. A continuación, reúna la lista de MessageTemplateValue
y el MessageTemplateWhatsAppBindings
proporcionando los parámetros en el orden en que los parámetros aparecen en el contenido de la plantilla. El orden también es importante al definir los botones del enlace.
/*
* 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()));
}
Ejecución del código
Vaya al directorio que contiene el archivo
pom.xml
y compile el proyecto mediante el comandomvn
.mvn compile
Ejecute la aplicación ejecutando el siguiente comando
mvn
.mvn exec:java -D"exec.mainClass"="com.communication.quickstart.App" -D"exec.cleanupDaemonThreads"="false"
Ejemplo completo de código
Busque el código finalizado de este inicio rápido en GitHub.
Requisitos previos
- Registre una cuenta de WhatsApp Business con su recurso Azure Communication Services.
- Cree un mensaje de plantilla de WhatsApp.
- Número de teléfono de WhatsApp activo para recibir mensajes.
- Versiones de Node.js, Active LTS y Maintenance LTS (se recomiendan 8.11.1 y 10.14.1).
- Versiones de Node.js Active LTS y Maintenance LTS (se recomiendan 8.11.1 y 10.14.1)
- En un terminal o ventana de comandos, ejecute
node --version
para comprobar que Node.js está instalado
- En un terminal o ventana de comandos, ejecute
Modelo de objetos
Las siguientes clases e interfaces controlan algunas de las características principales del SDK de mensajes de Azure Communication Services para JavaScript.
Class Name (Nombre de clase) | Descripción |
---|---|
NotificationMessagesClient |
Esta clase se conecta a su recurso de Azure Communication Services. Envía los mensajes. |
MessageTemplate |
Esta clase define qué plantilla utiliza y el contenido de las propiedades de la plantilla para su mensaje. |
TemplateNotificationContent |
Esta clase define el "quién" y el "qué" del mensaje de plantilla que pretende enviar. |
Nota:
Para más información, consulte la referencia del SDK de Azure para JavaScript Paquete @azure-rest/communication-messages
Tipos de plantilla de WhatsApp admitidas
Tipo de plantilla | Descripción |
---|---|
Plantillas de mensaje basadas en texto | Las plantillas de mensaje de WhatsApp son formatos de mensaje específicos con o sin parámetros. |
Plantillas de mensaje basadas en medios | Plantillas de mensajes de WhatsApp con parámetros multimedia para componentes del encabezado. |
Plantillas de mensajes interactivos | Las plantillas de mensajes interactivos amplían el contenido que puede enviar a los destinatarios, incluyendo botones interactivos mediante el objeto "components". Se admiten tanto la llamada a la acción como la respuesta rápida. |
Plantillas de mensaje basadas en la ubicación | Plantillas de mensajes de WhatsApp con parámetros de ubicación en términos longitud y latitud para los componentes del encabezado. |
Configuración común
Siga estos pasos para agregar los fragmentos de código necesarios a la función principal de su archivo send-messages.js
.
- Cree y administre el mensaje de plantilla de WhatsApp.
- Autentique al cliente.
- Establezca el Id. de registro del canal.
- Establezca la lista de destinatarios.
Creación y administración del mensaje de plantilla de WhatsApp
Las plantillas de mensaje de WhatsApp son formatos de mensaje específicos que las empresas usan para enviar notificaciones o mensajes de atención al cliente a personas que optaron por recibir notificaciones. Los mensajes pueden incluir recordatorios de citas, información de envío, resolución de problemas o actualizaciones de pago. Antes de empezar a usar el SDK de Mensajería avanzada para enviar mensajes con plantilla, el usuario debe crear las plantillas necesarias en la Plataforma de WhatsApp Business.
Para obtener más información sobre los requisitos de WhatsApp para plantillas, consulte las referencias de la API de la Plataforma de WhatsApp Business:
- Creación y administración de plantillas.
- Ver los componentes de la plantilla.
- Enviar un mensaje de plantilla.
- Las empresas también deben cumplir requisitos de participación antes de enviar mensajes a los usuarios de WhatsApp.
Comience a enviar mensajes entre una empresa y un usuario de WhatsApp
Las conversaciones entre una cuenta empresarial de WhatsApp y un usuario de WhatsApp se pueden iniciar de una de estas dos maneras:
- La empresa envía un mensaje de plantilla al usuario de WhatsApp.
- El usuario de WhatsApp envía cualquier mensaje al número del trabajo.
Independientemente de cómo se haya iniciado la conversación, una empresa solo puede enviar mensajes de plantilla hasta que el usuario envíe un mensaje a la empresa. Solo después de que el usuario envíe un mensaje a la empresa, ésta podrá enviarle mensajes de texto o multimedia durante la conversación activa. Una vez transcurrido el plazo de 24 horas, la conversación debe reiniciarse. Para obtener más información sobre las conversaciones, consulte la definición en Plataforma de WhatsApp Business.
Autenticar el cliente
El código siguiente recupera la cadena de conexión del recurso de una variable de entorno denominada COMMUNICATION_SERVICES_CONNECTION_STRING
mediante el paquete dotenv.
Para simplificar, este inicio rápido utiliza una cadena de conexión para autenticarse. En entornos de producción, se recomienda utilizar los servicios principales.
Obtenga la cadena de conexión del recurso de Azure Communication Services en Azure Portal. A la izquierda, navegue hasta la pestaña Keys
. Copie el campo Connection string
para el Primary key
. La cadena de conexión tiene el formato endpoint=https://{your Azure Communication Services resource name}.communication.azure.com/;accesskey={secret key}
.
Establezca la variable de entorno COMMUNICATION_SERVICES_CONNECTION_STRING
en el valor de la cadena de conexión.
Abra una ventana de consola y escriba el siguiente comando:
setx COMMUNICATION_SERVICES_CONNECTION_STRING "<your connection string>"
Para obtener más información sobre cómo configurar una variable de entorno para su sistema, siga los pasos indicados en Almacene su cadena de conexión en una variable de entorno.
Para crear una instancia de NotificationClient, agregue el siguiente código al método Main
:
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);
Establecimiento del identificador de registro de canales
El Id. GUID de registro de canal se creó durante el registro del canal. Puede buscarlo en el portal en la pestaña Canales del recurso de Azure Communication Services.
Asígnelo a una variable llamada channelRegistrationId.
const channelRegistrationId = "<your channel registration id GUID>";
Establecimiento de la lista de destinatarios
Debe proporcionar un número de teléfono real que tenga una cuenta de WhatsApp asociada. Esta cuenta de WhatsApp recibe la plantilla, el texto y los mensajes multimedia enviados en este inicio rápido. Para este inicio rápido, este número de teléfono puede ser su número de teléfono personal.
El número de teléfono del destinatario no puede ser el número de teléfono del trabajo (id. de remitente) asociado al registro de canales de WhatsApp. El id. de remitente aparece como remitente de los mensajes de texto y multimedia enviados al destinatario.
El número de teléfono debe incluir el código de país. Para obtener más información sobre el formato del número de teléfono, consulte la documentación de WhatsApp sobre formatos de número de teléfono.
Nota:
Actualmente solo se admite un número de teléfono en la lista de destinatarios.
Cree la lista de destinatarios de la siguiente manera:
const recipientList = ["<to WhatsApp phone number>"];
Ejemplo:
// Example only
const recipientList = ["+14255550199"];
Instalación
Para configurar un entorno para enviar mensajes, siga los pasos descritos en las secciones siguientes.
Creación de una aplicación Node.js
Cree un directorio para la aplicación y ábralo en un terminal o ventana Comandos.
Ejecute el siguiente comando:
mkdir advance-messages-quickstart && cd advance-messages-quickstart
Ejecute el siguiente comando para crear un archivo
package.json
con la configuración predeterminada.npm init -y
Use un editor de texto para crear un archivo denominado
send-messages.js
en el directorio raíz del proyecto.Agregue el siguiente fragmento de código al archivo
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); });
Complete la siguiente sección para agregar el código fuente de este ejemplo al archivo send-messages.js
que ha creado.
Instalar el paquete
Utilice el comando npm install
para instalar el SDK de la Mensajería avanzada de Azure Communication Services para JavaScript.
npm install @azure-rest/communication-messages --save
La opción --save
muestra la biblioteca como dependencia en el archivo package.json.
Ejemplos de código
Siga estos pasos para agregar los fragmentos de código necesarios a la función principal del archivo send-messages.js
.
- Enumere las plantillas de WhatsApp en Azure Portal.
- Envíe un mensaje de plantilla con parámetros de texto en el cuerpo.
Enumeración de plantillas de WhatsApp en Azure Portal
Para ver las plantillas en Azure Portal, vaya al recurso de Azure Communication Services >Mensajería avanzada>Plantillas.
Seleccione una plantilla para ver los detalles de la plantilla.
El campo Contenido de los detalles de la plantilla puede incluir los enlaces del parámetro. Los enlaces de parámetros se pueden indicar como:
- Un campo
"format"
con un valor comoIMAGE
. - Corchetes dobles que rodean un número, como
{{1}}
. El número, índice iniciado en 1, indica el orden en el que se deben proporcionar los valores del enlace para crear la plantilla de mensaje.
Como alternativa, puede ver y editar todas las plantillas de la cuenta de WhatsApp Business en Administrador de WhatsApp> Herramientas de la cuenta >Plantillas de mensajes.
Para enumerar las plantillas mediante programación, puede capturar todas las plantillas para el id. de canal con el siguiente 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 un mensaje de plantilla con parámetros de texto en el cuerpo
Plantilla sample_shipping_confirmation
:
En este ejemplo, el cuerpo de la plantilla tiene un parámetro:
{
"type": "BODY",
"text": "Your package has been shipped. It will be delivered in {{1}} business days."
},
Los parámetros se definen con los valores values
y los enlaces de bindings
. Use los valores y enlaces para ensamblar el objeto template
.
/*
* 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 };
Ejecución del código
Utilice el comando node para ejecutar el código que ha agregado al archivo send-messages.js.
node ./send-messages.js
Ejemplo completo de código
Busque el código finalizado de este ejemplo en GitHub.
Requisitos previos
- Registre una cuenta de WhatsApp Business con su recurso Azure Communication Services.
- Cree un mensaje de plantilla de WhatsApp.
- Número de teléfono de WhatsApp activo para recibir mensajes.
Modelo de objetos
Las siguientes clases e interfaces controlan algunas de las características principales del SDK de mensajes de Azure Communication Services para Python.
Class Name (Nombre de clase) | Descripción |
---|---|
NotificationMessagesClient |
Esta clase se conecta a su recurso de Azure Communication Services. Envía los mensajes. |
MessageTemplate |
Esta clase define qué plantilla utiliza y el contenido de las propiedades de la plantilla para su mensaje. |
TemplateNotificationContent |
Esta clase define el "quién" y el "qué" del mensaje de plantilla que pretende enviar. |
Nota:
Para más información, consulte la referencia del SDK de Azure para Python Paquete de mensajes.
Tipos de plantilla de WhatsApp admitidas
Tipo de plantilla | Descripción |
---|---|
Plantillas de mensaje basadas en texto | Las plantillas de mensaje de WhatsApp son formatos de mensaje específicos con o sin parámetros. |
Plantillas de mensaje basadas en medios | Plantillas de mensajes de WhatsApp con parámetros multimedia para componentes del encabezado. |
Plantillas de mensajes interactivos | Las plantillas de mensajes interactivos amplían el contenido que puede enviar a los destinatarios, incluyendo botones interactivos mediante el objeto "components". Se admiten tanto la llamada a la acción como la respuesta rápida. |
Plantillas de mensaje basadas en la ubicación | Plantillas de mensajes de WhatsApp con parámetros de ubicación en términos longitud y latitud para los componentes del encabezado. |
Configuración común
Siga estos pasos para agregar los fragmentos de código necesarios al programa de Python messages-quickstart.py
.
- Cree y administre el mensaje de plantilla de WhatsApp.
- Autentique al cliente.
- Establezca el Id. de registro del canal.
- Establezca la lista de destinatarios.
Creación y administración del mensaje de plantilla de WhatsApp
Las plantillas de mensaje de WhatsApp son formatos de mensaje específicos que las empresas usan para enviar notificaciones o mensajes de atención al cliente a personas que optaron por recibir notificaciones. Los mensajes pueden incluir recordatorios de citas, información de envío, resolución de problemas o actualizaciones de pago. Antes de empezar a usar el SDK de Mensajería avanzada para enviar mensajes con plantilla, el usuario debe crear las plantillas necesarias en la Plataforma de WhatsApp Business.
Para obtener más información sobre los requisitos de WhatsApp para plantillas, consulte las referencias de la API de la Plataforma de WhatsApp Business:
- Creación y administración de plantillas.
- Ver los componentes de la plantilla.
- Enviar un mensaje de plantilla.
- Las empresas también deben cumplir requisitos de participación antes de enviar mensajes a los usuarios de WhatsApp.
Autenticar el cliente
El envío de mensajes se realiza mediante NotificationMessagesClient. NotificationMessagesClient se autentica mediante la cadena de conexión adquirida desde el recurso de Azure Communication Services en Azure Portal. Para más información sobre las cadenas de conexión, consulte access-your-connection-strings-and-service-endpoints.
Obtenga la cadena de conexión de Recursos de comunicación de Azure desde Azure Portal como se indica en el recorte de pantalla. A la izquierda, navegue hasta la pestaña Keys
. Copie el campo Connection string
para la clave primaria. La cadena de conexión tiene el formato endpoint=https://{your Azure Communication Services resource name}.communication.azure.com/;accesskey={secret key}
.
Establezca la variable de entorno COMMUNICATION_SERVICES_CONNECTION_STRING
en el valor de la cadena de conexión.
Abra una ventana de consola y escriba el siguiente comando:
setx COMMUNICATION_SERVICES_CONNECTION_STRING "<your connection string>"
Tras agregar la variable de entorno, es posible que tenga que reiniciar todos los programas en ejecución que necesiten leer la variable de entorno, incluida la ventana de la consola. Por ejemplo, si usa Visual Studio como editor, reinícielo antes de ejecutar el ejemplo.
Para obtener más información sobre cómo configurar una variable de entorno para su sistema, siga los pasos indicados en Almacene su cadena de conexión en una variable de entorno.
# 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)
Establecimiento del identificador de registro de canales
El Id. GUID del registro del canal se creó durante el registro del canal. Puede buscarlo en el portal en la pestaña Canales del recurso de Azure Communication Services.
Asígnelo a una variable llamada channelRegistrationId.
channelRegistrationId = os.getenv("WHATSAPP_CHANNEL_ID_GUID")
Establecimiento de la lista de destinatarios
Debe proporcionar un número de teléfono activo asociado a una cuenta de WhatsApp. Esta cuenta de WhatsApp recibe la plantilla, el texto y los mensajes multimedia enviados en este inicio rápido.
En este ejemplo, puede usar su número de teléfono personal.
El número de teléfono del destinatario no puede ser el número de teléfono del trabajo (id. de remitente) asociado al registro de canales de WhatsApp. El id. de remitente aparece como remitente de los mensajes de texto y multimedia enviados al destinatario.
El número de teléfono debe incluir el código de país. Para obtener más información sobre el formato del número de teléfono, consulte la documentación de WhatsApp sobre Formatos de número de teléfono.
Nota:
Actualmente solo se admite un número de teléfono en la lista de destinatarios.
Establezca la lista de destinatarios así:
phone_number = os.getenv("RECIPIENT_WHATSAPP_PHONE_NUMBER")
Ejemplo de uso:
# Example only
to=[self.phone_number],
Comience a enviar mensajes entre una empresa y un usuario de WhatsApp
Las conversaciones entre una cuenta empresarial de WhatsApp y un usuario de WhatsApp se pueden iniciar de una de estas dos maneras:
- La empresa envía un mensaje de plantilla al usuario de WhatsApp.
- El usuario de WhatsApp envía cualquier mensaje al número del trabajo.
Una empresa no puede iniciar una conversación interactiva. Solo puede enviar un mensaje interactivo después de recibir un mensaje del usuario. La empresa solo puede enviar mensajes interactivos al usuario durante la conversación activa. Una vez que expire la ventana de conversación de 24 horas, solo el usuario puede reiniciar la conversación interactiva. Para obtener más información sobre las conversaciones, consulte la definición en la Plataforma de WhatsApp Business.
Para iniciar una conversación interactiva desde su cuenta personal de WhatsApp, envíe un mensaje al número de empresarial (id. de remitente).
Configuración de entorno
Creación de una nueva aplicación de Python
En una ventana del terminal o la consola, cree una carpeta para la aplicación y ábrala.
mkdir messages-quickstart && cd messages-quickstart
Instalar el paquete
Deberá utilizar la biblioteca de clientes de Azure Communication Messages para Python versión 1.1.0 o superior.
En el símbolo del sistema o la consola, ejecute el comando siguiente:
pip install azure-communication-messages
Para InteractiveMessages, Reacciones y Stickers, use la versión beta siguiente:
pip install azure-communication-messages==1.2.0b1
Instalación del marco de la aplicación
Cree un archivo llamado messages-quickstart.py
y agregue la estructura básica del programa.
type nul > messages-quickstart.py
Estructura básica del programa
import os
class MessagesQuickstart(object):
print("Azure Communication Services - Advanced Messages SDK Quickstart")
if __name__ == '__main__':
messages = MessagesQuickstart()
Estructura básica del programa
import os
class MessagesQuickstart(object):
print("Azure Communication Services - Advanced Messages SDK Quickstart")
if __name__ == '__main__':
messages = MessagesQuickstart()
Ejemplos de código
Siga estos pasos para agregar los fragmentos de código necesarios al programa de Python messages-quickstart.py
.
- Enumere las plantillas de WhatsApp en Azure Portal.
- Envíe un mensaje de plantilla sin parámetros.
- Envíe un mensaje de plantilla con parámetros de texto en el cuerpo.
- Envíe un mensaje de plantilla con el parámetro multimedia en el encabezado.
- Envíe un mensaje de plantilla con la ubicación en el encabezado.
- Envíe un mensaje de plantilla con botones de respuesta rápida.
- Envíe un mensaje de plantilla con botones de llamada a la acción con un vínculo dinámico.
Enumeración de plantillas de WhatsApp en Azure Portal
Para ver las plantillas en Azure Portal, vaya al recurso de Azure Communication Service >Mensajería avanzada>Plantillas.
Seleccione una plantilla para ver los detalles de la plantilla.
El campo content
de los detalles de la plantilla puede incluir enlaces de parámetros. Los enlaces de parámetros se pueden indicar como:
- Un campo
format
con un valor comoIMAGE
. - Corchetes dobles que rodean un número, como
{{1}}
. El número, índice iniciado en 1, indica el orden en el que se deben proporcionar los valores del enlace para crear la plantilla de mensaje.
Como alternativa, puede ver y editar todas las plantillas de la cuenta empresarial de WhatsApp en las herramientas de WhatsApp Manager> Herramientas de cuenta >Plantillas de mensajes.
Para enumerar las plantillas mediante programación, puede capturar todas las plantillas para el id. de canal de la siguiente manera:
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 un mensaje de plantilla sin parámetros
Si la plantilla no toma parámetros, no es necesario proporcionar los valores ni enlaces al crear el MessageTemplate
.
Ejemplo
sample_template
no tiene parámetros.
Ensamble el MessageTemplate
haciendo referencia al nombre y el idioma de la plantilla de destino.
input_template: MessageTemplate = MessageTemplate(name="gathering_invitation", language="ca") # Name of the WhatsApp Template
Enviar un mensaje de plantilla con parámetros de texto en el cuerpo
Use MessageTemplateText
para definir parámetros en el cuerpo indicados con corchetes dobles que rodean un número, como {{1}}
. El número, índice iniciado en 1, indica el orden en el que se deben proporcionar los valores del enlace para crear la plantilla de mensaje. El intento de incluir parámetros que no están en la plantilla no es válido.
Definición de la plantilla con dos parámetros:
{
"type": "BODY",
"text": "Message with two parameters: {{1}} and {{2}}"
}
Ejemplos
Plantilla sample_shipping_confirmation
:
En este ejemplo, el cuerpo de la plantilla tiene un parámetro:
{
"type": "BODY",
"text": "Your package has been shipped. It will be delivered in {{1}} business days."
},
Defina parámetros mediante los valores MessageTemplateValue
y los enlaces MessageTemplateWhatsAppBindings
. Use los valores y enlaces para ensamblar el MessageTemplate
.
# 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 un mensaje de plantilla con el parámetro multimedia en el encabezado
Use MessageTemplateImage
, MessageTemplateVideo
o MessageTemplateDocument
para definir el parámetro multimedia en un encabezado.
Definición de plantilla con el parámetro de imagen multimedia en el encabezado:
{
"type": "HEADER",
"format": "IMAGE"
},
format
puede tener diferentes tipos multimedia compatibles con WhatsApp. En el SDK de .NET, cada tipo de medio usa un tipo MessageTemplateValue
correspondiente.
Format | Tipo MessageTemplateValue | Tipo de archivo |
---|---|---|
IMAGE | MessageTemplateImage |
png, jpg |
VÍDEO | MessageTemplateVideo |
mp4 |
DOCUMENT | MessageTemplateDocument |
Para obtener más información sobre los tipos de contenido multimedia admitidos y los límites de tamaño, consulte Documentación de WhatsApp para los mensajes multimedia.
Ejemplos
Plantilla sample_movie_ticket_confirmation
:
En este ejemplo, el encabezado de la plantilla requiere una imagen:
{
"type": "HEADER",
"format": "IMAGE"
},
Y el cuerpo de la plantilla requiere cuatro parámetros de texto:
{
"type": "BODY",
"text": "Your ticket for *{{1}}*\n*Time* - {{2}}\n*Venue* - {{3}}\n*Seats* - {{4}}"
},
Cree una MessageTemplateImage
y cuatro variables de MessageTemplateText
. A continuación, reúna la lista de MessageTemplateValue
y el MessageTemplateWhatsAppBindings
proporcionando los parámetros en el orden en que aparecen en el contenido de la plantilla.
# 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 un mensaje de plantilla con los botones de respuesta rápida
Use MessageTemplateQuickAction
para definir la carga útil para los botones de respuesta rápida y los objetos MessageTemplateQuickAction
tienen los tres atributos siguientes.
Propiedades | Descripción | Tipo |
---|---|---|
Nombre | El name cuyo valor se va a buscar en MessageTemplateWhatsAppBindings . |
string |
Texto | La opción de acción rápida text . |
string |
Carga útil | El payload asignado a un botón está disponible en una respuesta de mensaje si el usuario selecciona el botón. |
string |
Definición de plantilla con botones de respuesta rápida:
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
El orden en que aparecen los botones en la definición de plantilla debe coincidir con el orden en que se definen los botones al crear los enlaces con MessageTemplateWhatsAppBindings
.
Para obtener más información sobre la carga de respuestas rápidas del usuario, consulte la documentación de WhatsApp sobre Devolución de una llamada recibida desde un botón de respuesta rápida.
Ejemplo
Plantilla sample_issue_resolution
:
Aquí, el cuerpo de la plantilla requiere un parámetro de texto:
{
"type": "BODY",
"text": "Hi {{1}}, were we able to solve the issue that you were facing?"
},
La plantilla incluye dos botones de respuesta rellenados previamente: Yes
y No
.
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes"
},
{
"type": "QUICK_REPLY",
"text": "No"
}
]
}
Cree una MessageTemplateText
y dos variables de MessageTemplateQuickAction
. A continuación, reúna la lista de MessageTemplateValue
y el MessageTemplateWhatsAppBindings
proporcionando los parámetros en el orden en que aparecen en el contenido de la plantilla. El orden también es importante al definir los botones de enlace.
# 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 un mensaje de plantilla con la ubicación en el encabezado
Use MessageTemplateLocation
para definir el parámetro location en un encabezado.
Definición de plantilla para el componente del encabezado que requiere la ubicación como:
{
"type": "header",
"parameters": [
{
"type": "location",
"location": {
"latitude": "<LATITUDE>",
"longitude": "<LONGITUDE>",
"name": "<NAME>",
"address": "<ADDRESS>"
}
}
]
}
format
puede requerir diferentes tipos de contenido multimedia. En el SDK de .NET, cada tipo de medio usa un tipo MessageTemplateValue
correspondiente.
Propiedades | Descripción | Tipo |
---|---|---|
ADDRESS |
Dirección que aparecerá después del valor NAME , debajo del mapa genérico que hay en la parte superior del mensaje. |
string |
LATITUDE |
Latitud de ubicación. | doble |
LONGITUDE |
Longitud de ubicación. | doble |
LOCATIONNAME |
Texto que aparecerá inmediatamente debajo del mapa genérico de la parte superior del mensaje. | string |
Para más información sobre las plantillas basadas en ubicaciones, consulte la Documentación de WhatsApp para mensajes multimedia.
Ejemplo
Plantilla sample_movie_location
:
Ensamblado de la plantilla de mensajes basada en la ubicación:
# Setting template options
templateName = "sample_movie_location"
templateLanguage = "en_us"
sample_movie_location: MessageTemplate = MessageTemplate(name=templateName, language=templateLanguage )
name = MessageTemplateText(name="first", text="Joe")
location = MessageTemplateLocation(name="location", location_name="Pablo Morales",
address="1 Hacker Way, Menlo Park, CA 94025",
latitude=37.483307,longitude=122.148981)
bindings = WhatsAppMessageTemplateBindings(body=[WhatsAppMessageTemplateBindingsComponent(ref_value=name.name)],
header=[WhatsAppMessageTemplateBindingsComponent(ref_value=location.name)])
sample_movie_location.bindings = bindings
sample_movie_location.template_values=[name,location]
template_options = TemplateNotificationContent(
channel_registration_id=self.channel_id, to=[self.phone_number], template=sample_movie_location)
Enviar un mensaje de plantilla con botones de llamada a la acción con vínculo dinámico
Use MessageTemplateQuickAction
para definir el sufijo URL para los botones de llamada a la acción y el objeto MessageTemplateQuickAction
tiene los dos atributos siguientes.
Propiedades | Descripción | Tipo |
---|---|---|
Nombre | El name se usa para buscar el valor en MessageTemplateWhatsAppBindings . |
string |
Texto | El text anexado a la dirección URL. |
string |
Botones de definición de plantilla:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
El orden en que aparecen los botones en la definición de plantilla debe coincidir con el orden en que se definen los botones al crear los enlaces con MessageTemplateWhatsAppBindings
.
Ejemplo
Plantilla sample_purchase_feedback
:
Esta plantilla de ejemplo agrega un botón con un vínculo de dirección URL dinámica al mensaje. También usa una imagen en el encabezado y un parámetro de texto en el cuerpo. Cree plantillas del botón de llamada a la acción con el tipo de dirección URL Dynamic
para el tipo de acción View website
.
En este ejemplo, el encabezado de la plantilla requiere una imagen:
{
"type": "HEADER",
"format": "IMAGE"
},
Aquí, el cuerpo de la plantilla requiere un 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."
},
Y la plantilla incluye un botón de dirección URL dinámica con un parámetro:
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Take Survey",
"url": "https://www.example.com/{{1}}"
}
]
}
Cree una MessageTemplateImage
, una MessageTemplateText
y una variable MessageTemplateQuickAction
. A continuación, reúna la lista de MessageTemplateValue
y el MessageTemplateWhatsAppBindings
proporcionando los parámetros en el orden en que aparecen en el contenido de la plantilla. El orden también es importante al definir los botones del enlace.
# 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)
Ejemplo 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()
Ejecución del código
Para ejecutar el código, asegúrese de que se encuentra en el directorio donde está el archivo messages-quickstart.py
.
python messages-quickstart.py
Azure Communication Services - Advanced Messages Quickstart
WhatsApp Templated Message with message id <<GUID>> was successfully sent to <<ToRecipient>>