
Utilisation du bouton AWS IoT et de Nexmo pour passer un appel téléphonique
Temps de lecture : 4 minutes
En intégrant l'API Voice de Nexmo à un bouton IoT d'Amazon, le blogueur invité Michael Piccuirro a permis à son fils de passer un appel téléphonique en cliquant sur un bouton afin qu'il puisse se rendre à l'école à pied. Voici comment il a procédé.
Ma femme part tôt au travail, et c'est donc à moi qu'il incombe de préparer nos enfants et de les emmener à l'école. Pour gagner du temps, je pensais laisser mon fils de 8 ans commencer à marcher tout seul jusqu'à l'école, mais il y a un problème. Je le dépose environ une heure avant le début de l'école. Toutes les portes sont alors fermées. Pour entrer plus tôt dans le bâtiment, il faut appeler le téléphone portable de l'enseignant posté dans la cafétéria, qui surveille les enfants qui arrivent plus tôt.
Mon premier réflexe était d'offrir un téléphone à mon fils, mais j'y ai repensé après y avoir réfléchi un peu. Il y a le coût mensuel du téléphone et du service, il pourrait facilement le perdre, et il finirait probablement par jouer à des jeux dessus autant qu'il le pourrait. Il avait vraiment besoin de quelque chose pour ce moment précis de la journée. Je me suis dit qu'il devait y avoir quelque chose de facile et bon marché.
Après avoir cherché sur Amazon un produit susceptible de résoudre mon problème, il m'est apparu que je pouvais peut-être utiliser un bouton IoT AWSIl s'agit d'une sorte de bouton Amazon Dash que vous pouvez relier à vos propres services web Amazon. Ces boutons sont bon marché et conçus pour un cas d'utilisation très similaire au mien : Cliquer occasionnellement sur un bouton pour réaliser une action via l'internet.
La première étape a donc consisté à obtenir un bouton AWS, à le placer sur mon réseau WiFi et à mettre en place une application hello world. Si vous parcourez la documentation vous verrez qu'il y a quelques étapes à suivre. J'ai câblé l'appareil et j'ai pu voir l'événement apparaître dans ma console AWS à chaque fois que je cliquais sur le bouton.
Amazon Dash, AWS IoT
D'accord, maintenant essayons de connecter cela avec un peu de code. J'ai utilisé une fonction Lambda, qui est la façon AWS d'exécuter du code dans le cloud sans se préoccuper de la configuration du serveur. Cette partie était beaucoup plus facile car un modèle de bouton IoT était déjà disponible. Il a automatiquement mis en place un code Node.js qui m'a envoyé un e-mail lorsque le bouton a été actionné. Vous pouvez voir le code ici.
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);
});
};
L'étape suivante consistait à trouver un service qui me permettrait de passer un appel téléphonique automatisé, et c'est ainsi que j'ai découvert l'API Nexmo. Contrairement à la configuration initiale de Dash, il a été très facile d'utiliser Nexmo. Ils ont une documentation clairequi explique exactement comment mettre en place une application Node.js. En quelques minutes, j'avais quelque chose que je pouvais exécuter localement via le terminal qui envoyait un appel Robo à mon numéro de téléphone. Voir le code ici. Après avoir parcouru la documentation de Nexmo, j'ai trouvé comment enregistrer ma propre voix et l'utiliser à la place. enregistrer ma propre Voice et l'utiliser à la place de la synthèse vocale de leur exemple. de leur exemple.
Les deux parties fonctionnant, je devais maintenant les assembler. J'ai coupé tout le code qui envoyait un email à partir de ma fonction Dash Lambda et j'ai branché le code Nexmo qui passait l'appel téléphonique.
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);
}
});
};
Vous pouvez voir ce que le code complet ressemble à ceci.
Ensuite, j'ai eu un bouton qui fonctionnait dans ma maison. Lorsqu'on appuyait dessus, il appelait mon téléphone. Pour appeler le téléphone de l'école, je devais créditer mon compte Nexmo de 10 livres sterling. Le coût de la minute est tellement bas Je ne m'imagine pas dépenser cette somme de sitôt. J'ai changé le Dash pour utiliser le réseau WiFi de l'école et nous avons commencé à travailler.
Maintenant que ce système fonctionne, j'ai quelques idées pour l'améliorer.
Je pourrais faire en sorte qu'il m'envoie un message si l'appel est occupé ou n'aboutit pasJe pourrais alors appeler de n'importe quel endroit où je me trouve.
Je peux ajouter un numéro virtuel de sorte que si l'enseignant rappelle, mon portable sonnera.
L'Amazon Dash permet également d'appuyer longuement sur le bouton. Cet événement pourrait donc déclencher un message différent : "Viens me chercher" ou "J'ai du mal à entrer dans l'école".
Une fois que la Pressto ou un autre bouton IoT cellulaire, je pourrais même supprimer la nécessité d'être sur le réseau WIFI de l'école, ce qui le rendrait beaucoup plus puissant puisqu'il fonctionnerait à peu près partout.
Mais pour l'instant, mon fils se rend à l'école tout seul et j'ai retrouvé un temps précieux dans ma routine matinale.
Voici une vidéo de moi expliquant le projet.