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

CoeMemo webhook連携でBizAgentに議事録を取り込む

CoeMemoで録音した会議内容を、webhook経由でGoogle Docsに自動保存し、BizAgentに取り込むワークフローです。


CoeMemoとは

CoeMemoは、会議や会話を録音してAIが自動で議事録・グラレコを生成するiOSアプリです。録音ボタンをタップするだけで、文字起こし・要約・アクションアイテム抽出まで自動で行います。


全体の流れ

CoeMemo(録音・文字起こし) → GAS Webhook → Google Docs自動作成 → BizAgentでインポート

webhook連携を設定すると、CoeMemoで送信ボタンを押すたびにGoogle Docsへ議事録が自動作成されます。


セットアップ手順

1. GASプロジェクトを作成する

  1. Google Apps Script を開く
  2. 「新しいプロジェクト」をクリックする
  3. プロジェクト名を「CoeMemo議事録連携」に変更する

2. スクリプトを書く

GASエディタに以下のコードを貼り付けます。

/**
* CoeMemo Webhook → Google Docs 議事録保存スクリプト
*
* CoeMemoアプリからのwebhookを受信し、
* Google Docsで議事録を作成してGoogle Driveに保存します。
*/

/** 議事録を保存するGoogle DriveのフォルダID */
const FOLDER_ID = 'ここにフォルダIDを入力';

/**
* Webhookエンドポイント(POST)
*/
function doPost(e) {
try {
const data = JSON.parse(e.postData.contents);
const docUrl = createMinutesDoc(data);

return ContentService
.createTextOutput(JSON.stringify({ status: 'ok', url: docUrl }))
.setMimeType(ContentService.MimeType.JSON);
} catch (error) {
console.error('エラー:', error.message);
return ContentService
.createTextOutput(JSON.stringify({ status: 'error', message: error.toString() }))
.setMimeType(ContentService.MimeType.JSON);
}
}

/**
* 確認用エンドポイント(GET)
*/
function doGet() {
return ContentService
.createTextOutput(JSON.stringify({ status: 'active', message: 'CoeMemo Webhook is running' }))
.setMimeType(ContentService.MimeType.JSON);
}

/**
* Google Docsで議事録を作成する
*/
function createMinutesDoc(data) {
// ドキュメントを作成する
const title = (data.title || '議事録') + ' - ' + formatDate(new Date());
const doc = DocumentApp.create(title);
const body = doc.getBody();

// 指定フォルダに移動する
const file = DriveApp.getFileById(doc.getId());
file.moveTo(DriveApp.getFolderById(FOLDER_ID));

// タイトルを書き込む
body.appendParagraph(data.title || '議事録')
.setHeading(DocumentApp.ParagraphHeading.HEADING1);

// 会議情報を書き込む
if (data.meetingStartTime) {
const start = new Date(data.meetingStartTime);
const end = data.meetingEndTime ? new Date(data.meetingEndTime) : null;
let dateStr = Utilities.formatDate(start, 'Asia/Tokyo', 'yyyy年MM月dd日 HH:mm');
if (end) dateStr += ' - ' + Utilities.formatDate(end, 'Asia/Tokyo', 'HH:mm');
body.appendParagraph('日時: ' + dateStr);
}

if (data.meetingAttendees && data.meetingAttendees.length > 0) {
body.appendParagraph('参加者: ' + data.meetingAttendees.join(', '));
}

body.appendParagraph('');

// 議事録本文を書き込む
if (data.minutes) {
body.appendParagraph('議事録')
.setHeading(DocumentApp.ParagraphHeading.HEADING2);

data.minutes.split('\n').forEach(function(line) {
if (line.startsWith('## ')) {
body.appendParagraph(line.substring(3))
.setHeading(DocumentApp.ParagraphHeading.HEADING3);
} else if (line.startsWith('# ')) {
body.appendParagraph(line.substring(2))
.setHeading(DocumentApp.ParagraphHeading.HEADING2);
} else if (line.startsWith('- ')) {
body.appendListItem(line.substring(2))
.setGlyphType(DocumentApp.GlyphType.BULLET);
} else {
body.appendParagraph(line);
}
});
}

// アクションアイテムを書き込む
if (data.todos && data.todos.length > 0) {
body.appendParagraph('');
body.appendParagraph('アクションアイテム')
.setHeading(DocumentApp.ParagraphHeading.HEADING2);

data.todos.forEach(function(todo) {
var text = todo.task || '';
if (todo.assignee) text += ' (' + todo.assignee + ')';
if (todo.deadline) text += ' [期限: ' + todo.deadline + ']';
body.appendListItem(text)
.setGlyphType(DocumentApp.GlyphType.BULLET);
});
}

// 文字起こしを書き込む
if (data.transcription) {
body.appendParagraph('');
body.appendParagraph('文字起こし')
.setHeading(DocumentApp.ParagraphHeading.HEADING2);
body.appendParagraph(data.transcription);
}

doc.saveAndClose();
return doc.getUrl();
}

