import { ok, badRequest, serverError } from "wix-http-functions";
import wixCrmBackend from "wix-crm-backend";
// CRM label keys — must match labels created in Wix CRM dashboard
const CRM_LABELS = {
base: "custom.lcg-lead",
resilience: "custom.lcg-resilience",
ai: "custom.lcg-ai-strategy",
};
// LinkedIn URL helpers
const liCompanyUrl = (slug) =>
slug ? `https://www.linkedin.com/company/${slug}` : "";
const liPersonUrl = (slug) =>
slug ? `https://www.linkedin.com/in/${slug}` : "";
// ─────────────────────────────────────────────────────────────────────────────
// POST /_functions/lcgLead
//
// Expected JSON payload from Clay / Zapier:
// {
// company: string (required)
// contactName: string
// contactTitle: string
// sector: string
// size: "Small" | "Mid Cap" | "Large Cap"
// hq: string
// linkedinUrl: string (full contact profile URL)
// liPersonSlug: string (e.g. "firstname-lastname")
// liCompanySlug: string (e.g. "company-name")
// email: string
// phone: string
// liSignals: string (comma-separated signal labels)
// score: number (0–100)
// focus: "resilience" | "ai" | "general"
// notes: string
// }
// ─────────────────────────────────────────────────────────────────────────────
export async function post_lcgLead(request) {
let body;
try {
body = await request.body.json();
} catch (e) {
return badRequest({ body: JSON.stringify({ error: "Invalid JSON body" }) });
}
const { company, contactName, contactTitle, sector, size, hq,
liPersonSlug, liCompanySlug, email, phone,
liSignals, score, focus, notes } = body;
if (!company) {
return badRequest({ body: JSON.stringify({ error: "company is required" }) });
}
// Build label list for CRM contact
const labelKeys = [CRM_LABELS.base];
if (focus === "resilience") labelKeys.push(CRM_LABELS.resilience);
if (focus === "ai") labelKeys.push(CRM_LABELS.ai);
// Build extended fields
const extendedFields = {
"custom.lcg-company": company,
"custom.lcg-title": contactTitle || "",
"custom.lcg-sector": sector || "",
"custom.lcg-size": size || "",
"custom.lcg-hq": hq || "",
"custom.lcg-li-person": liPersonUrl(liPersonSlug),
"custom.lcg-li-company": liCompanyUrl(liCompanySlug),
"custom.lcg-signals": liSignals || "",
"custom.lcg-score": String(score || 0),
"custom.lcg-focus": focus || "general",
"custom.lcg-notes": notes || "",
"custom.lcg-created": new Date().toISOString(),
};
try {
// Split name into first/last for CRM
const nameParts = (contactName || company).trim().split(" ");
const firstName = nameParts[0] || company;
const lastName = nameParts.slice(1).join(" ") || "";
// Create or update contact in Wix CRM
const contactInfo = {
name: { first: firstName, last: lastName },
emails: email ? [{ email, tag: "MAIN" }] : [],
phones: phone ? [{ phone, tag: "MAIN" }] : [],
labelKeys,
extendedFields,
};
await wixCrmBackend.contacts.createContact(contactInfo);
return ok({
body: JSON.stringify({
success: true,
message: `Lead created: ${contactName || company}`,
company,
score: score || 0,
}),
});
} catch (err) {
console.error("LCG CRM error:", err);
return serverError({
body: JSON.stringify({
error: "CRM write failed",
detail: err.message || String(err),
}),
});
}
}
top of page
LCG Det Robuste Selskab Workbook
DET ROBUSTE SELSKAB Workbook— Sådan bygger du en organisation, der trives under pres
De fleste virksomheder fejler ikke på grund af en dårlig strategi. De fejler, fordi ledelsen knækker under pres.
Denne bilinguale guide giver dig syv konkrete træk til at bygge en organisation, der ikke bare overlever pres — men præsterer igennem det.
Hvad du får:
- 7 konkrete træk fra beslutningskultur under pres til strukturel robusthed
- De fire søjler: Regulering, Genopretning, Relationer, Omramning
- Det ugentlige 15-minutters robusthedscheck
- Et fuldt krisescenarie-rollespil: ransomware, mediepres, kundekrise, datalæk
- En ledelsesdiagnostik til hele ledelsesteamet
LCG er prækvalificeret rådgiver under SMV:PRO-programmet — op til 50% tilskud, op til 100.000 DKK.
bottom of page