PowerShellでZoomミーティングをAPI経由で作成し自動リマインダーを送信する方法

PowerShellを使用することで、Zoomミーティングの作成とスケジュール管理を自動化できます。特に、Zoom APIを活用すれば、簡単にミーティングを作成し、リマインダーを自動送信するシステムを構築可能です。本記事では、PowerShellを用いてZoom APIと連携し、ミーティング作成からリマインダーの送信までを効率的に実現する方法を詳しく解説します。スクリプトの具体例や応用例も紹介するため、初心者から中級者まで役立つ内容となっています。

PowerShellでZoom APIを使用する準備


Zoom APIを使用するには、事前にいくつかの設定を行い、必要な資格情報を取得する必要があります。以下はその手順です。

Zoom APIの利用登録


Zoom APIを利用するためには、Zoomの公式サイトで「開発者アカウント」を作成し、APIの設定を行います。

  1. Zoom App Marketplace にアクセスします。
  2. アカウントにログイン後、「Develop」>「Build App」を選択します。
  3. 「JWT」を選択して新しいアプリを作成します。

APIキーとシークレットの取得


アプリを作成すると、以下の資格情報が発行されます。これをスクリプトで使用します。

  • APIキー: Zoom APIを呼び出す際に使用する識別子
  • APIシークレット: APIリクエストを認証するための秘密情報

必要なモジュールのインストール


PowerShellでHTTPリクエストを実行するために必要なモジュールをインストールします。

Install-Module -Name "PSZoom" -Force

環境変数の設定


セキュリティを高めるため、APIキーとシークレットを環境変数として設定します。

[System.Environment]::SetEnvironmentVariable("ZOOM_API_KEY", "YourAPIKey", "User")
[System.Environment]::SetEnvironmentVariable("ZOOM_API_SECRET", "YourAPISecret", "User")

これで、Zoom APIをPowerShellで使用する準備が整いました。次に、認証を行い、APIリクエストを実行する方法を説明します。

API認証の方法


Zoom APIを利用するためには、適切な認証を行い、有効なトークンを取得する必要があります。本章では、PowerShellを使ったトークン取得と認証の手順を解説します。

JWTトークンの概要


Zoom APIは、JWT(JSON Web Token)を使用して認証します。JWTは、APIキーとAPIシークレットを使用して生成される暗号化トークンで、一定期間有効です。このトークンをリクエストヘッダーに付与することで、Zoom APIにアクセスできます。

JWTトークンの生成


PowerShellでJWTトークンを生成するには、PSZoomモジュールまたは独自スクリプトを使用します。以下は、独自にトークンを生成する例です。

# 必要なモジュールのインポート
Import-Module -Name "Jwt" -Force

# APIキーとシークレットを環境変数から取得
$apiKey = [System.Environment]::GetEnvironmentVariable("ZOOM_API_KEY", "User")
$apiSecret = [System.Environment]::GetEnvironmentVariable("ZOOM_API_SECRET", "User")

# JWTトークンのペイロード作成
$payload = @{
    iss = $apiKey
    exp = [math]::Floor((Get-Date).AddMinutes(30).ToUniversalTime().Subtract((Get-Date "1970-01-01")).TotalSeconds)
} | ConvertTo-Json -Depth 10

# トークンの生成
$token = New-JwtToken -Key $apiSecret -Payload $payload

# トークンを確認
Write-Output $token

APIリクエストでのトークン使用


生成したトークンは、APIリクエストのヘッダーに追加して使用します。例として、Zoom APIにリクエストを送信するコードを以下に示します。

# ヘッダーの作成
$headers = @{
    "Authorization" = "Bearer $token"
    "Content-Type" = "application/json"
}

# APIエンドポイントへのリクエスト
$response = Invoke-RestMethod -Uri "https://api.zoom.us/v2/users/me/meetings" -Method Get -Headers $headers

# 結果の確認
$response

エラーのトラブルシューティング


認証エラーが発生した場合は、以下を確認してください。

  • APIキーとシークレットが正しいか
  • JWTトークンの有効期限が切れていないか
  • ヘッダーに正しい形式でトークンが設定されているか

これで、Zoom APIへの認証が完了しました。次は、具体的なミーティング作成リクエストを構築する方法を説明します。

ミーティング作成リクエストの構築


Zoom APIを使用してミーティングを作成するには、適切なリクエストを構築し、APIエンドポイントに送信する必要があります。本章では、PowerShellでミーティング作成リクエストを作成する方法を解説します。

APIエンドポイントの確認


