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, salt okunur list_channels 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ı
  • Çalışma alanında owner veya admin rolü (örneği oluşturmak, kimlik bilgilerini depolamak ve araçları senkronize etmek için gerekir)
  • 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": "list_channels",
      "displayName": "List Channels",
      "description": "List all public and private channels the bot has access to.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": { "type": "number" },
          "cursor": { "type": "string" },
          "types": { "type": "string" }
        }
      },
      "requiresApproval": false,
      "isActive": true,
      "source": "auto_discovered"
    }
  ]
}

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

bash
export TOOL_ID="tool_abc123"

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

Botun görebildiği kanalları listelemek için list_channels 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": {
      "limit": 20
    }
  }'
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: { limit: 20 },
    }),
  },
);
const { data } = await res.json();
if (data.success) {
  console.log('Channels:', data.output.channels);
} 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": {"limit": 20}},
)
data = res.json()["data"]
if data["success"]:
    print("Channels:", data["output"]["channels"])
else:
    print("Tool error:", data["error"])

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

json
{
  "data": {
    "success": true,
    "output": {
      "ok": true,
      "channels": [
        { "id": "C01234567", "name": "general", "is_private": false }
      ]
    },
    "error": null,
    "httpStatus": 200,
    "durationMs": 342
  }
}

Onay gerektiren araçlar

send_message ve upload_file gibi Slack'te veri değiştiren araçlar onay gerektirir. Doğrudan yürütme bunları 403 ve connector_tool_approval_required hata koduyla reddeder ve Slack'e hiçbir şey gönderilmez. Bunun yerine bu araçları Chao'dan çalıştırmasını isteyin; Chao işlem yapmadan önce onay kurallarını uygular.

Yaygın hatalar ​

HataNedenÇözüm
connector_tool_approval_required (403)Araç onay gerektiriyor, örneğin send_messageAracı Chao'dan çalıştırmasını isteyin
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

Ö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. Salt okunur list_channels aracını doğrudan yürüttünüz

Sonraki Adımlar ​

Built with purpose.