Typeform Connector

Poveži Typeform z Brevo prek Tajo za samodejno sinhronizacijo odgovorov obrazcev, zajemanje potencialnih strank iz pogovornih obrazcev in sprožanje marketinških avtomatizacij na osnovi oddaj anket in rezultatov kvizov.

Pregled

LastnostVrednost
PlatformaTypeform
KategorijaObrazci in ankete (po meri)
Zahtevnost nastavitveEnostavna
Uradna integracijaNe
Sinhronizirani podatkiOdgovori, stiki, dogodki, obrazci
Metoda avtentikacijeOAuth 2.0 / Personal Access Token

Funkcionalnosti

  • Sinhronizacija odgovorov v realnem času – samodejno zajemaj oddaje obrazcev prek webhooks
  • Ustvarjanje stikov – ustvari ali posodobi stike Brevo iz odgovorov obrazcev
  • Ocenjevanje potencialnih strank – za kvalifikacijo strank uporabi rezultate kvizov in podatke obrazcev
  • Skrita polja – prek skritih polj posreduj podatke stranke za personalizirane obrazce
  • Pogojno preslikavanje – preslikaj različna polja obrazca glede na logiko odgovorov
  • Podpora za več obrazcev – poveži več typeformov z različnimi seznami Brevo

Predpogoji

Preden začneš, se prepričaj, da imaš:

  1. Račun Typeform (plan Basic ali višji za webhooks)
  2. Personal Access Token iz Nastavitev računa Typeform
  3. Brevo račun z dostopom do API
  4. Tajo račun z dovoljenji za konektorje

Avtentikacija

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'
})
});

Konfiguracija

Osnovna nastavitev

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}"

Preslikava polj

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

Končne točke API

Končna točkaMetodaOpis
https://api.typeform.com/formsGETSeznam vseh obrazcev
https://api.typeform.com/forms/{form_id}GETPridobi obrazec
https://api.typeform.com/formsPOSTUstvari obrazec
https://api.typeform.com/forms/{form_id}PUTPosodobi obrazec
https://api.typeform.com/forms/{form_id}/responsesGETPridobi odgovore
https://api.typeform.com/forms/{form_id}/responsesDELETEIzbriši odgovore
https://api.typeform.com/forms/{form_id}/webhooks/{tag}PUTUstvari/posodobi webhook
https://api.typeform.com/forms/{form_id}/webhooks/{tag}GETPridobi webhook
https://api.typeform.com/forms/{form_id}/webhooksGETSeznam webhooks

Primeri kode

Inicializacija konektorja

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']
});

Pridobivanje odgovorov na obrazec

// 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]
});
}
}

Nastavitev 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
})
}
);

Obravnava dogodkov Webhook

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');
});

Omejitve hitrosti

Končna točkaOmejitev hitrostiOpombe
Create API2 zahtevka/sUstvarjanje in posodabljanje obrazcev
Responses API2 zahtevka/sPridobivanje odgovorov
Webhooks API2 zahtevka/sUpravljanje webhooks
Vse končne točke120 zahtevkov/minGlobalna omejitev hitrosti

Paginacija odgovorov

Responses API vrne največ 1.000 odgovorov na zahtevek. Za paginacijo pri pridobivanju velikih nizov odgovorov uporabi parametra kazalca before ali after.

Odpravljanje težav

TežavaVzrokRešitev
Webhook ni prejetWebhook onemogočenOmogoči webhook v nadzorni plošči Typeform
Manjkajoči odgovoriUporabljen filterPreveri parametre since/until in completed
Napaka avtentikacije 401Potekel žetonUstvari nov Personal Access Token
Omejitev hitrosti 429Preveč zahtevkovImplementiraj omejevanje zahtevkov
Prazni odgovoriNeobvezna poljaObravnavaj vrednosti null/undefined odgovorov

Način odpravljanja napak

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

Najboljše prakse

  1. Uporabljaj webhooks – webhooks so boljši od anketiranja za zajem odgovorov v realnem času
  2. Potrjevanje podpisov – vedno preverjaj podpise webhooks za varnost
  3. Uporabi skrita polja – v obrazcih vnaprej zapolni znane podatke stranke
  4. Preslikuj reference polj – namesto ID-jev polj uporabi stabilne vrednosti ref
  5. Obravnavaj delne odgovore – upoštevaj neobvezna in preskočena vprašanja
  6. Nastavi logiko ponovnih poskusov – implementiraj idempotentno obdelavo webhooks

Varnost

  • OAuth 2.0 – avtentikacija na osnovi obsegastih žetonov
  • Podpisi webhooks – preverjanje podpisa SHA-256 HMAC
  • Samo HTTPS – vse končne točke API zahtevajo TLS
  • Obseg žetonov – zahtevaj minimalne zahtevane obsege OAuth
  • Upravljanje skrivnosti – žetone shrani v spremenljivke okolja ali upravljalce skrivnosti
  • Skladnost z GDPR – za zahteve po brisanju podatkov uporabi Delete Responses API

Povezani viri

Subscribe to updates

developer-docs

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

auto-detect
AI pomočnik

Živjo! Vprašajte me o dokumentaciji.