https://d226lax1qjow5r.cloudfront.net/blog/blogposts/sms-notifications-google-sheets-nodered-dr/Blog_Group-Notifications_NodeRED_1200x600.png

Envío de notificaciones de grupo con Google Sheets y Node-RED

Publicado el May 24, 2021

Tiempo de lectura: 14 minutos

Nota: Es posible que algunas de las herramientas o métodos descritos en este artículo ya no reciban soporte o no estén actualizados. Para obtener contenido actualizado o soporte, consulta nuestras últimas publicaciones o contáctanos en el Slack de la comunidad de Vonage

¿Alguna vez te han llamado a las 7:59 de la mañana para decirte que el colegio de tu hijo está cerrado? Era práctico, porque estabas a un par de kilómetros, de camino a casa, después de dejarlos en casa.

Hoy en día, el proceso de convocatoria en la mayoría de las escuelas sigue siendo manual, lo que funciona en la mayoría de los casos. Sin embargo, cuando ocurre algo inesperado, como que el colegio esté cerrado por la nieve, un puñado de personas se apresura a llamar a cientos de padres. Puede que recibas la notificación a tiempo, o que formes parte del afortunado grupo que acabó en el último lote a las 7:59.

En este tutorial vamos a crear un flujo Node-RED que envíe notificaciones mediante programación a una lista de contactos, utilizando Google Sheets y la SMS API de Vonage.

¿Seguirlo y presentárselo al director? Te ahorras un atasco en un día de nieve.

Requisitos previos

Antes de empezar, necesitarás algunas cosas:

  • A Node-RED ya sea una versión alojada o en su máquina

  • A Account Google

  • Una Account de Vonage

  • Una forma de exponer tu servidor a Internet. Esto significa que está ejecutando una versión alojada de Node-RED o utilizando un servicio de túnel como ngrok - ponte al día con esto Primeros pasos con Ngrok en Node-RED tutorial

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

Configuración del editor

Una vez que abra su Editor Node-RED, asegúrese de tener instalados los siguientes paquetes:

Para ello, haga clic en el menú hamburguesa, seleccione Gestionar paleta. Compruebe si hay paquetes ya instalados en Nodosy obtenga los nuevos desde el menú Instale instalar.

Cuando hayas terminado, reinicia Node-RED y ¡listo!

Configuración de la cuenta de Google

Para interactuar con la Google Sheets APItendrás que utilizar una cuenta de servicio, es decir, una identidad que una instancia puede utilizar para ejecutar solicitudes de API en tu nombre. Se utilizará para identificar las aplicaciones que se ejecutan en tu instancia ante otros servicios de Google Cloud.

En este caso, el flujo que lee una hoja de Google debe autenticarse primero en la API de hojas de Google.

Tendrás que crear una cuenta de servicio y concederle acceso a la API de Google Sheets. A continuación, actualiza tu aplicación para pasar las credenciales de la cuenta de servicio a la API de Google Sheets. De este modo, tu flujo se autentica perfectamente en la API sin incrustar claves secretas ni credenciales de usuario.

Paso 1: Crear una nueva cuenta de servicio

Empezaremos creando un nuevo proyecto en la Página de cuentas de servicio de Google Cloud Platform. Haz clic en CREAR para empezar.

google service accounts create project

A continuación, asigne un nombre a su proyecto, seleccione una organización o déjelo en blanco y pulse CREAR.

google service accounts name project

En breve aparecerá una notificación indicando que se ha creado el proyecto.

google service accounts project created

Ahora que ya tienes un proyecto, vamos a añadirle una cuenta de servicio.

google create service account

google name service account

A continuación, tendrá que crear una clave que utilizará para autenticarse con el nodo GSheet en su flujo. Haga clic en Crear clavey seleccione JSON como tipo de clave. Guarde este archivo cuando se le solicite; téngalo a mano porque lo necesitará pronto y, a continuación, pulse Listo.

google service accounts create key

Paso 2: Habilitar la API de Google Sheets para tu proyecto

En el menú hamburguesa, seleccione APIs y Servicios -> Cuadro de mandosy haga clic en el botón HABILITAR APIS Y SERVICIOS . Busca la Google Sheets API en la biblioteca de API, ábrela y haz clic en Habilitar.

