Rafael Prenzier
TRATAMENTO DE NOTIFICAÇÕES
Software Engineer
Tratamento de notificações
Rafael Prenzier dos Santos
Developer Conference
Agenda
● Príncipios● Como receber notificações● Erros comuns● Ferramentas● Sugestões de implementação
Developer Conference
Mas o que é uma Notificação?
Developer Conference
O que é uma notificação?
É um POST HTTP contendo um JSONO Mercado Livre essa mensagem para a url configurada na sua Aplicação
Pépe, já tirei a vela !
Developer Conference
Fluxo de uma notificação
1. Um evento ocorre dentro do MercadoLivre
2. O MercadoLivre envia uma notificação do evento para todas as apps autorizadas no cadastro do usuário
3. As aplicações confirmam o recebimento da notificação
Developer Conference
Notificação
Developer Conference
Notificação
Developer Conference
Notificação
POST
Developer Conference
{ "user_id": "12345678", "resource": "/questions/123456789", "topic": "questions", "received": "2014-02-04T19:00:04+00:00", "sent": "2014-02-04T19:00:45+00:00"}
Notificação
POST
Developer Conference
{ "user_id": "12345678", "resource": "/questions/123456789", "topic": "questions", "received": "2014-02-04T19:00:04+00:00", "sent": "2014-02-04T19:00:45+00:00"}
Notificação
POST
Developer Conference
{ "user_id": "12345678", "resource": "/questions/123456789", "topic": "questions", "received": "2014-02-04T19:00:04+00:00", "sent": "2014-02-04T19:00:45+00:00"}
Notificação
POST
200 OK
Developer Conference
Quais eventos disparam notificações?
Qualquer alteração dentro do conteúdo de:● Items;● Questions;● Orders (Vendas);● Payments;
Ex: Uma venda vai gerar notificação de Item, pois diminuiu o estoque, uma notificação de nova venda e também uma notificação de pagamento assim que a venda for paga
Developer Conference
Configurar o recebimento de notificações?
http://applications.mercadolibre.com
● Notification Callback URL
● Topics - Items, Orders, Questions e Payments
Developer Conference
Developer Conference
http://www.suaurlaqui.com/notification
Developer Conference
http://www.suaurlaqui.com/notification
x
x
x
x
Developer Conference
Exemplo notificação de Item
{
"user_id": 1234,
"resource": "/items/MLB139876",
"topic": "items",
"attempts": 1,
"received": "2011-10-19T16:38:34.425Z",
"sent" : "2011-10-19T16:40:34.425Z",
}
Developer Conference
{
"user_id": 1234,
"resource": "/items/MLB139876",
"topic": "items",
"attempts": 1,
"received": "2011-10-19T16:38:34.425Z",
"sent" : "2011-10-19T16:40:34.425Z",
}
Exemplo notificação de Item
Developer Conference
{
"user_id": 1234,
"resource": "/items/MLB139876",
"topic": "items",
"attempts": 1,
"received": "2011-10-19T16:38:34.425Z",
"sent" : "2011-10-19T16:40:34.425Z",
}
Exemplo notificação de Item
Developer Conference
{
"user_id": 1234,
"resource": "/items/MLB139876",
"topic": "items",
"attempts": 1,
"received": "2011-10-19T16:38:34.425Z",
"sent" : "2011-10-19T16:40:34.425Z",
}
Exemplo notificação de Item
Developer Conference
{
"user_id": 1234,
"resource": "/items/MLB139876",
"topic": "items",
"attempts": 1,
"received": "2011-10-19T16:38:34.425Z",
"sent" : "2011-10-19T16:40:34.425Z",
}
Exemplo notificação de Item
Developer Conference
{
"user_id": 1234,
"resource": "/items/MLB139876",
"topic": "items",
"attempts": 1,
"received": "2011-10-19T16:38:34.425Z",
"sent" : "2011-10-19T16:40:34.425Z",
}
Exemplo notificação de Item
Developer Conference
{
"user_id": 1234,
"resource": "/items/MLB139876",
"topic": "items",
"attempts": 1,
"received": "2011-10-19T16:38:34.425Z",
"sent" : "2011-10-19T16:40:34.425Z",
}
Exemplo notificação de Item
Developer Conference
Exemplo notificação de Order
{
"user_id": 1234,
"resource": "/orders/139876",
"topic": "orders",
"attempts": 1,
"received": "2011-10-19T16:38:34.425Z",
"sent": "2011-10-19T16:40:34.425Z"
}
Developer Conference
Exemplo notificação de Order
{
"user_id": 1234,
"resource": "/orders/139876",
"topic": "orders",
"attempts": 1,
"received": "2011-10-19T16:38:34.425Z",
"sent": "2011-10-19T16:40:34.425Z"
}
Developer Conference
Exemplo notificação de Order
{
"user_id": 1234,
"resource": "/orders/139876",
"topic": "orders",
"attempts": 1,
"received": "2011-10-19T16:38:34.425Z",
"sent": "2011-10-19T16:40:34.425Z"
}
Developer Conference
{
"user_id": 1234,
"resource": "/questions/139876",
"topic": "questions",
"attempts": 1,
"received": "2011-10-19T16:38:34.425Z",
"sent" : "2011-10-19T16:40:34.425Z",
}
Exemplo notificação de Question
Developer Conference
{
"user_id": 1234,
"resource": "/questions/139876",
"topic": "questions",
"attempts": 1,
"received": "2011-10-19T16:38:34.425Z",
"sent" : "2011-10-19T16:40:34.425Z",
}
Exemplo notificação de Question
Developer Conference
{
"user_id": 1234,
"resource": "/questions/139876",
"topic": "questions",
"attempts": 1,
"received": "2011-10-19T16:38:34.425Z",
"sent" : "2011-10-19T16:40:34.425Z",
}
Exemplo notificação de Question
Developer Conference
{
"user_id": 1234,
"resource": "/collections/123123123",
"topic": "payments",
"attempts": 1,
"received": "2014-07-21T18:51:28+00:00",
"sent": "2014-07-21T18:51:28+00:00"
}
Exemplo notificação de Payments
Developer Conference
{
"user_id": 1234,
"resource": "/collections/123123123",
"topic": "payments",
"attempts": 1,
"received": "2014-07-21T18:51:28+00:00",
"sent": "2014-07-21T18:51:28+00:00"
}
Exemplo notificação de Payments
Developer Conference
Exemplo notificação de Payments
{
"user_id": 1234,
"resource": "/collections/123123123",
"topic": "payments",
"attempts": 1,
"received": "2014-07-21T18:51:28+00:00",
"sent": "2014-07-21T18:51:28+00:00"
}
Developer Conference
Recebendo Notificações
Developer Conference
Confirmação de recebimento
A confirmação de recebimento é bem simples:
Retornar o status HTTP 200, se a notificação foi recebida com sucesso.
Qualquer status diferente de 200 será considerado falha no recebimento e serão realizadas novas tentativas de envio.
Developer Conference
{
"user_id": 1234,
"resource": "/questions/139876",
"topic": "questions",
"attempts": 2,
"received": "2011-10-19T16:38:34.425Z",
"sent" : "2011-10-19T16:40:34.425Z",
}
Exemplo notificação Repetida
Developer Conference
{
"user_id": 1234,
"resource": "/questions/139876",
"topic": "questions",
"attempts": 3,
"received": "2011-10-19T16:38:34.425Z",
"sent" : "2011-10-19T17:40:34.425Z",
}
Exemplo notificação Repetida
Developer Conference
{
"user_id": 1234,
"resource": "/questions/139876",
"topic": "questions",
"attempts": 4,
"received": "2011-10-19T16:38:34.425Z",
"sent" : "2011-10-19T18:40:34.425Z",
}
Exemplo notificação Repetida
Developer Conference
{
"user_id": 1234,
"resource": "/questions/139876",
"topic": "questions",
"attempts": 5,
"received": "2011-10-19T16:38:34.425Z",
"sent" : "2011-10-19T19:40:34.425Z",
}
Exemplo notificação Repetida
Developer Conference
Mas eu vou ficar recebendo as notificações pra sempre?
Developer Conference
Intervalo de envio das notificações
A partir do recebimento da primeira notificação em um período de 12 horas serão feitas novas tentativas de entregar as notificações,
Após 12 horas a notificação é descartada!
Developer Conference
{
"user_id": 1234,
"resource": "/questions/2880XXX87",
"topic": "questions",
"attempts": 1,
"received": "2011-10-19T16:38:34.425Z",
"sent" : "2011-10-19T16:40:34.425Z",
}
Recuperando os dados da notificação
Developer Conference
https://api.mercadolibre.com/questions/2880XXX87
Recuperando os dados da notificação
Developer Conference
GET
https://api.mercadolibre.com/questions/2880XXX87
Recuperando os dados da notificação
Developer Conference
{ "id": 2880XXX87, "answer": null, "date_created": "2013-09-23T13:13:52.000-04:00", "deleted_from_listing": false, "hold": false, "item_id": "MLB50XXX993", "last_updated": "2013-09-23T15:52:09.000-04:00", "seller_id": "362XXXX5", "status": "DELETED", "suspected_spam": false, "text": "o jogo vem completo né ?", "from": - { "id": 844XXXX2, "answered_questions": 4, },}
GET
https://api.mercadolibre.com/questions/2880XXX87
Recuperando os dados da notificação
Developer Conference
{ "id": 2880XXX87, "answer": null, "date_created": "2013-09-23T13:13:52.000-04:00", "deleted_from_listing": false, "hold": false, "item_id": "MLB50XXX993", "last_updated": "2013-09-23T15:52:09.000-04:00", "seller_id": "362XXXX5", "status": "DELETED", "suspected_spam": false, "text": "o jogo vem completo né ?", "from": - { "id": 844XXXX2, "answered_questions": 4, },}
GET
https://api.mercadolibre.com/questions/2880XXX87
Recuperando os dados da notificação
Developer Conference
Erros Comuns
Developer Conference
Portas bloqueadas + Firewall
http://www.minhaurl.com:7846910/notifications
Recomendamos
:80:8080:443
Developer Conference
Não confirmação do recebimento
200
Developer Conference
Não Selecionar Tópicos
Developer Conference
Perdas de notificações
$> Notifications > /dev/null
Developer Conference
Ferramentas
Developer Conference
Test Notification Url
http://developers.mercadolibre.com/test-notification-url/
Developer Conference
http://developers.mercadolibre.com/api-health-view/
API Status - Delay de notificação
Developer Conference
Alternativa - Buscas
/users/$USER_ID/items/search
/orders/search?seller=$USER_ID
/questions/search?seller=$USER_ID
/collections/search?seller=$USER_ID
sort=date_desc
Developer Conference
Sugestão de implementação
Developer Conference
Guarde sua notificaçãoSalve a Notificação assim que recebe-la
Quebrando o sincronismo você irá trabalhar melhor com essa notificação
Developer Conference
Versione a notificação
Developer Conference
Sugestão de implementação
Banco de Dados
Developer Conference
Sugestão de implementação
Banco de Dados
Developer Conference
Sugestão de implementação
Banco de Dados
Developer Conference
Sugestão de implementação
Banco de Dados
Developer Conference
Sugestão de implementação
Banco de Dados
Developer Conference
Sugestão de implementação
Banco de Dados
Developer Conference
Sugestão de implementação
Banco de Dados
VISH...
Developer Conference
Sugestão de implementação
Banco de Dados
Developer Conference
DOG PILE
Developer Conference
Sugestão de implementação
Banco de Dados
Developer Conference
Sugestão de implementação
Developer Conference
Developer Conference
O que é Importante!
Confirmar o recebimento da notificação com o status HTTP 200
Developer Conference
O que é Importante!
Sua URL de notificação deve ser pública para o Mercado Livre conseguir te enviar as notificações
Por Obséquio
Developer Conference
O que é Importante!
Salve sua notificação
Porque você não salva as notificações?
Developer Conference
Obrigado!