
Como fazer uma ligação usando o AWS IoT Button e o Nexmo
Tempo de leitura: 4 minutos
Ao integrar a Voice API da Nexmo a um botão da Amazon IoT, o blogueiro convidado Michael Piccuirro permitiu que seu filho fizesse uma ligação clicando em um botão para que pudesse ir a pé para a escola. Veja como ele fez isso.
Minha esposa sai cedo para o trabalho, então cabe a mim preparar nossos filhos e levá-los para a escola. Para economizar tempo, pensei em deixar meu filho de 8 anos ir sozinho a pé para a escola, mas havia um problema. Eu o deixo lá cerca de uma hora antes do início das aulas. Todas as portas estão trancadas a essa hora. Para entrar no prédio mais cedo, é preciso ligar para o celular do professor que fica no refeitório, cuidando das crianças que chegam mais cedo.
Meu instinto inicial foi comprar um celular próprio para meu filho, mas mudei de ideia depois de pensar um pouco sobre o assunto. Há o custo mensal do aparelho e do plano, ele poderia perdê-lo facilmente e provavelmente acabaria jogando nele o máximo que pudesse. Ele só precisava mesmo de algo para esse único momento do dia. Pensei que devia haver algo barato e prático por aí.
Depois de procurar na Amazon por um produto que pudesse resolver meu problema, me ocorreu que talvez eu pudesse usar um AWS IoT Button; eles são como um botão Amazon Dash em branco, que você pode vincular aos seus próprios serviços da Amazon. Esses botões são baratos e projetados para um caso de uso muito semelhante ao meu: clicar ocasionalmente em um botão para que algo aconteça pela internet.
Então, o primeiro passo foi adquirir um botão da AWS, conectá-lo à minha rede Wi-Fi e configurar um aplicativo “hello world”. Se você der uma olhada na documentação , verá que há algumas etapas a serem seguidas. Conectei o dispositivo e pude ver o evento aparecendo no meu console da AWS toda vez que clicava no botão.
Amazon Dash, AWS IoT
Ok, agora vamos tentar conectar isso a um código. Usei uma função Lambda, que é a maneira que a AWS oferece para executar código na nuvem sem precisar se preocupar com a configuração de nenhum servidor. Essa parte foi bem mais fácil , pois já havia um modelo de IoT Button disponível. Ele configurou automaticamente o código Node.js que me enviou um e-mail quando o botão foi pressionado. Você pode ver o código para isso aqui.
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);
});
};
O próximo passo foi encontrar um serviço que me permitisse fazer uma ligação automática, e foi assim que descobri a API da Nexmo. Ao contrário da configuração inicial do Dash, começar a usar o Nexmo foi muito fácil. Eles têm uma documentação clara, que explicava passo a passo exatamente como colocar um aplicativo Node.js em funcionamento. Em poucos minutos, eu já tinha algo que podia executar localmente pelo terminal e que enviava uma chamada automática para o meu número de telefone. Veja o código aqui. Depois de dar uma olhada na documentação do Nexmo, descobri como gravar minha própria voz e usá-la em vez do recurso de conversão de texto em fala do exemplo deles.
Com as duas partes funcionando, agora eu precisava juntá-las. Removi todo o código que enviava um e-mail da minha função Dash Lambda e inseri o código do Nexmo que fazia a ligação.
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);
}
});
};
Você pode ver como o código completo fica aqui.
Então eu tinha um botão que funcionava na minha casa. Quando você o pressionava, ele ligava para o meu celular. Para ligar para o telefone da escola, tive que recarregar minha conta do Nexmo com £10. Mas o custo por minuto é tão baixo que que não consigo imaginar gastar isso tão cedo. Configurei o Dash para usar a rede Wi-Fi da escola e tudo funcionou perfeitamente.
Agora que consegui fazer isso funcionar, estou pensando em algumas ideias para melhorá-lo.
Eu poderia fazer com que ele me enviasse uma mensagem se a linha estiver ocupada ou a ligação não for completada; assim, posso ligar de onde quer que eu esteja.
Eu posso adicionar um número virtual para que, se o professor ligar de volta, o meu celular toque.
O Amazon Dash também suporta o toque prolongado no botão. Assim, esse evento poderia acionar uma mensagem diferente para mim, dizendo “Venha me buscar” ou “Estou com dificuldade para entrar na escola”.
Assim que o Pressto ou outro botão de IoT para celular for lançado, eu poderia até mesmo eliminar a necessidade de estar conectado à rede Wi-Fi da escola, tornando-o muito mais versátil, já que funcionaria praticamente em qualquer lugar.
Mas, por enquanto, meu filho está indo sozinho para a escola e isso me devolveu um tempo precioso da minha rotina matinal.
Aqui está um Video em que explico o projeto.