Send Email by Analysis

Send Email by Analysis

Hey guys!

I have this analysis that is being used to trigger an email and an SMS according to the established condition.

It happens that the analysis runs without any errors, but the email or SMS does not arrive.

I have already enabled permissions in access management for analyzes to be able to send.

Can you help me please?

Follow my code and the console.

const { Analysis, Device, Resources, Services, Account, Utils } = require("@tago-io/sdk");

async function notificacoes(context) {
    //AQUI VOCE TERÁ QUE COLOCAR A KEY E O VALUE QUE VOCE IRÁ DEFINIR DENTRO DO SEU DISPOSITIVO NO CAMPO TAGS, LEMBRANDO QUE TODOS ELES TEM QUE TER O MESMO VALOR E CHAVE.
    const filter = {
    tags: [
            {
              key: "DLGG", // key definida no dispositivo
              value: "sensor", // valor da key
            },
          ],
        };
    //AQUI FILTRAREMOS O NOME O ID DOS DISPOSITIVOS ENCONTRADOS COM A MESMA TAG
    const dispositivos  = await Resources.devices.list({
          page: 1,
          fields: ["name","id"],
          filter,
          amount: 100,
        });

    const env_vars = Utils.envToJson(context.environment);
    const account = new Account({ token: env_vars.account_token });
    //AQUI É ONDE SERÁ PEGO O DEVICE_TOKEN PARA TER ACESSO AS VARIAVEIS (NÃO PRECISA MEXER EM NADA)
    for (const my_id of dispositivos) {
      const my_token = await Utils.getTokenByName(account, my_id.id).catch(console.error);
      const device = await new Device({token: my_token});
      const my_email = {
        variable: "email",
        query: "last_item",
      }  //localizando o email

      const my_telefone = {
        variable: "telefone",
        query: "last_item",
      } //localizando o telefone

      const alertas = {
        variable: ["alarme_pluviometro","alarme_hidrometro","alarme_nivel_maximo","alarme_nivel_minimo"],
        query: "last_item"
      } // variaveis dos alertas definidos na analise de alertas

      const dados = {
        variable: ["int0","int1","i1"],
        query: "last_item",
      } //int0: pluviometro, int1: hidrometro, i1: sensor de nível

    //coleta dos dados para análise de envio de notificação e sms
      const device_email = await device.getData(my_email).catch(console.error);
      const device_telefone = await device.getData(my_telefone).catch(console.error);
      const device_alertas = await device.getData(alertas).catch(console.error);
      const device_dados = await device.getData(dados).catch(console.error);

      // Instance the SMS and Email service usando the analysis token from the context.
      const email_service = new Services({ token: device });
      const sms_service = new Services({ token: device });
 
  // COMPARAÇÃO DO PLUVIOMETRO ------------ SE OS DADOS QUE ESTÃO CHEGANDO FOR MAIOR QUE O QUE ESTÁ DEFINIDO NOS ALARMES, SERÁ ENVIADO O EMAIL
  if (device_dados[0].value > device_alertas[0].value) {
    await email_service.email.send({
      to: device_email[0].value,
      subject: `ALERTA MÁXIMO PLUVIÔMETRO COM VALOR DE: ${device_dados[0].value}`,
      message: `Você está recebendo a notificação do dispositivo: ${device}. ALERTA MAXIMO DO PLUVIOMETRO ACIMA DE ${device_alertas[0].value} m³ em ${device_dados[0].time}`,
    }).then(console.log(`email ALERTA PLUVIOMETRO enviado para o dispositivo: ${JSON.stringify(device)} no email: ${device_email[0].value}`)).catch(console.log);

  } else {
    console.log(`SEM ALERTAS PARA ENVIAR DE ${dados.variable[0]}`);
  }

  // COMPARAÇÃO HIDROMETRO

   if (device_dados[1].value > device_alertas[1].value) {
    await email_service.email.send({
      to: device_email[0].value,
      subject: `ALERTA MÁXIMO HIDRÔMETRO COM VALOR DE: ${device_dados[1].value} m³`,
      message: `Você está recebendo a notificação do dispositivo: ${device}. ALERTA MAXIMO DO PLUVIOMETRO ACIMA DE ${device_alertas[1].value} mm em ${device_dados[1].time}`,
    }).then(console.log(`email ALERTA HIDROMETRO enviado para o dispositivo: ${JSON.stringify(device)} no email: ${device_email[0].value}`)).catch(console.log);

  } else {
    console.log(`SEM ALERTAS PARA ENVIAR DE ${dados.variable[1]}`);
  }

  // COMPARAÇÃO NIVEL MÁXIMO

    if (device_dados[2].value > device_alertas[2].value) {
    await email_service.email.send({
      to: device_email[0].value,
      subject: `ALERTA MÁXIMO SENSOR DE NÍVEL COM VALOR DE: ${device_dados[2].value} MCA`,
      message: `Você está recebendo a notificação do dispositivo: ${device}. ALERTA MAXIMO DO SENSOR DE NÍVEL ACIMA DE ${device_alertas[2].value} MCA em ${device_dados[2].time}`,
    }).then(console.log(`email ALERTA NIVEL MAXIMO enviado para o dispositivo: ${JSON.stringify(device)} no email: ${device_email[0].value}`)).catch(console.log);

  } else {
    console.log(`SEM ALERTAS PARA ENVIAR DE ${dados.variable[2]}`);
  }
  context.log(device_dados[2].value);
  // COMPARAÇÃO NIVEL MINIMO

  if (device_dados[2].value < device_alertas[3].value) {
    await email_service.email.send({
      to: device_email[0].value,
      subject: `ALERTA MÍNIMO SENSOR DE NÍVEL COM VALOR DE: ${device_dados[2].value} MCA`,
      message: `Você está recebendo a notificação do dispositivo: ${device}. ALERTA MÍNIMO DO SENSOR DE NÍVEL ABAIXO DE ${device_alertas[3].value} MCA em ${device_dados[2].time}`,
    }).then(console.log(`email ALERTA NIVEL MINIMO enviado para o dispositivo: ${JSON.stringify(device)} no email: ${device_email[0].value}`)).catch(console.log);

  } else {
    console.log(`SEM ALERTAS PARA ENVIAR DE ${dados.variable[2]}`);
  }

  /************************ ENVIO SMS ***************************/

  if (device_dados[2].value < device_alertas[3].value) {
    await sms_service.sms.send({
      to: device_telefone[0].value,
      message: `Você está recebendo a notificação do dispositivo: ${device}. ALERTA MÍNIMO DO SENSOR DE NÍVEL ABAIXO DE ${device_alertas[3].value} MCA em ${device_dados[2].time}`,
    }).then(console.log(`sms ALERTA NIVEL MINIMO enviado para o dispositivo: ${JSON.stringify(device)} no telefone: ${device_telefone[0].value}`)).catch(console.log);

  } else {
    console.log(`SEM ALERTAS PARA ENVIAR DE ${dados.variable[2]}`);
  }
}
}

