DEV Community

Cover image for Make (Integromat) API Nasıl Kullanılır?
Tobias Hoffmann
Tobias Hoffmann

Posted on • Originally published at apidog.com

Make (Integromat) API Nasıl Kullanılır?

TL;DR

Make (eski adıyla Integromat) API'si, geliştiricilere iş akışlarını otomatikleştirmenin ve entegrasyonları programatik olarak yönetmenin yolunu açar. RESTful uç noktalarıyla senaryoları, yürütmeleri, webhook'ları ve ekipleri yönetebilir; OAuth 2.0 veya API anahtarı ile kimlik doğrulama sağlayabilirsiniz. Hız limitleri plana göre değişir (dakikada 60-600 istek). Bu rehberde kimlik doğrulama, senaryo ve yürütme yönetimi, webhook tetikleyicileri ve üretim otomasyonu için temel adımları bulacaksınız.

Apidog'u bugün deneyin

Giriş

Make (Integromat), 100'den fazla ülkede 1 milyondan fazla kullanıcı için aylık 2 milyardan fazla işlem yürütüyor. Eğer otomasyon araçları geliştiriyorsanız veya 1000'den fazla uygulamayla entegrasyon yapmanız gerekiyorsa, Make API entegrasyonunu doğrudan projelerinize dahil etmelisiniz.

Gerçek kullanımda, ajanslar 50+ müşteri otomasyonu için haftalık 15-25 saat manuel güncelleme ve raporlama ile vakit kaybediyor. Make API entegrasyonu ile bu işlemleri otomatikleştirerek dağıtım, yürütme takibi ve hata yönetimini büyük ölçüde hızlandırabilirsiniz.

Bu makale, sıfırdan üretime hazır bir Make API entegrasyonunu nasıl kuracağınızı adım adım gösterir: kimlik doğrulama, senaryo yönetimi, webhook tetikleyicileri, yürütme izleme ve ekip yönetimi dahil.

💡 Apidog, API entegrasyon testlerini kolaylaştırır. Make uç noktalarını test edin, OAuth akışlarını doğrulayın, yürütme yanıtlarını analiz edin ve otomasyon sorunlarını tek bir ortamda ayıklayın. API spesifikasyonlarını içe aktarın, yanıtları taklit edin ve test senaryolarını ekibinizle paylaşın.

Make API Nedir?

Make, otomasyon iş akışlarını programatik olarak yönetmek için RESTful bir API sunar. Temel yönetim alanları:

  • Senaryo oluşturma/güncelleme/silme
  • Senaryo yürütme (manuel tetikleme)
  • Yürütme geçmişi ve izleme
  • Webhook yönetimi
  • Ekip ve kullanıcı yönetimi
  • Bağlantı ve uygulama yönetimi
  • Organizasyon ve çalışma alanı ayarları

Temel Özellikler

Özellik Açıklama
RESTful API JSON tabanlı uç noktalar
OAuth 2.0 + API Anahtarları Esnek kimlik doğrulama
Webhook'lar Gerçek zamanlı yürütme bildirimleri
Hız Sınırlaması Plana göre dakikada 60-600 istek
Senaryo Yönetimi Tam CRUD operasyonları
Yürütme Kontrolü Çalışmaları başlatma, durdurma, izleme
Ekip API'si Kullanıcı ve izin yönetimi

Make Planları ve API Erişimi

Plan API Erişimi Hız Sınırı En İyisi
Ücretsiz Sınırlı 60/dk Test, öğrenme
Core Tam API 120/dk Küçük işletmeler
Pro Tam API + Öncelik 300/dk Büyüyen ekipler
Ekipler Tam API + Yönetici 600/dk Ajanslar, kurumsal firmalar
Kurumsal Özel limitler Özel Büyük organizasyonlar

API Mimarisinin Genel Bakışı

Tüm uç noktalar şu formatı kullanır:

https://api.make.com/api/v2/
Enter fullscreen mode Exit fullscreen mode

API Sürümleri

Sürüm Durum Kullanım Alanı
v2 Mevcut Tüm yeni entegrasyonlar
v1 Kullanımdan Kaldırıldı Eski entegrasyonlar (geçiş yapın)

Başlarken: Kimlik Doğrulama Kurulumu

Adım 1: Make Hesabı Oluşturma

  1. Make.com adresine gidin.
  2. Hesap oluşturun.
  3. Ayarlar > Geliştirici ayarları bölümüne girin.
  4. API kimlik bilgilerinizi oluşturun.

Adım 2: Kimlik Doğrulama Yöntemini Seçme

