Rastrear objetos Correios

Update 27/07/21
Encontramos uma nova condição que não tinha sido verificada. Objeto tributado. Para não ter que recarregar todo o fluxo, vou colocar aqui só o conteúdo da function que trata os pacotes. Só copiar o código a seguir e substituir o que está na function. Trocar tudo.

// Monta a mensagem
msg.mensagem = "";

// Erro na leitura da mensagem
if (msg.headers["content-type"] != "application/json; charset=utf-8" || msg.payload.quantidade == undefined) {
    msg.mensagem = msg.mensagem + "❌ Erro ao ler dados de " + msg.nome + ". Tentando novamente...";
    return [null, null, msg, null, null]
}

// Data Padrão
var DataPadrao = new Date(2010,10,10,10,10,10);

// Verificação diária de objetos entregues p/ remoção
if (msg.inativos == true)
{
    var tamanho = Object.keys(msg.payload).length;
    if (tamanho == 0) return
    if (msg.payload.eventos[0].status == "Objeto entregue ao destinatário" || msg.payload.eventos[0].status.includes("entregue"))
    {
        var nome = msg.nome
        msg = {}
        msg.adicionar = false
        msg.inativos = true
        msg.objeto = nome
        msg.nome = nome
        return [null, msg, null, null, null]
    } else return
}

// Ainda não tem dados
if (msg.payload.quantidade == 0)
{
    // Se for a primeira leitura ou pediu para resetar
    if (Date.parse(msg.ultimaAtualizacao) == Date.parse(DataPadrao) || msg.resetar == true || msg.detalhes == true)
    {
        // Aguardando
        msg.mensagem = msg.mensagem + "📦 " + msg.nome + " (" + msg.objeto + ") \n";
        msg.mensagem = msg.mensagem + "⏰ Aguardando atualizações do objeto"
        msg.ultimaAtualizacao = new Date();
        
        // Marca que tem atualização
        msg.atualizado = true;
        return [msg, null, null, null, null];
    }
    else
    {
        msg.mensagem = msg.mensagem + "⏰ Sem Atualização " + msg.nome;
        msg.atualizado = false;
        return [null, null, null, null, msg];
    }
}

//      
// Se tiver dados, continua
//

// Lê a última data de atualização
var data = msg.payload.eventos[0].data;
var horas = msg.payload.eventos[0].hora;
var ano = data.split("/")[2]
var mes = data.split("/")[1] - 1
var dia = data.split("/")[0]
var hora = horas.split(":")[0]
var minuto = horas.split(":")[1]
var ultimaAtualizacaoCorreios = new Date(ano,mes,dia,hora,minuto,0);
msg.ultimaAtualizacaoCorreios = ultimaAtualizacaoCorreios;

// Verifica se a última atualização dos correios é maior que a da memória
if (Date.parse(msg.ultimaAtualizacaoCorreios) > Date.parse(msg.ultimaAtualizacao) || msg.resetar == true || msg.detalhes == true)
{
    var atts = 0
    var enter = ""
    var single = ""
    if (msg.resumo == true)
    {
        atts = 99
        if (((msg.payload.eventos.length) - 1) < atts)
        {
            atts = (msg.payload.eventos.length) - 1
        }
        single = "\n"
        enter = "\n\n"
    }
    if (msg.resetar !== true && msg.detalhes !== true)
    {
        msg.mensagem = msg.mensagem + "🔻 **Atualização de pacote** 🔻\n\n"
    }
    msg.mensagem = msg.mensagem + "📦 " + msg.nome + " (" + msg.objeto + ')\n' + single;
    for (h = 0; h <= atts; h++)
    {
    
        if (msg.payload.eventos[h].status.toUpperCase().includes("PAGAMENTO"))
        {
            msg.mensagem = msg.mensagem + "💸 Objeto Tributado, " + msg.payload.eventos[h].status;
        }
        else
        {
            msg.mensagem = msg.mensagem + "📌 " + msg.payload.eventos[h].status;
        }

    msg.mensagem = msg.mensagem + "\n📆 " + msg.payload.eventos[h].data + " ⏰ " + msg.payload.eventos[h].hora + '\n';
    
   if (msg.payload.eventos[h].status.toUpperCase().includes("POSTADO") || msg.payload.eventos[h].status.toUpperCase().includes("DESTINATÁRIO") || msg.payload.eventos[h].status.toUpperCase().includes("CORREIOS") || msg.payload.eventos[h].status.toUpperCase().includes("FISCALIZAÇÃO") || msg.payload.eventos[h].status.toUpperCase().includes("PAGAMENTO"))
    {
        msg.mensagem = msg.mensagem + "📍 " + msg.payload.eventos[h].local + enter;
        if ((msg.payload.eventos[h].status == "Objeto saiu para entrega ao destinatário" || msg.payload.eventos[h].status.includes("ntrega")) && msg.resetar !== true && msg.detalhes !== true)
        {
            node.send([null, null, null, msg, null])
        }
    }
    else 
    {
            for (i = 0; i < msg.payload.eventos[h].subStatus.length; i++)
            {
                var re = "->"
                var substatus = msg.payload.eventos[h].subStatus[i]
                var resultado = substatus.split(re)
                if (!resultado[1]) {
                    substatus = msg.payload.eventos[h].subStatus
                    msg.mensagem = msg.mensagem + "📤 " + substatus[0] + '\n';
                    msg.mensagem = msg.mensagem + "📥 " + substatus[1] + enter;
                    break
                } else {
                    let distrib = resultado[1].replace(/Distribui��o/i, 'Distribuição')
                    msg.mensagem = msg.mensagem + "📤 " + resultado[0] + '\n';
                    msg.mensagem = msg.mensagem + "📥 " + distrib + enter;
                }
            }
        }
    }

    // Marca que tem atualização
    msg.atualizacaoAnterior = msg.ultimaAtualizacao;
    msg.ultimaAtualizacao = msg.ultimaAtualizacaoCorreios;
    msg.leituraRealizada = true;
    
    msg.atualizado = true;
    return [msg, null, null, null, null];
}
else
{
    msg.mensagem = msg.mensagem + "⏰ Sem Atualização " + msg.nome;
    msg.atualizado = false;
    return [null, null, null, null, msg];
}

Novas atualizações 26/07/2021

