WorkflowX ile iş akışlarını otomatikleştirin. Gerçek kod örnekleri ve kullanım senaryoları ile sistemi hızla öğrenin.
import WorkflowX from '@workflowx/sdk'; const workflowx = new WorkflowX({ apiKey: 'your-api-key', baseUrl: 'https://api.workflowx.com', organization: 'your-org-id' }); // Bağlantıyı test et await workflowx.auth.verify(); console.log('WorkflowX bağlantısı başarılı!');
# .env dosyası WORKFLOWX_API_KEY=your-api-key WORKFLOWX_ORG_ID=your-org-id WORKFLOWX_WEBHOOK_SECRET=your-webhook-secret
// TypeScript ile import WorkflowX, { Workflow, Form, User } from '@workflowx/sdk'; const workflowx = new WorkflowX({ apiKey: process.env.WORKFLOWX_API_KEY! });
Gerçek senaryolarla WorkflowX'i nasıl kullanacağınızı öğrenin
Yeni bir iş akışı oluşturun ve adımları tanımlayın
// Yeni iş akışı oluştur
const workflow = await workflowx.workflows.create({
name: "Belge Onay Süreci",
description: "Belgelerin onaylanması için gerekli adımlar",
steps: [
{
name: "Başvuru Kontrolü",
assignee: "kontrol@firma.com",
type: "review",
deadline: 2 // 2 gün
},
{
name: "Müdür Onayı",
assignee: "mudur@firma.com",
type: "approval",
deadline: 1
},
{
name: "Arşivleme",
assignee: "arsiv@firma.com",
type: "archive",
deadline: 1
}
]
});
console.log("İş akışı oluşturuldu:", workflow.id);
Dinamik form oluşturun ve iş akışına bağlayın
// Form oluştur
const form = await workflowx.forms.create({
title: "Belge Onay Formu",
fields: [
{
name: "belge_tipi",
type: "select",
label: "Belge Tipi",
required: true,
options: ["Fatura", "Sözleşme", "Rapor"]
},
{
name: "aciklama",
type: "textarea",
label: "Açıklama",
required: true
},
{
name: "dosya",
type: "file",
label: "Belge Dosyası",
required: true,
accept: ".pdf,.doc,.docx"
}
],
workflow_id: workflow.id
});
// Form gönderimi dinle
form.onSubmit(async (submission) => {
console.log("Yeni form gönderimi:", submission);
// İş akışını başlat
await workflowx.workflows.start(workflow.id, {
form_data: submission.data,
initiator: submission.user
});
});
Takım üyelerini ekleyin ve roller atayın
// Toplu kullanıcı ekleme
const users = await workflowx.users.bulkCreate([
{
email: "ahmet@firma.com",
name: "Ahmet Yılmaz",
role: "manager",
department: "İnsan Kaynakları"
},
{
email: "fatma@firma.com",
name: "Fatma Demir",
role: "employee",
department: "Muhasebe"
}
]);
// Kullanıcıya rol atama
await workflowx.users.assignRole("ahmet@firma.com", {
role: "workflow_admin",
permissions: ["create_workflow", "approve_all", "view_analytics"]
});
// Departman bazlı kullanıcıları listeleme
const hrTeam = await workflowx.users.list({
department: "İnsan Kaynakları",
status: "active"
});
Webhook'lar ile sistem entegrasyonu sağlayın
// Webhook dinleyicisi oluştur
workflowx.webhooks.create({
url: "https://yourapp.com/workflowx-webhook",
events: [
"workflow.started",
"workflow.completed",
"workflow.failed",
"task.assigned",
"task.completed"
]
});
// Express.js webhook handler
app.post('/workflowx-webhook', (req, res) => {
const { event, data } = req.body;
switch(event) {
case 'workflow.completed':
// E-posta gönder
sendEmail(data.initiator.email, {
subject: "İş Akışı Tamamlandı",
body: `${data.workflow.name} başarıyla tamamlandı.`
});
break;
case 'task.assigned':
// Slack bildirimi
slackNotify(data.assignee.slack_id, {
message: `Yeni görev: ${data.task.name}`,
deadline: data.task.deadline
});
break;
}
res.status(200).send('OK');
});
Detaylı raporlar ve metrikler alın
// Dashboard verileri
const dashboard = await workflowx.analytics.getDashboard({
date_range: "last_30_days",
department: "all"
});
console.log("Aktif iş akışları:", dashboard.active_workflows);
console.log("Tamamlanan görevler:", dashboard.completed_tasks);
console.log("Ortalama tamamlanma süresi:", dashboard.avg_completion_time);
// Departman performansı
const departmentStats = await workflowx.analytics.getDepartmentPerformance({
departments: ["İK", "Muhasebe", "Satış"],
metrics: ["completion_rate", "avg_time", "task_count"]
});
// Özel rapor oluştur
const customReport = await workflowx.reports.generate({
type: "workflow_efficiency",
filters: {
date_from: "2024-01-01",
date_to: "2024-01-31",
workflow_ids: [workflow.id]
},
format: "pdf",
email_to: ["mudur@firma.com"]
});
Siteleri analiz edin ve veri çekin, CSS selector sorunlarını çözün
// 1. Site analizi yap
const siteAnalysis = await workflowx.scraper.analyzePage({
url: "https://kasarcim.com/urunler",
debug: true
});
console.log("Sayfa yapısı:", siteAnalysis.structure);
console.log("Link'ler:", siteAnalysis.links);
// 2. Alternatif selector'ları test et
const testSelectors = [
"a[href*='urun']",
"a[href*='product']",
".product-link",
"[data-product]",
"a.item-link"
];
for (const selector of testSelectors) {
const test = await workflowx.scraper.testSelector({
url: "https://kasarcim.com/urunler",
selector: selector
});
console.log(`${selector}: ${test.count} element bulundu`);
}
// 3. Dinamik yükleme ile scrape
const scrapeResult = await workflowx.scraper.create({
url: "https://kasarcim.com/urunler",
wait_strategy: "dynamic", // Sayfa tamamen yüklenene kadar bekle
scroll_to_bottom: true, // Lazy loading için scroll
wait_time: 5000, // 5 saniye bekle
selectors: {
product_links: {
selector: "a", // Önce tüm link'leri al
multiple: true,
filter: link => link.href && link.href.includes('urun'), // Filtrele
extract: {
text: "textContent",
url: "@href"
}
}
},
fallback_selectors: {
// Birincil selector çalışmazsa alternatifleri dene
product_names: [
".product-title",
".item-name",
"h3 a",
"[data-product-name]"
]
}
});
console.log("Başarılı scraping:", scrapeResult.extracted_data);
Akıllı dallanma ve koşullu adımlar oluşturun
// Koşullu iş akışı
const conditionalWorkflow = await workflowx.workflows.create({
name: "Harcama Onay Süreci",
steps: [
{
name: "Harcama Kontrolü",
type: "condition",
condition: {
field: "amount",
operator: "greater_than",
value: 1000
},
true_path: [
{
name: "Müdür Onayı",
assignee: "mudur@firma.com",
type: "approval"
},
{
name: "Genel Müdür Onayı",
assignee: "gm@firma.com",
type: "approval",
condition: {
field: "amount",
operator: "greater_than",
value: 5000
}
}
],
false_path: [
{
name: "Otomatik Onay",
type: "auto_approve"
}
]
}
]
});
// İş akışını başlat
await workflowx.workflows.start(conditionalWorkflow.id, {
data: {
amount: 2500,
description: "Bilgisayar satın alma",
requestor: "ahmet@firma.com"
}
});
Tüm SDK methodları ve parametreleri
workflowx.workflows.create(config)
Yeni iş akışı oluşturur
workflowx.workflows.start(id, data)
İş akışını başlatır
workflowx.workflows.list(filters)
İş akışlarını listeler
workflowx.workflows.get(id)
İş akışı detaylarını getirir
workflowx.forms.create(config)
Yeni form oluşturur
workflowx.forms.submit(id, data)
Form gönderir
workflowx.forms.getSubmissions(id)
Form yanıtlarını getirir
workflowx.users.create(userData)
Yeni kullanıcı oluşturur
workflowx.users.assignRole(email, roleData)
Kullanıcıya rol atar
workflowx.users.list(filters)
Kullanıcıları listeler
workflowx.analytics.getDashboard(filters)
Dashboard verilerini getirir
workflowx.analytics.getWorkflowStats(id)
İş akışı istatistiklerini getirir
workflowx.reports.generate(config)
Özel rapor oluşturur
// Sayfa yapısını analiz et const pageAnalysis = await workflowx.scraper.analyzePage({ url: "https://example.com", debug: true }); console.log("Element sayıları:", pageAnalysis.elements); console.log("Önerilen selector'lar:", pageAnalysis.suggestions); // Manuel selector test const testResult = await workflowx.scraper.testSelector({ url: "https://example.com", selector: "a[href*='/product/']", type: "css" }); console.log("Bulunan elementler:", testResult.count); console.log("İlk 3 element:", testResult.preview);
// Dinamik içerik bekle const scrapeResult = await workflowx.scraper.create({ url: "https://example.com", wait_for: { type: "element", selector: ".product-list", timeout: 10000 }, selectors: { products: { selector: ".product-item", type: "css", multiple: true, extract: { name: ".product-name", price: ".product-price", link: "a@href" } } }, javascript: ` // Scroll to bottom to trigger lazy loading window.scrollTo(0, document.body.scrollHeight); // Click load more button if exists const loadMore = document.querySelector('.load-more'); if (loadMore) loadMore.click(); // Wait for content to load await new Promise(resolve => setTimeout(resolve, 2000)); ` });
// Hata yönetimi örneği try { const workflow = await workflowx.workflows.create(config); console.log('Başarılı:', workflow.id); } catch (error) { if (error.code === 'RATE_LIMIT_EXCEEDED') { // Rate limit aşıldı, bekle await new Promise(r => setTimeout(r, 1000)); // Tekrar dene } console.error('Hata:', error.message); }
// Yanlış kullanım const apiKey = "sk-123..."; // ❌ Client'da saklamayın // Doğru kullanım - server'da const apiKey = process.env.WORKFLOWX_API_KEY; // ✅ // Webhook doğrulama const signature = req.headers['x-workflowx-signature']; const isValid = workflowx.webhooks.verify( req.body, signature ); if (!isValid) throw new Error('Invalid webhook');
Uzman geliştirici ekibimiz size yardımcı olmaya hazır