メインコンテンツへスキップ

Documentation Index

Fetch the complete documentation index at: https://docs.qoder.com/llms.txt

Use this file to discover all available pages before exploring further.

本記事では、curl を使用して Qoder Cloud Agents の完全なワークフロー(Agent 作成 → Session 起動 → メッセージ送信 → イベントストリーム受信)を実行する方法を示します。

環境準備

# 個人アクセストークンを設定 \
export QODER_PAT="pt-your-token-here"

# API ベースアドレス
export BASE_URL="https://openapi.qoder.sh/api/v1/cloud"
PAT は Qoder コンソール → 個人設定 → アクセストークン で生成します。

共通ヘッダーテンプレート

すべてのリクエストには以下のヘッダーが必要です。
-H "Authorization: Bearer $QODER_PAT"
-H "Content-Type: application/json"

ステップ 1: Agent の作成

AGENT_ID=$(curl -s -X POST "$BASE_URL/agents" \
  -H "Authorization: Bearer $QODER_PAT" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my-assistant",
    "model": "ultimate",
    "system": "あなたは効率的なプログラミングアシスタントです。簡潔かつ明確に応答します。"
  }' | jq -r '.id')

echo "Agent ID: $AGENT_ID"

ステップ 2: Environment の取得

# 利用可能な環境を一覧表示し、最初の 1 つを取得 \
ENV_ID=$(curl -s "$BASE_URL/environments?limit=1" \
  -H "Authorization: Bearer $QODER_PAT" | jq -r '.data[0].id')

echo "Environment ID: $ENV_ID"

ステップ 3: Session の起動

SESSION_ID=$(curl -s -X POST "$BASE_URL/sessions" \
  -H "Authorization: Bearer $QODER_PAT" \
  -H "Content-Type: application/json" \
  -d "{
    \"agent\": \"$AGENT_ID\",
    \"environment_id\": \"$ENV_ID\",
    \"title\": \"curl テストセッション\"
  }" | jq -r '.id')

echo "Session ID: $SESSION_ID"

ステップ 4: メッセージの送信

curl -s -X POST "$BASE_URL/sessions/$SESSION_ID/events" \
  -H "Authorization: Bearer $QODER_PAT" \
  -H "Content-Type: application/json" \
  -d '{
    "events": [
      {
        "type": "user.message",
        "content": "Python でクイックソート関数を書いてください"
      }
    ]
  }' | jq .

ステップ 5: SSE イベントストリームの受信

curl -N "$BASE_URL/sessions/$SESSION_ID/events/stream" \
  -H "Authorization: Bearer $QODER_PAT" \
  -H "Accept: text/event-stream"
出力形式(各イベントは空行で区切られる):
id: evt_019e392c0d787cfaa21bda98e06cd913
event: user.message
data: {"id":"evt_019e392c...","type":"user.message","content":"Python でクイックソート関数を書いてください",...}

id: evt_771c1195bcbd4a07834d4ed4dd6450ca
event: session.status_rescheduled
data: {"id":"evt_771c1195...","type":"session.status_rescheduled",...}

id: evt_f8599c68e7784f2d8c490af1b3056716
event: agent.message
data: {"id":"evt_f8599c68...","type":"agent.message","content":[{"type":"text","text":"..."}],...}

id: evt_a289470296c94e7ba8d7ea562efe5925
event: session.status_idle
data: {"id":"evt_a28947...","type":"session.status_idle","stop_reason":{"type":"end_turn"},...}
-N オプションは curl の出力バッファリングを無効化し、SSE データのリアルタイム表示を保証します。

レジューム再開

接続が切断された場合、after_id パラメータを使用して、最後に受信したイベントの後から再開できます。
LAST_EVT_ID="evt_a289470296c94e7ba8d7ea562efe5925"

curl -N "$BASE_URL/sessions/$SESSION_ID/events/stream?after_id=$LAST_EVT_ID" \
  -H "Authorization: Bearer $QODER_PAT" \
  -H "Accept: text/event-stream"

イベント一覧のポーリング(SSE の代替)

長時間接続をサポートしない環境では、リスト型エンドポイントでポーリングできます。
curl -s "$BASE_URL/sessions/$SESSION_ID/events?limit=20" \
  -H "Authorization: Bearer $QODER_PAT"

完全なワンクリックスクリプト

上記のステップを直接実行可能なスクリプトに統合します。
#!/usr/bin/env bash
set -euo pipefail

BASE_URL="https://openapi.qoder.sh/api/v1/cloud"
HEADERS=(
  -H "Authorization: Bearer $QODER_PAT"
  -H "Content-Type: application/json"
)

# Agent を作成
AGENT_ID=$(curl -s -X POST "$BASE_URL/agents" "${HEADERS[@]}" \
  -d '{"name":"quick-test","model":"ultimate","system":"あなたはアシスタントです"}' | jq -r '.id')
echo "OK Agent: $AGENT_ID"

# 環境を取得
ENV_ID=$(curl -s "$BASE_URL/environments?limit=1" "${HEADERS[@]}" | jq -r '.data[0].id')
echo "OK Environment: $ENV_ID"

# Session を作成
SESSION_ID=$(curl -s -X POST "$BASE_URL/sessions" "${HEADERS[@]}" \
  -d "{\"agent\":\"$AGENT_ID\",\"environment_id\":\"$ENV_ID\"}" | jq -r '.id')
echo "OK Session: $SESSION_ID"

# メッセージを送信
curl -s -X POST "$BASE_URL/sessions/$SESSION_ID/events" "${HEADERS[@]}" \
  -d '{"events":[{"type":"user.message","content":"Hello!"}]}' > /dev/null
echo "OK メッセージ送信完了"

# イベントストリームを受信
echo "--- イベントストリーム ---"
curl -N "$BASE_URL/sessions/$SESSION_ID/events/stream" \
  -H "Authorization: Bearer $QODER_PAT" \
  -H "Accept: text/event-stream"

関連ドキュメント