Typeform-kobling
Koblingsstatus: Planlagt Ikke bygget ennå. Tajo kjører ikke denne koblingen i dag.
Illustrasjon · eksempeldata
Eksempel på synkronisering
Kilde
Typeform
Koblingsstatus: Planlagt
Mål
Det andre verktøyet ditt
Koblingsstatus: Eget verktøy
Feltkobling
| Kildefelt | Målfelt | Eksempelverdi |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Utkast
- Se gjennom én oppføring
- Godkjenn denne versjonen
Status gjelder hver enkelt kobling og garanterer ikke at denne synkroniseringen er klar. Feltene er illustrative. Kontroller faktisk skjema og tillatelser før synkroniseringen kjører.
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
| Egenskap | Verdi |
|---|---|
| Plattform | Typeform |
| Kategori | Skjemaer og undersøkelser (Custom) |
| Oppsettskompleksitet | Enkel |
| Offisiell integrasjon | Nei |
| Synkroniserte data | Svar, kontakter, hendelser, skjemaer |
| Autentiseringsmetode | OAuth 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:
- En Typeform-konto (Basic-plan eller høyere for webhooks)
- Et personlig tilgangstoken fra Typeform Account Settings
- En Brevo-konto med API-tilgang
- En Tajo-konto med konnektor-rettigheter
Autentisering
Personlig tilgangstoken
# Generer et token på https://admin.typeform.com/account#/section/tokensexport TYPEFORM_ACCESS_TOKEN=tfp_your_personal_access_tokenexport TAJO_API_KEY=your_tajo_api_keyexport BREVO_API_KEY=your_brevo_api_keyOAuth 2.0
// OAuth 2.0-autorisasjonsflytconst 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 tilgangstokenconst 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_FEEDBACKAPI-endepunkter
| Endepunkt | Metode | Beskrivelse |
|---|---|---|
https://api.typeform.com/forms | GET | List alle skjemaer |
https://api.typeform.com/forms/{form_id} | GET | Hent et skjema |
https://api.typeform.com/forms | POST | Opprett et skjema |
https://api.typeform.com/forms/{form_id} | PUT | Oppdater et skjema |
https://api.typeform.com/forms/{form_id}/responses | GET | Hent svar |
https://api.typeform.com/forms/{form_id}/responses | DELETE | Slett svar |
https://api.typeform.com/forms/{form_id}/webhooks/{tag} | PUT | Opprett/oppdater webhook |
https://api.typeform.com/forms/{form_id}/webhooks/{tag} | GET | Hent webhook |
https://api.typeform.com/forms/{form_id}/webhooks | GET | List 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 APIconst 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 Brevofor (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 svarawait 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.example.com/webhooks/typeform', enabled: true, secret: process.env.TYPEFORM_WEBHOOK_SECRET }) });Caution
Adressen example.com ovenfor er en plassholder til Tajo-endepunktet er tilgjengelig.
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
| Endepunkt | Ratebegrensning | Merknader |
|---|---|---|
| Create API | 2 forespørsler/sek | Skjemaopprettelse og oppdateringer |
| Responses API | 2 forespørsler/sek | Henting av svar |
| Webhooks API | 2 forespørsler/sek | Webhook-administrasjon |
| Alle endepunkter | 120 forespørsler/min | Global 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 | Årsak | Løsning |
|---|---|---|
| Webhook ikke mottatt | Webhook deaktivert | Aktiver webhook i Typeform-dashbordet |
| Manglende svar | Filter aktivert | Sjekk since/until- og completed-parametere |
| Autentiseringsfeil 401 | Token utløpt | Generer nytt personlig tilgangstoken |
| Ratebegrensning 429 | For mange forespørsler | Implementer forespørselsstruping |
| Tomme svar | Valgfrie felt | Håndter null/undefined-verdier for svar |
Feilsøkingsmodus
connectors: typeform: debug: true log_level: verbose log_webhooks: true log_responses: trueBeste praksis
- Bruk webhooks - Foretrekk webhooks fremfor polling for sanntidssvarfangst
- Valider signaturer - Verifiser alltid webhook-signaturer for sikkerhet
- Bruk Hidden Fields - For-utfyll kjente kundedata i skjemaer
- Mapp feltreferanser - Bruk stabile
ref-feltverdier i stedet for felt-ID-er - Håndter delvise svar - Ta høyde for valgfrie og hoppede spørsmål
- 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