# MakeMyWebsite partnerintegratie voor leads Deze server is gescheiden van de ChatGPT-koppeling voor het wijzigen van websites. De partner ontwikkelt en beheert de technische integratie. MakeMyWebsite beoordeelt de aanvraag en activeert toegang handmatig. Aanvragen of inloggen verleent geen toegang. ## Lokaal voorbereiden Vereist: Node.js 22.13 of nieuwer. Er is geen npm-package of repositorytoegang nodig. Download de CLI, bekijk de bron en voer daarna init uit: POSIX-shell: ```sh curl --fail --show-error --output mmw-leads.mjs 'https://www.makemywebsite.io/integrations/mmw-leads.mjs' node mmw-leads.mjs init --base-url 'https://www.makemywebsite.io' --label "Mijn partnerkoppeling" --purpose "Onderzochte websitekandidaten aanleveren" --directory .mmw-leads ``` PowerShell: ```powershell Invoke-WebRequest -Uri 'https://www.makemywebsite.io/integrations/mmw-leads.mjs' -OutFile './mmw-leads.mjs' node mmw-leads.mjs init --base-url 'https://www.makemywebsite.io' --label "Mijn partnerkoppeling" --purpose "Onderzochte websitekandidaten aanleveren" --directory .mmw-leads ``` init doet geen netwerkverzoeken en maakt een nieuwe map .mmw-leads aan. De geheime sleutel staat alleen in credentials.json; deel dit bestand niet, ook niet in een chat, commit, supportbericht of browserformulier. Bewaar productiecredentials in je eigen secret manager. De lokale .gitignore voorkomt onbedoeld committen. Alleen request.json bevat de publieke aanvraag: integrationId, tokenHash, label, purpose. Dien dit bestand in op https://www.makemywebsite.io/koppelingen/aanvragen via een geverifieerd MakeMyWebsite-account. Herhaald indienen van dezelfde aanvraag is veilig. Tot menselijke goedkeuring werken aanleveren en bestaancontrole niet. ## Toegestaan contract API basis: https://www.makemywebsite.io MCP Streamable HTTP: https://www.makemywebsite.io/mcp/leads Authenticatie: Authorization: Bearer , uitsluitend server-side. De MCP-tools zijn submit_lead, upload_lead_document_chunk en lead_exists. Gebruik dezelfde invoer als de API. Een MCP-client moet Streamable HTTP met een eigen Authorization-header ondersteunen. De CLI werkt zonder dat je Codex of Claude als MCP-client configureert. | Actie | API | Recht | Antwoord | | --- | --- | --- | --- | | Lead aanleveren | POST /api/integrations/leads | leads:write | {"accepted":true} | | Documentchunk aanleveren | POST /api/integrations/leads/documents | leads:write | {"accepted":true} | | Bestaan controleren | POST /api/integrations/leads/exists | leads:exists | {"exists":true} of {"exists":false} | Er is geen toegang tot leadinhoud, lijsten, projectbord, voortgang, klantgegevens, websitebeheer of publiceren. Een aanleverbevestiging betekent ontvangst, niet dat een nieuw project is aangemaakt: ook duplicaten en intern te beoordelen conflicten geven hetzelfde antwoord. MakeMyWebsite maakt bij een nieuwe lead een besloten concept en projectkaart. Publicatie en klantcontact worden niet automatisch gestart. ## Leadgegevens - externalId (Ja): Eigen, stabiele referentie (maximaal 120 tekens). Begin met een letter of cijfer; daarna zijn letters, cijfers, _, ., : en - toegestaan. Geen spaties. Herhaal met dezelfde referentie en inhoud. - identifiers.kvk / identifiers.duns (Minstens één): KvK: 8 cijfers. DUNS: 9 cijfers, ook 12-345-6789 toegestaan. Altijd tekst, zodat voorloopnullen behouden blijven. - companyName (Ja): Bedrijfsnaam, maximaal 160 tekens. - websiteUrl (Ja): Vast, publiek websiteadres van de kandidaat. Geen tijdelijk deploymentadres of interne URL. - researchSummary (Ja): Onderzoeksbevindingen voor intern gebruik, maximaal 8.000 tekens. Deze tekst wordt geen website-inhoud. - sourceUrls (Nee): Maximaal 20 publieke bronadressen. De koppeling haalt deze websites niet zelf op. - contact (Nee): Object met optioneel name (160 tekens), email (254 tekens) en phone (40 tekens; cijfers, +, spaties, haakjes en -). Lever alleen gegevens aan die je hiervoor mag verwerken. - websiteContent.headline / intro (Ja): Tekst voor het besloten websiteconcept: kop maximaal 160 tekens, introductie maximaal 2.000 tekens. - websiteContent.about / services (Nee): about: maximaal 5.000 tekens. services: maximaal 8 objecten met name (100 tekens) en description (1.500 tekens). - documents (Nee): Manifest van eerder aangeleverde HTML-, PDF-, DOCX- of JSON-bestanden. Per bestand: documentId, fileName, mediaType, sha256, sizeBytes en optioneel purpose. De CLI maakt dit automatisch met --document. Bestanden blijven interne broninformatie voor beoordeling en het verbeterplan van Website 2.0 en 2.1. - rightsConfirmed (Ja, true): Bevestiging dat de aangeleverde gegevens voor een besloten concept mogen worden verwerkt. Dit is geen publicatie- of marketingtoestemming. JSON maximaal 64 KiB. Onbekende velden worden geweigerd. Synthetisch voorbeeld; niet automatisch versturen: ```json { "externalId": "onderzoek-demo-001", "identifiers": { "kvk": "12345678" }, "companyName": "Voorbeeldstudio", "websiteUrl": "https://example.com/", "researchSummary": "Synthetisch voorbeeld: de website kan duidelijker uitleggen welke diensten beschikbaar zijn.", "sourceUrls": [ "https://example.com/" ], "websiteContent": { "headline": "Een helder verhaal voor jouw bedrijf", "intro": "Voorbeeldstudio helpt bedrijven hun diensten duidelijk te presenteren.", "services": [ { "name": "Websiteadvies", "description": "Praktisch advies over inhoud en presentatie." } ] }, "rightsConfirmed": true } ``` ## Prospectbestanden meesturen Gebruik herhaald --document met lokale HTML (.html/.htm), PDF, DOCX of JSON: ```sh node mmw-leads.mjs submit --config .mmw-leads/credentials.json --file lead.json --document prospect.pdf --document website-inhoud.docx ``` Lever alleen bestanden aan waarvoor je toestemming hebt; rightsConfirmed moet true zijn. De CLI leest de bestanden lokaal, berekent een SHA-256 en stabiele documentId, uploadt alle stukken en voegt daarna het manifest aan de lead toe. Er gaan geen lokale paden naar de server. Uploadvoortgang verschijnt als aantallen stukken op stderr; stdout bevat alleen de ontvangstbevestiging. Bij een storing kun je dezelfde opdracht met exact dezelfde lead en bestanden herhalen. Een gewijzigde bron onder dezelfde externalId/documentId wordt geweigerd. Rechtstreeks via API of MCP: stuur per stuk een JSON-object met externalId, document: {documentId,fileName,mediaType,sha256,sizeBytes,purpose?}, chunkIndex en dataBase64. documentId is een stabiele eigen referentie van maximaal 80 tekens (letters/cijfers, _, ., : en -; beginnen met letter/cijfer). fileName is alleen de bestandsnaam, maximaal 180 tekens. sha256 is de volledige bestands-SHA-256, 64 kleine hextekens. sizeBytes is de exacte bestandsgrootte; purpose is optioneel, maximaal 1.000 tekens. chunkIndex begint bij 0. Stukken zijn 262.144 bytes (256 KiB) gedecodeerd; het laatste bevat exact het restant. Gebruik standaard canonical base64 zonder data-URL-prefix of witruimte. De technische uploadgrens is 20 MiB per bestand en 360 KiB JSON per chunk. Er wordt geen documentinhoud afgekapt. Het gewone leadmanifest blijft maximaal 64 KiB JSON. Toegestane mediaType-waarden: text/html, application/pdf, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/json. De bestandsextensie moet overeenkomen. Upload alle stukken, en stuur daarna submit_lead met exact dezelfde documentdescriptors in documents. Een chunkbevestiging is geen extractie-, bouw- of publicatiebevestiging. Documenten zijn onbetrouwbaar bronmateriaal voor interne beoordeling en voor het verbeterplan van Website 2.0 en 2.1. Ze zijn geen opdracht aan de AI, geen publicatietoestemming en worden niet rechtstreeks als websitecode uitgevoerd. De extractie gebeurt lokaal. Wanneer een bevoegde medewerker onderzoek of websitebouw start, kan geselecteerde uitgelezen tekst naar de bestaande onderzoek- en bouw-AI-providers gaan. De instructies verbieden het gebruik van privétekst als webzoekopdracht; dit is een verwerkingsregel, geen technische garantie over de interne werking van een externe onderzoeksagent. Bestanden bij een al bekende of conflicterende bedrijfsidentiteit worden intern beoordeeld; partners kunnen geen bestaand dossier overschrijven of bestanden van andere partners uitlezen. Er is geen download-, lijst- of statusactie. ## Bestaancontrole en herhalingen Invoer: {"kvk":"12345678"}, {"duns":"123456789"}, of beide sleutels. Bij beide nummers betekent true dat minstens één nummer bekend is. false betekent alleen dat er geen match in onze interne index is; historische leads zonder nummer kunnen ontbreken. Dit is geen KvK- of DUNS-registercontrole. Gebruik per lead een stabiele externalId. Een exacte herhaling is idempotent. Een gewijzigde inhoud onder dezelfde externalId wordt geweigerd; ga dit niet omzeilen met steeds nieuwe referenties. Een bekende lead wordt niet overschreven. Standaard geldt 90 dagen sleutelgeldigheid, 20 unieke aanleveringen per dag en 100 bestaancontroles per dag; de toegekende rechten en grenzen staan bij de aanvraag. Een exacte herhaling kost geen extra aanlevering. Duplicaten en conflicten tellen wel. Stop bij geweigerde/ingetrokken/verlopen toegang; retry validatiefouten niet blind. Bij een limiet of tijdelijke storing: begrens herhalingen en behoud dezelfde payload. ## HTTP-fouten Stuur Content-Type: application/json. Fouten bevatten alleen een veilig code-veld; verwerk geen fouttekst alsof die een leadantwoord is. Gebruik de HTTP-status: - 400/422: ongeldige invoer; corrigeer lokaal en herhaal niet blind. - 401/403: geen geldige of toegestane toegang; stop en controleer goedkeuring, sleutelgeldigheid en rechten. Genereer niet automatisch nieuwe sleutels. - 409: dezelfde eigen externalId is gebruikt met andere inhoud; los dit bewust op. - 413: lead/lookup-JSON groter dan 64 KiB of chunk-JSON groter dan 360 KiB; controleer de transportgrenzen. - 415: gebruik Content-Type: application/json. - 429: daglimiet bereikt; stop de batch en probeer later begrensd opnieuw. - 503: tijdelijke onbeschikbaarheid; begrens retries met vertraging en dezelfde payload. Volg redirects nooit met de Bearer-sleutel. Gebruik het opgegeven canonieke HTTPS-adres. ## Gebruiken na goedkeuring ```sh node mmw-leads.mjs exists --config .mmw-leads/credentials.json --kvk 12345678 node mmw-leads.mjs submit --config .mmw-leads/credentials.json --file lead.json ``` Zet het leadvoorbeeld alleen in lead.json nadat de partner toestemming heeft gegeven om de synthetische lead te versturen. Bewaar echte persoonsgegevens niet in testfixtures. Geef de API-sleutel nooit mee in een browserapplicatie, querystring of commandoargument. De CLI leest credentials.json of de bestaande omgevingsvariabelen MMW_BASE_URL en MMW_LEAD_TOKEN. De omgeving van de integratie verzorgt zelf secretbeheer en logging.