https://d226lax1qjow5r.cloudfront.net/blog/blogposts/using-aws-iot-button-with-nexmo-phone-call-dr/making-a-voice-call-iot-button-nexmo.jpg

Uso de AWS IoT Button y Nexmo para realizar una llamada telefónica

Publicado el May 18, 2021

Tiempo de lectura: 4 minutos

Integrando la Voice API de Nexmo con un botón IoT de Amazon, el bloguero invitado Michael Piccuirro permitió a su hijo hacer una llamada telefónica pulsando un botón para que pudiera ir andando al colegio. He aquí cómo lo hizo.

Mi mujer se va a trabajar temprano, así que es mi responsabilidad preparar a nuestros hijos y llevarlos al colegio. Para ahorrar tiempo, pensaba dejar que mi hijo de 8 años fuera solo al colegio, pero había un problema. Lo dejo en casa una hora antes de que empiece el colegio. Todas las puertas están cerradas a esa hora. Para entrar antes hay que llamar al móvil del profesor que está en la cafetería, vigilando a los niños más madrugadores.

Mi instinto inicial fue regalarle a mi hijo un teléfono propio, pero lo reconsideré después de pensarlo un poco. Está el coste mensual del teléfono y el servicio, podría perderlo fácilmente y probablemente acabaría jugando con él todo lo que pudiera. En realidad, sólo necesitaba algo para ese momento del día. Pensé que tenía que haber algo barato y fácil por ahí.

Después de buscar en Amazon un producto que pudiera resolver mi problema se me ocurrió que podría ser capaz de utilizar un Botón IoT de AWSson como un botón Amazon Dash que puedes vincular a tus propios servicios web de Amazon. Estos botones son baratos y están diseñados para un caso de uso muy similar al mío: Ocasionalmente hacer clic en un botón para hacer que una cosa suceda a través de Internet.

Así que el primer paso fue conseguir un botón AWS, ponerlo en mi red WiFi y configurar una aplicación hola mundo. Si navegas por la documentación encontrarás que hay unos cuantos pasos a seguir. Conseguí conectar el dispositivo y pude ver el evento que aparecía en mi consola de AWS cada vez que pulsaba el botón.

Amazon Dash, AWS IoTAmazon Dash, AWS IoT

Bien, ahora a tratar de conectar eso con algo de código. Utilicé una función Lambda, que es la forma de AWS para obtener el código que se ejecuta en la nube sin preocuparse de cualquier configuración del servidor. Esta parte fue mucho más fácil porque ya tenían un modelo de botón IoT disponible. Se configura automáticamente el código Node.js que me envía un correo electrónico cuando se pulsa el botón. Puedes ver el código aquí.

exports.handler = (event, context, callback) => {
    console.log('Received event:', event.clickType);
 
    // create/get topic
    createTopic('aws-iot-button-sns-topic', (err, topicArn) => {
        if (err) {
            return callback(err);
        }
        console.log(`Publishing to topic ${topicArn}`);
        // publish message
        const params = {
            Message: `${event.serialNumber} -- processed by Lambda\nBattery voltage: ${event.batteryVoltage}`,
            Subject: `Hello from your IoT Button ${event.serialNumber}: ${event.clickType}`,
            TopicArn: topicArn,
        };
        // result will go to function callback
        SNS.publish(params, callback);
    });
};

El siguiente paso era encontrar un servicio que me permitiera hacer una llamada telefónica automática, y así fue como encontré la API de Nexmo. A diferencia de la configuración inicial de Dash, empezar a utilizar Nexmo fue muy fácil. Tienen una documentación claraque explica exactamente cómo poner en marcha una aplicación Node.js. En pocos minutos, tenía algo que podía ejecutar localmente a través de la terminal que envió una llamada Robo a mi número de teléfono. Ver el código aquí. Después de navegar por los documentos Nexmo entonces me di cuenta de cómo grabar mi propia voz y usarla en lugar del texto-a-voz de su ejemplo.

Con las dos partes funcionando ahora tenía que juntarlas. Corté todo el código que enviaba un correo electrónico desde mi función Dash Lambda y conecté el código Nexmo que hacía la llamada telefónica.

exports.handler = (event, context, callback) => {
    console.log('Calling phone number', recipientNumber);
 
    nexmo.calls.create({
      to: [{
        type: 'phone',
        number: recipientNumber
      }],
      from: {
        type: 'phone',
        number: '12325551212'
      },
      answer_url: ['http://capturetheory.com/school_dash/first_call_talk.json']
    }, (err, res) => {
      if(err) {
        console.error("there is an error");
        console.error(err);
      }
      else {
        console.log(res);
      }
    });
};

Puede ver el código completo aquí.

Entonces tenía un botón que funcionaba en mi casa. Al pulsarlo, llamaba a mi teléfono. Para llamar al teléfono del colegio, tenía que cargar 10 libras en mi Account de Nexmo. El coste por minuto es tan bajo No me imagino gastando eso en cualquier momento pronto. Cambié el Dash para utilizar la red WiFi de la escuela y ya estábamos en marcha.

Ahora que lo tengo funcionando estoy dándole vueltas a algunas ideas para mejorarlo.

  • Podría hacer que me enviara un mensaje si la llamada está ocupada o no pasa.entonces puedo llamar desde donde esté.

  • Puedo añadir un número virtual para que si el profesor me devuelve la llamada, suene mi móvil.

  • El Amazon Dash también admite la pulsación larga del botón. Así que ese evento podría activar un mensaje diferente para mí diciendo "Ven a recogerme" o "Tengo problemas para entrar en el colegio".

  • Una vez que la Pressto u otro botón IoT celular, podría incluso eliminar la necesidad de estar en la red WIFI de la escuela, lo que lo haría mucho más potente, ya que funcionaría prácticamente en cualquier lugar.

Pero por ahora mi hijo va solo al colegio y yo he recuperado un tiempo precioso de mi rutina matutina.

Aquí tiene un Video mío explicando el proyecto.

Compartir:

https://a.storyblok.com/f/270183/150x150/a3d03a85fd/placeholder.svg
Michael Piccuirro