はじめに
前回の記事では、Cisco Workflows の概要やメリット、要件、ユースケースを紹介しました。
今回は続編として、Workflows 上で Python を実行し、Meraki API の情報を取得・集計して、Webex(Incoming Webhook)へ自動通知する例を紹介します。
※本記事では、スクリプトは公開しておりません。
Python を使った自動化というと「PC やサーバ、実行環境の用意」が必要になりがちですが、Workflows を使うことで ユーザ側に実行環境がなくても定期処理を動かせる点がメリットです。一方で、Workflows の Python 実行には「利用できるモジュール」などの制約があるため、事前に公式ドキュメントも確認してください。
この記事でやること(完成イメージ)
この Workflow は、毎朝 9 時に以下を自動実行します。
- Meraki API で Organization の Channel Utilization(過去24時間) を取得
- 2.4GHz / 5GHz それぞれで 利用率(%)が高い上位10台を抽出
- デバイス名やネットワーク名、ファームウェア情報を付加して 表形式に整形
- 結果を Webex の Incoming Webhook に送信
「毎日ダッシュボードを開いて、混雑している AP を目視確認している」といった運用を、通知ベースに置き換える用途を想定しています。
事前準備(必要なもの)
1) Meraki Dashboard API Key
Meraki API を呼び出すために必要です。API Key の取り扱いは慎重に行い、記事や画面共有で外部に出ないようにしてください。
API の始め方 参考記事
2) Organization ID(ORG_ID)
対象の Organization を指定するために必要です。
Meraki ダッシュボードにログインし、対象のOrganization を選択して下方にあるOrganization ID を確認する。

3) Webex Incoming Webhook URL
通知先(スペース)に紐づく Webhook URL を用意します。
Webex Incoming Webhook URL 作成 参考記事
Workflows 側で用意する Inputs
今回は、Workflow に「入力値(Inputs)」として以下を作成し、Python で参照します。
- API_KEY:Meraki Dashboard API Key
- ORG_ID:Organization ID
- WEBHOOK_URL:Webex Incoming Webhook URL
これは、「API Key や Webhook URL を Python に直書きせずに」、変数として登録する方法となります。
(Workflow の Inputs に持たせた方が運用しやすくなります)。
Workflow の作り方(手順)
手順1:新規 Workflow を作成
Automation > Workspace > Create で新しく Workflow を作成します(名前は任意。例:Daily Channel Utilization Report)。



手順2:Variables(Inputs) を作成
Workflow の設定で Inputs を追加します。(名前は任意。例:KEY)。
- KEY:Meraki Dashboard API Key
- ORGID:Organization ID
- WEB:Webex Incoming Webhook URL

手順3:Python 実行アクティビティを追加
Activity として Execute Python Script(Python 実行) を検索、作業スペースにドラッグアンドドロップして追加します。

スクリプトを貼り付け、Variables(Inputs) で設定した変数の指定を行います。
API_KEY,ORG_ID,WEBHOOK_URL にマウスカーソルを置き、{x} をクリックする。

それぞれに対応した変数を設定します。
- KEY:Meraki Dashboard API Key
- ORGID:Organization ID
- WEB:Webex Incoming Webhook URL

手順4:検証および手動実行でテスト
まずはスケジュールの前に、検証(Validated)および手動(Run)で実行して
- 検証が完了するか、エラーなく完了するか。
- Webex に通知が届くか を確認します。

実行前に、Input の値が正しいか確認のポップアップが表示されるため、確認して実行する。

スクリプトが問題無く完了したこと、Webex に通知されたことを確認します。


手順5:スケジュール(毎朝9時)を設定
最後に Schedule(スケジュールルール)を作成して、毎朝 9:00 に実行するようにします。
意図したタイムゾーンになっているかも確認してください。


Select work flow では上記で作成したWorkflow を選択します。

手動実行でテストを実施した時と同じ形式のものが指定した時間にWebex で通知されたことが確認できました。

Python スクリプトについて
本記事では、Python の実行可能なスクリプトは掲載していません。
スクリプトは環境差異や API 変更の影響を受けやすく、動作や影響範囲を保証できないためです。
具体的なコードではなく、Workflows の作成やソリューション、実装時の注意点といった判断材料の提供に注力しています。
自動化の実装については、各環境に応じて十分な検証のうえでご検討ください。
Python でのMeraki API を使用したスクリプト例は以下のサンプルもご参照ください。
https://developer.cisco.com/meraki/build/automation-scripts-with-python/
また、API に関する質問事項は以下のコミュニティもご活用ください。
https://community.meraki.com/t5/Developers-APIs/bd-p/api
スクリプトの要点
上述の通りにスクリプトを記載することはできませんが、今回意識した要点をまとめておきます。
1) 3種類の API を呼んでいる
「利用率データだけだと表示したい情報(ネットワーク名など)が足りない」ため、追加で2本 API を呼んで情報を補っています。
2) 2.4GHz / 5GHz を分けて Top10 を作っている
byBand の中身を見て、band が 2.4 と 5 のものを別々のリストに入れ、利用率(percentage)で降順ソートして上位10件を作っています。
3) Webex には {"text": ...} として送っている
Incoming Webhook の最小構成として、text にメッセージを入れて POST しています。
よくあるつまずき(確認ポイント)
- Meraki API が 401/403:API Key の権限や Org ID を確認
- Webhook が 4xx:Webhook URL の貼り間違い(末尾含め)を確認
- Webex 側で表がズレる:クライアントによって等幅表示が崩れる場合があります(その場合は箇条書き形式などに変更すると安定します)
例:

上記の場合は、HTTP error 403 が検出されています。
これは、APIキーの制限 を受けている場合に発生します。
Meraki APIキーでIPアクセス制限が有効になっている場合、許可されていないIPアドレスからのリクエストは403エラーでブロックされます。
この問題を解決するには、Merakiダッシュボードの「オーガナイゼーション」>「設定」>「セキュリティ」 >「ログイン可能な IP アドレス範囲」 を確認し、使用しているAPIキーのIPアクセス制限を一時的に削除または調整してください。

まとめ
Workflows の Python 実行を使うと、Meraki API を使った「取得→集計→通知」の定期処理を、実行環境なしで運用に組み込めます。まずは毎朝レポートのような定常作業から自動化していくと効果が出やすいです。