【神効率！】ローコードでZoom Phone通話ログを自動集計📞✨〜Power AutomateとAPIで仕事爆速化の巻〜

![ChatGPT Image Jun 3, 2025, 12_46_46 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442226/7da8cf4e-d71e-4b12-b447-1119d8b4d79c.png)

# はじめに 💡
みなさん、日々のZoom Phoneの通話ログや着信履歴など、必要なデータを **「CSVダウンロードして手作業でエクセルまとめてる…」** なんてこと、ありませんか？

今回は、ノーコード/ローコードで Office 連携ができる Microsoft の RPA ツール「Power Automate」とZoom Phone APIを組み合わせて、通話ログの自動集計Botを作る事例を紹介します🐤
比較的簡単に取り込める仕組みなので、エンジニアもそうじゃない人も必見です！

# Power Automate ってなに？ 🤖
![ChatGPT Image Jun 3, 2025, 12_06_47 PM (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442226/d84eb536-17b3-4437-bac6-1f63305ea125.png)

ざっくりいうと、Microsoft が提供している業務自動化プラットフォームで、「プログラミング知識ゼロ」でも使えるツールです。複雑なタスクや「他サービス同士の連携」も、画面上の“ドラッグ＆ドロップ”だけでサクサク作れるのが特長。

### 公式の紹介ページはこちら
https://learn.microsoft.com/ja-jp/power-automate/

### たとえば
- 「特定のメールが来たら自動でPDF保存」
- 「フォーム入力があればリーダーに即通知」
- 「外部サービスのデータを定期的に取得→Excelへ自動追記」

こんな“業務の自動化”が、GUIだけでできる…それがPower Automate！
ちょっとした面倒なルーチンワークから、API連携の本格自動化まで、**ノーコードで現場改善できる“RPAツール”** です！


参考記事：

https://qiita.com/tags/powerautomate

# Zoom Phone APIってなに？ ☎️
Zoomの電話機能（Zoom Phone）で発生した
- 通話履歴
- 発着信イベント
などの情報を取得したり、コールキューや共有ラインの設定を変更したりといったZoom Phone に関わる様々な操作をAPI経由で実行できます。

https://developers.zoom.us/docs/api/phone/

# 必要なもの 📝
- Microsoft Power Automateアカウント
- Zoomアカウント（Zoom Phone APIであればZoom Phone契約必須）
- Zoom MarketplaceでAPI連携用のServer-to-Server OAuth App
- Excel Online（SharePoint or OneDriveに配置推奨）

# やり方ガイド 🚀
## 1. Excel Onlineに「テーブル」を作る
まず、Excel Onlineでワークシートを作成した後、それをSharePointかOneDriveに保存します。さらに、そのままではPower Automateから見えないようなので、**テーブル**を作成します。
### データを入れる範囲を選択→「テーブル」化
Insertメニューから、Tableを選択すると選択範囲がテーブル化されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442226/15b7407b-5385-4274-9de2-a9799ae4b2b6.png)
必要に応じてヘッダに名前を入れておきましょう。

## 2. Power Automateで新しいフローを作成
次にいよいよPower Automateを起動します。

Copilotに丸投げもできるみたいですが、今日は一旦左メニューの `+ Create` からワークフローを作成しましょう。
![Screenshot 2025-06-03 at 16.10.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442226/d573a8a5-92d4-48db-9322-674136ae174b.png)

お試しでまずは Instant flow を選択して（日時を決めて定期的に動かしたい場合は Scheduled cloud flow を選ぶと良いかと）
![Screenshot 2025-06-03 at 16.11.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442226/cf50a717-f887-4f6c-a1b3-e48a50eb242c.png)

さらに、Manually trigger a flowを今回は選択してみます。
![Screenshot 2025-06-03 at 16.12.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442226/f216cb01-7613-4bcb-9ba9-d824bc0c3c9b.png)

## 3. アクションの追加
![Screenshot 2025-06-03 at 16.24.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442226/8f198ad0-1dc8-4a64-8a9b-17eddfcb49b5.png)
最初に現れるのはこのようなカードだと思います。この下のプラスマークをクリックすると、左側にメニューが出てきます。今回はここから、HTTPアクションを選択してみましょう。
![Screenshot 2025-06-05 at 11.44.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442226/d20af22f-e341-4a65-bf92-895482edef63.png)

## 4. アクセストークンの取得
HTTPアクションを選択したら、次にZoom API用のアクセストークンを取得します。ここでは「Server to Server OAuthアプリ」をZoom Marketplaceで作成し、その情報を使ってトークンを発行します。
Server to Server OAuth やアクセストークンの取得方法については、こちらの記事を参考にしてください。

https://qiita.com/michitakasugi/items/c9ba4d37c6441bffd2c9

### Power Automateでアクセストークンを取得する場合
HTTPアクションを追加し、上記の内容をPower Automateの「HTTP」アクションに落とし込みます。


| Item | Content |
---|---
| URI| https://zoom.us/oauth/token | 
| Method | POST |
| Headers | Authorization : (以下にて説明) |
| Queries | grant_type : account_credentials <br> account_id: YOUR_ACCOUNT_ID |