google sheets enable api for project

Paso 3: Uso compartido de Google Sheets con tu cuenta de Google Service Account

Vaya a Cuentas de servicio y anote la dirección de correo electrónico asociada a la cuenta de servicio que acaba de crear. Tendrás que utilizar esta dirección de correo electrónico para compartir tus hojas de cálculo con la cuenta de servicio.

google service accouns email

Envío de notificaciones de grupo con Google Sheets y Node-RED

Crear una hoja de cálculo

En caso de que no tengas una hoja de Google preparada, créala ahora.

Google Sheets utiliza un sistema de matriz de celdas, en el que cada columna puede identificarse con una letra (empezando por la A como primera columna) y las filas están numeradas (siendo 1 la primera fila). En caso de que quieras seleccionar el segundo elemento de la primera fila, sería B1.

También puede seleccionar rangos de celdas utilizando las opciones CELDA_ARRIBA_IZQUIERDA:CELDA_ABAJO_DERECHA inferior derecha. Por ejemplo, para seleccionar el segundo y tercer elemento de las filas 1-5, utilice B1:C5.

Después de crear una hoja de cálculo verás una Hoja1 en la parte inferior de la pantalla, que es la hoja de cálculo en la que te encuentras actualmente. Puedes cambiarle el nombre o añadir más hojas de cálculo a tu hoja de cálculo.

Para este tutorial, estoy utilizando una hoja de cálculo con 4 columnas: Nombre, Apellidos, Teléfono y Correo Electrónico - necesitarás al menos 2 filas de datos para seguir.
Asegúrate de añadir un número de teléfono al que tengas acceso, para poder probar tu flujo más adelante.

Una vez que su hoja de cálculo esté lista, es hora de compartirla con su Service Account.

google sheets share google sheet

Obtención de datos de la hoja de cálculo de Google

Comience su flujo añadiendo una GSheet a tu espacio de trabajo. Configure este nodo para extraer los datos de su hoja de Google rellenando los siguientes campos:

PARAMETERS DESCRIPTION
Creds Press the edit button to provide your Service Account key. Remember the JSON file you downloaded earlier? Copy and paste this JSON key in the text field.
Method Select Get Cells from the drop-down menu. This will grab the data from the Google Sheet and pull it into your flow.
SpreadsheetID You can figure out your spreadsheet ID from the URL of your Google Sheet. For example, if the URL is https://docs.google.com/spreadsheets/d/1mmXhj40aeSooxmtku3ma4auLyrHhO8xCSQsklZ1_BU/edit#gid=0, the SpreadsheetID will be the string found in between d/ and /edit: 1mmXhj40aeSooxmtku3ma4auLyrHhO8xCSQsklZ1_BU. Have a look at your spreadsheet URL and find your SpreadSheetID. Then paste this string in the SpreadSheetID field.
Cells Select the cells where your data is located on the spreadsheet. In the example below, this value will be: Sheet1!A2:D30, as the data is found on the worksheet named "Sheet1", in columns A-D on rows 2-30. Note that we're not including the table headers.

Una vez que haya terminado de editar la GSheet pulse Hecho.

google sheets node setup

A continuación, echemos un vistazo a los datos que obtenemos de la API de Google Sheets.

Añadir un inyectar y un depuración a tu espacio de trabajo y conéctalos al nodo GSheet uno. Pulsa Desplegarhaz clic en el botón inyectar y echa un vistazo a la barra lateral de depuración.

google sheets node

Observará que la respuesta en msg.payload es un array de arrays, cada uno de estos arrays tiene 4 elementos - una línea de datos.

Dividir el array msg.payload

Esta estructura de datos no es ideal para el procesamiento posterior, así que vamos a dividir la matriz de matrices en matrices individuales.

Afortunadamente, ya existe un nodo predeterminado en su paleta que hará el trabajo pesado por usted.

Encuentra la dividir en secuencia en la paleta de nodos a la izquierda de la pantalla. Añádalo a su espacio de trabajo, conéctelo después del nodo GSheet seguido de un nodo depuracióny pulse Despliegue y vuelva a ejecutar su flujo.

Echa un vistazo a la barra lateral de depuración y observa que la respuesta llega como una secuencia de matrices individuales. De esta manera podemos procesarlos uno a uno, a medida que van llegando.

