feat: forward leads to central lead-inbox (ADR 012)
Deploy / build-and-deploy (push) Successful in 22s
Deploy / build-and-deploy (push) Successful in 22s
handleLead forwards to LEAD_INBOX_URL/v1/leads (DE field aliases map server-side); local ndjson/csv stays as fallback. No-op until LEAD_INBOX_URL/LEAD_INBOX_KEY are set, so safe to deploy. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
d9fd1621ff
commit
0a9983b6d9
1 file changed
+45
-13
@@ -38,6 +38,31 @@ const MAX_UPLOAD = 5 * 1024 * 1024; /* 5 MB pro eingereichtem Spiel */
|
||||
const UPLOAD_DEADLINE = new Date("2026-05-27T22:00:00+02:00");
|
||||
const APP_REVISION = process.env.APP_REVISION || "local";
|
||||
|
||||
/* Central lead-inbox (infra ADR 012). Sites forward leads here; local files
|
||||
stay as a fallback. Unset env => old local-only behavior. */
|
||||
const LEAD_INBOX_URL = process.env.LEAD_INBOX_URL || "";
|
||||
const LEAD_INBOX_KEY = process.env.LEAD_INBOX_KEY || "";
|
||||
|
||||
async function forwardLeadToInbox(lead) {
|
||||
if (!LEAD_INBOX_URL || !LEAD_INBOX_KEY) return false;
|
||||
try {
|
||||
const res = await fetch(LEAD_INBOX_URL.replace(/\/+$/, "") + "/v1/leads", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Authorization: "Bearer " + LEAD_INBOX_KEY
|
||||
},
|
||||
/* inbox accepts DE aliases: firma, telefon, nachricht, quelle */
|
||||
body: JSON.stringify(lead),
|
||||
signal: AbortSignal.timeout(5000)
|
||||
});
|
||||
return res.ok;
|
||||
} catch (e) {
|
||||
console.error("[lead] inbox forward failed:", e.message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function envFlag(name, defaultValue) {
|
||||
const raw = process.env[name];
|
||||
if (raw == null || raw === "") return defaultValue;
|
||||
@@ -227,20 +252,27 @@ function handleLead(req, res) {
|
||||
quelle: String(data.quelle || "Landing Page").slice(0, 120)
|
||||
};
|
||||
|
||||
try {
|
||||
saveLead(lead);
|
||||
} catch (e) {
|
||||
console.error("[lead] Speichern fehlgeschlagen:", e.message);
|
||||
return sendJSON(res, 500, {
|
||||
error: "Speichern fehlgeschlagen. Bitte später erneut versuchen."
|
||||
});
|
||||
}
|
||||
/* Central inbox is source of truth; local files are the fallback so a
|
||||
lead is never lost if the inbox is unreachable (infra ADR 012). */
|
||||
forwardLeadToInbox(lead).then((forwarded) => {
|
||||
if (!forwarded) {
|
||||
try {
|
||||
saveLead(lead);
|
||||
} catch (e) {
|
||||
console.error("[lead] Speichern fehlgeschlagen:", e.message);
|
||||
return sendJSON(res, 500, {
|
||||
error: "Speichern fehlgeschlagen. Bitte später erneut versuchen."
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
console.log(
|
||||
"[lead] " + lead.zeitpunkt + " — " + lead.name +
|
||||
(lead.firma ? " (" + lead.firma + ")" : "") + " <" + lead.email + ">"
|
||||
);
|
||||
sendJSON(res, 200, { ok: true });
|
||||
console.log(
|
||||
"[lead] " + (forwarded ? "→inbox " : "→local ") +
|
||||
lead.zeitpunkt + " — " + lead.name +
|
||||
(lead.firma ? " (" + lead.firma + ")" : "") + " <" + lead.email + ">"
|
||||
);
|
||||
sendJSON(res, 200, { ok: true });
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user