Yöntem En İyisi Güvenlik Seviyesi
API Anahtarı Dahili entegrasyonlar, betikler Yüksek (güvenli saklayın)
OAuth 2.0 Çok kiracılı uygulamalar, istemci entegrasyonları Daha yüksek (kullanıcı kapsamlı token'lar)

Adım 3: API Anahtarını Alma (En Basit Yöntem)

  1. Ayarlar > Geliştirici ayarlarına girin.
  2. API anahtarı oluştur'a tıklayın.
  3. Anahtarı kopyalayıp güvenli bir yerde saklayın.
# .env dosyası
MAKE_API_KEY="your_api_key_here"
MAKE_ORGANIZATION_ID="your_org_id"
Enter fullscreen mode Exit fullscreen mode

Adım 4: OAuth 2.0 Kurulumu (Çok Kiracılı Uygulamalar İçin)

  1. Ayarlar > Geliştirici ayarları > OAuth uygulamalarına gidin.
  2. OAuth uygulaması oluştur'a tıklayın.
  3. Yönlendirme URI'sini girin.
  4. İstemci kimlik bilgilerinizi alın.
const MAKE_CLIENT_ID = process.env.MAKE_CLIENT_ID;
const MAKE_CLIENT_SECRET = process.env.MAKE_CLIENT_SECRET;
const MAKE_REDIRECT_URI = process.env.MAKE_REDIRECT_URI;

// Yetkilendirme URL'si oluştur
const getAuthUrl = (state) => {
  const params = new URLSearchParams({
    client_id: MAKE_CLIENT_ID,
    redirect_uri: MAKE_REDIRECT_URI,
    scope: 'read write execute',
    state: state,
    response_type: 'code'
  });

  return `https://www.make.com/oauth/authorize?${params.toString()}`;
};
Enter fullscreen mode Exit fullscreen mode

Adım 5: Erişim Tokenı İçin Kodu Değiştirme

const exchangeCodeForToken = async (code) => {
  const response = await fetch('https://www.make.com/oauth/token', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: new URLSearchParams({
      grant_type: 'authorization_code',
      client_id: MAKE_CLIENT_ID,
      client_secret: MAKE_CLIENT_SECRET,
      redirect_uri: MAKE_REDIRECT_URI,
      code: code
    })
  });

  const data = await response.json();

  return {
    accessToken: data.access_token,
    refreshToken: data.refresh_token,
    expiresIn: data.expires_in
  };
};

// Callback'i işle
app.get('/oauth/callback', async (req, res) => {
  const { code, state } = req.query;

  try {
    const tokens = await exchangeCodeForToken(code);

    // Tokenları güvenli bir şekilde saklayın
    await db.integrations.create({
      userId: req.session.userId,
      accessToken: tokens.accessToken,
      refreshToken: tokens.refreshToken,
      tokenExpiry: Date.now() + (tokens.expiresIn * 1000)
    });

    res.redirect('/success');
  } catch (error) {
    console.error('OAuth error:', error);
    res.status(500).send('Authentication failed');
  }
});
Enter fullscreen mode Exit fullscreen mode

Adım 6: Kimliği Doğrulanmış API Çağrıları Yapma

Yeniden kullanılabilir bir API istemcisi ile Make API'ye istek gönderin:

const MAKE_BASE_URL = 'https://api.make.com/api/v2';

const makeRequest = async (endpoint, options = {}) => {
  const apiKey = options.useOAuth ? await getOAuthToken() : process.env.MAKE_API_KEY;

  const response = await fetch(`${MAKE_BASE_URL}${endpoint}`, {
    ...options,
    headers: {
      'Authorization': `Token ${apiKey}`,
      'Content-Type': 'application/json',
      ...options.headers
    }
  });

  if (!response.ok) {
    const error = await response.json();
    throw new Error(`Make API Error: ${error.message}`);
  }

  return response.json();
};

// Kullanım
const scenarios = await makeRequest('/scenarios');
console.log(`Bulunan senaryo sayısı: ${scenarios.data.length}`);
Enter fullscreen mode Exit fullscreen mode

Senaryo Yönetimi

Senaryoları Listeleme

Tüm senaryoları çekmek için:

const listScenarios = async (filters = {}) => {
  const params = new URLSearchParams({
    limit: filters.limit || 50,
    offset: filters.offset || 0
  });

  if (filters.folder) {
    params.append('folder', filters.folder);
  }

  const response = await makeRequest(`/scenarios?${params.toString()}`);
  return response;
};

// Kullanım
const scenarios = await listScenarios({ limit: 100 });
scenarios.data.forEach(scenario => {
  console.log(`${scenario.name} - ${scenario.active ? 'Aktif' : 'Duraklatıldı'}`);
  console.log(`  Son çalıştırma: ${scenario.lastRunDate || 'Hiç'}`);
});
Enter fullscreen mode Exit fullscreen mode