google sheets sms split node

Fijar retardo

En la mayoría de los casos, no querrás enviar mensajes a esta velocidad, ya sea por correo electrónico, SMS o el canal que elijas.

Por ejemplo, la SMS API de Vonage tiene un límite de rendimiento para los SMS salientes: todas las claves de API están configuradas con una restricción de rendimiento de 30 solicitudes de API por segundo de forma predeterminada. Además de esto, también hay restricciones al enviar desde ciertos Numbers, por lo que podrías estar restringido a 1 SMS por segundo.

Para asegurarse de que no está alcanzando los límites de rendimiento, es una buena idea para establecer un retraso en cada matriz que viene a través de msg.payload.

Para ello, busque el retardo en la función función de la paleta de nodos y conéctalo después de la función dividir dividir. Haz doble clic en él para abrir las propiedades del nodo y establece el retardo en 1 segundo - esto debería cubrir la mayoría de los casos de uso, pero siéntete libre de ajustarlo según sea necesario.

Preparar el mensaje

Llegados a este punto, tenemos toda la información que necesitamos sobre los destinatarios, así que pasemos al mensaje.

Aunque podrías enviar el mismo mensaje a todos los destinatarios, siempre es buena idea hacerlo un poco más personal. Recibir malas noticias ya es bastante frustrante, y una mala experiencia de usuario no lo mejorará.

Añadir un poco de plantilla no sólo dará a tu mensaje un toque personal, sino que también lo hará parecer más profesional.

Añadir una plantilla después de retraso. Haga doble clic en él, establezca Propiedad a msg.text y da rienda suelta a tu creatividad con el mensaje del campo de texto.

Este campo de texto admite Plantillas de bigotepor lo que puede empezar saludando al destinatario con su nombre: {{payload.0}}. Esta expresión hace referencia al primer elemento de msg.payload el nombre del destinatario.

google sheets sms template node

Cuando termine de editar, pulse Listoy luego Despliegue.

Envío de notificaciones por SMS

Hay muchos canales disponibles para enviar tus notificaciones, pero en condiciones de mal tiempo los SMS pueden ser tu mejor opción, así que empezaremos por esta opción.

Para enviar los mensajes SMS, utilizaremos la SMS API DE VONAGE.

Desplácese hasta nexmo de su paleta de nodos y añada sendsms a su espacio de trabajo, conectado después de la plantilla nodo.

Configure este nodo haciendo doble clic sobre él y rellenando los parámetros que aparecen a continuación. Encontrará CLAVE API y SECRETO API haciendo clic en el botón de edición junto a Credenciales de Vonage.

KEY DESCRIPTION
API KEY Your Vonage API key, shown in your account overview.
API SECRET Your Vonage API secret, shown in your account overview.
TO The number you are sending the SMS to, {{msg.payload.2}} in this case.
FROM The number or text shown on a handset when it displays your message. You can also set a custom alphanumeric FROM value if this feature is supported in your country.
TEXT The content of your message. Use {{msg.text}} to reference the templated message you've created earlier.

Asegúrese de que Unicode está marcada para mantener el formato del mensaje y, a continuación, pulse Hecho y Desplegar.

google sheets send sms node setup

Ejecute su flujo de nuevo y vea que sus mensajes con plantillas aparecen en la barra lateral de depuración.

google sheets templated sms in debug

Recibos de entrega

Cuando realizas una solicitud correcta a la SMS API, ésta devuelve una matriz de objetos de mensaje. En el mejor de los casos, cada uno de ellos tiene el estado 0, lo que indica que el mensaje se ha programado correctamente para su envío. Estos son los objetos de respuesta que acabas de ver en el área de depuración.

Si bien inspeccionar esta salida es bastante útil para determinar qué hizo la API de SMS de Vonage, no hay garantía de que el mensaje haya llegado al teléfono del destinatario. No es exactamente lo que quieres escuchar mientras envías alertas por el día de nieve, ¿verdad?

Una vez que el mensaje llega a su destino, el transportista devuelve un recibo de entrega a Vonage, ¡así que no entres en pánico! Todo lo que necesitas hacer es configurar un punto final de webhook para que Vonage pueda reenviar estos recibos de entrega a.

