
Compartir:
Alex Lakatos es JavaScript Developer Advocate para Nexmo. En su tiempo libre es voluntario en Mozilla como Tech Speaker y Reps Mentor. Desarrollador de JavaScript en la web abierta, ha estado empujando sus límites todos los días. Cuando no está programando en Londres, le gusta viajar por el mundo, así que es probable que te lo encuentres en la sala de espera de un aeropuerto.
Cómo enviar y recibir mensajes SMS con Node.js y Azure Functions
Esta entrada de blog forma parte de Historias de la Nube Aplicada aplicada.
Los webhooks son cada vez más populares en el mundo de las API, y Vonage los utiliza para algunas de nuestras API. Así que termino escribiendo bastantes de ellos. Como soy un fan de Node.js, solía hacer la mayoría de ellos con Express. Era una molestia crear un servidor web y desplegarlo en algún sitio, así que empecé a buscar alternativas. Serverless seguía apareciendo en mi investigación como una de las buenas alternativas, así que pensé en usar Azure Functions y Node.js para enviar y recibir mensajes SMS.
Para los SMS, voy a utilizar la SMS APIque te permite enviar y recibir un gran volumen de SMS en cualquier parte del mundo. Una vez que obtengas tu número de teléfono virtual, podrás utilizar la API para gestionar los mensajes salientes ("envío") y los mensajes entrantes ("recepción").
En este artículo, aprenderás cómo enviar y recibir mensajes SMS con Node.js y una Azure Functions App.
El código de este tutorial se encuentra en GitHub.
Requisitos previos
Antes de empezar, asegúrate de que tienes:
Una cuenta cuenta Azure
Node.js instalado en su máquina
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.
Configurar una aplicación Azure Functions
Hay varias formas de configurar una Azure Functions App. Yo he elegido hacerlo desde el Portal Azure.
Create Azure Functions App
Le he puesto un nombre send-receive-smshe creado un nuevo recurso para él y he elegido Node.js como tiempo de ejecución. He elegido los valores predeterminados en términos de despliegue, región y planes.
Una vez finalizado el despliegue (normalmente unos 2 minutos), puedes ir al recurso recién creado y crear tu primera función. Hay un asistente que le ayuda a través del proceso, y he seleccionado Código VS como entorno de desarrollo y "Publicación directa" como método de despliegue. Eso me dio un conjunto de instrucciones sobre cómo configurar VS Code para Azure.
Create Azure Function quickstart
Una vez que terminé con la configuración, creé mi primera función, un HTTP Trigger. La he llamado inboundpero puedes usar el nombre que quieras. Para el mecanismo de seguridad, usted tiene algunas opciones que controlan el nivel de autorización en la función. "Función" requiere una clave de API basada en la función, "Admin" requiere su clave de API maestra de Azure, y "Anónimo" no requiere una clave de API. He elegido "Anónimo" como el mecanismo de seguridad para ello. Eso creó un nuevo archivo con una plantilla predeterminada.
Create Azure Function template
Recibir un mensaje SMS
Crear una función Webhook
He sustituido el contenido de la función para que coincida con el Recibir un SMS fragmento de código que utilizamos en nuestro portal para desarrolladores. Combina el cuerpo y los parámetros de consulta de una solicitud y los registra en la consola. Es un simple Webhook que puedes usar para recibir mensajes SMS en la plataforma de Vonage.
module.exports = async function(context, req) {
const params = Object.assign(req.query, req.body);
if (params.text) {
context.log("SMS received", params);
}
context.res = {};
}; Función de despliegue
Como Vonage necesita poder acceder a una URL pública, he implementado mi función con Azure. Puedes hacerlo en VS Code. Una vez que finalice la implementación, obtendrás una URL activa para tu función, por ejemplo, la mía es https://send-receive-sms.azurewebsites.net/api/inbound.
Deploy Azure Function
Establecer URL de entrada
Para recibir un mensaje SMS en la plataforma de Vonage, debes tener un número de Vonage. Si no tienes uno, puedes comprar uno en el Panel de Vonage:
Buy Vonage Phone Number
Cuando un número de teléfono de Vonage reciba un mensaje SMS, Vonage pasará ese mensaje a un Webhook que hayas especificado en el panel de Nexmo. Usaremos nuestra función Azure como el Webhook receptor. Para configurar la URL del webhook, ve al pequeño icono de engranaje junto a tus Numbers en el panel de Nexmo y rellena el campo "Inbound Webhook URL" con la URL que obtuviste tras desplegar la función Azure (la mía fue https://send-receive-sms.azurewebsites.net/api/inbound).
Set Inbound Webhook URL on the Vonage Dashboard
Puedes probar que funciona enviando un SMS desde tu teléfono a tu número de teléfono de Vonage, y aparecerá en los registros de funciones de Azure.

Envío de un mensaje SMS
Pensé que estaría bien que la Función hiciera algo más que registrar los mensajes SMS, así que voy a hacer que también responda a los mensajes SMS, cambiando el mensaje de texto a emojis.
Voy a utilizar el SDK de Vonage Node.js para enviar el mensaje SMS, por lo que tendrás que instalarlo en la función Azure. La carpeta de nivel superior de tu función tiene un archivo package.json que se instala con cada despliegue. Así que si navegas a esa carpeta en el Terminal y usas npm install nexmoaccederás al SDK de Vonage dentro de la función Azure.
También he actualizado la función para inicializar el SDK de Vonage, convertir el mensaje SMS en emojis y luego enviarlo como SMS al remitente original.
module.exports = async function(context, req) {
const Nexmo = require("nexmo");
const nexmo = new Nexmo({
apiKey: process.env["NEXMO_API_KEY"],
apiSecret: process.env["NEXMO_API_SECRET"]
});
const params = Object.assign(req.query, req.body);
if (params.text) {
var response = [];
// transform inbound SMS into emojis
for (let i = 0; i < params.text.length; i++) {
const emoji = String.fromCodePoint(127715 + params.text.charCodeAt(i));
response.push(emoji);
}
// send SMS back with emojis
nexmo.message.sendSms(
params.to,
params.msisdn,
response.join(""),
{
type: "unicode"
},
(err, responseData) => {
if (err) {
context.log(err);
} else {
if (responseData.messages[0]["status"] === "0") {
context.log("Message sent successfully.");
} else {
context.log(
`Message failed with error: ${responseData.messages[0]["error-text"]}`
);
}
}
}
);
}
context.res = {};
};
Verás que mi código inicializa el SDK de Vonage con process.env["NEXMO_API_KEY"] y process.env["NEXMO_API_SECRET"]. La aplicación Azure Function tiene la configuración de la aplicación y he agregado mis etiquetas NEXMO_API_KEY y NEXMO_API_SECRET y estos se actualizan con cada implementación desde mi máquina local. Tú también puedes hacerlo, o sustituir esos valores por tu clave y secreto de API reales. Puedes encontrarlos en la página "Cómo comenzar" en el Panel de Vonage.
Add Application Settings in Azure
El método del SDK para enviar un SMS, nexmo.message.sendSms()toma como parámetros el ID del remitente, el número de teléfono del destinatario, el mensaje de texto y las opciones. He añadido {type: "unicode"} en las opciones porque estoy enviando emojis. También acepta una llamada de retorno que se activa cuando finaliza la solicitud de la API.
Los datos de respuesta contienen una matriz con todos los mensajes enviados e información sobre su estado. En la mayoría de los casos, habrá un solo elemento en esa matriz, pero si el SMS tenía más de 160 caracteres, se dividirá en un SMS de varias partes, y entonces la matriz contendrá datos sobre cada parte enviada. Si el estado del mensaje es 0, el SMS se ha enviado correctamente; en caso contrario, los datos de error del mensaje se encuentran en la propiedad error-text del mensaje.
Debido a que mi texto tiene un emoji en él, estoy estableciendo el tipo unicode en el objeto de opciones, de lo contrario, ese emoji va a ser enviado en la red como ?.
Pruébelo
Ahora envía un mensaje SMS desde tu teléfono a tu número de Vonage. Deberías recibir de vuelta un mensaje SMS que convierta tus caracteres de texto en emojis. Si envías Hello World! en el SMS, deberías recibir de vuelta 🌷🍈🍛🍗🌃🍐🍈🌃🍗🍈🍑🍇🍈🍕🌑.
Received SMS message with Vonage
Espero que haya funcionado y acabes de aprender a enviar y recibir mensajes SMS con las API de Vonage, Azure Functions y Node.js.
Compartir:
Alex Lakatos es JavaScript Developer Advocate para Nexmo. En su tiempo libre es voluntario en Mozilla como Tech Speaker y Reps Mentor. Desarrollador de JavaScript en la web abierta, ha estado empujando sus límites todos los días. Cuando no está programando en Londres, le gusta viajar por el mundo, así que es probable que te lo encuentres en la sala de espera de un aeropuerto.
