Typeform کنیکٹر
فارم جوابات کو خودکار طور پر سنک کرنے، conversational فارمز سے لیڈز capture کرنے، اور سروے سبمیشنز اور quiz نتائج کی بنیاد پر مارکیٹنگ آٹومیشنز کو ٹرگر کرنے کے لیے Tajo کے ذریعے Typeform کو Brevo سے منسلک کریں۔
جائزہ
| خاصیت | قدر |
|---|---|
| پلیٹ فارم | Typeform |
| زمرہ | فارمز اور سروے (کسٹم) |
| سیٹ اپ کی پیچیدگی | آسان |
| آفیشل انٹیگریشن | نہیں |
| سنک شدہ ڈیٹا | جوابات، رابطے، ایونٹس، فارمز |
| تصدیق کا طریقہ | OAuth 2.0 / Personal Access Token |
خصوصیات
- ریئل ٹائم جواب سنک - webhooks کے ذریعے فارم سبمیشنز خودکار طور پر capture کریں
- رابطہ تخلیق - فارم جوابات سے Brevo رابطے بنائیں یا اپ ڈیٹ کریں
- لیڈ اسکورنگ - لیڈ اہلیت کے لیے quiz اسکورز اور فارم ڈیٹا استعمال کریں
- Hidden Fields - ذاتی نوعیت کے فارمز کے لیے Hidden Fields کے ذریعے گاہک ڈیٹا منتقل کریں
- مشروط میپنگ - جواب لاجک کی بنیاد پر مختلف فارم فیلڈز میپ کریں
- ملٹی فارم سپورٹ - مختلف Brevo فہرستوں سے متعدد typeforms منسلک کریں
شرائط
شروع کرنے سے پہلے، یقینی بنائیں کہ آپ کے پاس ہے:
- Typeform اکاؤنٹ (webhooks کے لیے Basic plan یا اس سے اوپر)
- Typeform Account Settings سے Personal Access Token
- API رسائی کے ساتھ Brevo اکاؤنٹ
- کنیکٹر اجازتوں کے ساتھ Tajo اکاؤنٹ
تصدیق
Personal Access Token
# Generate a token at 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 Authorization Flowconst 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 tokenconst 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' })});تشکیل
بنیادی سیٹ اپ
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}"فیلڈ میپنگ
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_FEEDBACKAPI اینڈ پوائنٹس
| اینڈ پوائنٹ | طریقہ | تفصیل |
|---|---|---|
https://api.typeform.com/forms | GET | تمام فارمز کی فہرست |
https://api.typeform.com/forms/{form_id} | GET | فارم حاصل کریں |
https://api.typeform.com/forms | POST | فارم بنائیں |
https://api.typeform.com/forms/{form_id} | PUT | فارم اپ ڈیٹ کریں |
https://api.typeform.com/forms/{form_id}/responses | GET | جوابات حاصل کریں |
https://api.typeform.com/forms/{form_id}/responses | DELETE | جوابات حذف کریں |
https://api.typeform.com/forms/{form_id}/webhooks/{tag} | PUT | webhook بنائیں/اپ ڈیٹ کریں |
https://api.typeform.com/forms/{form_id}/webhooks/{tag} | GET | webhook حاصل کریں |
https://api.typeform.com/forms/{form_id}/webhooks | GET | webhooks کی فہرست |
کوڈ کی مثالیں
کنیکٹر کو انیشیلائز کریں
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']});فارم جوابات حاصل کریں
// Fetch responses using the 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();
// Sync each response to 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] }); }}Webhooks سیٹ اپ کریں
// Register a webhook for real-time response notificationsawait 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 }) });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');});شرح کی حدود
| اینڈ پوائنٹ | شرح کی حد | نوٹس |
|---|---|---|
| Create API | 2 درخواستیں/سیکنڈ | فارم تخلیق اور اپ ڈیٹس |
| Responses API | 2 درخواستیں/سیکنڈ | جواب کی بازیابی |
| Webhooks API | 2 درخواستیں/سیکنڈ | webhook کا انتظام |
| تمام اینڈ پوائنٹس | 120 درخواستیں/منٹ | عالمی شرح کی حد |
جواب پیجینیشن
Responses API فی درخواست زیادہ سے زیادہ 1,000 جوابات واپس کرتی ہے۔ بڑے جواب سیٹس بازیافت کرتے وقت پیجینیشن کے لیے before یا after cursor پیرامیٹرز استعمال کریں۔
ٹربل شوٹنگ
| مسئلہ | وجہ | حل |
|---|---|---|
| Webhook موصول نہیں ہوا | Webhook غیر فعال | Typeform dashboard میں webhook فعال کریں |
| غائب جوابات | فلٹر لاگو | since/until اور completed پیرامز چیک کریں |
| Auth کی غلطی 401 | Token میعاد ختم | نیا Personal Access Token تیار کریں |
| شرح کی حد 429 | بہت زیادہ درخواستیں | درخواست throttling نافذ کریں |
| خالی جوابات | اختیاری فیلڈز | null/undefined جواب اقدار کو سنبھالیں |
ڈیبگ موڈ
connectors: typeform: debug: true log_level: verbose log_webhooks: true log_responses: trueبہترین طرز عمل
- Webhooks استعمال کریں - ریئل ٹائم جواب capture کے لیے polling پر webhooks کو ترجیح دیں
- دستخطوں کی تصدیق کریں - سیکیورٹی کے لیے ہمیشہ webhook دستخطوں کی تصدیق کریں
- Hidden Fields استعمال کریں - فارمز میں معروف گاہک ڈیٹا پہلے سے بھریں
- فیلڈ ریفرنسز میپ کریں - فیلڈ IDs کے بجائے مستحکم فیلڈ
refاقدار استعمال کریں - جزوی جوابات کو سنبھالیں - اختیاری اور skipped سوالات کا حساب رکھیں
- ری ٹرائی لاجک سیٹ اپ کریں - idempotent webhook پروسیسنگ نافذ کریں
سیکیورٹی
- OAuth 2.0 - اسکوپڈ token پر مبنی تصدیق
- Webhook دستخط - SHA-256 HMAC دستخط کی توثیق
- HTTPS صرف - تمام API اینڈ پوائنٹس کو TLS درکار ہے
- Token اسکوپنگ - کم از کم مطلوبہ OAuth اسکوپس کی درخواست کریں
- Secret کا انتظام - environment variables یا secret managers میں tokens اسٹور کریں
- GDPR کمپلائنس - ڈیٹا erasure درخواستوں کے لیے Delete Responses API استعمال کریں