Authorization部分ですが、`Basic `(半角スペースを忘れずに)と入力した後にスラッシュをタイプし、`Insert expression`を選択します。表示されたポップアップに `base64('CLIENT_ID:CLIENT_SECRET')`という形で入力し、`Add`をクリックします。

![Screenshot 2025-06-05 at 14.13.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442226/604c1ae3-485c-47cf-9f28-dda46073ba27.png)

こんな感じですね。一旦ここまででテストしてみましょう。右上のSaveをクリックした後、Testを実行すると、テスト完了後にリンクが表示されます。無事成功すると、アクセストークンが取得できていることがわかります。

![Screenshot 2025-06-05 at 14.14.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442226/0cc4e0a3-fcf9-4ce8-a7f5-e0a5bd5d0076.png)

### 📝 ワンポイント！
- トークンの有効期限は**1時間**なので、使う直前に毎回発行する運用がベスト
- アカウントやClient Secretの扱いには**要注意**
- Server to Server OAuthは「**管理者権限**」なので誤操作・過剰スコープには気を付けて！

## 5. APIの実行
同じような形でアクションを追加していき、必要な情報をAPI経由で取得します。
例えば以下のような形で、前述の手順で取得したアクセストークンを使ってリクエストすることが可能です。

![Screenshot 2025-06-05 at 14.27.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442226/71f44f21-7e6a-4f08-bfcd-781f7b751d75.png)

## 6. エクセルへの転記
最後に、Excel Onlineのアクションメニューから、`Add a row into a table` を選択し、必要な情報を必要な場所に入れるよう、仕込んでいきます。

![Screenshot 2025-06-05 at 14.34.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442226/9fa20c4a-cdb9-4b19-bc05-ebb6399373be.png)

詳細は省きますが、イメージはこんな感じです。例として、`https://api.zoom.us/v2/phone/call_history` で取得したデータの`callee_name`を取得するなら、`body('getCallHistory')?['Call_logs']?[0]?['callee_name']`という感じになります。

![Screenshot 2025-06-05 at 14.37.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442226/9230a408-274c-4ead-b6da-0c80883a418b.png)

## 7. テスト結果の確認
改めてSaveしてTestしたら、Excel上にAPIで取れたデータが自動追記されてるか確認してみましょう！

![Screenshot 2025-06-05 at 14.39.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442226/9f488f0c-ee21-4e5f-ba20-57fedee2ca0f.png)

こんな感じのデータが出力されていれば成功です。

# コツ 🧪
1. 手動トリガーでフローを回してみる
2. Power Automateの「実行履歴」でエラー発生箇所をチェック
3. Excelファイルに期待通りのデータが追加されてるか見る
4. 必要に応じて出力内容やマッピングを微調整

# よくあるトラブルと対処法 💥
試行錯誤が少し必要な部分もあるかと思われますが、ありそうなトラブルをまとめてみました。

| 現象                             | 原因と対策                   |
| ------------------------------ | ----------------------- |
| テーブルが選べない                      | Excelを「テーブル化」していない      |
| Add a rowで「InvalidTemplate」エラー | JSONのキー名ミス/配列が空         |
| HTTPアクションの出力が文字列でプロパティ取れない     | Composeアクションを挟んであらかじめデータを準備しておく     |
| データがダブる・空になる                   | 書き込み範囲、カラム名、マッピングの見直し   |
| SharePoint/OneDriveで「編集できません」  | ファイルが他でロック中、権限不足、開きっぱなし |

# 応用編 🪄
- スケジュールトリガーで毎朝8時に自動集計✨
- メールやTeamsに通知も組み合わせ可能！
- 取得項目やフィルタの追加でカスタマイズも自由自在
- フローをテンプレ化して他の部署や用途にも展開

# 注意事項（大事）
今回の記事ではテスト目的のため、APIキーやシークレットをフロー内に直接記載して実行していますが、本番環境やチームで使う場合は「**そのまま書くのはNG**」なので、安全な方法で管理しましょう！

## 💡 APIキーやシークレットの管理について(一例）
- Azure Key VaultでAPIキーやパスワードを保管
- 必要な権限をPowerPlatformに付与
- Power Appsで **“シークレット型”の環境変数** を作成（Key Vaultと連携）
- Power AutomateからDataverse経由で安全に取得して利用

こうすると「フロー内で直接値を書かずに」「管理者がローテーション・履歴管理」もできて安心です🙆‍♂️

## 📝 やり方の流れ（ざっくりイメージ）
1. AzureポータルでKey Vaultを作成し、APIキーを「シークレット」として登録
1. 権限設定で「Microsoft.PowerPlatform」に取得許可を与える
1. Power Appsのソリューションで「シークレット型」の環境変数を作成しKey Vaultと紐付け
1. Power AutomateでDataverseの「RetrieveEnvironmentVariableSecretValue」アクションで値を取得
1. 取得した値をHTTPアクションのヘッダーやボディに動的にセット


:::note info
詳しい手順や注意点は、公式ドキュメントや他の技術ブログを参考にしたり、
わからない部分はAIや検索で最新情報を調べてみてください！
:::

# おわりに 🍀
これであなたも「手作業ログ集計」卒業！
ローコードなのに業務効率化、おすすめです🦄✨