attio-debug-bundle
Attio統合の診断情報を収集します。API健全性、スコープ、オブジェクトスキーマ、レート制限ステータスなどをデバッグやサポートチケット用に取得できます。以下のトリガーで実行できます:「attio debug」「attio support bundle」「attio diagnostic」「collect attio logs」「attio not working debug」。
description の原文を見る
Collect Attio integration diagnostic evidence -- API health, scopes, object schema, and rate limit status -- for debugging or support tickets. Trigger: "attio debug", "attio support bundle", "attio diagnostic", "collect attio logs", "attio not working debug".
SKILL.md 本文
Attio Debug Bundle
概要
Attio API の問題をデバッグしたり、サポートチケットを提出したりするために必要なすべての診断証拠を収集します。認証、スコープ、オブジェクトスキーマ、レート制限ヘッダー、およびエンドポイント接続性をチェックします。
前提条件
ATTIO_API_KEY環境変数が設定されていることcurlとjqが利用可能であること- プロジェクト環境を読み込むための権限を持っていること
手順
ステップ 1: 完全な診断スクリプトを実行する
#!/bin/bash
# attio-debug-bundle.sh -- Collects Attio diagnostic evidence
set -euo pipefail
BUNDLE_DIR="attio-debug-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$BUNDLE_DIR"
SUMMARY="$BUNDLE_DIR/summary.txt"
echo "=== Attio Debug Bundle ===" | tee "$SUMMARY"
echo "Generated: $(date -u +%Y-%m-%dT%H:%M:%SZ)" | tee -a "$SUMMARY"
echo "" | tee -a "$SUMMARY"
# 1. Check token is set (never log the actual key)
echo "--- Token Status ---" | tee -a "$SUMMARY"
if [ -z "${ATTIO_API_KEY:-}" ]; then
echo "ATTIO_API_KEY: NOT SET" | tee -a "$SUMMARY"
echo "Cannot proceed without API key" | tee -a "$SUMMARY"
exit 1
else
echo "ATTIO_API_KEY: SET (${#ATTIO_API_KEY} chars, starts with ${ATTIO_API_KEY:0:3}...)" | tee -a "$SUMMARY"
fi
# 2. API connectivity and auth test
echo "" | tee -a "$SUMMARY"
echo "--- API Connectivity ---" | tee -a "$SUMMARY"
HTTP_CODE=$(curl -s -o "$BUNDLE_DIR/objects-response.json" -w "%{http_code}" \
-H "Authorization: Bearer ${ATTIO_API_KEY}" \
https://api.attio.com/v2/objects)
echo "GET /v2/objects: HTTP $HTTP_CODE" | tee -a "$SUMMARY"
if [ "$HTTP_CODE" = "200" ]; then
echo "AUTH: OK" | tee -a "$SUMMARY"
jq -r '.data[] | " - " + .api_slug + " (" + .singular_noun + ")"' \
"$BUNDLE_DIR/objects-response.json" | tee -a "$SUMMARY"
elif [ "$HTTP_CODE" = "401" ]; then
echo "AUTH: FAILED -- token invalid or revoked" | tee -a "$SUMMARY"
elif [ "$HTTP_CODE" = "403" ]; then
echo "AUTH: INSUFFICIENT SCOPES" | tee -a "$SUMMARY"
jq '.message' "$BUNDLE_DIR/objects-response.json" 2>/dev/null | tee -a "$SUMMARY"
fi
# 3. Rate limit headers
echo "" | tee -a "$SUMMARY"
echo "--- Rate Limit Status ---" | tee -a "$SUMMARY"
curl -s -D "$BUNDLE_DIR/headers.txt" -o /dev/null \
-H "Authorization: Bearer ${ATTIO_API_KEY}" \
https://api.attio.com/v2/objects
grep -i "x-ratelimit\|retry-after" "$BUNDLE_DIR/headers.txt" 2>/dev/null | tee -a "$SUMMARY" || echo "No rate limit headers found" | tee -a "$SUMMARY"
# 4. List attributes for core objects
echo "" | tee -a "$SUMMARY"
echo "--- Object Schemas ---" | tee -a "$SUMMARY"
for obj in people companies; do
echo " $obj attributes:" | tee -a "$SUMMARY"
curl -s "https://api.attio.com/v2/objects/$obj/attributes" \
-H "Authorization: Bearer ${ATTIO_API_KEY}" \
| jq -r '.data[] | " " + .api_slug + " (" + .type + ", required=" + (.is_required|tostring) + ")"' \
2>/dev/null | tee -a "$SUMMARY" || echo " FAILED" | tee -a "$SUMMARY"
done
# 5. List available lists
echo "" | tee -a "$SUMMARY"
echo "--- Lists ---" | tee -a "$SUMMARY"
curl -s https://api.attio.com/v2/lists \
-H "Authorization: Bearer ${ATTIO_API_KEY}" \
| jq -r '.data[] | " - " + .api_slug + " (" + .name + ")"' \
2>/dev/null | tee -a "$SUMMARY" || echo " FAILED (may need list_entry:read scope)" | tee -a "$SUMMARY"
# 6. Webhooks
echo "" | tee -a "$SUMMARY"
echo "--- Webhooks ---" | tee -a "$SUMMARY"
curl -s https://api.attio.com/v2/webhooks \
-H "Authorization: Bearer ${ATTIO_API_KEY}" \
| jq -r '.data[] | " - " + .id.webhook_id + " -> " + .target_url' \
2>/dev/null | tee -a "$SUMMARY" || echo " FAILED (may need webhook:read-write scope)" | tee -a "$SUMMARY"
# 7. Environment info
echo "" | tee -a "$SUMMARY"
echo "--- Environment ---" | tee -a "$SUMMARY"
echo "Node: $(node --version 2>/dev/null || echo 'not installed')" | tee -a "$SUMMARY"
echo "OS: $(uname -s) $(uname -r)" | tee -a "$SUMMARY"
# 8. Status page
echo "" | tee -a "$SUMMARY"
echo "--- Attio Status ---" | tee -a "$SUMMARY"
curl -s https://status.attio.com/api/v2/status.json \
| jq -r '.status.description' 2>/dev/null | tee -a "$SUMMARY" || echo "Could not reach status page" | tee -a "$SUMMARY"
# Package
tar -czf "$BUNDLE_DIR.tar.gz" "$BUNDLE_DIR"
rm -rf "$BUNDLE_DIR"
echo ""
echo "Bundle created: $BUNDLE_DIR.tar.gz"
ステップ 2: 共有前に確認する
共有前に必ずバンドルをリークされたシークレットについて確認してください:
tar -tzf attio-debug-*.tar.gz # List files
tar -xzf attio-debug-*.tar.gz && cat */summary.txt
共有しても安全な情報: HTTP ステータスコード、オブジェクトスラッグ、属性タイプ、レート制限ヘッダー、エラーメッセージ。
共有してはいけない情報: 完全な API キー、PII を含むレコード ID、ウェブフック シークレット。
ステップ 3: クイック単一コマンド診断
フルバンドルなしで高速トリアージを実行する場合:
# One-liner: auth + objects + rate limit check
curl -s -w "\n--- HTTP %{http_code} ---\n" \
-H "Authorization: Bearer ${ATTIO_API_KEY}" \
https://api.attio.com/v2/objects | jq '{objects: [.data[].api_slug], count: (.data|length)}'
プログラマティックなヘルスチェック
interface AttioDiagnostic {
auth: "ok" | "failed" | "insufficient_scopes";
objects: string[];
lists: string[];
latencyMs: number;
rateLimitRemaining?: number;
}
async function diagnoseAttio(): Promise<AttioDiagnostic> {
const start = Date.now();
try {
const res = await fetch("https://api.attio.com/v2/objects", {
headers: { Authorization: `Bearer ${process.env.ATTIO_API_KEY}` },
});
const latencyMs = Date.now() - start;
if (res.status === 401) return { auth: "failed", objects: [], lists: [], latencyMs };
if (res.status === 403) return { auth: "insufficient_scopes", objects: [], lists: [], latencyMs };
const data = await res.json();
return {
auth: "ok",
objects: data.data.map((o: any) => o.api_slug),
lists: [], // fetch separately if needed
latencyMs,
rateLimitRemaining: parseInt(res.headers.get("x-ratelimit-remaining") || "0"),
};
} catch {
return { auth: "failed", objects: [], lists: [], latencyMs: Date.now() - start };
}
}
エラーハンドリング
| 診断結果 | 意味 | 対応 |
|---|---|---|
| HTTP 200、オブジェクト一覧表示 | 認証と接続性 OK | 問題はコードまたはデータにあります |
| HTTP 401 | トークン無効 | Attio ダッシュボードで再生成してください |
| HTTP 403 | スコープが不足している | トークンにスコープを追加してください |
| HTTP 429 | 現在レート制限中 | Retry-After を待機してください、attio-rate-limits を参照 |
| 接続エラー | ネットワーク/ファイアウォールの問題 | DNS、プロキシ、ファイアウォールルールを確認してください |
リソース
次のステップ
レート制限の問題については attio-rate-limits を参照してください。エラーコードについては attio-common-errors を参照してください。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- ComeOnOliver
- ライセンス
- MIT
- 最終更新
- 2026/5/11
Source: https://github.com/ComeOnOliver/skillshub / ライセンス: MIT