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.
Vraag een link aan op het moment dat iemand klikt, en open hem in een nieuwe
tab. Hij is tien minuten geldig en werkt precies één keer. Zet hem niet in een
mail, een logregel of een href die vooraf geladen kan worden, want dan is hij op
voordat iemand klikt.
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.
Een link opvragen
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
CUSTOMIZERofINVITEE_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 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
- De bezoeker opent de link met het token erin.
- Wij wisselen het token in voor een ondertekende sessiecookie en maken het token ongeldig.
- De bezoeker wordt doorgestuurd naar de kaart; het token staat niet meer in de adresbalk.
- 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.
Browsers en mailscanners laden links soms vooraf om een voorbeeld te tonen. Dat zou een eenmalige link opbranden voordat iemand klikt, dus wij wisselen een aangekondigde prefetch niet in. Toch is dit de reden om zo'n URL nooit in een mail te zetten: vraag hem aan bij de klik.
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.