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.
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/
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
- Make.com adresine gidin.
- Hesap oluşturun.
- Ayarlar > Geliştirici ayarları bölümüne girin.
- 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)
- Ayarlar > Geliştirici ayarlarına girin.
- API anahtarı oluştur'a tıklayın.
- Anahtarı kopyalayıp güvenli bir yerde saklayın.
# .env dosyası
MAKE_API_KEY="your_api_key_here"
MAKE_ORGANIZATION_ID="your_org_id"
Adım 4: OAuth 2.0 Kurulumu (Çok Kiracılı Uygulamalar İçin)
- Ayarlar > Geliştirici ayarları > OAuth uygulamalarına gidin.
- OAuth uygulaması oluştur'a tıklayın.
- Yönlendirme URI'sini girin.
- İ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()}`;
};
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');
}
});
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}`);
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ç'}`);
});
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'}`);
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}`);
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'
}
});
Senaryoyu Silme
Bir senaryoyu API ile silmek için:
const deleteScenario = async (scenarioId) => {
await makeRequest(`/scenarios/${scenarioId}`, {
method: 'DELETE'
});
console.log(`Senaryo ${scenarioId} silindi`);
};
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'
}
});
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}`);
});
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}`);
Ç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`);
};
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}`);
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}`);
});
Webhook Silme
Bir webhook'u kaldırmak için:
const deleteWebhook = async (webhookId) => {
await makeRequest(`/webhooks/${webhookId}`, {
method: 'DELETE'
});
console.log(`Webhook ${webhookId} silindi`);
};
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}`);
});
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');
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`);
};
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;
}
}
}
};
Ü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)