module.exports = new Analysis(notificacoes);

[2024-03-06 14:11:46] Analysis finished.
[2024-03-06 14:11:46] Duration: 2s Billed Duration: 2s.
[2024-03-06 14:11:46] SEM ALERTAS PARA ENVIAR DE int0 SEM ALERTAS PARA ENVIAR DE int1
[2024-03-06 14:11:46] sms ALERTA NIVEL MINIMO enviado para o dispositivo: {"params":{"token":"c2*****************************"}} no telefone: +553************
[2024-03-06 14:11:46] email ALERTA NIVEL MINIMO enviado para o dispositivo: {"params":{"token":"c2**********************"}} no email: s********@fractum.com.br
[2024-03-06 14:11:46] SEM ALERTAS PARA ENVIAR DE i1 -3.75
[2024-03-06 14:11:45] 0 SEM ALERTAS PARA ENVIAR DE i1 SEM ALERTAS PARA ENVIAR DE i1
[2024-03-06 14:11:45] SEM ALERTAS PARA ENVIAR DE i1
[2024-03-06 14:11:45] email ALERTA HIDROMETRO enviado para o dispositivo: {"params":{"token":"9b******************"}} no email: f********@gmail.com
[2024-03-06 14:11:45] SEM ALERTAS PARA ENVIAR DE int0
[2024-03-06 14:11:45] > TagoIO-SDK: No region or env defined, using fallback as usa-1.
[2024-03-06 14:11:44] Starting Analysis...