メインコンテンツまでスキップ

Realtime transcription API

マイクやデスクトップ音声、電話などの音声データを、低遅延でテキストに変換できます。

主なユースケース

  • 字幕や議事録をリアルタイムで生成
  • 電話回線を使った音声対話エージェントや、音声対応アプリの構築
  • ターン(発話の区切り)検出
WebRTCは準備中

現在はインターフェースとして WebSocket のみを提供しています。

Rate Limit

Realtime APIに関して、 1アカウント(=API key)ごとに、およびシステム全体にて、 同時接続数の制限がございます。

上限に達した状態で接続を試みると、 接続自体が却下されるか、接続受け入れ後のErrorイベントとして error[code]=rate_limit_errorError JSONが返却されます。

接続方法: WebSocket

WebSockets はリアルタイムデータ転送に広く使われており、HTTPリクエストの送受信ができる任意のプラットフォームで利用できます。

ブラウザやモバイルなどのエンドユーザーの環境からもご利用いただけますが、APIキーは安全なサーバー環境でのみ使用し、ブラウザなどのクライアント環境では絶対に使用しないでください。

エンドユーザーのクライアント環境からWebSocket接続する場合は、サーバー環境で先に有効期限付きのclient secretを生成し、それをクライアント環境に渡して認証に使ってください。

接続先URLwss://api.kotobatech.ai/v1/realtime
リクエストヘッダー認証ヘッダー (ブラウザライクな環境からはWebSocket 第二引数を利用)
client secret を活用するサンプルコード

client secretを生成するを参考に、 以下のようなエンドポイントをサーバーサイドに用意して、 クライアントサイドから呼び出してclient_secretを渡してください。

ex, Node.js/Expressサーバーでの実装

import express from "express";
const app = express();

// An endpoint which would work with the client code above - it returns
// the contents of a REST API request to this protected endpoint
app.get("/session", async (req, res) => {
const r = await fetch("https://api.kotobatech.ai/v1/realtime/transcription_sessions", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KOTOBA_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
}),
});
const data = await r.json();
res.send(data.client_secret.value);
});

app.listen(3000);

サーバーサイド: サンプルコード

Python 接続とsession初期化まで
# requirements:
# pip install websocket-client
import os
import json
import websocket

url = "wss://api.kotobatech.ai/v1/realtime"
headers = [
"Authorization: Bearer " + os.environ.get("KOTOBA_API_KEY"),
]

def on_open(ws):
print("Connected to server.")

def on_message(ws, message):
data = json.loads(message)
print("Received event:", json.dumps(data, indent=2))
if data['type'] == 'transcription_session.created':
update_event = {
"type": "transcription_session.update",
"session": {
"input_audio_format": "pcm16",
"input_audio_sample_rate": 24000,
"input_audio_number_of_channels": 1,
"input_audio_transcription": {"language": "ja", "target_language": "ja"},
},
}
ws.send_text(json.dumps(update_event))
if data['type'] == 'transcription_session.updated':
# 以降、音声データを送信すると書き起こしが始まります。
pass

ws = websocket.WebSocketApp(
url,
header=headers,
on_open=on_open,
on_message=on_message,
)

ws.run_forever()