Zoom APIのミーティング作成用エンドポイントは以下の通りです。

https://api.zoom.us/v2/users/{userId}/meetings


ここで{userId}はミーティングを作成するユーザーのメールアドレスまたはユーザーIDに置き換えます。

ミーティング作成のリクエスト構造


リクエストのボディには、以下のようなJSONデータを含める必要があります。

{
    "topic": "チーム会議",
    "type": 2,
    "start_time": "2025-01-24T10:00:00Z",
    "duration": 60,
    "timezone": "Asia/Tokyo",
    "password": "123456",
    "agenda": "プロジェクト進捗の確認"
}

PowerShellスクリプトでのリクエスト構築


以下は、PowerShellを使用してミーティング作成リクエストを送信するスクリプトの例です。

# トークンの取得
$token = "YourJWTToken"

# ヘッダーの作成
$headers = @{
    "Authorization" = "Bearer $token"
    "Content-Type" = "application/json"
}

# リクエストボディの作成
$body = @{
    topic = "チーム会議"
    type = 2
    start_time = "2025-01-24T10:00:00Z"
    duration = 60
    timezone = "Asia/Tokyo"
    password = "123456"
    agenda = "プロジェクト進捗の確認"
} | ConvertTo-Json -Depth 10

# APIエンドポイント
$endpoint = "https://api.zoom.us/v2/users/me/meetings"

# ミーティング作成リクエストの送信
$response = Invoke-RestMethod -Uri $endpoint -Method Post -Headers $headers -Body $body

# 結果の表示
$response

リクエストの送信後の確認


成功した場合、Zoom APIは以下のようなJSONレスポンスを返します。

{
    "id": 1234567890,
    "topic": "チーム会議",
    "join_url": "https://zoom.us/j/1234567890",
    "start_time": "2025-01-24T10:00:00Z"
}

このレスポンスからミーティングIDや参加URLを取得できます。

エラー対応


リクエスト送信時にエラーが発生した場合、以下を確認してください。

  • トークンが有効か
  • リクエストボディの構造が正しいか
  • 必須フィールド(topictypeなど)が含まれているか

次に、PowerShellスクリプトを完全に統合し、実行可能な形で構築する方法を解説します。

PowerShellスクリプトの作成と実行


ここでは、Zoom APIを使用してミーティングを作成する完全なPowerShellスクリプトを構築し、実行する方法を解説します。これにより、スクリプトを単独で実行してZoomミーティングを作成できるようになります。

スクリプトの全体構造


以下は、Zoom APIを利用してミーティングを作成するための完全なスクリプト例です。

# Zoom APIのトークン取得とミーティング作成スクリプト

# 必要な情報を環境変数から取得
$apiKey = [System.Environment]::GetEnvironmentVariable("ZOOM_API_KEY", "User")
$apiSecret = [System.Environment]::GetEnvironmentVariable("ZOOM_API_SECRET", "User")

# JWTトークンの生成
function Get-JwtToken {
    param (
        [string]$apiKey,
        [string]$apiSecret
    )
    $payload = @{
        iss = $apiKey
        exp = [math]::Floor((Get-Date).AddMinutes(30).ToUniversalTime().Subtract((Get-Date "1970-01-01")).TotalSeconds)
    } | ConvertTo-Json -Depth 10

    # JWTトークンの生成(簡易的な生成方法を使用)
    $header = @{alg="HS256"; typ="JWT"} | ConvertTo-Json -Depth 10 | [System.Text.Encoding]::UTF8.GetBytes
    $base64Header = [Convert]::ToBase64String($header)

    $payloadBytes = [System.Text.Encoding]::UTF8.GetBytes($payload)
    $base64Payload = [Convert]::ToBase64String($payloadBytes)

    $signature = [System.Security.Cryptography.HMACSHA256]::new([System.Text.Encoding]::UTF8.GetBytes($apiSecret)).ComputeHash([System.Text.Encoding]::UTF8.GetBytes("$base64Header.$base64Payload"))
    $base64Signature = [Convert]::ToBase64String($signature)

    return "$base64Header.$base64Payload.$base64Signature"
}

# JWTトークンを取得
$token = Get-JwtToken -apiKey $apiKey -apiSecret $apiSecret

# APIエンドポイントとヘッダーの設定
$endpoint = "https://api.zoom.us/v2/users/me/meetings"
$headers = @{
    "Authorization" = "Bearer $token"
    "Content-Type" = "application/json"
}

