Typeform-kobling

Koble Typeform til Brevo gjennom Tajo for å automatisk synkronisere skjemasvar, fange leads fra samtalebaserte skjemaer og utløse markedsføringsautomatiseringer basert på undersøkelsesinnsendinger og quizresultater.

Oversikt

EgenskapVerdi
PlattformTypeform
KategoriSkjemaer og undersøkelser (Custom)
OppsettskompleksitetEnkel
Offisiell integrasjonNei
Synkroniserte dataSvar, kontakter, hendelser, skjemaer
AutentiseringsmetodeOAuth 2.0 / personlig tilgangstoken

Funksjoner

  • Sanntidssvarsynkronisering - Fang skjemainnsendinger automatisk via webhooks
  • Kontaktopprettelse - Opprett eller oppdater Brevo-kontakter fra skjemasvar
  • Lead scoring - Bruk quiz-score og skjemadata for kvalifisering av leads
  • Hidden Fields - Send kundedata via Hidden Fields for personaliserte skjemaer
  • Betinget mapping - Mapp ulike skjemafelt basert på svarlogikk
  • Støtte for flere skjemaer - Koble flere typeforms til ulike Brevo-lister

Forutsetninger

Før du begynner, sørg for at du har:

  1. En Typeform-konto (Basic-plan eller høyere for webhooks)
  2. Et personlig tilgangstoken fra Typeform Account Settings
  3. En Brevo-konto med API-tilgang
  4. En Tajo-konto med konnektor-rettigheter

Autentisering

Personlig tilgangstoken

Terminal window
# Generer et token på https://admin.typeform.com/account#/section/tokens
export TYPEFORM_ACCESS_TOKEN=tfp_your_personal_access_token
export TAJO_API_KEY=your_tajo_api_key
export BREVO_API_KEY=your_brevo_api_key

OAuth 2.0

// OAuth 2.0-autorisasjonsflyt
const authUrl = 'https://api.typeform.com/oauth/authorize?' +
new URLSearchParams({
client_id: process.env.TYPEFORM_CLIENT_ID,
redirect_uri: 'https://your-app.com/callback',
scope: 'forms:read responses:read webhooks:write accounts:read',
state: generateState()
});
// Bytt autorisasjonskoden mot tilgangstoken
const tokenResponse = await fetch('https://api.typeform.com/oauth/token', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
grant_type: 'authorization_code',
code: authorizationCode,
client_id: process.env.TYPEFORM_CLIENT_ID,
client_secret: process.env.TYPEFORM_CLIENT_SECRET,
redirect_uri: 'https://your-app.com/callback'
})
});

Konfigurasjon

Grunnleggende oppsett

connectors:
typeform:
enabled: true
access_token: "${TYPEFORM_ACCESS_TOKEN}"
forms:
- form_id: "abc123"
list_id: 5
mapping:
email_field: "email"
name_field: "full_name"
- form_id: "xyz789"
list_id: 6
mapping:
email_field: "work_email"
sync:
responses: true
contacts: true
events: true
webhook:
enabled: true
secret: "${TYPEFORM_WEBHOOK_SECRET}"

Feltmapping

field_mapping:
# Mapp Typeform-feltreferanser til Brevo-attributter
email: email
name: FIRSTNAME
company: COMPANY
phone: SMS
score: LEAD_SCORE
quiz_result: QUIZ_SCORE
nps_rating: NPS_SCORE
feedback: LAST_FEEDBACK

API-endepunkter

EndepunktMetodeBeskrivelse
https://api.typeform.com/formsGETList alle skjemaer
https://api.typeform.com/forms/{form_id}GETHent et skjema
https://api.typeform.com/formsPOSTOpprett et skjema
https://api.typeform.com/forms/{form_id}PUTOppdater et skjema
https://api.typeform.com/forms/{form_id}/responsesGETHent svar
https://api.typeform.com/forms/{form_id}/responsesDELETESlett svar
https://api.typeform.com/forms/{form_id}/webhooks/{tag}PUTOpprett/oppdater webhook
https://api.typeform.com/forms/{form_id}/webhooks/{tag}GETHent webhook
https://api.typeform.com/forms/{form_id}/webhooksGETList webhooks

Kodeeksempler

Initialiser kobling