Senaryo Detaylarını Alma

Tek bir senaryoyu detaylı almak için:

const getScenario = async (scenarioId) => {
  const response = await makeRequest(`/scenarios/${scenarioId}`);
  return response;
};

// Kullanım
const scenario = await getScenario('12345');
console.log(`Ad: ${scenario.name}`);
console.log(`Modül sayısı: ${scenario.modules.length}`);
console.log(`Zamanlayıcı: ${scenario.schedule?.cronExpression || 'Manuel'}`);
Enter fullscreen mode Exit fullscreen mode

Senaryo Oluşturma

Yeni bir senaryo oluşturmak için:

const createScenario = async (scenarioData) => {
  const scenario = {
    name: scenarioData.name,
    blueprint: scenarioData.blueprint, // Senaryo JSON blueprint'i
    active: scenarioData.active || false,
    priority: scenarioData.priority || 1,
    maxErrors: scenarioData.maxErrors || 3,
    autoCommit: scenarioData.autoCommit || true,
    description: scenarioData.description || ''
  };

  const response = await makeRequest('/scenarios', {
    method: 'POST',
    body: JSON.stringify(scenario)
  });

  return response;
};

// Kullanım
const newScenario = await createScenario({
  name: 'Lead Sync to CRM',
  blueprint: {
    // Editor'dan export edilen veya programatik oluşturulan blueprint
    modules: [
      {
        id: 1,
        app: 'webhooks',
        action: 'customWebhook',
        parameters: { /* ... */ }
      },
      {
        id: 2,
        app: 'salesforce',
        action: 'createRecord',
        parameters: { /* ... */ }
      }
    ],
    connections: [
      { from: 1, to: 2 }
    ]
  },
  active: true,
  description: 'Sync webhook leads to Salesforce'
});

console.log(`Oluşturulan senaryo ID: ${newScenario.id}`);
Enter fullscreen mode Exit fullscreen mode

Senaryoyu Güncelleme

Bir senaryoyu güncellemek için:

const updateScenario = async (scenarioId, updates) => {
  const response = await makeRequest(`/scenarios/${scenarioId}`, {
    method: 'PATCH',
    body: JSON.stringify(updates)
  });

  return response;
};

// Senaryoyu duraklatmak
await updateScenario('12345', { active: false });

// Zamanlayıcıyı güncellemek
await updateScenario('12345', {
  schedule: {
    cronExpression: '0 */6 * * *', // 6 saatte bir
    timezone: 'America/New_York'
  }
});
Enter fullscreen mode Exit fullscreen mode

Senaryoyu Silme

Bir senaryoyu API ile silmek için:

const deleteScenario = async (scenarioId) => {
  await makeRequest(`/scenarios/${scenarioId}`, {
    method: 'DELETE'
  });

  console.log(`Senaryo ${scenarioId} silindi`);
};
Enter fullscreen mode Exit fullscreen mode

Yürütme Yönetimi

Senaryo Yürütmeyi Tetikleme

Senaryoyu manuel çalıştırmak için:

const executeScenario = async (scenarioId, inputData = null) => {
  const response = await makeRequest(`/scenarios/${scenarioId}/execute`, {
    method: 'POST',
    body: inputData ? JSON.stringify(inputData) : undefined
  });

  return response;
};

// Giriş verisi olmadan çalıştır
const execution = await executeScenario('12345');
console.log(`Yürütme başlatıldı: ${execution.id}`);

// Giriş verisi ile çalıştır
const executionWithData = await executeScenario('12345', {
  lead: {
    email: 'prospect@example.com',
    name: 'John Doe',
    company: 'Acme Corp'
  }
});
Enter fullscreen mode Exit fullscreen mode

Yürütme Geçmişini Alma

Senaryonun yürütme geçmişini almak için:

const getExecutionHistory = async (scenarioId, filters = {}) => {
  const params = new URLSearchParams({
    limit: filters.limit || 50,
    from: filters.from,
    to: filters.to,
    status: filters.status // 'success', 'error', 'running'
  });

  const response = await makeRequest(`/scenarios/${scenarioId}/executions?${params.toString()}`);
  return response;
};

// Son 24 saatteki hatalı yürütmeleri al
const failedExecutions = await getExecutionHistory('12345', {
  from: new Date(Date.now() - 86400000).toISOString(),
  status: 'error',
  limit: 100
});

failedExecutions.data.forEach(exec => {
  console.log(`Yürütme ${exec.id}: ${exec.error?.message}`);
});
Enter fullscreen mode Exit fullscreen mode

