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 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:
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.
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:
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": {
"doctor": "Agatha Dias",
"doctor_external_id": "138",
"doctor_expertise": "Cardiologista",
"event_date": "2019-07-11T14:15:29Z"
}
"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