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

Er din virksomhed klar når krisen rammer?

Download vores gratis rapport og få indsigt i vigtige emner, der kan hjælpe med at træffe bedre beslutninger. Ved at indtaste dine kontaktinformationer får du adgang til værdifuld viden, som er tilpasset dine behov. Gå ikke glip af denne mulighed for at udvide din forståelse og forbedre dine strategier. Tilmeld dig nu for at modtage din rapport.

Bliv konsulent hos LCG

Send mig guiden

This is a Paragraph. Click on "Edit Text" or double click on the text box to start editing the content.

Klik her for at downloade

bottom of page