Antwoorden met webhooks naar je eigen endpoint sturen
Post elk antwoord dat een campagne ontvangt ondertekend naar een HTTPS-adres van jou, of stuur elke payload vanuit een workflowstap. Zo verschilt de Webhooks-connector van Instellingen → API → Webhooks.
Op deze pagina
De connector Webhooks stuurt elk antwoord dat een campagne ontvangt naar een adres op je eigen server, als ondertekende POST, enkele ogenblikken nadat het gegeven is. Een workflow kan hem ook gebruiken, om alles te sturen wat de run weet. Aan het eind van deze handleiding heb je een endpoint dat antwoorden ontvangt, en de middelen om te controleren dat elk verzoek echt van Polzy komt.
De Webhooks-connector hoort bij Business. Alleen een Beheerder kan hem koppelen en kiezen waar de antwoorden van een campagne heen gaan.
Welke webhook heb je nodig?
Polzy kan je server op drie manieren aanroepen:
| Webhooks-connector (dit artikel) | Instellingen → API → Webhooks | Stap Uitgaande webhook | |
|---|---|---|---|
| Wat er wordt verstuurd | Elk antwoord van één campagne, of de payload van een workflowstap | Gebeurtenissen in de werkruimte: een antwoord aangemaakt, een campagne afgerond, een actie aangemaakt of afgerond | Wat de workflowstap zegt |
| Waar je het instelt | Integraties, dan het tabblad Integraties van een campagne of een workflowstap | Instellingen → API → Webhooks | Een workflow |
| Abonnement | Business | Team | Team |
| Ondertekend | X-Polzy-Signature, over de body | X-Polzy-Signature, over het tijdstempel en de body | Nee |
| Als levering mislukt | In totaal drie keer geprobeerd | Zes keer geprobeerd in ongeveer een half uur, met een logboek van elke poging | De foutregel van de stap beslist |
Voor gebeurtenissen in de hele werkruimte, zie Webhooks versturen en ontvangen.
Voordat je begint
Je hebt nodig:
- Een werkruimte op Business, en de rol Beheerder daarin.
- Integraties aangezet voor de werkruimte, onder Instellingen → Algemeen → Wat deze werkruimte doet.
- Een endpoint op internet, via HTTPS, dat een
POSTmet een JSON-body accepteert en binnen 10 seconden met een 2xx-status antwoordt. Polzy weigerthttp://-adressen en adressen binnen een privénetwerk.
De Webhooks-connector koppelen
Bij het koppelen bewaar je wat elk verzoek deelt: het ondertekeningsgeheim en eventuele headers.
- Open in de zijbalk onder Automatiseren de pagina Integraties en kies het tabblad Beschikbaar.
- Zoek Webhooks en kies Verbinden.
- Vul bij Ondertekeningsgeheim een lange willekeurige waarde in en bewaar een kopie voor je server.
- Voeg onder HTTP-headers de headers toe die je wilt meesturen, zoals
Authorization. Hun waarden worden versleuteld opgeslagen. Zie Goed om te weten voor waar ze heen gaan. - Kies Verbinden. De test antwoordt Connected. Each survey and step names the endpoint it posts to.
Laat je het ondertekeningsgeheim leeg, dan wordt er een voor je gemaakt — maar dat wordt nooit getoond, dus je zou er geen handtekeningen mee kunnen controleren. Vul je eigen geheim in. Wil je het later wijzigen, kies dan Configureren en typ het nieuwe over de bewaarde waarde heen.
Een campagne haar endpoint geven
- Open Campagnes, dan de campagne en haar tabblad Integraties.
- Zoek onder Koppeling toevoegen naar Webhooks en kies Verbinden. Staat er Instellen op de knop, dan is de connector nog niet aan de werkruimte gekoppeld.
- Vul bij Eindpunt het adres in waar de antwoorden van deze campagne naartoe worden gepost.
- Kies Wijzigingen opslaan.
Webhooks staat daarna onder Gekoppeld aan deze campagne, met Stuurt naar en het adres, de schakelaar, Configuratie bewerken, Verbinding verbreken, en hoeveel antwoorden er zijn verstuurd en mislukt. Elke campagne kan naar haar eigen endpoint posten.
Wat je endpoint ontvangt
Elk antwoord is één POST met deze headers:
| Header | Wat erin staat |
|---|---|
Content-Type | application/json |
X-Polzy-Event | response.submitted voor een antwoord van een campagne; de Gebeurtenisnaam van de stap vanuit een workflow. |
X-Polzy-Signature | De HMAC-SHA256 van de ruwe body van het verzoek, gemaakt met het ondertekeningsgeheim, in hexadecimale notatie. |
X-Polzy-Timestamp | De timestamp uit de body. |
Idempotency-Key | Alleen vanuit een workflowstap: gelijk bij een herhaling van dezelfde stap, zodat je die kunt negeren. |
En deze JSON-body:
| Veld | Wat erin staat |
|---|---|
event | response.submitted. |
timestamp | Wanneer het verzoek werd verstuurd. Bij een anoniem antwoord de dag waarop het gegeven is. |
survey.id, survey.title | De ID en de titel van de enquête. |
response.id | De ID van het antwoord in Polzy. Leeg bij een anoniem antwoord. |
response.submittedAt | Wanneer het antwoord werd afgerond. Bij een anoniem antwoord alleen de dag. |
response.answers | Eén item per beantwoorde vraag, elk met questionId, questionText en value. |
response.score | De totaalscore, als die berekend was toen het verzoek werd verstuurd. |
Een anoniem antwoord bevat wat er gezegd is, de score en de dag, en niets waarmee de schrijver te herkennen of in de tijd te plaatsen is. Polzy wacht bij elk antwoord op de veiligheidscontrole, tot 10 minuten, voordat het wordt verstuurd; een antwoord dat voor veiligheidsbeoordeling wordt achtergehouden, komt aan als plaatsvervangende tekst. De minimale groepsgrootte houdt losse antwoorden niet tegen.
De handtekening controleren
- Lees de body van het verzoek precies zoals die binnenkwam, voordat je hem verwerkt.
- Bereken er de HMAC-SHA256 van met je ondertekeningsgeheim, in hexadecimale notatie.
- Vergelijk die met
X-Polzy-Signature, met een vergelijking in constante tijd. Wijken ze af, weiger het verzoek dan.
Het tijdstempel maakt deel uit van de body, dus een gewijzigd tijdstempel breekt ook de handtekening.
Een webhook versturen vanuit een workflow
- Open Workflows en de workflow, of begin een nieuwe.
- Sleep onder Connectors in Geïnstalleerde stappen de stap Webhook versturen · Webhooks naar het canvas.
- Vul bij Endpoint in waar deze stap naartoe post.
- Houd bij Gebeurtenisnaam
workflow.stepaan of noem de gebeurtenis die je server verwacht. Die wordt verstuurd alsX-Polzy-Event. - Laat Inhoud leeg om alles te sturen wat de run weet, of schrijf de JSON die je wilt, met
{{om waarden uit de run in te voegen. - Kies Test versturen om één verzoek te posten dat gevuld is met een voorbeeldantwoord.
De stap wordt ondertekend met het geheim van de koppeling en geeft het antwoord van je server door als {{connector.statusCode}} en {{connector.response}}.
Controleren of het werkt
Op het tabblad Integraties van de campagne telt de activiteitsregel de verstuurde en de mislukte antwoorden. De eigen pagina van de connector toont elke levering onder Activiteit, met Gelukt of Mislukt en de reden.
Problemen oplossen
Onder Activiteit staat bij een mislukte levering Webhook failed: en de reden; de run van een workflow toont dezelfde reden zonder dat voorvoegsel.
- Webhook failed: only https endpoints are allowed. Het endpoint moet beginnen met
https://. - Webhook failed: private addresses are not allowed. Het adres wijst naar een privénetwerk, zoals
localhostof10.0.0.5. Gebruik een adres dat vanaf internet bereikbaar is. - Webhook failed: that host could not be found. De naam in het adres bestaat niet. Controleer de spelling.
- Webhook failed: met een status, zoals
500, of timeout of 10000ms exceeded. Je endpoint antwoordde met een fout, of deed er langer dan 10 seconden over. Alles behalve een 2xx-antwoord telt als mislukt, en de levering wordt in totaal drie keer geprobeerd. - No endpoint for this survey. Set one on its Integrations tab. De campagne heeft geen endpoint. Voeg er een toe met Configuratie bewerken op het tabblad Integraties van de campagne.
- De handtekening klopt niet. Bereken haar over de ruwe body, vóór enige verwerking, met het geheim dat je hebt ingevuld. Is het geheim voor je gemaakt, vul dan je eigen geheim in.
- Je header komt niet aan. Zie hieronder: headers gaan alleen naar een host waar de koppeling zelf naartoe post.
Antwoorden die binnenkwamen voordat het endpoint was opgeslagen, of terwijl de schakelaar uit stond, worden later niet verstuurd. Exporteer ze in plaats daarvan vanuit Antwoorden van de enquête.
Goed om te weten
- Waar gaan de HTTP-headers heen? Alleen naar een host waar de koppeling zelf naartoe post. Een endpoint dat een campagne of een stap op een andere host kiest, wordt zonder headers aangeroepen, zodat een bewaarde
Authorization-waarde nooit een adres bereikt waarvoor ze niet bedoeld was. Vertrouw op de handtekening om de verzoeken van Polzy van die van anderen te onderscheiden. - Worden onvoltooide antwoorden verstuurd? Nee. Alleen afgeronde antwoorden, elk één keer.
- Kan mijn endpoint met gegevens antwoorden? Voor een workflowstap wel: het antwoord wordt bewaard als
{{connector.response}}voor latere stappen. Voor de antwoorden van een campagne telt alleen de status van het antwoord.
Gerelateerde artikelen
Ingelogde leden kunnen het Polzy vragen of het team een bericht sturen via Support. Hoe snel we antwoorden, hangt af van je abonnement.