Yürütme Detaylarını Alma

Belirli bir yürütmenin detayına ulaşmak için:

const getExecution = async (executionId) => {
  const response = await makeRequest(`/executions/${executionId}`);
  return response;
};

// Kullanım
const execution = await getExecution('98765');
console.log(`Durum: ${execution.status}`);
console.log(`Süre: ${execution.duration}ms`);
console.log(`Çalışan modül sayısı: ${execution.modulesExecuted}`);
Enter fullscreen mode Exit fullscreen mode

Çalışan Yürütmeyi Durdurma

Aktif bir yürütmeyi iptal etmek:

const stopExecution = async (executionId) => {
  await makeRequest(`/executions/${executionId}`, {
    method: 'DELETE'
  });

  console.log(`Yürütme ${executionId} durduruldu`);
};
Enter fullscreen mode Exit fullscreen mode

Webhook Yönetimi

Webhook Oluşturma

Yeni webhook oluşturmak için:

const createWebhook = async (webhookData) => {
  const webhook = {
    name: webhookData.name,
    scenarioId: webhookData.scenarioId,
    type: 'custom', // 'custom' veya 'raw'
    hookType: 'HEAD', // 'HEAD' veya 'GET'
    security: {
      type: 'none' // 'none', 'basic', 'token'
    }
  };

  const response = await makeRequest('/webhooks', {
    method: 'POST',
    body: JSON.stringify(webhook)
  });

  return response;
};

// Kullanım
const webhook = await createWebhook({
  name: 'Lead Capture Webhook',
  scenarioId: '12345',
  type: 'custom',
  hookType: 'HEAD',
  security: { type: 'none' }
});

console.log(`Webhook URL: ${webhook.url}`);
Enter fullscreen mode Exit fullscreen mode

Webhook'ları Listeleme

Tüm webhook'ları çekmek için:

const listWebhooks = async () => {
  const response = await makeRequest('/webhooks');
  return response;
};

// Kullanım
const webhooks = await listWebhooks();
webhooks.data.forEach(webhook => {
  console.log(`${webhook.name}: ${webhook.url}`);
});
Enter fullscreen mode Exit fullscreen mode

Webhook Silme

Bir webhook'u kaldırmak için:

const deleteWebhook = async (webhookId) => {
  await makeRequest(`/webhooks/${webhookId}`, {
    method: 'DELETE'
  });

  console.log(`Webhook ${webhookId} silindi`);
};
Enter fullscreen mode Exit fullscreen mode

Ekip ve Kullanıcı Yönetimi

Ekip Üyelerini Listeleme

Organizasyondaki kullanıcıları çekmek için:

const listTeamMembers = async (organizationId) => {
  const response = await makeRequest(`/organizations/${organizationId}/users`);
  return response;
};

// Kullanım
const members = await listTeamMembers('org-123');
members.data.forEach(member => {
  console.log(`${member.email} - ${member.role}`);
});
Enter fullscreen mode Exit fullscreen mode

Ekip Üyesi Ekleme

Yeni bir kullanıcı davet etmek için:

const addTeamMember = async (organizationId, email, role) => {
  const response = await makeRequest(`/organizations/${organizationId}/users`, {
    method: 'POST',
    body: JSON.stringify({
      email: email,
      role: role // 'viewer', 'builder', 'manager', 'admin'
    })
  });

  return response;
};

// Kullanım
await addTeamMember('org-123', 'newuser@example.com', 'builder');
Enter fullscreen mode Exit fullscreen mode

Kullanıcı Rolünü Güncelleme

Bir kullanıcının rolünü değiştirmek için:

const updateUserRole = async (organizationId, userId, newRole) => {
  await makeRequest(`/organizations/${organizationId}/users/${userId}`, {
    method: 'PATCH',
    body: JSON.stringify({ role: newRole })
  });

  console.log(`Kullanıcı ${userId} rolü ${newRole} olarak güncellendi`);
};
Enter fullscreen mode Exit fullscreen mode

Kullanıcı Rolleri

Rol İzinler
Görüntüleyici Senaryoları görüntüle, düzenleme yapamaz
Oluşturucu Senaryo oluştur/düzenle
Yönetici Ekibi, faturalandırmayı yönet
Yönetici (Admin) Tam organizasyon erişimi

Hız Sınırlaması

Hız Sınırlamalarını Anlama

Plan İstek/Dakika Anlık Limit
Ücretsiz 60 100
Core 120 200
Pro 300 500
Ekipler 600 1000
Kurumsal Özel Özel

Hız Sınırlaması Başlıkları

