クイックスタート
このガイドでは、何もない状態から5分で動く連携システムを作ります。APIキーを作成して確認し、ナレッジベースにドキュメントを追加し、それを検索し、その内容について質問します。どの手順も1回のHTTPリクエストです。どれかの例で言語を一度選ぶと、ページのすべての例がその言語に切り替わります。
言語の切り替えがある例では、このポータルのAPIアドレスを使います。Sursaのクラウドではhttps://api.sursa.com、自社のインストール環境ではそのAPIアドレスです。例にhttps://api.example.comとある場合は、自分のAPIアドレスに置き換えてください。どのアドレスかわからない場合は、APIアドレスと環境を参照してください。
1. APIキーを作成する
組織の管理者は、SursaのAdministration → API keys(管理 → APIキー)でキーを作成します。キーには使用場所がわかる名前(たとえば「CRM sync」)を付け、ロールを選び、さらに狭めたい場合はスコープを選びます。キーは、そのロールのユーザーができることを、スコープで許可された範囲内で行えます。このガイドではeditorロールで十分です。
キーは一度だけ表示されます。自社のシステムのシークレットストアに保管し、環境変数でコードに渡してください。
export SURSA_API_KEY="kb_…"
すべてのリクエストは、キーをAuthorizationヘッダーでBearerトークンとして送信します。ロール、スコープ、有効期限、ローテーションについては、APIキーとスコープで説明しています。
2. クライアントを設定する
ライブラリは必要ありません。APIは普通のHTTPSとJSONです。このガイドの例では、各言語の小さなヘルパーを使います。自分の言語のヘルパーをコピーしてください。以降のガイドでも同じヘルパーを使います。公式のクライアントライブラリはSDKに掲載されています。
# cURL needs no setup: each example below is a complete command.
export SURSA_API="https://api.sursa.com"3. キーを確認する
GET /v1/meは呼び出し元を説明します。組織、キー、そのロールとスコープ、適用されるレート制限を返します。有効なキーであればどれでも動作するので、どの連携システムでも最初のリクエストに最適です。
curl https://api.sursa.com/v1/me \
-H "Authorization: Bearer $SURSA_API_KEY"{
"principal": "api_key",
"org": {"id": 1, "slug": "acme", "name": "Acme"},
"key": {"id": 42, "name": "CRM sync", "prefix": "kb_3f9c", "role": "editor"},
"user": null,
"role": "editor",
"scopes": ["cards:read", "cards:write", "search", "ask"],
"data_profile": null,
"expires_at": null,
"rate_limit": {"class": "standard", "requests_per_second": 20, "burst": 100}
}
コードauth.not_authenticatedの401は、キーがない、取り消されている、または入力ミスがあることを意味します。api_keys.expiredは、キーの有効期限が切れたことを意味します。
4. コレクションを探す
カードはコレクションの中にあります。GET /v1/collectionsは、キーで参照できるコレクションを一覧表示します。
curl https://api.sursa.com/v1/collections \
-H "Authorization: Bearer $SURSA_API_KEY"作業に使うコレクションのidとnameを控えておいてください。以下の例では、supportという名前のコレクション3を使います。
5. ドキュメントを追加する
PUT /v1/cards-by-external-id/{external_id}は、自社のIDでカードを作成します。カードがすでに存在する場合は置き換えます。リクエストを2回実行しても安全です。2回目は内容が変わっていないので、理由unchangedとともにskippedが返ります。external_idには、自社のシステムのレコードのIDを使ってください。
curl -X PUT https://api.sursa.com/v1/cards-by-external-id/policy-refunds \
-H "Authorization: Bearer $SURSA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"collection_id": 3,
"title": "Refund policy",
"content_type": "markdown",
"body": "# Refund policy\n\nRefunds are processed within 14 days of the request."
}'リクエストは、カードが検索できる状態になると応答します。新しいカードでは"status": "ready"とともに201、置き換えたカードでは200が返ります。HTMLとプレーンテキストも、"content_type": "html"または"text"で同じように扱えます。ファイル(PDF、Word、Excelなど)は、同じエンドポイントにmultipart/form-dataで送信します。ファイル、フォルダー、メタデータ、多数のドキュメントのインポートについては、ドキュメントをインポートするで説明しています。
6. 検索する
POST /v1/searchは、クエリに一致するカードの抜粋を、一致度の高い順に見つけます。
curl -X POST https://api.sursa.com/v1/search \
-H "Authorization: Bearer $SURSA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "refund policy", "collection": "support"}'collectionにはコレクションの名前を指定します。指定しない場合は、defaultという名前のコレクションが検索の対象になります。
7. 質問する
POST /v1/askは、普通の言葉で書かれた質問に回答し、回答の出典を返します。アシスタントは関連するナレッジを見つけ、キーで読み込めるカードだけをもとに回答します。
curl -X POST https://api.sursa.com/v1/ask \
-H "Authorization: Bearer $SURSA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "How long does a refund take?", "collection": "support"}'関連するものが見つからなかった場合も、レスポンスは200で、"empty": "no_hits"と、answerの短い説明が返ります。その場合にユーザーに何を表示するかは、コードで決めてください。
次のステップ
- Q&Aボットを作る:書かれていく回答をストリーミングし、途切れたストリームを再開します。
- ドキュメントをインポートするか、自社のシステムを同期して、ナレッジベースを最新の状態に保ちます。
- Webhookを受信するで、Sursaでの変更に対応します。
- エラーをコードで処理し、書き込みをIdempotency-Key付きで再試行し、レート制限を守ります。
- すべてのエンドポイント、オブジェクト、フィールドについては、APIリファレンスを参照してください。