WaveHelp Center

Wave Developer API

スコープ付きトークンを作成して、自分のコードからWaveのセッション、文字起こし、アクションアイテムを読み書きしよう — 検索、一括エクスポート、Webhookにも対応。

Wave Developer APIは、自分の録音データにアクセスできるREST APIだ。https://api.wave.co/v1に対して、Wave内で作成したトークンを使ってリクエストを送れば、セッション一覧の取得、要約や文字起こしの閲覧、意味検索、音声のダウンロード、タイトルやアクションアイテムの更新ができるほか、録音の処理が完了した瞬間にWebhookで通知を受け取れる。

すべてのWaveプランで無料利用でき、アクセスできるのは常に自分自身のアカウントのみだ。

トークンを作成する

Wave Webアプリ(app.wave.co)でプロフィールを開き、Integrations(連携)タブを選んでDeveloper APIを開く。またはapp.wave.co/settings/integrations/apiに直接アクセスしてもいい。

API Tokens(APIトークン)の下にあるCreate Token(トークンを作成)をクリック。

後から見て分かるようにToken Name(トークン名)を入力し、必要なPermissions(権限)にチェックを入れてCreate Tokenをクリック。トークンを1つの連携につき1つ用意するほうが、1つのトークンを共有するより管理しやすい。

トークンをコピーする。Waveはこれを一度だけ表示する:Copy this token now. You will not be able to see it again.(今すぐこのトークンをコピーしてください。二度と表示されません。)

すべてのリクエストでベアラートークンとして送信する:

curl -H "Authorization: Bearer wave_api_xxx..." \
  https://api.wave.co/v1/sessions

トークン一覧には、各トークンの名前、wave_api_から始まるプレフィックス、作成日時、最終使用日時が表示される。ゴミ箱アイコンからRevoke Token(トークンを無効化)を開ける — 無効化は即座に反映され、そのトークンを使っている処理はすべて401エラーを受け取るようになる。

APIトークンは作成から1年で失効するが、トークン一覧には失効日時が表示されない。何ヶ月も問題なく動いていた連携が突然401 invalid_tokenを返すようになったら、新しいトークンを作成しよう。

権限

権限はトークンごとに設定する。必要最小限の権限だけを付与しよう。

権限できること
Read Sessionsセッションの一覧・閲覧、統計、フォルダ、一括エクスポート
Search Sessionsライブラリ全体の意味検索
Read Transcripts話者セグメント付きの完全な文字起こし
Access Media音声・動画の署名付きダウンロードURL
Write Sessions & Action Itemsタイトル、メモ、タグ、お気に入り、アクションアイテムの更新
Delete Sessionsセッションの完全削除
Manage Foldersフォルダの作成、セッションの追加・削除
Manage WebhooksWebhookエンドポイントの登録・管理
Read Event Feedイベントフィードの取得・確認応答
Read Accountアカウント情報とサブスクリプション状況

対応する権限がないままエンドポイントを呼び出すと、不足している権限名を含む403エラーが返る。

データの読み取り

  • GET /v1/sessions — 新しい順で、カーソルによるページネーション付き。typesincefoldertagで絞り込み可能。返されるのは処理が完了したセッションのみ。
  • GET /v1/sessions/:id — タイトル、長さ、Markdown形式の要約、メモ、タグ、お気に入り。電話の場合は発着信の方向と番号も含む。
  • GET /v1/sessions/:id/transcript — フラットな文字起こし文字列と、時間・話者ラベル付きのセグメント。
  • GET /v1/sessions/:id/action-items — 構造化されたアクションアイテムとバージョン番号。
  • GET /v1/sessions/:id/media — 音声・動画の署名付きURL。有効期限は1時間。
  • POST /v1/sessions/search — 意味検索。結果は最大50件、タグによる絞り込みも可能。
  • POST /v1/sessions/bulk — 一度に最大50セッションを、要約と文字起こし付きで取得。過去データをまとめて取り込むのに最適。
  • GET /v1/foldersGET /v1/sessions/stats — フォルダ一覧、種類・プラットフォーム別の集計。