import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({
apiKey: process.env.TAJO_API_KEY,
brevoApiKey: process.env.BREVO_API_KEY
});
await tajo.connectors.connect('typeform', {
accessToken: process.env.TYPEFORM_ACCESS_TOKEN,
forms: ['abc123', 'xyz789']
});

Hent skjemasvar

// Hent svar ved hjelp av Responses API
const response = await fetch(
'https://api.typeform.com/forms/abc123/responses?' +
new URLSearchParams({
page_size: 25,
since: '2024-01-01T00:00:00Z',
completed: 'true'
}),
{
headers: {
'Authorization': `Bearer ${process.env.TYPEFORM_ACCESS_TOKEN}`
}
}
);
const data = await response.json();
// Synkroniser hvert svar til Brevo
for (const item of data.items) {
const answers = item.answers;
const email = answers.find(a => a.field.ref === 'email')?.email;
if (email) {
await tajo.contacts.sync({
email,
attributes: {
FIRSTNAME: answers.find(a => a.field.ref === 'name')?.text,
LEAD_SCORE: item.calculated?.score || 0
},
listIds: [5]
});
}
}

Sett opp webhooks

// Registrer en webhook for sanntidsvarsler om svar
await fetch(
'https://api.typeform.com/forms/abc123/webhooks/tajo-sync',
{
method: 'PUT',
headers: {
'Authorization': `Bearer ${process.env.TYPEFORM_ACCESS_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: 'https://api.tajo.io/webhooks/typeform',
enabled: true,
secret: process.env.TYPEFORM_WEBHOOK_SECRET
})
}
);

Håndter webhook-hendelser

app.post('/webhooks/typeform', async (req, res) => {
// Verifiser webhook-signatur
const signature = req.headers['typeform-signature'];
const isValid = verifyTypeformSignature(
req.rawBody, signature, process.env.TYPEFORM_WEBHOOK_SECRET
);
if (!isValid) return res.status(401).send('Unauthorized');
const { form_response } = req.body;
await tajo.connectors.handleWebhook('typeform', {
topic: 'form_response',
payload: form_response
});
res.status(200).send('OK');
});

Ratebegrensninger

EndepunktRatebegrensningMerknader
Create API2 forespørsler/sekSkjemaopprettelse og oppdateringer
Responses API2 forespørsler/sekHenting av svar
Webhooks API2 forespørsler/sekWebhook-administrasjon
Alle endepunkter120 forespørsler/minGlobal ratebegrensning

Paginering av svar

Responses API returnerer maksimalt 1 000 svar per forespørsel. Bruk before- eller after-markørparameterne for paginering når du henter store svarsett.

Feilsøking

ProblemÅrsakLøsning
Webhook ikke mottattWebhook deaktivertAktiver webhook i Typeform-dashbordet
Manglende svarFilter aktivertSjekk since/until- og completed-parametere
Autentiseringsfeil 401Token utløptGenerer nytt personlig tilgangstoken
Ratebegrensning 429For mange forespørslerImplementer forespørselsstruping
Tomme svarValgfrie feltHåndter null/undefined-verdier for svar

Feilsøkingsmodus

connectors:
typeform:
debug: true
log_level: verbose
log_webhooks: true
log_responses: true

Beste praksis

  1. Bruk webhooks - Foretrekk webhooks fremfor polling for sanntidssvarfangst
  2. Valider signaturer - Verifiser alltid webhook-signaturer for sikkerhet
  3. Bruk Hidden Fields - For-utfyll kjente kundedata i skjemaer
  4. Mapp feltreferanser - Bruk stabile ref-feltverdier i stedet for felt-ID-er
  5. Håndter delvise svar - Ta høyde for valgfrie og hoppede spørsmål
  6. Sett opp retry-logikk - Implementer idempotent webhook-behandling

Sikkerhet

  • OAuth 2.0 - Avgrenset token-basert autentisering
  • Webhook-signaturer - SHA-256 HMAC-signaturvalidering
  • Kun HTTPS - Alle API-endepunkter krever TLS
  • Token-scoping - Be om minimumsnødvendige OAuth-scopes
  • Hemmelighetshåndtering - Lagre tokens i miljøvariabler eller hemmelighetsadministratorer
  • GDPR-samsvar - Bruk Delete Responses API for forespørsler om datasletting

Relaterte ressurser

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI-assistent

Hei! Spør meg om dokumentasjonen.