1. Tempo médio de preparo (benchmarking) Ex: 12 minutos2. Adicionar margem para picos Ex: +3 minutos3. Converter para segundos (12 + 3) * 60 = 900 segundos
Por que importa
preparationTime
Impacto
Muito curto
Entregador chega antes; custa mais caro
Muito longo
Entregador aguarda sem propósito
Correto
Sinergia perfeita entre preparo e entrega
Monitorar e ajustar
Semana 1: preparationTime = 900s (15 min) ↓ (Monitorar entregas) ↓Se entregador chega muito cedo: → Aumentar para 1000s (16 min)Se entregador chega muito tarde: → Diminuir para 800s (13 min)
Rastreamento de entregas
Timing correto
Pedido criado ↓REQUEST_DRIVER (202) ↓Polling... aguardando sucesso ↓REQUEST_DRIVER_SUCCESS ↓ (AGORA sim, consultar tracking) ↓GET /tracking
Nunca consultar tracking antes de REQUEST_DRIVER_SUCCESS!
Intervalo de polling para tracking
// Após REQUEST_DRIVER_SUCCESSsetInterval(async () => {try {consttracking = awaitgetTracking(orderId);updateUI(tracking); } catch (error) {if (error.status === 404) {logger.info('Tracking not yet available');// Entregador ainda sendo atribuído, retry depois } }}, 30000); // 30 segundos
Tratamento de null values
Campos podem retornar null durante atribuição:
consttracking = awaitgetTracking(orderId);// Seguro: verifica null antes de usarif (tracking.latitude && tracking.longitude) {updateMapMarker(tracking.latitude, tracking.longitude);}// Pode ser nullif (tracking.expectedDelivery) {updateETA(tracking.expectedDelivery);}// Pode ser negativo (atraso em coleta)constpickupDelay = tracking.pickupEtaStart < 0 ? `Atrasado ${Math.abs(tracking.pickupEtaStart)}s` : `Faltam ${tracking.pickupEtaStart}s`;
Monitoramento e alertas
Métricas essenciais
1. Taxa de sucesso por endpoint - Alerta: < 95% - Intervalo: 1 hora2. Latência P95 - Alerta: > 5 segundos - Intervalo: 5 minutos3. Taxa de erro por tipo - Alerta: HighDemand > 20% - Intervalo: 15 minutos4. Polling falhas consecutivas - Alerta: > 3 falhas seguidas - Intervalo: tempo real5. Taxa de timeout - Alerta: > 5% - Intervalo: 1 hora
Alertas críticos
1. Falta de renovação de token → Todas requisições falharão com 4012. Polling parado → Eventos não serão processados3. Taxa de erro > 10% por 30 min → Problema sistêmico em andamento4. Atraso de evento > 5 min → Possível gargalo no sistema
Operações assíncronas
Nunca assuma sucesso por 202 Accepted
Não considere uma operação bem-sucedida apenas pela resposta 202 Accepted. Sempre monitore os eventos para confirmar o resultado final.
// CORRETOconstresponse = awaitrequestDriver(orderId, quoteId);logger.info('Alocação solicitada, aguardando confirmação...');// Depois, monitorar eventos// Só confirmar quando receber REQUEST_DRIVER_SUCCESS
Pedidos na plataforma: [ ] GET /deliveryAvailabilities funciona [ ] POST /requestDriver retorna 202 [ ] Eventos são recebidos [ ] GET /tracking funciona após sucesso [ ] Cancelamento funcionaPedidos fora da plataforma: [ ] GET /merchants/{merchantId}/deliveryAvailabilities funciona [ ] POST /merchants/{merchantId}/orders retorna 202 + trackingUrl [ ] Código de confirmação é recebido [ ] Alterações de endereço funcionam [ ] Safe Delivery Score funcionaErros: [ ] HighDemand é tratado com retry [ ] 404 em tracking é ignorado antes de sucesso [ ] Rate limiting é respeitado [ ] Tokens expirados são renovadosMonitoramento: [ ] Logs estruturados em todos pontos [ ] Alertas configurados [ ] Dashboard visível [ ] Métricas sendo coletadas
Rate limiting
Para detalhes sobre rate limiting global e limites específicos do Shipping, consulte Rate limit.Resumo para Shipping:
Operação
Limite
Verificar disponibilidade
4.000 req/min
Solicitar/Criar entrega
4.000 req/min
Cancelamento
600 req/min
Gerenciar endereços
500 req/min
Rastreamento
(incluído em polling)
Erros de disponibilidade (400 Bad Request)
DeliveryDistanceTooHigh
Mensagem: "Sob Demanda indisponível: o endereço da entrega está a mais de 10 km da sua loja."Causa: O endereço está fora da cobertura de logística iFood.Soluções:
Confirme as coordenadas (latitude/longitude) enviadas
Valide o endereço com o cliente
Verifique se a região tem cobertura iFood disponível
Consulte o mapa de cobertura no Portal do Parceiro
ServiceAreaMismatch
Mensagem: "Endereço fora da cobertura iFood"Causa: A região não é atendida pelo serviço de logística iFood.Soluções:
Mensagem: "Fora do horário de operação"Causa: A requisição foi feita fora do horário de funcionamento da logística.Soluções:
Tente novamente dentro do horário comercial
Configure alertas para horário de operação
Implemente retry automático com backoff exponencial
Horários de operação: Variam por região. Consulte o Portal do Parceiro.
HighDemand
Mensagem: "A logística iFood está temporariamente indisponível. Tente novamente mais tarde."Causa: Frota de entregadores saturada em picos de demanda.Soluções:
Implemente retry com backoff exponencial (2x, máx 8 tentativas)
Use preparationTime maior para distribuir demanda ao longo do tempo
Monitore horários de pico e planeje com antecedência