Como agendar notificações em lote ?

Caso você queira realizar o agendamento de notificações a serem enviadas em lote sugerimos o procedimento explicado neste documento.

Aviso

Caso a sua integração com a Rute vá usar este método de trabalho procure sempre transmitir as notificações após o encerramento do expediente do dia e antes das 23:00hs.

Consulte o plano de envios da entidade

Consulte as datas dos eventos futuros que devem ser enviados agora usando a API Notifications (GET) /notifications/plans/{entity_id}. Você obtera um retorno similar a este:

[
    {
        "target": "appointment",
        "auto": {
            "event_min": "2019-06-21T00:00:00+00:00",
            "event_max": "2020-06-15T18:00:00+00:00",
            "event_dates": [
                "2019-06-21T00:00:00+00:00"
            ]
        },
        "category": "medical"
    },
    {
        "target": "appointmentwithprepare",
        "auto": {
            "event_min": "2019-06-22T00:00:00+00:00",
            "event_max": "2020-06-15T18:00:00+00:00",
            "event_dates": [
                "2019-06-22T00:00:00+00:00", "2019-06-23T00:00:00+00:00", "2019-06-24T00:00:00+00:00"
            ]
        },
        "category": "medical"
    }
]

O resultado acima foi obtido nas seguintes condições:

  • Foi executada no dia 18/06/2018 às 19:00hs.
  • O dia 20/06/2019 era feriado nacional.
  • Eventos do tipo appointment tem de ser enviados com 1 dia útil de antecedência.
  • Eventos do tipo appointmentwithprepare tem de ser enviados com 2 dias úteis de antecedência.

Informação

A Rute usa um sistema inteligente de agendamento para o envio das notificações baseado no tipo do canal de comunicação, perfil do contato e configurações escolhidas pela entidade, limitando ao mínimo o envio de notificações em feriados nacionais, fim de semana ou fora do horário comercial.

O retorno é uma lista com cada tipo de notificação que a entidade usa: category+target. Para cada item da lista as datas dos eventos que devem ser enviados estarão no campo event_dates.

Atenção:
1. O campo event_dates é do tipo lista e pode ter 1 ou mais datas.
2. O calculo do event_dates leva em consideração os dias de antecedência do tipo da notificação, fins de semana e feriados nacionais. Normalmente ele terá apenas uma data, mas, dependendo da combinação de feriados, fim de semana e dias de antecedência configurado para a entidade e o tipo da notificação você poderá ter de enviar mais de uma data.

Pesquise seu banco de dados

Faça uma consulta ao banco de dados da sua aplicação selecionando todos os eventos futuros cuja data esteja na lista event_dates do tipo do evento. No caso do nosso exemplo você teria de fazer 2 consultas:

  1. Todas as consultas marcadas para o dia 11/07/2019 e que ainda não tenham sido transmitidas.
  2. Todas as consultas com preparo marcadas para os dias 12/07/2019 ou 15/07/2019 e que ainda não tenham sido transmitidas.

Crie as notificações na Rute.ai

Envie cada itém do resultado das consultas usando a API Notifications (POST) /notifications. Fique atento que o campo params no body do POST é específico para cada tipo de notificação.

PARAMS para notificação to tipo consulta
"params": {
        "doctor": "Agatha Dias",
        "doctor_external_id": "138",
        "doctor_expertise": "Cardiologista",
        "event_date": "2019-07-11T14:15:29Z"
    }
PARAMS para notificação do tipo consulta com preparo
"params": {
        "doctor": "Agatha Dias",
        "doctor_external_id": "138",
        "doctor_expertise": "Cardiologista",
        "event_date": "2019-07-15T17:15:29Z",
        "prepare_id": "cjx2jzrti000001gl4k45rtgc"
    }

Para cada notificação criada a API retorna um ID uníco:

{"refused_tasks": [], "id": "cjxw0myri000001jsi7t52iil"}

Atualize no mesmo instante o seu banco de dados associando o ID com o registro do evento, assim, caso você execute novamente a rotina de envio para a mesma data apenas os eventos ainda não enviados sejam selecionados. Veja como seria uma consulta SQL hipotética tratando está situação:

SELECT * FROM agenda WHERE agenda.data IN ('2019-06-22', '2019-06-23', '2019-06-22') AND agenda.tipo = 'CONSULTACOMPREPARO' AND agenda.rute_id IS NULL