Conectar a http a un nodo respuesta http así como a un nodo depuración y, a continuación, rellene el campo URL con /receipt en el campo http .

Luego, deberás indicarle a la SMS API de Vonage a dónde debe reenviar los recibos de entrega. Ve a la configuración de API en la sección Configuración predeterminada de SMS predeterminada. Establece la URL de webhook predeterminada para los recibos de entrega en YOUR_URL/receipty, a continuación Guardar cambios.

default sms settings nexmo dashboard

Ahora puedes estar seguro de que tus notificaciones de días de nieve han llegado a todos los miembros de tu lista. Pero no te fíes de mi palabra, ve a la barra lateral de depuración y lee tus recibos de entrega.

google sheets sms event webhook

¿Y ahora qué?

Crédito adicional: Escriba sus recibos de entrega en la hoja de Google

Aunque la barra lateral de depuración le ofrece toda la información que pueda necesitar, a veces es más fácil comprender el resultado si los datos se presentan de forma más organizada.

En esta sección, veremos cómo volver a escribir sus recibos de entrega en la misma hoja de cálculo, en una hoja de cálculo(pestaña) diferente.

Elija sus datos

Los recibos de entrega contendrán las siguientes propiedades del archivo msg.payload objeto:

PROPERTY DESCRIPTION
msisdn The number the message was sent to.
to Your Vonage number or the SenderID you've set when sending the SMS.
network-code The Mobile Country Code Mobile Network Code (MCCMNC) of the carrier the destination phone number is registered with.
messageId The Vonage ID for this message.
price The cost of this message.
status Will be one of: delivered, expired, failed, rejected, accepted, buffered or unknown, based on where the message is in the delivery process.
scts When the delivery receipt was received from the carrier in YYMMDDHHMM format. For example, 2001011400 is at 2020-01-01 14:00
err-code The status of the request. Will be a non 0 value in case of an error. See the Delivery Receipt documentation for more details.
api-key Your Vonage API key.
message-timestamp The time when Vonage started to push this Delivery Receipt to your webhook endpoint.

Decida cuáles de estos parámetros le importan y, a continuación, utilizando un cambiar establece msg.payload a un array de las propiedades respectivas.

Por ejemplo, me interesa la marca de tiempo, el número del destinatario, el estado, el código de error y el ID del mensaje, así que estableceré msg.payload con la siguiente expresión:

[payload.\`message-timestamp\`, payload.msisdn, payload.status, payload.\`err-code\`, payload.messageId]

Conecte este cambiar al nodo /recibo y, a continuación, conecte un nodo GSheet nodo.

Escriba sus datos en la hoja de Google

Añade otra hoja de cálculo (pestaña) a tu hoja de Google y anota su nombre: por defecto será "Hoja2".

A continuación, vuelve a tu editor Node-RED y abre el archivo GSheet propiedades del nodo. Seleccione sus credenciales en el campo credenciales seleccione Añadir fila como Métodointroduzca su SpreadsheetIDy especifique el rango de celdas donde desea que se escriban los datos. En mi caso será Hoja2!A:Eya que quiero que los datos se distribuyan en las columnas A-E de la hoja de cálculo "Hoja2".

google sheets append row setup

Cuando esté listo, haga clic en Hecho y Desplegary vuelva a ejecutar el flujo.

🎉¡Felicidades! Tus recibos de entrega se han registrado en la segunda hoja de cálculo. Ve a tu hoja de cálculo de Google y compruébalos.

google sheets delivery receipts logged

Más ideas para piratear

¿Cansado de tener que abrir el editor de Node-RED para iniciar el flujo? Experimenta con distintas formas de iniciarlo.

Recursos

Pruebe con otro tutorial

Compartir:

https://a.storyblok.com/f/270183/372x373/36054b72d0/julia-biro.png
Julia BiroDefensor del Desarrollador

Julia está comprometida con la capacitación de los desarrolladores mediante la creación de tutoriales, guías y recursos prácticos. Con experiencia en divulgación y educación, su objetivo es hacer que la tecnología sea más accesible y mejorar la experiencia general de los desarrolladores. A menudo se la puede encontrar en eventos de la comunidad local.