会議録画Botは「作るな」 - Recall.aiで会議録画Botを爆速実装する

はじめに:会議録画Bot、自前で作ろうとしてませんか?
「ZoomやGoogle Meetの会議を自動で録画して、文字起こしや要約を行いたい」
昨今のAIブームも相まって、このような要件は開発現場で増えています。そして多くの場合、最初に突き当たるのが、ビデオ会議プラットフォームごとのAPI仕様の壁です。
かくいう自分も「ZoomのAPIを叩いてBotを入室させればいいだけでしょ?」と当初は軽く考えていましたが、いざ設計を考えてみるとその道がいかに険しいかが見えてきました。
- プラットフォームごとの差異: Zoom, Google Meet, Microsoft Teams, Webex…それぞれ全く異なるAPI仕様と認証フローを実装する必要がある。
- 認証のハードル: 特にZoomにおいて、Botを会議に参加させるためのアプリ認証(Zoom App Marketplace公開)には厳しい審査があり、数ヶ月単位の時間がかかる可能性がある。
- インフラの複雑性: ストリームデータの受信、エンコード、保存…リアルタイム処理を安定させるインフラ構築は泥沼化しやすい。
MTGの録画とBot管理だけで数ヶ月溶かすのか…?と悩んでいた中で出会ったのがRecall.ai でした。
この記事では、実際にどのようなフローで会議録画Botを実装できるのか検証した内容を知見として共有します。
補記:なぜMeetingBaaSではなくRecall.aiか
ビデオ会議BotAPI(Unified API)の領域には、MeetingBaaS という有力な競合も存在します。しかし以下の理由から Recall.ai を第一候補にしました。
- MeetingBaaSではWebexをはじめとしたいくつかのプラットフォームが対応していない。
- MeetingBaaSはBotの同時接続上限数が200個まで(※2025年12月時点)であり、将来的なスケーラビリティを考慮し、より大規模な接続に耐えうるRecall.aiがより適していた。
- Recall.aiは新機能開発が積極的で、AI音声エージェントの組み込みやチャットメッセージの送信、デスクトップの録画機能など、実用性のある機能が開発されている。
- Recall.aiはドキュメントが非常に拡充しており、またサポートも手厚い。
会議録画Botの実装方法
実装はシンプルで、基本的に以下の3つのステップを実装するだけで会議の録画データが手に入ります。
- Bot生成: APIを叩いて、指定した会議URLにBotを送り込む。
- 状態監視 (Webhook): Botの入室、録画開始、終了などのイベントをWebhookで受け取る。
- データ取得: 録画終了後、生成されたダウンロードURLから動画ファイルを取得する。
各ステップの具体的なAPIコールを順番に見ていきましょう。

Step 1: Bot作成リクエスト
まずはBotを会議に参加させるフェーズです。 Recall.aiにはAd-hoc botsとScheduled botsの2種類がありますが、どちらもCreate Bot API を使用します。
- Ad-hoc bots: 指定した会議URLにBotを即座に入室させる。
- Scheduled bots: 日時(
join_at)を指定することで、Botが参加する日時をスケジューリングできる。
curl --request POST \
--url https://us-east-1.recall.ai/api/v1/bot/ \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"meeting_url": "https://zoom.us/j/123?pwd=xxx...",
"recording_config": {
"video_mixed_mp4": {}
}
}
'
このリクエストが成功するとBotのidが返ってきます。このパラメータが今後のステータス管理やデータ取得における重要なキーになるので、データベース等に保存しておきましょう。
補足:カレンダー連携で自動スケジューリング
今回はAd-hocな利用をメインに紹介していますが、GoogleカレンダーやOutlookカレンダーを連携させて、「特定の条件に合致する予定に自動でBotを参加させる」といった実装も可能です。
Step 2: WebhookでBotのステータス検知
Recall.aiではWebhookを通して、Botのステータスの変化を検知することができます。
Webhookのリクエストには2xx系のレスポンスを返す必要がある点には注意しましょう。15秒でタイムアウトするため、それ以上の処理が必要な場合には非同期で実行する必要があります。
// Webhookペイロード例(イメージ)
{
"event": "bot.joining_call",
"data": {
"data": {
"code": string,
"sub_code": string | null,
"updated_at": string
},
"bot": {
"id": string,
"metadata": object
}
}
}
Step 3: 録画データの取得
会議が終了し、Webhookでbot.doneのイベントが通知されると、最終的な成果物である「録画データ」を受け取るフェーズになります。
Retrieve Bot APIから録画Bot作成時に保存しておいたBotのidを使用して取得します。
curl --request GET \
--url https://us-east-1.recall.ai/api/v1/bot/${id}/ \
--header 'accept: application/json'
recordings.[n].media_shortcuts.video_mixed.data.download_urlフィールドにあるRecall.aiのS3からデータをダウンロードできるようになります。
{
"id": "95db53d7-47f6-4d49-be61-dd4481038958",
...,
"recording": "824ad909-8736-4bb1-92d8-1639aa297cd2",
"recordings": [
{
"id": "824ad909-8736-4bb1-92d8-1639aa297cd2",
...
"media_shortcuts": {
"video_mixed": {
"data": {
"download_url": "https://recallai-production-bot-data.s3.amazonaws.com/_workspace-xxx..."
},
"format": "mp4",
...
},
...
}
}
]
}
Recall.aiの文字起こしを取得する
文字起こしもRetrieve Bot APIのレスポンスに含まれており、recordings.[n].media_shortcuts.transcript.data.download_urlのURLをコピーしてWebブラウザに貼り付けると表示されます。
{
"id": "95db53d7-47f6-4d49-be61-dd4481038958",
...,
"recording": "824ad909-8736-4bb1-92d8-1639aa297cd2",
"recordings": [
{
"id": "824ad909-8736-4bb1-92d8-1639aa297cd2",
...
"media_shortcuts": {
"transcript": {
"data": {
"download_url": "..."
},
...
},
...
}
}
]
}
まとめ
ここまでの内容で、Recall.aiを用いた録画Botの実装が2つのAPIとWebhookサーバーを用意するだけでできることを確認できました。
もしこれを自前で実装しようとしていたら、Zoomの認証審査待ちで数ヶ月を過ごし、各プラットフォームのAPI仕様変更に追われ、リアルタイム録画サーバーの負荷分散に頭を悩ませていたことでしょう。
「録画機能そのもの」はコモディティであり、競争優位性ではありません。 その上の「録画データをどう活用するか(分析、要約、共有)」こそが、我々が本当に作りたいサービスの価値であるはずです。
録画・文字起こしデータ集約の1つのケースとして参考になれば幸いです。
Discussion