/**
* 日付をフォーマットする
*/
function formatDate(date) {
return Utilities.formatDate(date, 'Asia/Tokyo', 'yyyyMMdd_HHmm');
}

3. フォルダIDを設定する

  1. Google Driveで議事録を保存したいフォルダを開く
  2. URLからフォルダIDをコピーする(https://drive.google.com/drive/folders/XXXXXXXXXXXXXXXXXX 部分)
  3. スクリプト冒頭の FOLDER_ID にフォルダIDを貼り付ける

4. GASをデプロイしてwebhook URLを発行する

  1. GASエディタ右上の「デプロイ」→「新しいデプロイ」をクリックする
  2. 種類で「ウェブアプリ」を選択する
  3. 「アクセスできるユーザー」を「全員」に設定する
  4. 「デプロイ」をクリックする
  5. 表示された ウェブアプリURL をコピーする(これがwebhook URLです)

5. CoeMemoにwebhook URLを設定する

  1. CoeMemoアプリを開く
  2. 「設定」→「β版の機能」→ webhook連携 をONにする
  3. 「Webhook設定」セクションが表示される
  4. コピーしたURLを Webhook URL 欄に貼り付ける
  5. 「テスト送信」ボタンで接続を確認する

6. BizAgentにフォルダIDを設定する

  1. VSCode(またはCursor)で設定画面を開く
    • 方法A: Cmd+,(カンマ)で設定を開く
    • 方法B: Cmd+Shift+P → 「Preferences: Open Settings」を選択する
  2. 検索窓に「BizAgent」と入力する
  3. ボイスメモフォルダーID」の欄を見つける
  4. 手順3でGASに設定したものと同じフォルダIDを貼り付けて保存する

⚠️ 重要: GASスクリプトの FOLDER_ID とBizAgent設定の「ボイスメモフォルダーID」は必ず同じ値にしてください。異なるフォルダIDを設定すると、GASが作成したドキュメントをBizAgentが検出できません。

7. Google認証を完了する

  1. Cmd+Shift+P → 「Google認証表示」と入力して実行する
  2. ブラウザが開き、Googleアカウントでのログインを求められる
  3. このアプリはGoogleで確認されていません」と表示される場合:
    • 左下の「詳細」をクリックする
    • 〇〇(安全でないページ)に移動」をクリックする
    • ※ 開発中のため表示されるもので、信頼できる場合は進んでOKです
  4. Google Docs / Google Driveへのアクセス権限を付与する
  5. 認証完了のメッセージが表示される

🔒 Google Driveの権限について: 認証時にGoogle Driveへの読み取り権限を付与します。プログラム上はDrive内のすべてのファイルにアクセス可能な状態になりますが、BizAgentは設定されたフォルダのみを参照する設計です。重要なファイルをDriveに保存している場合は、この点を認識した上で権限を付与してください。

8. セットアップの検証

CoeMemoからBizAgentまでの一連の流れが正しく動作するか確認します。

  1. CoeMemoアプリで「テスト送信」ボタンを押す
  2. Google Driveの対象フォルダにドキュメントが作成されたことを確認する
  3. VSCode(またはCursor)で Cmd+Shift+P → 「Google Docsからインポート」を実行する
    • ワークスペースが開かれている状態で実行してください(開いていないとエラー)
  4. テスト送信で作成されたドキュメントが一覧に表示されれば成功

使い方

CoeMemoで録音して送信する

  1. CoeMemoアプリで 録音ボタン をタップして会議を録音する
  2. 録音を停止すると、AIが自動で文字起こし・議事録を生成する
  3. 結果画面のメニューから webhook送信ボタン をタップする
  4. Google Docsに議事録が自動作成される

BizAgentでインポートする

  1. VSCodeで Cmd+Shift+P → 「Google Docsからインポート」を実行する
  2. 新規ドキュメントの一覧が表示される
  3. 取り込みたい議事録を選択する

インポート後の活用

活用方法説明
議事録を確認するBizAgentサイドバーの「議事録」セクションで内容を確認する
タスクを抽出するインポート後に提案されるアクションアイテムをクリックしてタスクを作成する
プロファイルを更新する会話から抽出された人物・組織情報をプロファイルに追記する
横断検索する複数の議事録から特定テーマの情報を集約する

注意点

  • GASのデプロイ後にスクリプトを変更した場合は、新しいバージョンで再デプロイする必要があります
  • CoeMemoのwebhook URLは HTTPS のみ対応しています
  • GASの実行時間制限は6分ですが、ドキュメント作成のみであれば数秒で完了します
  • VSCodeでもCursorでも動作します(どちらのエディタでもBizAgent拡張機能をインストールすれば利用可能)
  • インポート実行時はワークスペースが開かれている状態で実行してください(開いていないとエラー)