v2.4.2

leads

Lead lifecycle service for inbound enquiry ingestion, enrichment, outbound delivery, dealer config, Facebook and Heyflow ingestion, bot queueing, and event notifications.

FieldValue
Serverless servicedrive-api-leads
Runtimenodejs22.x, arm64
Deployed HTTP operations13
Local worker harnesses8
Main deployed trigger typesHTTP, SQS, SNS-to-SQS
OpenAPI/openapi/leads.yaml · interactive

Flow

flowchart LR
  IN["HTTP ingest"] --> IQ["in-init FIFO SQS"]
  IQ --> ENRICH["leadsInboundEnrich"]
  ENRICH --> PROC["leadsInboundProcess"]
  PROC --> OUTQ["out-init FIFO SQS"]
  OUTQ --> OUTENRICH["leadsOutboundEnrich"]
  OUTENRICH --> CS["Carsales SQS"]
  OUTENRICH --> AHG["AHG SQS"]
  OUTENRICH --> EMAIL["Email SQS"]
  OUTENRICH --> WH["Webhook SQS"]
  OUTENRICH --> EVT["Event SQS"]

Deployed HTTP routes

FunctionMethodPathAuthPurpose
customFinanceGET/leads/custom-finance/{stockId}API keyReturns cached drive-away-guide finance quote for stock.
leadsBotQueuePOST/leads/bot/queuePublic plus bearer checkQueues bot-originated lead payloads.
leadsDealerConfigGET/leads/config/dealersAPI keyLists dealer configs, optionally filtered by dealerIds.
leadsDealerConfigGET/leads/config/dealer/{dealerId}API keyReads one dealer config.
leadsDealerConfigPutPUT/leads/config/dealerAPI keyUpserts dealer config.
leadsInboundQueuePOST/leads/in/queuePublicValidates and rate-limits inbound lead payloads, then queues to inbound SQS.
leadsInboundHeyflowQueuePOST/leads/in/hf/queueAPI keyNormalises Heyflow webhook submissions into inbound lead queue payloads.
leadsInboundFbQueueGET/leads/in/fb/queuePublicFacebook webhook verification handshake.
leadsInboundFbQueuePOST/leads/in/fb/queuePublicFacebook leadgen webhook receiver.
leadsInboundFbProcessPOST/leads/in/fb/processAPI keyHTTP-mounted Facebook processing path; function also consumes SQS.
leadsOutboundQueuePOST/leads/out/queueAPI keyQueues outbound lead delivery.
leadsOutboundWebhookValidatePOST/leads/out/webhook/validateAPI keyValidates dealer webhook config and auth.
leadsOutboundEventProcessPOST/leads/out/eventAPI keyPublishes lead allocation/event data; function also consumes SQS.

Local HTTP harnesses for SQS workers

These operations are documented in OpenAPI because they are useful for local evaluation and replay. In deployed stacks they are driven by SQS and are marked x-drive-deployment: local-test-http.

FunctionLocal method/pathDeployed triggerPurpose
leadsInboundProcessPOST /leads/in/processSQSSends enriched inbound lead to Salesforce and records lead events.
leadsInboundEnrichPOST /leads/in/enrichSQSAdds stock, vehicle, phone, and postcode enrichment before process queue.
leadsOutboundEnrichPOST /leads/out/enrichSQSBuilds destination-specific payloads and fans out to outbound queues.
leadsOutboundCarsalesProcessPOST /leads/out/carsalesSQSDelivers outbound lead to Carsales.
leadsOutboundEmailProcessPOST /leads/out/emailSQSBuilds and queues transactional email through the marketing service.
leadsOutboundAHGProcessPOST /leads/out/ahgSQSDelivers outbound lead to AHG LeadTracker.
leadsOutboundWebhookProcessPOST /leads/out/webhookSQSDelivers outbound lead to dealer webhook and writes delivery-log messages.
dealerBouncedEmailEventNotifyPOST /leads/email/dealer/bounced/notifySQSSends dealer bounced-email notification through marketing transactional email.

Additional workers

FunctionTriggerPurpose
leadsBotProcessSQSProcesses queued bot leads.
leadsInboundFacebookProcessSQS and HTTPFetches Facebook lead details and forwards into inbound queue.
leadsOutboundDriveAwayGuideProcessSQSBuilds drive-away-guide output and queues follow-up email.
leadsOutboundDriveAwayGuideDLQProcessSQS DLQHandles failed drive-away-guide messages.
leadsOutboundDeliveryLogProcessSQSWrites outbound delivery log data back to Salesforce.

Behaviour notes

  • POST /leads/in/queue applies a DynamoDB token bucket when rateLimitsEnabled is on for the stage. Exhaustion returns 429 and rate-limit headers.
  • Several SQS handlers return batchItemFailures on retryable message failures; the local HTTP harness returns normal API Gateway response objects.
  • Facebook webhook POST is public because Facebook cannot send the Drive API key; GET echoes hub.challenge for verification.
  • leadsInboundProcess supports dry-run behaviour through debug state and returns without Salesforce side effects.
  • Outbound delivery paths use stage-specific modes: Carsales and general outbound mode from custom.app.outboundMode, email mode from custom.app.emailMode.

Source map

  • Routes, queues, rate limits, and serverless-ifelse: services/leads/serverless.yml
  • Handlers: services/leads/functions/
  • Request schemas: services/leads/schemas/
  • Domain types: services/leads/types/
  • Delivery transforms: services/leads/util/toCarsalesLeadRequest.ts, services/leads/util/toAhgLeadRequest.ts, services/leads/util/toWebhookRequest.ts
Esc