
Compartir:
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.
Envío de notificaciones de grupo con Google Sheets y Node-RED
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
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.

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

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

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


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.

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.

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.

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.

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.

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.

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.

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.

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.

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

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.

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.

¿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".

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.

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.
Pruebe a sustituir el inyectar por un nodo SMS entrante entrante. Envía un SMS a tu número de Vonage para realizar tu tarea.
Llamadas entrantes sería otra gran opción. Incluso podría basarse en ella y configurar un Menú interactivo de respuesta de voz
Configure una interfaz de usuario utilizando los nodos del panel de control
Recursos
Comprenda mejor recibos de entrega
Pruebe con otro tutorial
Compartir:
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.
