Skip to content

Bir Connector ile Bir Aracı Bağlayın ve Yürütün

Bu öğreticide bir Slack connector (bağlayıcı) örneği kuracak, bir bot token'ı depolayacak, mevcut araçları senkronize edecek, send_message aracını yürütecek ve yürütme geçmişini inceleyeceksiniz. Sonuç olarak çalışma alanınızdaki AI ajanlarının çağırabileceği çalışan bir connector'a sahip olacaksınız.

Önkoşullar

  • Geçerli bir erişim belirteci olan bir Chainabit hesabı
  • Terminalinizde curl'un mevcut olması
  • Bir Slack çalışma alanı ve bir Slack Bot Token (xoxb-... ile başlar)

Ortam değişkenlerinizi ayarlayın:

bash
export BASE="https://api.chainabit.com/api/v1"
export TOKEN="your-access-token"
export SLACK_BOT_TOKEN="xoxb-..."

Connector İş Akışı


Adım 1: Mevcut Connector Tanımlarına Göz Atın

Slack connector anahtarını bulmak için mevcut connector tanımlarını listeleyin:

bash
curl "https://api.chainabit.com/api/v1/connectors?category=communication" \
  -H "Authorization: Bearer $TOKEN"
javascript
const res = await fetch(`https://api.chainabit.com/api/v1/connectors?category=communication`, {
  headers: { Authorization: `Bearer ${TOKEN}` },
});
const { data } = await res.json();
console.log(data.map((c) => c.key));
python
import requests

res = requests.get(
    f"{BASE}/connectors",
    params={"category": "communication"},
    headers={"Authorization": f"Bearer {TOKEN}"},
)
data = res.json()["data"]
print([c["key"] for c in data])

Yanıt alıntısı:

json
{
  "data": [
    {
      "key": "slack",
      "displayName": "Slack",
      "category": "communication",
      "authMethod": "api_key",
      "isActive": true
    },
    {
      "key": "gmail",
      "displayName": "Gmail",
      "category": "communication",
      "authMethod": "oauth2",
      "isActive": true
    }
  ]
}

authMethod alanına dikkat edin. Slack, api_key destekler, bu da bir tarayıcı yönlendirmesi olmadan kimlik doğrulaması yapabileceğiniz anlamına gelir. Sonraki adım için anahtar "slack" olacaktır.


Adım 2: Bir Connector Örneği Oluşturun

Örnek, bir connector'ın çalışma alanına özel bir kurulumudur. Bir çalışma alanında birden fazla Slack örneği olabilir:

bash
curl -s -X POST "https://api.chainabit.com/api/v1/connectors/instances" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "connectorKey": "slack",
    "displayName": "Team Slack"
  }'
javascript
const res = await fetch(`https://api.chainabit.com/api/v1/connectors/instances`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${TOKEN}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    connectorKey: 'slack',
    displayName: 'Team Slack',
  }),
});
const { data } = await res.json();
console.log(data.id, data.status); // "inst_abc123", "pending_auth"
python
res = requests.post(
    f"{BASE}/connectors/instances",
    headers={"Authorization": f"Bearer {TOKEN}"},
    json={"connectorKey": "slack", "displayName": "Team Slack"},
)
data = res.json()["data"]
print(data["id"], data["status"])  # "inst_abc123", "pending_auth"

Yanıt:

json
{
  "data": {
    "id": "inst_abc123",
    "connectorKey": "slack",
    "displayName": "Team Slack",
    "status": "pending_auth",
    "enabled": true,
    "config": {},
    "lastHealthCheck": null,
    "healthMessage": null,
    "createdAt": "2026-03-23T10:00:00Z",
    "updatedAt": "2026-03-23T10:00:00Z"
  }
}

Örnek, status: "pending_auth" durumu ile başlar. Örnek ID'sini kaydedin:

bash
export INSTANCE_ID="inst_abc123"

Adım 3: Kimlik Bilgilerini Depolayın

Slack bot token'ını depolayın. Kimlik bilgileri beklerken şifrelenir ve hiçbir zaman API yanıtlarında döndürülmez:

bash
curl -s -X POST "https://api.chainabit.com/api/v1/connectors/instances/$INSTANCE_ID/credentials" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d "{
    \"credType\": \"api_key\",
    \"credentials\": {
      \"apiKey\": \"$SLACK_BOT_TOKEN\"
    }
  }"
javascript
const res = await fetch(
  `https://api.chainabit.com/api/v1/connectors/instances/${INSTANCE_ID}/credentials`,
  {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${TOKEN}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      credType: 'api_key',
      credentials: { apiKey: process.env.SLACK_BOT_TOKEN },
    }),
  },
);
const { data } = await res.json();
console.log(data.stored); // true
python
import os

res = requests.post(
    f"{BASE}/connectors/instances/{INSTANCE_ID}/credentials",
    headers={"Authorization": f"Bearer {TOKEN}"},
    json={
        "credType": "api_key",
        "credentials": {"apiKey": os.environ["SLACK_BOT_TOKEN"]},
    },
)
data = res.json()["data"]
print(data["stored"])  # True

Yanıt:

json
{
  "data": {
    "stored": true
  }
}

Kimlik bilgileri salt yazılırdır. GET /connectors/instances/:id/credentials/status üzerinden kimlik bilgilerinin depolanıp depolanmadığını kontrol edebilirsiniz, ancak değerleri API üzerinden hiçbir zaman okunamaz.


Adım 4: Bağlantıyı Test Edin

Bot token'ının çalıştığını ve Slack'e ulaşılabildiğini doğrulamak için bir sağlık denetimi gönderin:

bash
curl -s -X POST "https://api.chainabit.com/api/v1/connectors/instances/$INSTANCE_ID/test" \
  -H "Authorization: Bearer $TOKEN"
javascript
const res = await fetch(
  `https://api.chainabit.com/api/v1/connectors/instances/${INSTANCE_ID}/test`,
  {
    method: 'POST',
    headers: { Authorization: `Bearer ${TOKEN}` },
  },
);
const { data } = await res.json();
if (!data.healthy) throw new Error(data.message);
console.log(`Connected (${data.latencyMs}ms)`);
python
res = requests.post(
    f"{BASE}/connectors/instances/{INSTANCE_ID}/test",
    headers={"Authorization": f"Bearer {TOKEN}"},
)
data = res.json()["data"]
if not data["healthy"]:
    raise RuntimeError(data["message"])
print(f"Connected ({data['latencyMs']}ms)")

Yanıt:

json
{
  "data": {
    "healthy": true,
    "message": "Connection successful",
    "latencyMs": 187
  }
}

Eğer healthy değeri false ise, bot token'ınızın xoxb- ile başladığını ve botun Slack çalışma alanınızda kurulu olduğunu kontrol edin.


Adım 5: Araçları Senkronize Edin ve Listeleyin

Slack adaptörü tarafından sunulan mevcut araçları çekin, ardından bunları listeleyin:

bash
curl -s -X POST "https://api.chainabit.com/api/v1/connectors/instances/$INSTANCE_ID/sync-tools" \
  -H "Authorization: Bearer $TOKEN"
bash
curl -s "https://api.chainabit.com/api/v1/connectors/instances/$INSTANCE_ID/tools" \
  -H "Authorization: Bearer $TOKEN"

Araçları listeleme yanıtı:

json
{
  "data": [
    {
      "id": "tool_abc123",
      "connectorKey": "slack",
      "toolKey": "send_message",
      "displayName": "Send Message",
      "description": "Send a message to a Slack channel or user",
      "inputSchema": {
        "type": "object",
        "properties": {
          "channel": { "type": "string", "description": "Channel name or ID" },
          "text": { "type": "string", "description": "Message content" }
        },
        "required": ["channel", "text"]
      },
      "isActive": true,
      "source": "auto_discovered"
    }
  ]
}

send_message aracı için araç ID'sini kaydedin:

bash
export TOOL_ID="tool_abc123"

Adım 6: Bir Aracı Yürütün

Bir Slack kanalına gönderi yapmak için send_message aracını çağırın. Girdi, aracın inputSchema'sına karşı doğrulanır:

bash
curl -s -X POST "https://api.chainabit.com/api/v1/connectors/instances/$INSTANCE_ID/tools/$TOOL_ID/execute" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "input": {
      "channel": "#general",
      "text": "Hello from Chainabit!"
    }
  }'
javascript
const res = await fetch(
  `https://api.chainabit.com/api/v1/connectors/instances/${INSTANCE_ID}/tools/${TOOL_ID}/execute`,
  {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${TOKEN}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      input: { channel: '#general', text: 'Hello from Chainabit!' },
    }),
  },
);
const { data } = await res.json();
if (data.success) {
  console.log('Message sent:', data.output);
} else {
  console.error('Tool error:', data.error);
}
python
res = requests.post(
    f"{BASE}/connectors/instances/{INSTANCE_ID}/tools/{TOOL_ID}/execute",
    headers={"Authorization": f"Bearer {TOKEN}"},
    json={"input": {"channel": "#general", "text": "Hello from Chainabit!"}},
)
data = res.json()["data"]
if data["success"]:
    print("Message sent:", data["output"])
else:
    print("Tool error:", data["error"])

Başarılı olduğunda yanıt:

json
{
  "data": {
    "success": true,
    "output": {
      "ok": true,
      "channel": "C01234567",
      "ts": "1711234567.000100"
    },
    "error": null,
    "httpStatus": 200,
    "durationMs": 342
  }
}

Yaygın hatalar

HataNedenÇözüm
channel_not_found#channel mevcut değil veya bot üye değilBot'u kanala ekleyin
No credentials configuredAdım 3 atlandı veya kimlik bilgileri silindiAdım 3'ü tekrar çalıştırın
Tool is disabled on this instanceAraçta isActive: falseAracı yeniden etkinleştirmek için PATCH isteği atın

Adım 7: Yürütme Geçmişini İnceleyin

Her araç yürütme işlemi günlüğe kaydedilir. Örneğiniz için günlüğü alın:

bash
curl -s "https://api.chainabit.com/api/v1/connectors/instances/$INSTANCE_ID/executions?limit=5" \
  -H "Authorization: Bearer $TOKEN"

Yanıt alıntısı:

json
{
  "data": [
    {
      "id": "exec_01HQZ...",
      "toolKey": "send_message",
      "success": true,
      "durationMs": 342,
      "executedAt": "2026-03-23T10:15:00Z"
    }
  ]
}

Özet

Bu öğreticide şunları yaptınız:

  1. slack anahtarını ve kimlik doğrulama yöntemini onaylamak için connector tanımlarına göz attınız
  2. Bir connector örneği oluşturdunuz (pending_auth olarak başlar)
  3. Bir API anahtarı kimlik bilgisi depoladınız (salt yazılır, beklerken şifrelenir)
  4. Token'ın geçerli olduğunu onaylamak için bağlantıyı test ettiniz
  5. Slack adaptörü tarafından sunulan araçları senkronize edip listelediniz
  6. Kanal ve metin girdisiyle send_message aracını yürüttünüz
  7. Yürütme geçmişi günlüğünü incelediniz

Sonraki Adımlar

Built with purpose.