# ミーティングの設定
$body = @{
    topic = "チーム会議"
    type = 2
    start_time = "2025-01-24T10:00:00Z"
    duration = 60
    timezone = "Asia/Tokyo"
    password = "123456"
    agenda = "プロジェクト進捗の確認"
} | ConvertTo-Json -Depth 10

# リクエストの送信
try {
    $response = Invoke-RestMethod -Uri $endpoint -Method Post -Headers $headers -Body $body
    Write-Host "ミーティングが作成されました:"
    Write-Host "ミーティングID: $($response.id)"
    Write-Host "参加URL: $($response.join_url)"
} catch {
    Write-Error "ミーティング作成に失敗しました: $($_.Exception.Message)"
}

スクリプトの実行方法

  1. 上記スクリプトをファイル(例: CreateZoomMeeting.ps1)として保存します。
  2. PowerShellターミナルを開き、スクリプトを実行します。
   .\CreateZoomMeeting.ps1

スクリプトの動作確認

  • 成功した場合、作成されたミーティングのIDや参加URLが表示されます。
  • エラーが発生した場合、詳細なエラーメッセージが表示されるため、それを参考に原因を特定してください。

次は、作成したミーティングにリマインダーを自動送信する方法を解説します。

リマインダーの自動送信設定


Zoomミーティングを作成した後、リマインダーを自動送信することで参加者に通知を送る仕組みを構築できます。本章では、PowerShellを使用してリマインダーを効率的に送信する方法を解説します。

リマインダーの概要


リマインダーとは、ミーティングの開始時間が近づいた際に参加者に送信される通知です。これを自動化することで、手動での送信作業を省略し、参加率を向上させることができます。

リマインダー送信の方法


リマインダー送信には、Zoom APIの利用とメール通知機能を組み合わせます。また、PowerShellでスケジュールタスクを設定して、指定したタイミングでリマインダーを送信するようにします。

PowerShellスクリプト例


以下は、リマインダー送信を自動化するスクリプトの例です。

# ミーティングの詳細(仮のデータ)
$meetingID = "1234567890"
$meetingStartTime = "2025-01-24T10:00:00Z"
$recipientEmails = @("user1@example.com", "user2@example.com")

