Bed om tidlig adgang til Tajo

Indtast dit fornavn og en e-mailadresse eller et telefonnummer. Vi kontakter dig med oplysninger om adgang til Tajo.

Typeform Connector

Forbind Typeform til Brevo via Tajo for automatisk at synkronisere formularsvar, fange leads fra konversationsformularer og udløse marketingautomatiseringer baseret på undersøgelsesindsendelser og quiz-resultater.

Oversigt

EgenskabVærdi
PlatformTypeform
KategoriFormularer og undersøgelser (brugerdefineret)
OpsætningskompleksitetLet
Officiel integrationNej
Synkroniserede dataSvar, kontakter, hændelser, formularer
AutentifikationsmetodeOAuth 2.0 / Personal Access Token

Funktioner

  • Realtidssynkronisering af svar - Opfang automatisk formularindsendelser via webhooks
  • Oprettelse af kontakter - Opret eller opdatér Brevo-kontakter fra formularsvar
  • Leadscoring - Brug quiz-scores og formulardata til leadkvalificering
  • Hidden Fields - Send kundedata via Hidden Fields til personaliserede formularer
  • Betinget mapping - Map forskellige formularfelter baseret på svarlogik
  • Flerformular-understøttelse - Forbind flere typeforms til forskellige Brevo-lister

Forudsætninger

Før du begynder, skal du sikre dig, at du har:

  1. En Typeform-konto (Basic-plan eller højere for webhooks)
  2. Et Personal Access Token fra Typeform Account Settings
  3. En Brevo-konto med API-adgang
  4. En Tajo-konto med konnektorrettigheder

Autentifikation

Personal Access Token

Terminal window
# Generate a token at 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 Authorization Flow
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()
});
// Exchange authorization code for access token
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'
})
});

Konfiguration

Grundlæggende opsætning

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:
# Map Typeform field references to Brevo attributes
email: email
name: FIRSTNAME
company: COMPANY
phone: SMS
score: LEAD_SCORE
quiz_result: QUIZ_SCORE
nps_rating: NPS_SCORE
feedback: LAST_FEEDBACK

API-endpoints

EndpointMetodeBeskrivelse
https://api.typeform.com/formsGETVis alle formularer
https://api.typeform.com/forms/{form_id}GETHent en formular
https://api.typeform.com/formsPOSTOpret en formular
https://api.typeform.com/forms/{form_id}PUTOpdatér en formular
https://api.typeform.com/forms/{form_id}/responsesGETHent svar
https://api.typeform.com/forms/{form_id}/responsesDELETESlet svar
https://api.typeform.com/forms/{form_id}/webhooks/{tag}PUTOpret/opdatér webhook
https://api.typeform.com/forms/{form_id}/webhooks/{tag}GETHent webhook
https://api.typeform.com/forms/{form_id}/webhooksGETVis webhooks

Kodeeksempler

Initialisér konnektor

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 formularsvar

// Fetch responses using the 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();
// Sync each response to 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]
});
}
}

Opsæt webhooks

// Register a webhook for real-time response notifications
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åndtér webhook-hændelser

app.post('/webhooks/typeform', async (req, res) => {
// Verify webhook signature
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');
});

Ratebegrænsninger

EndpointRatebegrænsningNoter
Create API2 forespørgsler/sekOprettelse og opdatering af formularer
Responses API2 forespørgsler/sekHentning af svar
Webhooks API2 forespørgsler/sekWebhook-administration
Alle endpoints120 forespørgsler/minGlobal ratebegrænsning

Paginering af svar

Responses API returnerer maksimalt 1.000 svar per forespørgsel. Brug before- eller after-cursor-parametrene til paginering ved hentning af store svardatasæt.

Fejlfinding

ProblemÅrsagLøsning
Webhook ikke modtagetWebhook deaktiveretAktivér webhook i Typeform-dashboard
Manglende svarFilter anvendtTjek since/until og completed-params
Auth-fejl 401Token udløbetGenerér nyt Personal Access Token
Ratebegrænsning 429For mange forespørgslerImplementér request throttling
Tomme svarValgfri felterHåndtér null-/undefined-svarsværdier

Fejlfindingstilstand

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

Best practices

  1. Brug webhooks - Foretræk webhooks frem for polling til realtidsopfangning af svar
  2. Validér signaturer - Verificér altid webhook-signaturer af sikkerhedshensyn
  3. Brug Hidden Fields - Præudfyld kendte kundedata i formularer
  4. Map feltreferencer - Brug stabile felt-ref-værdier i stedet for felt-id’er
  5. Håndtér delvise svar - Tag højde for valgfrie og sprungne spørgsmål
  6. Opsæt retry-logik - Implementér idempotent webhook-behandling

Sikkerhed

  • OAuth 2.0 - Scoped tokenbaseret autentifikation
  • Webhook-signaturer - SHA-256 HMAC-signaturvalidering
  • Kun HTTPS - Alle API-endpoints kræver TLS
  • Tokenscoping - Anmod om minimumskrævede OAuth-scopes
  • Hemmelighedshåndtering - Opbevar tokens i miljøvariabler eller secret managers
  • GDPR-overholdelse - Brug Delete Responses API til anmodninger om dataslettelse

Relaterede ressourcer

Bed om tidlig adgang til Tajo

Indtast dit fornavn og en e-mailadresse eller et telefonnummer. Vi kontakter dig med oplysninger om adgang til Tajo.

automatisk genkendelse
AI-assistent

Hej! Spørg mig om dokumentationen.