データの書き込み

PATCH /v1/sessions/:idでタイトル、メモ、タグ、お気に入り、アクションアイテムを設定できる。アクションアイテムを更新する場合は、まず読み取ってから、取得したバージョンを送り返すこと — こうすることで、Waveアプリ側で同時に行われた編集が黙って上書きされる代わりに、拒否されるようになる。POST /v1/foldersとフォルダメンバーシップ関連のエンドポイントでセッションを整理できる。フォルダは排他的ではないので、1つのセッションを複数のフォルダに入れられる。

DELETE /v1/sessions/:idは完全な削除であり、アプリ内での削除とは異なる。復元できないものとして扱おう。

レート制限

トークンごとに1分あたり60リクエスト1日あたり10,000リクエストまで利用できる。レスポンスにはX-RateLimit-LimitX-RateLimit-RemainingX-RateLimit-Resetが含まれ、429エラーにはRetry-Afterが付く — すぐに再試行せず、間隔を空けよう。

同じ検索クエリを1時間に10回以上繰り返しても429が返る。同じ検索は同じ結果を返すので、新着データを探すにはWebhookかGET /v1/sessions?since=を使おう。

Webhook

ポーリングする代わりに、Waveからのプッシュ通知を受け取れる。Webhooks(Webhook)セクションでAdd Webhook(Webhookを追加)をクリックし、Endpoint URL(エンドポイントURL、HTTPSのみ対応。プライベートアドレスに解決されるURLは拒否される)を入力、通知するイベントを選んでCreate Webhookをクリック。Signing Secret(署名シークレット)は一度だけ表示されるので、そのときに保存しておくこと。Webhookは最大5つまで登録できる。

現在登録できるイベントは3種類:Session Completed(処理完了後、要約が問い合わせ可能になった時点で一度だけ発火。ほとんどの連携が求めるイベント)、Session UpdatedSession Deleted

各配信にはシークレットで署名が施され、X-Wave-Webhook-IdX-Wave-Webhook-TimestampX-Wave-Webhook-Signatureヘッダーが付与される。ペイロードを信頼する前に署名を検証しよう。署名対象の正確な文字列はAPIリファレンスに記載されている。

Waveは、各イベントにつき配信が1回だけであることを保証していない。配信がタイムアウト(10秒)したり2xx以外を返したりした場合、短い間隔(約10秒後、次に1分後、さらに5分後)で最大3回再試行される。そのため同じイベントが複数回届くことは正常な動作としてありうる。ハンドラーは冪等にしておくこと:X-Wave-Webhook-Idをキーにして、すでに処理済みのIDは無視し、素早く2xxを返すようにしよう。この再試行の期間より長くエンドポイントがダウンしていた場合、届かなかったイベントは失われるので、その場合は下記のイベントフィードで追いつこう。

エンドポイントが10回連続で失敗すると、WaveはそれをAuto-disabled(自動無効化)にして送信を停止する。エンドポイントを修正したら、Webhook行にある再有効化ボタンを使おう。

サーバーがない場合はイベントフィードを使う

公開URLをホストできない場合は、代わりにポーリングしよう。GET /v1/eventsは、トークンごとにWaveが管理するカーソル以降のイベントを返し、POST /v1/events/ackで処理済みのイベントを確認応答してカーソルを進められる。これにより、スクリプトを再起動してもすべてが再送されることはない。ページングはデフォルトで50件、最大200件まで。フィードにはWebhook通知には含まれないアクションアイテムの変更も含まれる。Read Event Feed権限が必要。

ポーリングループを自分で書きたくない場合は、Wave CLIwave events tailがこれをラップしてくれる。

よくある質問

この記事は役に立ちましたか?

まだお困りですか?

メールで問い合わせ

このページの内容