# リマインダー送信の設定
function Send-Reminder {
    param (
        [string]$meetingID,
        [string]$meetingURL,
        [array]$recipients
    )

    # メールの設定
    foreach ($recipient in $recipients) {
        $subject = "Zoomミーティングリマインダー"
        $body = @"
こんにちは、

以下のZoomミーティングが間もなく開始されます。詳細は以下の通りです:

ミーティングID: $meetingID
参加URL: $meetingURL

開始時刻: $(Get-Date -Date $meetingStartTime -Format "yyyy/MM/dd HH:mm")
どうぞお忘れなくご参加ください!

よろしくお願いいたします。
"@

        # メール送信(SMTPの設定を含む)
        Send-MailMessage -From "noreply@example.com" `
                          -To $recipient `
                          -Subject $subject `
                          -Body $body `
                          -SmtpServer "smtp.example.com" `
                          -Port 587 `
                          -UseSsl `
                          -Credential (Get-Credential)
    }
}

# ミーティングURL
$meetingURL = "https://zoom.us/j/$meetingID"

# リマインダー送信
Send-Reminder -meetingID $meetingID -meetingURL $meetingURL -recipients $recipientEmails

スケジュールタスクの設定


リマインダーを自動で送信するには、以下のようにスケジュールタスクを設定します。

  1. PowerShellスクリプトをファイル(例: SendReminder.ps1)として保存します。
  2. Task Scheduler(タスクスケジューラ)を開き、新しいタスクを作成します。
  3. トリガーとして、ミーティング開始の10分前などのタイミングを設定します。
  4. アクションで、PowerShellを実行してスクリプトを呼び出します。
powershell.exe -File "C:\Path\To\SendReminder.ps1"

エラー時のトラブルシューティング

  • SMTPサーバーの設定が正しいか確認してください。
  • メールアカウントの認証情報が正確か確認してください。
  • スケジュールタスクが正しいタイミングで動作するかを確認してください。

これで、Zoomミーティングのリマインダーを自動送信する仕組みが完成しました。次は、実際の運用で役立つ応用例や他のツールとの統合方法を解説します。

実践例と応用


PowerShellでZoom APIを使用してミーティング作成とリマインダー送信を自動化した後、さらに運用を効率化するための応用例を紹介します。これにより、他のツールやプロセスとの統合が可能になり、システム全体の生産性が向上します。

応用例1: スプレッドシートからのミーティング作成


Google SheetsやExcelなどのスプレッドシートに記載された情報を利用して、複数のZoomミーティングを一括作成することが可能です。

スクリプト例: Excelデータを利用したミーティング作成

# 必要なモジュールをインポート
Import-Module -Name ImportExcel

# Excelファイルのパス
$excelFilePath = "C:\Path\To\Meetings.xlsx"

# Excelデータの読み込み
$meetings = Import-Excel -Path $excelFilePath

# 各行からミーティングを作成
foreach ($row in $meetings) {
    $body = @{
        topic = $row.Topic
        type = 2
        start_time = $row.StartTime
        duration = $row.Duration
        timezone = "Asia/Tokyo"
        password = $row.Password
        agenda = $row.Agenda
    } | ConvertTo-Json -Depth 10

    # APIリクエストの送信
    $response = Invoke-RestMethod -Uri "https://api.zoom.us/v2/users/me/meetings" -Method Post -Headers $headers -Body $body
    Write-Host "ミーティング作成成功: $($response.id)"
}

応用例2: チャットボットとの統合


SlackやMicrosoft Teamsのチャットボットと統合し、チャット上からミーティングを作成できるようにする方法です。

  • チャットボットにコマンドを入力するとPowerShellスクリプトがトリガーされ、Zoomミーティングが作成されます。
  • 生成されたミーティングURLは、チャットボットを通じて参加者に通知されます。

スクリプト例: Slack Webhookを使用した通知

# Slack Webhook URL
$slackWebhook = "https://hooks.slack.com/services/XXXX/XXXX/XXXX"

# メッセージの送信
function Send-SlackNotification {
    param (
        [string]$message
    )
    $payload = @{
        text = $message
    } | ConvertTo-Json -Depth 10

    Invoke-RestMethod -Uri $slackWebhook -Method Post -Body $payload -ContentType "application/json"
}

# ミーティング作成後に通知
$message = "新しいZoomミーティングが作成されました。参加URL: https://zoom.us/j/1234567890"
Send-SlackNotification -message $message

応用例3: 他のAPIとの統合


Zoom APIと他のサービス(例: Google CalendarやMicrosoft Outlook)を連携させて、以下のようなワークフローを自動化します。

  • Zoomミーティング作成時に、Google Calendarへ自動でイベントを追加
  • Outlookで予定表にZoomリンクを追加

スクリプト例: Google Calendar API連携

# Google Calendar APIの設定と連携
$calendarEndpoint = "https://www.googleapis.com/calendar/v3/calendars/primary/events"
$headers = @{
    "Authorization" = "Bearer YourGoogleAPIToken"
    "Content-Type" = "application/json"
}
$eventBody = @{
    summary = "チーム会議"
    location = "オンライン (Zoom)"
    description = "Zoomミーティングリンク: https://zoom.us/j/1234567890"
    start = @{
        dateTime = "2025-01-24T10:00:00+09:00"
        timeZone = "Asia/Tokyo"
    }
    end = @{
        dateTime = "2025-01-24T11:00:00+09:00"
        timeZone = "Asia/Tokyo"
    }
} | ConvertTo-Json -Depth 10

$response = Invoke-RestMethod -Uri $calendarEndpoint -Method Post -Headers $headers -Body $eventBody
Write-Host "Google Calendarにイベントを追加しました: $($response.id)"

運用のメリット

  • 時間削減: 手動作業を排除し、繰り返しタスクを自動化。
  • 精度向上: ヒューマンエラーを防ぎ、確実に情報を共有。
  • 拡張性: 他のツールやAPIと組み合わせることで、独自のワークフローを作成可能。

これらの応用例を活用することで、Zoom APIとPowerShellを使った業務プロセスをさらに効率化できます。次に、この記事全体をまとめます。

まとめ


本記事では、PowerShellを使用してZoom APIと連携し、ミーティングの作成とリマインダーの自動送信を実現する方法を解説しました。Zoom APIの設定からトークンの取得、PowerShellスクリプトの作成、リマインダーの送信、さらに応用例としてスプレッドシートやチャットボットとの統合まで、幅広い内容を網羅しました。

これにより、Zoomミーティングの管理や通知作業を効率化でき、時間の節約と運用の精度向上が期待できます。また、他のAPIやツールと組み合わせることで、より高度な自動化を実現する可能性も広がります。

ぜひこの記事の内容を参考に、日々の業務プロセスを効率化してみてください。

コメント

コメントする