はじめに
リモートワークにおけるコラボレーションツールとして、Microsoft Teams を利用している方も多いかと思います。
今回は、Microsoft Teams の Webhook と ArcGIS API for Python との連携方法として、ArcGIS のバッチジオコーディング処理とその結果をフィーチャ レイヤーとして公開する処理が終了したら、Teams に通知する方法を紹介します。
Microsoft Teams に Incoming Webhook の作成
1. Microsoft Teams の任意のチャネルの「…」をクリックし、「コネクタ」を選択します。
2. 表示されたコネクタ一覧から「Incoming Webhook」を追加します。
3. 追加された「Incoming Webhook」の「構成」を選択します。
4. 任意の名前を入力し、「作成」を選択します。
5. Webhook URL が作成されるため、この URL 情報を記録し、「完了」を選択します。URL の情報や画像の変更については、手順3に記載の「構成」から再度、確認・変更することができます。
6. Incoming Webhook が追加されると、チャネルに以下のようなメッセージが表示されます。
Python から Microsoft Teams にメッセージを送信する
7. 実行環境として、今回は ArcGIS Online のノートブックを利用します。ArcGIS Pro の Python を利用することも可能です。
8. 最初に ArcGIS API for Python による実装部分です。例として、今回はバッチ ジオコーディング処理の結果をフィーチャ サービスとして公開するまでの処理を利用します。
# ArcGIS Online へログイン
from arcgis.gis import GIS
agol_user = "ユーザ名"
gis = GIS("https://www.arcgis.com/", agol_user)
from arcgis.geocoding import batch_geocode
# 住所リスト
addresses = ['東京都千代田区平河町2-7-1', '北海道札幌市中央区北4条西4丁目1-1', '名古屋市中区丸の内3-17-6', '大阪府大阪市淀川区宮原2-14-14', '福岡県福岡市博多区上呉服町10-1']
# バッチジオコーディング(https://developers.arcgis.com/python/api-reference/arcgis.geocoding.html#batch-geocode)
batched = batch_geocode(addresses, as_featureset=True, lang_code="JP")
# バッチジオコーディング結果を Pandas の Spatially Enabled DataFrame オブジェクトとして表示
import pandas as pd
result = batched.sdf
result
# フィーチャ レイヤーとして公開
from arcgis.features import GeoAccessor, GeoSeriesAccessor
lyr =result.spatial.to_featurelayer("geocodingResult202206", gis=gis)
lyr
9. 処理の完了後に pymstems というライブラリを使って、Teams にメッセージを送信します。pip install コマンドで、pymsteams パッケージをインストールします。
パッケージの管理に関する詳細については、「ArcGIS Notebooks での Python の使用方法の理解」の「3. ArcGIS Notebooks のランタイム、環境、およびパッケージ」を参照ください。
# Teams 連絡用のパッケージをインストール
!pip install pymsteams
10. Pymsteams モジュールをインポートします。
# Teams にメッセージ通知するためのモジュール
import pymsteams
11. 事前に作成された URL を指定し、タイトルやテキストを設定し、send() メソッドを使ってメッセージを送信します。
# 作成された URL
teamsURL = "https://xxxxxxx.webhook.office.com/webhookb2/xxxxxxxxxxxxxx/IncomingWebhook/xxxxxxxxxxxxxx/xxxxxxxxxxxxxx"
myTeamsMessage = pymsteams.connectorcard(teamsURL)
myTeamsMessage.title("通知") # タイトル
myTeamsMessage.text("処理が完了しました") # 通知テキスト
myTeamsMessage.send()
12. 今回作成した全体のコードは以下となります。
# ArcGIS Online へログイン
from arcgis.gis import GIS
agol_user = "ユーザ名"
gis = GIS("https://www.arcgis.com/", agol_user)
from arcgis.geocoding import batch_geocode
# 住所リスト
addresses = ['東京都千代田区平河町2-7-1', '北海道札幌市中央区北4条西4丁目1-1', '名古屋市中区丸の内3-17-6', '大阪府大阪市淀川区宮原2-14-14', '福岡県福岡市博多区上呉服町10-1']
# バッチジオコーディング(https://developers.arcgis.com/python/api-reference/arcgis.geocoding.html#batch-geocode)
batched = batch_geocode(addresses, as_featureset=True, lang_code="JP")
# バッチジオコーディング結果を Pandas の Spatially Enabled DataFrame オブジェクトとして表示
import pandas as pd
result = batched.sdf
result
# フィーチャ レイヤーとして公開
from arcgis.features import GeoAccessor, GeoSeriesAccessor
lyr =result.spatial.to_featurelayer("geocodingResult202206", gis=gis)
lyr
# Teams 連絡用のパッケージをインストール
!pip install pymsteams
# Teams にメッセージ通知するためのモジュール
import pymsteams
# 作成された URL
teamsURL = "https://xxxxxxx.webhook.office.com/webhookb2/xxxxxxxxxxxxxx/IncomingWebhook/xxxxxxxxxxxxxx/xxxxxxxxxxxxxx"
myTeamsMessage = pymsteams.connectorcard(teamsURL)
myTeamsMessage.title("通知") # タイトル
myTeamsMessage.text("処理が完了しました") # 通知テキスト
myTeamsMessage.send()
13. 送信が完了すると、チャネルにメッセージが通知されます。
まとめ
弊社でも、いくつかのプロジェクトなどで今回ご紹介した仕組みを利用して、日次での処理の結果通知(成功/エラー内容の通知)や比較的時間がかかる処理終了後に Teams 側に通知しています。ぜひ、これを機会に Microsoft Teams の Webhook と ArcGIS API for Python との連携をお試しいただければと思います。
関連リンク