Microsoft Teams の Webhook と ArcGIS API for Python を連携してみる

3531
0
06-27-2022 07:02 PM

Microsoft Teams の Webhook と ArcGIS API for Python を連携してみる

 

はじめに

リモートワークにおけるコラボレーションツールとして、Microsoft Teams を利用している方も多いかと思います。

今回は、Microsoft Teams WebhookArcGIS API for Python との連携方法として、ArcGIS のバッチジオコーディング処理とその結果をフィーチャ レイヤーとして公開する処理が終了したら、Teams に通知する方法を紹介します。

画像1.png

Microsoft Teams Incoming Webhook の作成

1. Microsoft Teams の任意のチャネルの「…」をクリックし、「コネクタ」を選択します。

画像2.png

2. 表示されたコネクタ一覧から「Incoming Webhook」を追加します。

画像3.png


画像4.png

3. 追加された「Incoming Webhook」の「構成」を選択します。

画像5.png

4. 任意の名前を入力し、「作成」を選択します。  

画像6.png

5. Webhook URL が作成されるため、この URL 情報を記録し、「完了」を選択します。URL の情報や画像の変更については、手順3に記載の「構成」から再度、確認・変更することができます。

画像7.png

6. Incoming Webhook が追加されると、チャネルに以下のようなメッセージが表示されます。

画像8.png

Python から Microsoft Teams にメッセージを送信する

7. 実行環境として、今回は ArcGIS Online のノートブックを利用します。ArcGIS Pro Python を利用することも可能です。

画像9.png 

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()

 

 

画像10.png

13. 送信が完了すると、チャネルにメッセージが通知されます。

画像11.png

 

まとめ

弊社でも、いくつかのプロジェクトなどで今回ご紹介した仕組みを利用して、日次での処理の結果通知(成功/エラー内容の通知)や比較的時間がかかる処理終了後に Teams 側に通知しています。ぜひ、これを機会に Microsoft Teams Webhook ArcGIS API for Python との連携をお試しいただければと思います。

 

関連リンク

Version history
Last update:
‎06-27-2022 07:12 PM
Updated by:
Contributors