0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Zoom Whiteboard を チャットから作成・共有 ~コラボレーションを簡単に~

Posted at

はじめに

チャットやWebページから簡単にホワイトボードを作成して、すぐに共同編集を始めることができたら便利ですよね?

この記事では、Zoom Whiteboard APIを使ってホワイトボードの作成、権限変更、共有URL取得を実装する方法を、実際に動くコードと共に解説します。

本記事では、Zoom APIの基本的なOAuth認証が完了していることを前提としています。
OAuth認証について詳しく知りたい方は、2025年版 はじめての Zoom API - OAuth編 を参考にしてください。

Zoom Whiteboard APIとは?

Zoom Whiteboard APIを使うことで、以下の操作を自動化できます:

  • 🎨 ホワイトボードの作成・削除
  • 🔒 権限設定(閲覧・編集権限の管理)
  • 🔗 共有URLの取得
  • 📋 ホワイトボード一覧の取得
  • 👥 メンバーの追加・削除

今回は特に「作成→権限変更→共有URL取得」の基本フローに焦点を当てて解説します。

必要なスコープ設定

Whiteboard APIを使用するには、OAuth Appに以下のスコープを設定する必要があります:

スコープ 用途
whiteboard:read:whiteboard ホワイトボード情報の閲覧
whiteboard:write:whiteboard ホワイトボードの作成・編集
whiteboard:update:share_setting ホワイトボードの設定変更

実装の全体フロー

「作成→権限変更→共有URL取得」の流れをざっくり起こすと以下の通りです:

// 1. ホワイトボード作成
const whiteboard = await createWhiteboard("プロジェクト会議");

// 2. 共有設定の更新(必要に応じて)
await updateShareSettings(whiteboard.whiteboard_id);

// 3. 共有URL取得
const shareUrl = await getWhiteboardInfo(whiteboard.whiteboard_id);

実装コード

環境設定

const axios = require("axios").default;

// OAuth設定(OAuth編の記事を参考に事前取得)
const clientId = "your_client_id";
const clientSecret = "your_client_secret";
let accessToken = ""; // OAuth認証で取得したアクセストークン

1. ホワイトボード作成

/**
 * ホワイトボードを作成する
 * @param {string} name - ホワイトボード名
 * @param {string} accessToken - アクセストークン
 * @returns {Object} 作成されたホワイトボードの情報
 */
async function createWhiteboard(name, accessToken) {
    const options = {
        method: "POST",
        url: "https://api.zoom.us/v2/whiteboards",
        headers: {
            "Content-Type": "application/json",
            Authorization: "Bearer " + accessToken,
        },
        data: { name: name },
    };

    try {
        const { data } = await axios.request(options);
        console.log("Whiteboard created:", {
            id: data.whiteboard_id,
            name: data.name,
            url: data.whiteboard_url
        });
        return data;
    } catch (error) {
        console.error("Whiteboard creation failed:", 
            error.response?.data || error.message);
        throw error;
    }
}

2. 共有設定の更新

/**
 * ホワイトボードの共有設定を更新する
 * @param {string} whiteboardId - ホワイトボードID
 * @param {string} accessToken - アクセストークン
 */
async function updateShareSettings(whiteboardId, accessToken) {
    const options = {
        method: "PATCH",
        url: `https://api.zoom.us/v2/whiteboards/${whiteboardId}/share_setting`,
        headers: {
            "Content-Type": "application/json",
            Authorization: "Bearer " + accessToken,
        },
        data: { 
            share_link_setting: { 
                share_scope: 2,  // 2: アカウント内のメンバー
                share_role: 2    // 2: 編集者権限
            } 
        },
    };
    
    try {
        const { data } = await axios.request(options);
        console.log("Share settings updated:", data);
        return data;
    } catch (error) {
        console.error("Share settings update failed:", 
            error.response?.data || error.message);
        throw error;
    }
}

共有設定パラメータ

パラメータ 意味
share_scope 0 共有ユーザーのみ
1 アカウント内のメンバー
2 誰でも
share_role 2 編集可能
3 コメント可能
4 閲覧のみ

3. ホワイトボード情報取得(共有URL含む)

/**
 * ホワイトボード情報を取得(共有URL含む)
 * @param {string} whiteboardId - ホワイトボードID
 * @param {string} accessToken - アクセストークン
 * @returns {Object} ホワイトボード情報
 */
async function getWhiteboardInfo(whiteboardId, accessToken) {
    const options = {
        method: "GET",
        url: `https://api.zoom.us/v2/whiteboards/${whiteboardId}`,
        headers: {
            "Content-Type": "application/json",
            Authorization: "Bearer " + accessToken,
        },
    };
    
    try {
        const { data } = await axios.request(options);
        console.log("Whiteboard info retrieved:", {
            id: data.whiteboard_id,
            name: data.name,
            shareUrl: data.share_link
        });
        return data;
    } catch (error) {
        console.error("Whiteboard info retrieval failed:", 
            error.response?.data || error.message);
        throw error;
    }
}

チャットボットとの連携例

Untitled.gif

まとめ

この記事では、Zoom Whiteboard APIを使った基本的な操作を実装しました。

  • ホワイトボード作成POST /v2/whiteboards
  • 共有設定更新PATCH /v2/whiteboards/{id}/share_setting
  • 情報取得GET /v2/whiteboards/{id}

これらの機能を組み合わせることで、「チャットからすぐにホワイトボードを作成して共同編集を始める」というワークフローが実現できます。

参考リンク・リソース


実装で困ったことがあれば、コメント欄で質問してください!

この記事は、Zoom Communications, Inc.の公式にサポートされているものではなく、個人的に公開しているものになります。Zoom Communications, Inc.とその従業員、および関連会社は、本記事の使用や保守について責任を負いません。技術的な議論やサポートが必要な場合は、作成者やZoom開発者コミュニティ( https://devforum.zoom.us/ )にご連絡いただけますが、この記事にはサービスレベル契約に基づくサポートがないことをご理解ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?