Skip to content

postMessage ​

iConfigure gebruikt postMessage in twee aparte protocollen. Combineer ze niet bij het verwerken van events op je pagina.

A. Inzendingsreacties (integrators) ​

Wanneer PostMessage is ingeschakeld op een verzendknop, stuurt de configurator-/form-app een bericht naar window.parent na een geslaagde API-verzending.

Inschakelen via Manager → Data → Inzendingen → Actieknoppen → Triggers → PostMessage (“Voor iframe / embed-integraties”).

Berichten worden alleen verstuurd wanneer de app in een iframe draait. De app bepaalt de origin van je pagina via de browser (ancestor origin of referrer) en post alleen naar die origin, dus zet geen referrerpolicy="no-referrer" op de iframe.

Zonder PostMessage stuurt een ingesloten app na een geslaagde verzending nog steeds een minimaal bericht: { name: 'quotation', state: 'finished', productId, total }.

Offerte voltooid ​

Verstuurd wanneer de knop een offerte aanmaakt (minstens één van Offerte-PDF genereren, Bevestigingsmail versturen of POST naar een URL staat aan). pdf_url is null wanneer er geen PDF wordt gegenereerd:

javascript
{
  name: 'quotation',
  state: 'finished',
  productId: 'product-uuid',
  total: 1250.5,
  quotation_id: 'quotation-uuid',
  pdf_url: 'https://...'
}

Winkelwagenactie voltooid ​

Verstuurd wanneer de knop PostMessage aan heeft, maar geen van Offerte-PDF genereren, Bevestigingsmail versturen of POST naar een URL. Er wordt geen offerte aangemaakt en er zijn geen contactgegevens nodig:

javascript
{
  name: 'cart.action',
  state: 'finished',
  button_id: 'button-id',
  productId: 'product-uuid',
  product_id: 'product-uuid',
  dealer_id: null,
  dealer_product_id: null,
  language: 'NL',
  extra_fields: {},
  items: [ /* verrijkte configuratie-items */ ]
}

Listener op de hostpagina ​

Voor iFrame-insluitingen. Bij Script-injectie draait de configurator direct in je pagina (geen iframe), dus daar wordt geen inzendingsbericht naartoe gepost.

html
<script>
  const TRUSTED_ORIGIN = 'https://configurator.iconfigure.io'

  window.addEventListener('message', (event) => {
    if (event.origin !== TRUSTED_ORIGIN) return

    let data = event.data
    if (typeof data === 'string') {
      try { data = JSON.parse(data) } catch { return }
    }
    if (!data || data.state !== 'finished') return

    switch (data.name) {
      case 'quotation':
        console.log('Quotation ID:', data.quotation_id, 'PDF:', data.pdf_url)
        break
      case 'cart.action':
        console.log('Cart items:', data.items)
        break
    }
  })
</script>

String versus object

Inzendingsberichten worden als gewone objecten verstuurd. Strings parsen, zoals in het voorbeeld hierboven, is alleen een defensieve controle.

B. Manager-embedprotocol (iconfigure:*) ​

Gebruikt wanneer de configurator binnen Manager draait (preconfiguratie-editor, offerteregel-editor, stijlpreview). Berichten gebruiken een type dat begint met iconfigure:. De configurator wisselt deze berichten alleen uit met iConfigure Manager, dus je kunt ze niet vanaf je eigen website gebruiken.

Configurator → parent ​

typePayloadWanneer
iconfigure:ready{ productId }Configuratie geladen
iconfigure:state-update{ items, totalPrice, productId, dealerProductId }Gebruiker wijzigt opties (gedebounced), nadat de parent iconfigure:ready heeft bevestigd
iconfigure:submit{ items, totalPrice, productId, dealerProductId }Preconfiguratie opslaan in Manager

Parent → configurator ​

typePayloadWanneer
iconfigure:ack{ ackedType: 'iconfigure:ready' }iconfigure:ready bevestigen (de configurator herhaalt ready tot dit binnenkomt)
iconfigure:request-state{}Direct een iconfigure:state-update opvragen
iconfigure:load-preconfig{ preConfiguration }Opgeslagen preconfiguratie laden

Dit protocol is voornamelijk bedoeld voor Manager-tooling, niet voor typische insluitingen op klantwebsites.

Velden in de verzendpayload (API) ​

De client stuurt deze naar de add-quote-API (relevant voor maatwerkintegraties):

VeldBeschrijving
buttonIdIntern ID van de verzendknop

De inzendingsconfiguratie (en de bijbehorende PDF-template) wordt server-side bepaald op basis van het product of de showroom; output_id en templateId die de client meestuurt worden genegeerd.

Zie Inzendingen & uitvoer.

Verder lezen ​