Başlık Açıklama
X-RateLimit-Limit Dakikadaki maksimum istek sayısı
X-RateLimit-Remaining Kalan istek sayısı
X-RateLimit-Reset Sıfırlanana kadar kalan saniye

Hız Sınırlaması İşlemeyi Uygulama

Otomatik yeniden deneme ile hız sınırı yönetimi:

const makeRateLimitedRequest = async (endpoint, options = {}, maxRetries = 3) => {
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
    try {
      const response = await makeRequest(endpoint, options);

      const remaining = response.headers.get('X-RateLimit-Remaining');
      if (remaining < 10) {
        console.warn(`Düşük hız limiti: ${remaining} istek kaldı`);
      }

      return response;
    } catch (error) {
      if (error.message.includes('429') && attempt < maxRetries) {
        const delay = Math.pow(2, attempt) * 1000;
        console.log(`Hız sınırı aşıldı. ${delay}ms sonra tekrar deneniyor...`);
        await new Promise(resolve => setTimeout(resolve, delay));
      } else {
        throw error;
      }
    }
  }
};
Enter fullscreen mode Exit fullscreen mode

Üretim Dağıtımı Kontrol Listesi

Canlıya geçmeden önce şunları doğrulayın:

  • [ ] Dahili entegrasyonlar için API anahtarı, istemci entegrasyonları için OAuth kullanın
  • [ ] Kimlik bilgilerini güvenli bir şekilde saklayın (şifreli veritabanı)
  • [ ] Hız sınırlaması ve istek kuyruklamasını uygulayın
  • [ ] Yürütme izleme ve uyarı sistemleri kurun
  • [ ] Hata bildirimlerini (e-posta, Slack) yapılandırın
  • [ ] Başarısız yürütmeler için yeniden deneme mantığı uygulayın
  • [ ] Kapsamlı günlük kaydı ekleyin
  • [ ] Kritik senaryoların yedeğini/dışa aktarımını oluşturun

Gerçek Dünya Kullanım Durumları

Ajans Müşteri Yönetimi

Bir ajans, 100+ müşteri otomasyonunu yönetiyor:

  • Zorluk: Müşteri hesaplarında manuel senaryo güncellemeleri
  • Çözüm: Make API ile merkezi kontrol paneli
  • Sonuç: %70 zaman tasarrufu, tutarlı dağıtımlar

Uygulama adımları:

  • Çoklu hesap OAuth entegrasyonu
  • Toplu senaryo dağıtımı
  • Müşteri kullanım raporlaması

E-ticaret Sipariş İşleme

Online mağaza için otomasyon:

  • Zorluk: Depo sistemine manuel sipariş girişi
  • Çözüm: Webhook ile tetiklenen Make senaryosu
  • Sonuç: Sıfır manuel giriş, %99.9 doğruluk

Uygulama adımları:

  • Shopify webhook'unu Make'e bağla
  • Senaryo siparişi işler, depo sistemini günceller
  • Yeniden deneme mantığı ile hata yönetimi

Sonuç

Make API, iş akışı otomasyonu için güçlü ve kapsamlı bir araçtır. Özetle:

  • Dahili kullanımda API anahtarı, çok kiracılı uygulamalarda OAuth 2.0 kullanın
  • Senaryo, yürütme ve webhook'lar için tam CRUD
  • Organizasyon yönetimi ve ekip kontrolü
  • Hız limitleri plana göre değişir (60-600 istek/dk)
  • Üretim ortamında yürütme izleme kritik önemdedir
  • Apidog, API testlerini ve ekip işbirliğini kolaylaştırır

Sıkça Sorulanlar

Make API ile nasıl kimlik doğrularım?

Dahili entegrasyonlarda Geliştirici ayarlarından alınan API anahtarı veya çok kiracılı uygulamalarda OAuth 2.0 kullanın.

Senaryoları programatik olarak tetikleyebilir miyim?

Evet, isteğe bağlı giriş verileriyle senaryo çalışmalarını tetiklemek için /scenarios/{id}/execute uç noktasını kullanabilirsiniz.

Make hız sınırlamaları nelerdir?

Planınıza bağlı olarak dakikada 60 (Ücretsiz) ile 600 (Ekipler/Kurumsal) istek arasında değişir.

Yürütme günlüklerini nasıl alırım?

Tarih ve duruma göre filtreleme ile yürütme geçmişini almak için /scenarios/{id}/executions uç noktasını kullanın.

API aracılığıyla webhook oluşturabilir miyim?

Evet, senaryolar için webhook oluşturmak, listelemek ve silmek için /webhooks uç noktasını kullanabilirsiniz.

Top comments (0)