Sessies

Een sessie is een eenmalige link naar onze omgeving. Daarmee stuur je iemand vanuit jouw dossier naar de customiser of de genodigdenlijst, zonder dat diegene bij ons een account nodig heeft.

Twee bestemmingen

  • Name
    CUSTOMIZER
    Type
    de kaart invullen en bestellen
    Description

    De omgeving waarin de familie de rouwkaart samenstelt: teksten, foto's, uitvaartinformatie. Hier wordt ook besteld.

  • Name
    INVITEE_LIST
    Type
    de genodigdenlijst
    Description

    Wie er zijn uitgenodigd, wie de kaart heeft geopend en welke persoonlijke links er zijn. Alleen voor de familie en de uitvaartonderneming.

Een sessie geeft toegang tot deze ene kaart en dit ene onderdeel. Voor het andere onderdeel vraag je een aparte link aan; een customiser-sessie opent de genodigdenlijst niet.


MUTATIONcardSessionCreate

Argumenten

  • Name
    cardId
    Type
    ID!
    Description

    Het globale id van de kaart. Een kaart van een andere partner geeft NOT_FOUND.

  • Name
    target
    Type
    CardSessionTarget!
    Description

    CUSTOMIZER of INVITEE_LIST.

De payload

  • Name
    cardSession.url
    Type
    URL!
    Description

    De link die je opent. Bevat een token dat na één gebruik dood is.

  • Name
    cardSession.target
    Type
    CardSessionTarget!
    Description

    Wat je vroeg, ter controle.

  • Name
    cardSession.expiresAt
    Type
    DateTime!
    Description

    Tien minuten na nu.

Verzoek

MUTATION
cardSessionCreate
mutation CreateCardSession($cardId: ID!, $target: CardSessionTarget!) {
  cardSessionCreate(cardId: $cardId, target: $target) {
    cardSession {
      url
      target
      expiresAt
    }
    userErrors {
      field
      message
      code
    }
  }
}

Antwoord

{
  "data": {
    "cardSessionCreate": {
      "cardSession": {
        "url": "https://memoriam.rouwkaart-online.nl/partner/toegang/h7k2p9qm4xab3cde5fgh7jkm9npq2rst",
        "target": "CUSTOMIZER",
        "expiresAt": "2026-09-25T12:10:00.000Z"
      },
      "userErrors": []
    }
  }
}

Hoe je dit in je dossier bouwt

De knop in jouw scherm roept jouw eigen server aan, die de mutatie doet en de URL teruggeeft. Vervolgens open je die in een nieuwe tab.

Doe dit niet vanuit de browser: daarvoor zou je sleutel in de frontend moeten staan, en daarmee kan iemand sessielinks opvragen naar elke kaart in jouw dossiers.

Open de tab in dezelfde klik-afhandeling. Doe je er eerst een langzame aanroep tussen, dan blokkeren browsers het openen als popup.

Een knop die werkt

// POST /dossiers/:id/rouwkaart-bewerken
app.post('/dossiers/:id/rouwkaart-bewerken', async (req, res) => {
  const dossier = await dossiers.vind(req.params.id)

  const {data} = await rouwkaart(
    `mutation CreateCardSession($cardId: ID!) {
       cardSessionCreate(cardId: $cardId, target: CUSTOMIZER) {
         cardSession { url }
         userErrors { message }
       }
     }`,
    {cardId: dossier.rouwkaartId},
  )

  const {cardSession, userErrors} = data.cardSessionCreate
  if (!cardSession) {
    return res.status(422).json({fout: userErrors[0]?.message})
  }

  res.json({url: cardSession.url})
})

Wat er gebeurt bij het openen

  1. De bezoeker opent de link met het token erin.
  2. Wij wisselen het token in voor een ondertekende sessiecookie en maken het token ongeldig.
  3. De bezoeker wordt doorgestuurd naar de kaart; het token staat niet meer in de adresbalk.
  4. Die cookie opent deze ene kaart en dit ene onderdeel. Voor de customiser vier uur, voor de genodigdenlijst een uur.
  • Name
    Tweede keer openen
    Type
    410 Gone
    Description

    "Deze link is al gebruikt." De bezoeker krijgt een nette pagina, geen foutmelding. Vang dit in jouw scherm op door de knop gewoon opnieuw te laten klikken.

  • Name
    Na tien minuten
    Type
    410 Gone
    Description

    "Deze link is verlopen."

  • Name
    Onbekend token
    Type
    404
    Description

    Bijvoorbeeld bij een half gekopieerde link.


Waarom de genodigdenlijst niet in de API zit

De lijst met genodigden bevat namen, e-mailadressen en telefoonnummers van mensen die zelf niets met jouw platform te maken hebben. Die delen wij niet als data en embedden wij nergens. Wie hem wil zien, gaat via deze link naar onze eigen pagina, waar hij onder dezelfde afspraken valt als bij ons.

Dat betekent voor jouw dossier: een knop, geen tabel.

Had je hier iets aan?