Após umas dicas do @badwolf e depois de compartilhar o projeto com o @otomai que fez uma contribuição incrível em tudo, segue uma nova versão com muitas melhorias, totalmente integrada ao Telegram agora.

O projeto é uma integração do sistema de rastreamento dos correios, inteiramente dentro no Node-red, você pode utilizar com automações, avisos na Alexa, Google Home, Telegram etc.

É baseado em uma api publica do site linketrack

Link & Track → Rastreamento de Encomendas dos Correios (linketrack.com)

O fluxo é o seguinte:

[{"id":"102aab2a.e4c445","type":"tab","label":"Correios","disabled":false,"info":""},{"id":"bf1dd55b.a76b18","type":"group","z":"102aab2a.e4c445","name":"Verifica objetos","style":{"fill":"#ffffbf","label":true,"stroke":"#ffff00"},"nodes":["f0db72fc.11c73","aa557d1.d114e8","9de73acf.94de78","ba71d85a.ad8ba8","293ca4b.07e2a5c","edd32aaa.74f668","6a2ff30b.7498ec","47353582.4c2a4c","59ddf8ea.3473f8","49dcb8af.1f1888","3bcb9858.59d468","ca27bf70.97255","da3c6657.c636f8","f3efc5c7.f439e8","cdc633c8.5d42e","1ca30250.d1296e","e950a149.3bb91","dcdc5e52.8232c","c452d7e3.f81138","bc9e1b48.649ef8","a671a7bd.d43d08","3f44664c.186b5a","74b0d9db.95f898","a6671fdb.80a43","48390d36.950bd4","41ee9760.1ff678","6820f8c4.86aba8","4d59e8c9.e1cd68","a4816304.4c41e","52bce12.626712","eb7440e1.c2e1c","16f66efb.851ff1","fcf146f0.ebd018","3d14f0ef.2d59f","1b41ae27.22fa02","51604cb9.2f2b24","8443064f.437c88","35bd9a9d.045686","50fe2abb.9361f4","bb22fb88.c88168","20376ee0.ea7452","36675999.496e56","6a205e0.0a5e3a4","8d08a95f.3d8158","6690f237.e234ac","8b796b25.2bdaa8","7b866d44.027b84","626617af.35f7a8"],"x":14,"y":359,"w":2432,"h":622},{"id":"e0603566.fa85c8","type":"group","z":"102aab2a.e4c445","name":"Adicionar Remover Objeto","style":{"stroke":"#ff0000","fill":"#ffbfbf","label":true},"nodes":["174626b6.13a9d9","d6ddeefd.35b48","e3cc0844.cb75d8","678296a5.bf52b8","4d45f392.c9189c","3bfcda23.3b57e6","7323b40b.c22a1c","26c6a6dd.0d125a","9cc9ed92.bce18","12138951.272ae7","b549b517.0b6eb8","a6a3f9bc.b1e218","6a34f8f4.534608","5161013c.9b6b4","26b49442.4566fc"],"x":14,"y":1039,"w":1172,"h":222},{"id":"f2cead29.8a88e","type":"group","z":"102aab2a.e4c445","name":"Telegram => Comandos | Output","style":{"fill":"#c8e7a7","label":true},"nodes":["6e87b585.fc165c","1232a8f4.2b9aa7","bd699583.fc03b8","c38034d9.f33c18","b86ff78d.546328","32325494.8921dc","82e72011.f2a53","d03056c1.fac3b8","89bcab5.908ea58","aa546ee6.54e91","bddf743e.6322c8","1a7bac1c.c6fea4","b98e3e3c.9bdd5","1b6f36db.f32549","80cc10ca.2c6b1"],"x":14,"y":19,"w":652,"h":277},{"id":"174626b6.13a9d9","type":"file","z":"102aab2a.e4c445","g":"e0603566.fa85c8","name":"Salva no arquivo","filename":"/config/node-red/objetos_correios.json","appendNewline":true,"createDir":false,"overwriteFile":"true","encoding":"none","x":1070,"y":1100,"wires":[[]]},{"id":"d6ddeefd.35b48","type":"json","z":"102aab2a.e4c445","g":"e0603566.fa85c8","name":"","property":"payload","action":"","pretty":false,"x":910,"y":1100,"wires":[["174626b6.13a9d9"]]},{"id":"e3cc0844.cb75d8","type":"function","z":"102aab2a.e4c445","g":"e0603566.fa85c8","name":"Altera Dado","func":"var tamanho = Object.keys(msg.payload).length;\n  \nif (msg.adicionar == true)\n{\n    for (i = 0; i<tamanho; i++)\n    {\n        if (msg.payload[i].objeto.toUpperCase() == msg.objeto.toUpperCase() || msg.payload[i].nome.toUpperCase() == msg.nome.toUpperCase())\n        {\n            msg = {}\n            msg.payload = {}\n            msg.payload.content = \"❌ Objeto já cadastrado!\";\n            return [null, null, msg];\n        }\n    }\n    \n    msg.payload[tamanho] = {};\n    msg.payload[tamanho].objeto = msg.objeto;\n    msg.payload[tamanho].nome = msg.nome;\n    msg.payload[tamanho].ultimaAtualizacao = msg.ultimaAtualizacao;\n    \n    msg2 = {}\n    msg2.payload = {}\n    msg2.payload.content = \"✅ Objeto \"  + msg.nome + \" cadastrado com sucesso!\"\n    msg2.detalhes = true;\n    msg2.nomeobj = msg.nome\n    node.send([null, null, msg2]);\n    node.send([null, msg2, null])\n}\nelse\n{\n    if (!msg.objeto || !msg.nome)\n    {\n        msg.payload.content = \"❌ Objeto ou formato inválido!\\n📍 Use \\\"/del código (ou nome)\\\"\\n✏️ /del Luva de frio\\n✏️ /del OP012345678BR\";\n        return [null, null, msg];\n    }\n    var numObjetos = tamanho;\n    payloadOld = msg.payload;\n    msg.payload = {};\n    indice = 0;\n    if (msg.objeto != undefined)\n    {\n        for (i=0; i<tamanho; i++)\n        {\n            if((payloadOld[i].objeto.toUpperCase() != msg.objeto.toUpperCase()) && (payloadOld[i].nome.toUpperCase() != msg.nome.toUpperCase()))\n            {\n                msg.payload[indice] = {};\n                msg.payload[indice].nome = payloadOld[i].nome;\n                msg.payload[indice].objeto = payloadOld[i].objeto;\n                msg.payload[indice].ultimaAtualizacao = payloadOld[i].ultimaAtualizacao;\n                indice = indice + 1;\n            }\n            else\n            {\n                var objetoremovido = `${payloadOld[i].nome} (${payloadOld[i].objeto})`\n            }\n        }\n    }\n    if (msg.inativos == true) {return msg}\n    else\n    {\n        tamanho = Object.keys(msg.payload).length;\n        var objetosRemovidos = numObjetos - tamanho;\n        msg2 = {}\n        msg2.payload = {}\n        if (objetosRemovidos === 0) {\n            msg2.payload.content = \"❌ Objeto não localizado!\"\n        }\n        else\n        {\n            msg2.payload.content = `✅ Objeto ${objetoremovido} removido com sucesso!`\n        }\n        node.send([null, null, msg2]);\n    }\n}\nreturn msg;","outputs":3,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":1160,"wires":[["d6ddeefd.35b48"],["26b49442.4566fc"],["26c6a6dd.0d125a"]]},{"id":"678296a5.bf52b8","type":"json","z":"102aab2a.e4c445","g":"e0603566.fa85c8","name":"","property":"payload","action":"","pretty":false,"x":610,"y":1160,"wires":[["e3cc0844.cb75d8"]]},{"id":"4d45f392.c9189c","type":"file in","z":"102aab2a.e4c445","g":"e0603566.fa85c8","name":"Lê Arquivo","filename":"/config/node-red/objetos_correios.json","format":"utf8","chunk":false,"sendError":false,"encoding":"none","x":450,"y":1160,"wires":[["678296a5.bf52b8"]]},{"id":"3bfcda23.3b57e6","type":"link in","z":"102aab2a.e4c445","g":"e0603566.fa85c8","name":"Remover Objeto Correios","links":["8b796b25.2bdaa8","b86ff78d.546328"],"x":315,"y":1220,"wires":[["4d45f392.c9189c"]]},{"id":"7323b40b.c22a1c","type":"link in","z":"102aab2a.e4c445","g":"e0603566.fa85c8","name":"Adicionar Objeto Correios","links":["c38034d9.f33c18"],"x":135,"y":1080,"wires":[["9cc9ed92.bce18"]]},{"id":"26c6a6dd.0d125a","type":"link out","z":"102aab2a.e4c445","g":"e0603566.fa85c8","name":"Para Telegram","links":["89bcab5.908ea58"],"x":875,"y":1220,"wires":[]},{"id":"9cc9ed92.bce18","type":"function","z":"102aab2a.e4c445","g":"e0603566.fa85c8","name":"Valida o Objeto","func":"msg2 = {}\nmsg2.payload = {}\nmsg2.payload.content = \"❌ Objeto ou formato inválido!\\n📍 Use \\\"/add código nome do pacote\\\"\\n✏️ /add OP012345678BR Luva de frio\"; \n if (!msg.objeto || !msg.nome)\n {\n     return([msg2, null]);\n }\n \n// Não tem 13 caracteres\nif (msg.objeto.length != 13)\n{\n    return([msg2, null]);\n}\n\n// Separa o código em partes\nvar tipo = msg.objeto.substr(0,2)\nvar numero = msg.objeto.substr(2,9)\nvar pais = msg.objeto.substr(11,12)\n\n// Tipo\nif (!tipo.match(\"^[a-zA-Z]+$\"))\n{\n    msg2.payload.content = \"❌ \" + msg2.payload.content + \" Erro no tipo!\";\n    return([msg2, null]);\n}\n\n// Número\nif (!numero.match(\"^[0-9]+$\"))\n{\n    msg2.payload.content = \"❌ \" + msg2.payload.content + \" Erro nos números!\";\n    return([msg2, null]);\n}\n\n// Pais\nif (!pais.match(\"^[a-zA-Z]+$\"))\n{\n    msg2.payload.content = \"❌ \" + msg2.payload.content + \" Erro no país!\";\n    return([msg2, null]);\n}\n\nreturn [null, msg];","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":260,"y":1080,"wires":[["12138951.272ae7"],["4d45f392.c9189c"]]},{"id":"12138951.272ae7","type":"link out","z":"102aab2a.e4c445","g":"e0603566.fa85c8","name":"Para Telegram","links":["89bcab5.908ea58"],"x":395,"y":1080,"wires":[]},{"id":"b549b517.0b6eb8","type":"function","z":"102aab2a.e4c445","g":"e0603566.fa85c8","name":"Adicionar","func":"// NÓ DE TESTE! NÃO AFETADO PELOS COMANDOS NO TELEGRAM! //\n\nmsg = {};\nmsg.adicionar = true;\nmsg.nome = \"Balizadorteste\";\nmsg.objeto = \"QF643958646BR\"\nmsg.leituraRealizada = false;\nmsg.ultimaAtualizacao = new Date(2010,10,10,10,10,10); // Data padrão, de cadastro\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":280,"y":1140,"wires":[["4d45f392.c9189c"]]},{"id":"a6a3f9bc.b1e218","type":"function","z":"102aab2a.e4c445","g":"e0603566.fa85c8","name":"Remover","func":"// NÓ DE TESTE! NÃO AFETADO PELOS COMANDOS NO TELEGRAM! //\n\nmsg = {};\nmsg.adicionar = false;\nmsg.objeto = \"Hidrômetro_2\";\nmsg.nome = \"Hidrômetro_2\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":280,"y":1180,"wires":[["4d45f392.c9189c"]]},{"id":"6a34f8f4.534608","type":"inject","z":"102aab2a.e4c445","g":"e0603566.fa85c8","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":120,"y":1180,"wires":[["a6a3f9bc.b1e218"]]},{"id":"5161013c.9b6b4","type":"inject","z":"102aab2a.e4c445","g":"e0603566.fa85c8","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":120,"y":1140,"wires":[["b549b517.0b6eb8"]]},{"id":"6e87b585.fc165c","type":"telegrambot-command","z":"102aab2a.e4c445","g":"f2cead29.8a88e","name":"/add","bot":"","command":"/add","commandType":"re","commandCase":false,"x":90,"y":60,"wires":[["aa546ee6.54e91"]]},{"id":"1232a8f4.2b9aa7","type":"telegrambot-command","z":"102aab2a.e4c445","g":"f2cead29.8a88e","name":"/del","bot":"","command":"/del","commandType":"re","commandCase":false,"x":90,"y":100,"wires":[["1a7bac1c.c6fea4"]]},{"id":"bd699583.fc03b8","type":"telegrambot-command","z":"102aab2a.e4c445","g":"f2cead29.8a88e","name":"/detalhes","bot":"","command":"/detalhes","commandType":"re","commandCase":false,"x":100,"y":140,"wires":[["1b6f36db.f32549"]]},{"id":"c38034d9.f33c18","type":"link out","z":"102aab2a.e4c445","g":"f2cead29.8a88e","name":"add","links":["7323b40b.c22a1c"],"x":315,"y":60,"wires":[]},{"id":"b86ff78d.546328","type":"link out","z":"102aab2a.e4c445","g":"f2cead29.8a88e","name":"del","links":["3bfcda23.3b57e6"],"x":315,"y":100,"wires":[]},{"id":"32325494.8921dc","type":"link out","z":"102aab2a.e4c445","g":"f2cead29.8a88e","name":"lista","links":["da3c6657.c636f8"],"x":315,"y":180,"wires":[]},{"id":"82e72011.f2a53","type":"link out","z":"102aab2a.e4c445","g":"f2cead29.8a88e","name":"reset","links":["edd32aaa.74f668"],"x":315,"y":220,"wires":[]},{"id":"d03056c1.fac3b8","type":"telegrambot-notify","z":"102aab2a.e4c445","g":"f2cead29.8a88e","name":"Msg","bot":"","chatId":"123456789","message":"","parseMode":"Markdown","x":590,"y":60,"wires":[]},{"id":"89bcab5.908ea58","type":"link in","z":"102aab2a.e4c445","g":"f2cead29.8a88e","name":"Msg","links":["12138951.272ae7","26c6a6dd.0d125a","d2603ff3.98c26","ca27bf70.97255","dcdc5e52.8232c","eb7440e1.c2e1c","10b480ea.5b43ef","ea6137ac.3b8058","cc5ba967.5819a8","51604cb9.2f2b24","24cff8b7.e85498","8d08a95f.3d8158"],"x":355,"y":60,"wires":[["bddf743e.6322c8"]]},{"id":"aa546ee6.54e91","type":"function","z":"102aab2a.e4c445","g":"f2cead29.8a88e","name":"Adicionar","func":"msg.args = msg.telegram.text.slice(0).trim().split(/ +/g);\nmsg.adicionar = true;\nmsg.objeto = msg.args[1]\nmsg.args.splice(0, 2)\nmsg.nome = msg.args.join(\" \")\nmsg.leituraRealizada = false;\nmsg.ultimaAtualizacao = new Date(2010,10,10,10,10,10); // Data padrão, de cadastro\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":220,"y":60,"wires":[["c38034d9.f33c18"]]},{"id":"bddf743e.6322c8","type":"function","z":"102aab2a.e4c445","g":"f2cead29.8a88e","name":"Variável","func":"msg.payload = msg.payload.content\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":460,"y":60,"wires":[["d03056c1.fac3b8"]]},{"id":"1a7bac1c.c6fea4","type":"function","z":"102aab2a.e4c445","g":"f2cead29.8a88e","name":"Remover","func":"msg.args = msg.telegram.text.slice(0).trim().split(/ +/g);\nmsg.adicionar = false;\nmsg.args.splice(0, 1)\nmsg.nome = msg.args.join(\" \")\nmsg.objeto = msg.args.join(\" \")\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":220,"y":100,"wires":[["b86ff78d.546328"]]},{"id":"b98e3e3c.9bdd5","type":"telegrambot-switch","z":"102aab2a.e4c445","g":"f2cead29.8a88e","name":"Detalhes","bot":"","chatId":"","question":"","answers":["Lista","Status","Dispensar"],"outputs":4,"autoAnswerCallback":true,"verticalAnswers":false,"timeoutValue":"30","timeoutUnits":"s","x":100,"y":240,"wires":[["32325494.8921dc"],["82e72011.f2a53"],[],[]]},{"id":"1b6f36db.f32549","type":"function","z":"102aab2a.e4c445","g":"f2cead29.8a88e","name":"Variável","func":"msg.args = msg.telegram.text.slice(0).trim().split(/ +/g);\nif (msg.args[0] == \"/detalhes+\")\n{\n    msg.resumo = true\n}\nif (msg.args[1]) {\nmsg.detalhes = true;\nmsg.args.splice(0, 1)\nmsg.nomeobj = msg.args.join(\" \")\nreturn [msg, null];\n} else {\nmsg.payload = \"🚩 Escolha a opção desejada!\\n🚩 Para consultar um objeto específico você também pode usar \\\"/detalhes nome (ou número)\\\"\\n✏️ /detalhes Luva de frio\\n✏️ /detalhes OP012345678BR\"\nreturn [null, msg];\n}","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":100,"y":185,"wires":[["80cc10ca.2c6b1"],["b98e3e3c.9bdd5"]]},{"id":"80cc10ca.2c6b1","type":"link out","z":"102aab2a.e4c445","g":"f2cead29.8a88e","name":"Dets","links":["52bce12.626712"],"x":315,"y":140,"wires":[]},{"id":"26b49442.4566fc","type":"link out","z":"102aab2a.e4c445","g":"e0603566.fa85c8","name":"Para Detalhes","links":["52bce12.626712"],"x":875,"y":1160,"wires":[]},{"id":"1d8b787f.5efb58","type":"comment","z":"102aab2a.e4c445","name":"Só atualize os nós do TELEGRAM à esquerda, colocando o seu bot na seleção. E o ALEXA TTS na grupo abaixo.","info":"","x":1060,"y":120,"wires":[]},{"id":"3cf091a5.84f28e","type":"comment","z":"102aab2a.e4c445","name":"Demais nós / fluxos / grupos dispensam / não necessitam nenhuma configuração.","info":"","x":960,"y":160,"wires":[]},{"id":"2ef8f2d7.a9540e","type":"comment","z":"102aab2a.e4c445","name":"Só faça alterações se tiver certeza e entedimento do que está fazendo. Há riscos.","info":"","x":960,"y":200,"wires":[]},{"id":"f0db72fc.11c73","type":"function","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Último URL","func":"var url = \"https://api.linketrack.com/track/json?user=teste&token=1abcd00b2731640e886fb41a8a9671ad1434c599dbaa0a0de9a5aa619f29a83f&codigo=\" \nmsg.url = url + msg.objeto;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":890,"y":760,"wires":[["9de73acf.94de78"]]},{"id":"aa557d1.d114e8","type":"www-request","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Lê informações","method":"GET","ret":"obj","url":"","follow-redirects":true,"persistent-http":true,"tls":"","x":1240,"y":680,"wires":[["e950a149.3bb91","7b866d44.027b84"]]},{"id":"9de73acf.94de78","type":"delay","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"","pauseType":"rate","timeout":"4","timeoutUnits":"seconds","rate":"1","nbRateUnits":"7","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1060,"y":680,"wires":[["aa557d1.d114e8"]]},{"id":"ba71d85a.ad8ba8","type":"inject","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Resetar","props":[{"p":"payload.chatId","v":"664449565","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":110,"y":640,"wires":[["6a2ff30b.7498ec"]]},{"id":"293ca4b.07e2a5c","type":"inject","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"","props":[{"p":"payload"}],"repeat":"300","crontab":"","once":true,"onceDelay":"120","topic":"","payload":"Check","payloadType":"str","x":120,"y":680,"wires":[["47353582.4c2a4c"]]},{"id":"edd32aaa.74f668","type":"link in","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Resetar Objetos Correios","links":["82e72011.f2a53"],"x":195,"y":600,"wires":[["6a2ff30b.7498ec"]]},{"id":"6a2ff30b.7498ec","type":"function","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Resetar","func":"msg = {};\nmsg.resetar = true;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":260,"y":640,"wires":[["47353582.4c2a4c"]]},{"id":"47353582.4c2a4c","type":"file in","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Lê Arquivo","filename":"/config/node-red/objetos_correios.json","format":"utf8","chunk":false,"sendError":false,"encoding":"none","x":430,"y":680,"wires":[["59ddf8ea.3473f8"]]},{"id":"59ddf8ea.3473f8","type":"json","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"","property":"payload","action":"","pretty":false,"x":570,"y":680,"wires":[["49dcb8af.1f1888"]]},{"id":"49dcb8af.1f1888","type":"function","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Separa Objetos","func":"var tamanho = Object.keys(msg.payload).length;\nvar msgInput = msg.payload;\nmsg.msgInput = msg.payload;\n\nif (msg.listar == true)\n{\n    msg = {};\n    msg.payload = \"\";\n    \n    if (tamanho > 0)\n    {\n        for (i = 0; i<tamanho; i++)\n        {\n            msg.payload = msg.payload + \"📦 \" +  msgInput[i].nome + \" (\" + msgInput[i].objeto + \")\\n\"\n        }\n        \n        msg.payload = msg.payload.slice(0, msg.payload.length-1);\n    }\n    else\n    {\n        msg.payload = \"❌ Nenhum objeto cadastrado\";\n    }\n    \n    return [msg, null]\n}\nif (msg.detalhes == true) {\n    var checarobj = 0\n    if (msg.resumo == true)\n    {\n        var resumo = true\n    }\n    for (i = 0; i<tamanho; i++)\n{\n    if (msgInput[i].objeto.toUpperCase() == msg.nomeobj.toUpperCase() || msgInput[i].nome.toUpperCase() == msg.nomeobj.toUpperCase())\n    {\n        checarobj++\n        msg = {};\n        msg.nome = msgInput[i].nome;\n        msg.objeto = msgInput[i].objeto;\n        msg.detalhes = true;\n        if (resumo == true) {\n          msg.resumo = true  \n        }\n        msg.ultimaAtualizacao = msgInput[i].ultimaAtualizacao;\n        return [null, msg]; \n    }\n}\nif (checarobj === 0) {\n    msg.payload = \"❌ Objeto não localizado!\\n📍 Use \\\"/detalhes código (ou nome)\\\"\\n✏️ /detalhes Luva de frio\\n✏️ /detalhes OP012345678BR\";\n    return [msg, null]\n}\n}\n    for (i = 0; i<tamanho; i++)\n    {\n        msg.nome = msgInput[i].nome;\n        msg.objeto = msgInput[i].objeto;\n        if (msg.resetar == true)\n        {\n            msg.resetar = true\n        }\n        msg.ultimaAtualizacao = msgInput[i].ultimaAtualizacao;\n        node.send([null, msg]);   \n    }","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":720,"y":680,"wires":[["3bcb9858.59d468"],["f0db72fc.11c73","50fe2abb.9361f4"]]},{"id":"3bcb9858.59d468","type":"function","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Telegram","func":"var mensagem = msg.payload\n\nmsg.payload = {}\nmsg.payload.content = mensagem\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":880,"y":600,"wires":[["ca27bf70.97255"]]},{"id":"ca27bf70.97255","type":"link out","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Para Telegram","links":["89bcab5.908ea58"],"x":975,"y":600,"wires":[]},{"id":"da3c6657.c636f8","type":"link in","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Listar Objetos Correios","links":["32325494.8921dc"],"x":75,"y":600,"wires":[["f3efc5c7.f439e8"]]},{"id":"f3efc5c7.f439e8","type":"function","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Cadastrados","func":"msg = {};\nmsg.listar = true;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":250,"y":720,"wires":[["47353582.4c2a4c"]]},{"id":"cdc633c8.5d42e","type":"inject","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Listar","props":[{"p":"payload.chatId","v":"664449565","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":110,"y":720,"wires":[["f3efc5c7.f439e8"]]},{"id":"1ca30250.d1296e","type":"debug","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Atualização","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1610,"y":400,"wires":[]},{"id":"e950a149.3bb91","type":"function","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"","func":"// Monta a mensagem\nmsg.mensagem = \"\";\n\n// Erro na leitura da mensagem\nif (msg.headers[\"content-type\"] != \"application/json; charset=utf-8\" || msg.payload.quantidade == undefined) {\n    msg.mensagem = msg.mensagem + \"❌ Erro ao ler dados de \" + msg.nome + \". Tentando novamente...\";\n    return [null, null, msg, null, null]\n}\n\n// Data Padrão\nvar DataPadrao = new Date(2010,10,10,10,10,10);\n\n// Verificação diária de objetos entregues p/ remoção\nif (msg.inativos == true)\n{\n    var tamanho = Object.keys(msg.payload).length;\n    if (tamanho == 0) return\n    if (msg.payload.eventos[0].status == \"Objeto entregue ao destinatário\" || msg.payload.eventos[0].status.includes(\"entregue\"))\n    {\n        var nome = msg.nome\n        msg = {}\n        msg.adicionar = false\n        msg.inativos = true\n        msg.objeto = nome\n        msg.nome = nome\n        return [null, msg, null, null, null]\n    } else return\n}\n\n// Ainda não tem dados\nif (msg.payload.quantidade == 0)\n{\n    // Se for a primeira leitura ou pediu para resetar\n    if (Date.parse(msg.ultimaAtualizacao) == Date.parse(DataPadrao) || msg.resetar == true || msg.detalhes == true)\n    {\n        // Aguardando\n        msg.mensagem = msg.mensagem + \"📦 \" + msg.nome + \" (\" + msg.objeto + \") \\n\";\n        msg.mensagem = msg.mensagem + \"⏰ Aguardando atualizações do objeto\"\n        msg.ultimaAtualizacao = new Date();\n        \n        // Marca que tem atualização\n        msg.atualizado = true;\n        return [msg, null, null, null, null];\n    }\n    else\n    {\n        msg.mensagem = msg.mensagem + \"⏰ Sem Atualização \" + msg.nome;\n        msg.atualizado = false;\n        return [null, null, null, null, msg];\n    }\n}\n\n//      \n// Se tiver dados, continua\n//\n\n// Lê a última data de atualização\nvar data = msg.payload.eventos[0].data;\nvar horas = msg.payload.eventos[0].hora;\nvar ano = data.split(\"/\")[2]\nvar mes = data.split(\"/\")[1] - 1\nvar dia = data.split(\"/\")[0]\nvar hora = horas.split(\":\")[0]\nvar minuto = horas.split(\":\")[1]\nvar ultimaAtualizacaoCorreios = new Date(ano,mes,dia,hora,minuto,0);\nmsg.ultimaAtualizacaoCorreios = ultimaAtualizacaoCorreios;\n\n// Verifica se a última atualização dos correios é maior que a da memória\nif (Date.parse(msg.ultimaAtualizacaoCorreios) > Date.parse(msg.ultimaAtualizacao) || msg.resetar == true || msg.detalhes == true)\n{\n    var atts = 0\n    var enter = \"\"\n    var single = \"\"\n    if (msg.resumo == true)\n    {\n        atts = 2\n        if (((msg.payload.eventos.length) - 1) < atts)\n        {\n            atts = (msg.payload.eventos.length) - 1\n        }\n        single = \"\\n\"\n        enter = \"\\n\\n\"\n    }\n    if (msg.resetar !== true && msg.detalhes !== true)\n    {\n        msg.mensagem = msg.mensagem + \"🔻 **Atualização de pacote** 🔻\\n\\n\"\n    }\n    msg.mensagem = msg.mensagem + \"📦 \" + msg.nome + \" (\" + msg.objeto + ')\\n' + single;\n    for (h = 0; h <= atts; h++)\n    {\n    msg.mensagem = msg.mensagem + \"📌 \" + msg.payload.eventos[h].status;\n    msg.mensagem = msg.mensagem + \"\\n📆 \" + msg.payload.eventos[h].data + \" ⏰ \" + msg.payload.eventos[h].hora + '\\n';\n    \n    if (msg.payload.eventos[h].status.toUpperCase().includes(\"POSTADO\") || msg.payload.eventos[h].status.toUpperCase().includes(\"DESTINATÁRIO\") || msg.payload.eventos[h].status.toUpperCase().includes(\"CORREIOS\") || msg.payload.eventos[h].status.toUpperCase().includes(\"FISCALIZAÇÃO\"))\n    {\n        msg.mensagem = msg.mensagem + \"📍 \" + msg.payload.eventos[h].local + enter;\n        if ((msg.payload.eventos[h].status == \"Objeto saiu para entrega ao destinatário\" || msg.payload.eventos[h].status.includes(\"ntrega\")) && msg.resetar !== true && msg.detalhes !== true)\n        {\n            node.send([null, null, null, msg, null])\n        }\n    }\n    else \n    {\n            for (i = 0; i < msg.payload.eventos[h].subStatus.length; i++)\n            {\n                var re = \"->\"\n                var substatus = msg.payload.eventos[h].subStatus[i]\n                var resultado = substatus.split(re)\n                if (!resultado[1]) {\n                    substatus = msg.payload.eventos[h].subStatus\n                    msg.mensagem = msg.mensagem + \"📤 \" + substatus[0] + '\\n';\n                    msg.mensagem = msg.mensagem + \"📥 \" + substatus[1] + enter;\n                    break\n                } else {\n                    let distrib = resultado[1].replace(/Distribui��o/i, 'Distribuição')\n                    msg.mensagem = msg.mensagem + \"📤 \" + resultado[0] + '\\n';\n                    msg.mensagem = msg.mensagem + \"📥 \" + distrib + enter;\n                }\n            }\n        }\n    }\n\n    // Marca que tem atualização\n    msg.atualizacaoAnterior = msg.ultimaAtualizacao;\n    msg.ultimaAtualizacao = msg.ultimaAtualizacaoCorreios;\n    msg.leituraRealizada = true;\n    \n    msg.atualizado = true;\n    return [msg, null, null, null, null];\n}\nelse\n{\n    msg.mensagem = msg.mensagem + \"⏰ Sem Atualização \" + msg.nome;\n    msg.atualizado = false;\n    return [null, null, null, null, msg];\n}","outputs":5,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1400,"y":680,"wires":[["1ca30250.d1296e","bc9e1b48.649ef8","a6671fdb.80a43"],["3d14f0ef.2d59f","20376ee0.ea7452"],["c452d7e3.f81138","16f66efb.851ff1","8443064f.437c88"],["48390d36.950bd4","4d59e8c9.e1cd68"],["36675999.496e56"]]},{"id":"dcdc5e52.8232c","type":"link out","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Para Telegram","links":["89bcab5.908ea58"],"x":1695,"y":480,"wires":[]},{"id":"c452d7e3.f81138","type":"debug","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Erro","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1590,"y":640,"wires":[]},{"id":"bc9e1b48.649ef8","type":"function","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Telegram","func":"var mensagem = msg.mensagem;\n\nmsg.payload = {}\nmsg.payload.content = mensagem\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1600,"y":480,"wires":[["dcdc5e52.8232c"]]},{"id":"a671a7bd.d43d08","type":"function","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Update","func":"msgOut = {};\nmsgOut.payload = {};\n\nvar tamanho = Object.keys(msg.payload).length;\nmsg.tamanho = tamanho;\n\nnode.send(msg);\n\n// Atualiza o modificado\nfor (i = 0; i<tamanho; i++)\n{\n    if (msg.payload[i].objeto == msg.objeto)\n    {\n        msg.payload[i].ultimaAtualizacao = msg.ultimaAtualizacao;\n    }\n}\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":2040,"y":440,"wires":[["41ee9760.1ff678"]]},{"id":"3f44664c.186b5a","type":"file in","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Lê Arquivo","filename":"/config/node-red/objetos_correios.json","format":"utf8","chunk":false,"sendError":false,"encoding":"none","x":1770,"y":440,"wires":[["74b0d9db.95f898"]]},{"id":"74b0d9db.95f898","type":"json","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"","property":"payload","action":"","pretty":false,"x":1910,"y":440,"wires":[["a671a7bd.d43d08"]]},{"id":"a6671fdb.80a43","type":"delay","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"","pauseType":"rate","timeout":"4","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1610,"y":440,"wires":[["3f44664c.186b5a"]]},{"id":"48390d36.950bd4","type":"debug","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Saiu para entrega","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1630,"y":740,"wires":[]},{"id":"41ee9760.1ff678","type":"json","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"","property":"payload","action":"","pretty":false,"x":2170,"y":440,"wires":[["6820f8c4.86aba8"]]},{"id":"6820f8c4.86aba8","type":"file","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Salva no arquivo","filename":"/config/node-red/objetos_correios.json","appendNewline":true,"createDir":false,"overwriteFile":"true","encoding":"none","x":2330,"y":440,"wires":[[]]},{"id":"4d59e8c9.e1cd68","type":"function","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Saiu para entrega","func":"msg.payload = \"O objeto \" + msg.nome + \" saiu para entrega\"\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1630,"y":780,"wires":[["a4816304.4c41e"]]},{"id":"a4816304.4c41e","type":"api-call-service","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Alexa TTS","server":"d51d6f43.a17e3","version":3,"debugenabled":false,"service_domain":"notify","service":"alexa_media_echo_dot","entityId":"","data":"{\t   \"message\":msg.payload,\t   \"data\":{\"type\":\"announce\"}\t}","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1890,"y":780,"wires":[[]]},{"id":"52bce12.626712","type":"link in","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Detalhes","links":["80cc10ca.2c6b1","26b49442.4566fc"],"x":305,"y":602,"wires":[["47353582.4c2a4c"]]},{"id":"eb7440e1.c2e1c","type":"link out","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Para Telegram","links":["89bcab5.908ea58"],"x":1695,"y":680,"wires":[]},{"id":"16f66efb.851ff1","type":"function","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Telegram","func":"var mensagem = msg.mensagem;\nif (msg.resetar == true ||  msg.detalhes == true) {\nmsg.payload = {}\nmsg.payload.content = mensagem\nreturn msg;  \n} else {\n    return\n}\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1600,"y":680,"wires":[["eb7440e1.c2e1c"]]},{"id":"fcf146f0.ebd018","type":"function","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Inativos","func":"msg = {};\nmsg.inativos = true;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":260,"y":760,"wires":[["47353582.4c2a4c"]]},{"id":"3d14f0ef.2d59f","type":"delay","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"limit 1 msg/s","pauseType":"rate","timeout":"4","timeoutUnits":"seconds","rate":"1","nbRateUnits":"5","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1610,"y":580,"wires":[["1b41ae27.22fa02","8b796b25.2bdaa8"]]},{"id":"1b41ae27.22fa02","type":"function","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Telegram","func":"var mensagem = `🚩 O objeto ${msg.nome} foi removido devido ao status \"Entregue\"!`\nmsg.payload = {}\nmsg.payload.content = mensagem\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1760,"y":580,"wires":[["51604cb9.2f2b24"]]},{"id":"51604cb9.2f2b24","type":"link out","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Para Telegram","links":["89bcab5.908ea58"],"x":1855,"y":580,"wires":[]},{"id":"8443064f.437c88","type":"counter","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"< 10","init":"0","step":"1","lower":"","upper":"","mode":"increment","outputs":"1","x":1070,"y":760,"wires":[["35bd9a9d.045686"]]},{"id":"35bd9a9d.045686","type":"function","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Limite Erros","func":"// Reset\nif (msg.reset != undefined) return\n\n// Menos de 10 erros\nif (msg.count < 10) return ([msg, null])\n\n// 10 Erros\nif (msg.count == 10) return ([null, msg])\n\n// Mais de 10 erros - Já avisou\nif (msg.count > 10) return","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1230,"y":900,"wires":[["f0db72fc.11c73"],["bb22fb88.c88168","626617af.35f7a8"]]},{"id":"50fe2abb.9361f4","type":"function","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Zera Contador","func":"msg = {}\nmsg.reset = true;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":900,"y":900,"wires":[["8443064f.437c88"]]},{"id":"bb22fb88.c88168","type":"debug","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Erros Acumulados","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1630,"y":900,"wires":[]},{"id":"20376ee0.ea7452","type":"debug","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Remove Concluído","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1630,"y":540,"wires":[]},{"id":"36675999.496e56","type":"debug","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Sem atualização","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1630,"y":840,"wires":[]},{"id":"6a205e0.0a5e3a4","type":"function","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Telegram","func":"msg.payload = {} \nmsg.payload.content = `⚠️ Um ou mais pacotes retornaram muitos erros de verificação!\n⚠️ A atualização foi interrompida temporariamente!\n⚠️ Verifique quais pacotes retornam erros usando /detalhes e selecionando a opção status\n⚠️ Considere removê-los da lista de checagem para evitar maiores problemas!`\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1600,"y":940,"wires":[["8d08a95f.3d8158"]]},{"id":"8d08a95f.3d8158","type":"link out","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Para Telegram","links":["89bcab5.908ea58"],"x":1695,"y":940,"wires":[]},{"id":"6690f237.e234ac","type":"inject","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"00 00 * * *","once":false,"onceDelay":"120","topic":"","payload":"Limpar","payloadType":"str","x":120,"y":760,"wires":[["fcf146f0.ebd018"]]},{"id":"8b796b25.2bdaa8","type":"link out","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"Reset inativos","links":["3bfcda23.3b57e6"],"x":1855,"y":540,"wires":[]},{"id":"7b866d44.027b84","type":"debug","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1340,"y":800,"wires":[]},{"id":"626617af.35f7a8","type":"delay","z":"102aab2a.e4c445","g":"bf1dd55b.a76b18","name":"","pauseType":"rate","timeout":"6","timeoutUnits":"hours","rate":"1","nbRateUnits":"6","rateUnits":"hour","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":1420,"y":940,"wires":[["6a205e0.0a5e3a4"]]},{"id":"d51d6f43.a17e3","type":"server","name":"Home Assistant","version":1,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]

O bot do Telegram utilizado para essa integração foi o node-red-contrib-telegrambot-home. Caso utilize outro, você vai precisar fazer algumas adaptações na parte do Telegram.

Para funcionar corretamente os passos são os seuinte:

1 - Criar um arquivo “objetos_correios.json” na sua pasta config\node-red
{ config\node-red\objetos_correios.json }, com o seguinte conteúdo. Nesse arquivo que vão ficar armazenados os seus pacotes e as atualizações, esse arquivo é um registro vazio.

[]

2 - Editar a parte do boot, que são todos esses nós em azuis referentes ao bot. Deve selecionar o seu bot em cada um deles, sendo que no nó mensagem, deve selecionar o seu chatId também.

image

3 - Ajustar o de envio de notificação de que saiu para entrega para a Alexa “Alexa TTS”. Coloquei apenas um exemplo, caso deseje pode usar essa saída para outras automações, ou apenas deletar esse nó.

image

O bot funciona checando seus pacotes a cada 5min, e enviando as notificações pelo telegram, sempre que tiver uma atualização.

No telegram, os seguintes comando estão disponíveis

/add
/del
/detalhes

Todos são auto explicativos se digitados separadamente
image

Adicionando um objeto:

image

Removendo um obejto:

image

Obtendo detalhes

image

No detalhes, você pode escolher apenas listar seus objetos cadastrados, ou mostrar o útimo status de todos.

  • Usando detalhes+ você traz o histórico completo do objeto.

    detalhes+ Luva de Frio

Mais uma vez agradecimentos ao @badwolf e em especial ao @otomai que a partir de algumas modificações que eu já havia começado, implementou muito mais coisas.

Espero que gostem.

14 curtidas

Obrigado, irei testar.

Gostei bastante da sua ideia e estou implementando algumas modificações que podem ser legais pra galera, pretendo compartilhar aqui em breve. Você reparou que a API aparentemente atualizou de ontem pra hoje? Parece que não existe mais substatus[1] e ç e ã começaram a bugar hahahahah conhece alguma outra API que funciona de forma parecida à versão anterior?

Opa.

O meu está funcionando. Eu também já fiz várias melhorias mas estou ajustando antes de divulgar.

Você está no grupo do telegram? Me chama lá que trocamos umas ideias

Como saber se o meu node-red está configurado desse jeito?

Espera um tempinho que vamos publicar um update aqui com muito mais recursos, e nem vai precisar disso mais. Estamos nos testes finais.

1 curtida

obrigado, ficarei no aguardo, eu coloquei no final um tts, porem me avisa constante mente de alteração sendo que o produto ainda esta no mesmo local. Desativei o tts, mas to com as antigas conf.

Alguma novidade em relação ao update?

Acabei de publicar, espero que gostem.

1 curtida

Muito bom meu amigo @ARafael !

Parabéns a vocês e aos demais envolvidos na criação do tutorial!!!

Parabéns! Ficou show demais! Testado e aprovado!

Parabéns! O projeto ficou ótimo… já utilizava o mesmo em sua primeira versão e achava bastante funcional, com as modificações facilitam muito. Não tenho muito conhecimento no assunto, mas com o “tutorial” foi fácil colocar para rodar.

Fiz as adaptações do Telegram para funcionar comigo. Acredito que por conta de alguma limitação da API as vezes apresenta alguns erros na solicitação de detalhes ou mesmo na atualização. Mas em nenhum momento deixou de ser funcional.

Obrigado amigo.

Nesse caso é limitação da API mesmo. Se ficar muito constante esses erros, você pode tentar aumentar um pouco o tempo de checagem (no injenct), e também no delay de verificação de cada mensagem.

funciona muito bom , o problema 'e a api que le , muitas vezes esta retornando Too Many Requests. Try again in 3575ms

Pessoal consegui resolver o problema dos erros , o link da api com usuário teste tem uma limitação de consultas, por isso retorna o erro. para resolver envie um e-mail para o desenvolvedor Os exemplos abaixo utilizam o usuário teste . Para solicitar um novo usuário e token envie e-mail para api@linketrack.com
assim será gerada um token e usuário so seu sem a limitação do usuário teste

Rafael, onde tem escrito “ntrega” é pra ser assim mesmo ou o correto é “entrega” e o que aconteceu foi um erro de digitação? No mais, parabéns pelo projeto. Estou usando aqui e está perfeito. Melhor que qualquer app de rastreio.

Boa tarde @apingobras,

Cara na verdade não vai fazer diferença, porque ele procura pelo pedaço “ntrega”, então se vier escrito entrega, intrega (rsrs), Xntrega… tudo ele vai achar.

Eu acho que fiz isso, para ele funcionar tanto se vier Entrega, como entrega.

Mas pode deixar assim que vai funcionar

Olá, sou nova aqui e também no mundo do HA, sou totalmente leiga no assunto mas gosto de aprender. Estou tentando executar esse comando mas estou com uma duvida, fiz os passos 1 e 2 mas quando chega no 3 onde pedi pra add o codigo de rastreio no telegram não sei onde fazer. Tentei no BotFather e no meu "nameBot " não deu, poderia me informar como faço isso?

Esse vídeo pode te ajudar entender melhor!

1 curtida

Olá Alesson, muito obrigado pela sua ajuda, eu não estava colocando o token só o nome do meu bot. Ainda não esta rodando perfeitamente pq ta dando “erro ao ler dados”, mas isso já não é problema da automação. Por acaso o seu também da esse erro?

1 curtida