Microsoft FabricでGoogleChatにPOSTする
Microsoft FabricでGoogleChatにPOSTしたりする。
個人的メモです。
誰かの役にたったら嬉しい。
やりたかったこと
Monitor Hub もあるけれど、可能なら仕事で使っているツールにも何かあったら通知がきてほしい。
試したこと
OutLookの設定を行っていないテナントでメール送信アクティビティが使えない環境だったので、
まずはWebhookアクティビティからGoogleChatのWebhookにPOSTを試しました。
本当は画像も貼れたらよかったのですが、Fabric環境の準備に時間がかかっているのでモチベがあるうちに書き始めることにしました。
- Data PipelineでWebhookアクティビティを追加
- POSTメソッドでGoogle Chat の Webook に対してメッセージを投げる。
- Body は このサイトに従って実装する。
- Method: POST
- Body: @json('{"text":"Notify From Microsoft Fabric!"}')
ですが、以下のエラーが発生しメッセージを送信することができませんでした。
Activity failed because error occurred while processing the request: {
"error": {
"code": 400,
"message": "Invalid JSON payload received. Unknown name \"callBackUri\" at 'message': Cannot find field.",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.BadRequest",
"fieldViolations": [
{
"field": "message",
"description": "Invalid JSON payload received. Unknown name \"callBackUri\" at 'message': Cannot find field."
}
]
}
]
}
}
Bodyに指定してないcallBackUriフィールドがあるため、GoogleChatのWebhook側が拒否しているようです。
callBackUriフィールドが追加されるのは、Webhookアクティビティの仕様のようでした。
Microsoft サポートにも問い合わせてみましたが、callBackUriフィールドを追加しないようにするのは不可能で、アクティビティからの送信は難しいようです。
どうする?
Notebookで 実装することにしました。
Microsoft Fabric で httplib2を追加した環境を作成し。Notebookの環境に指定します。
あとは普通のPythonのように実装するだけです。
from json import dumps
import httplib2
url = "https://chat.googleapis.com/v1/spaces/{your_space_id}"
app_message = {"text": "Hello from a PySpark!"}
message_headers = {"Content-Type": "application/json; charset=UTF-8"}
http_obj = httplib2.http()
response = http_obj.request(
uri=url,
method="POST",
headers=message_headers,
body=dumps(app_message)
)
print(response)
メール送信や他のチャットツールの通知、チケットの自動発行もこの方法なら可能そうです。
また、Notebook の パラメーターも活用すればメッセージもある程度は自由度がありそうです。
残る課題
各ワークスペースやDataPipelineにこのNotebookを使用するのは少しリスクが高いと感じています。
どのワークスペースやDataPipelineが当該のNotebookを使用しているのかは(個人的には)管理しづらいと思います。
ライブラリとして環境に追加する方が運用面では管理しやすそうです。
MSサポートから機能要望を出していただきました。
Webhookアクティビティに callback uri のプロパティを自動追加しないオプションをつける要望を出していただきました。
賛同いただける方はvoteいただけるといいのかなと思います。
Discussion