Closed5
SlackのWebhookを拡張する
SlackのWebhookはnestedなjsonを受け付けない仕様になっています。
OKな例
{
"hoge": "fuga"
}
NGな例
{
"hoge": {
"fuga": "piyo"
}
}
NestedなJSONを変換したい例
{
"hoge.fuga": "piyo"
}
多くのWebhookはnestedなJSONで送られてくるので、正直使い勝手が悪すぎます
例えば、GitHubのRepository EventはWebhookで提供されています(もちろんnestedなJSONで)
もし、GitHub Repository Event -> Slackをつなぐことができれば
GitHubの通知をSlackにまとめることができます。
👆SlackにはGitHub Appが提供されていますが、リポジトリ単位でこまごまと設定する必要があったり
特定のイベントしかサポートされていなかったりと,不十分です
更新は2年前に止まってます
Slack Webhook Flatten Proxyという提案
なんらかのWebhook元サービス(ここではGitHub) -> Slack Webhook
👆この間にProxyとなるようなURL呼び出しできるサーバレスな関数サービスを挟むことで解決します
提供する機能 + α
- JSONをFlattenする
- クエリパラメータに応じたフィルタ機能
- 例えばGitHub Webhookのeventの
workflow_run
にはworkflow_run.conclustion
というパラメータがあります。これはWorkflowの実行結果を示しており、この値が失敗したときだけ転送してほしい。
- 例えばGitHub Webhookのeventの
- クエリパラメータに応じた転送先の制御
- Lambdaなどで提供する場合、1Lambdaにつき1転送先しか指定できない
- クエリパラメータを利用して、Webhookの送信先のクエリパラメータを利用して動的に制御する
Webhookの転送先URL例:
https://hogehoge.lambda-url.ap-northeast-1.on.aws?_dest=slack.com/fuga/piyo&workflow_run.conclusion!=success
_dest
が転送先(予約語)、それ以外はすべてフィルタとしての評価式に利用します
このスクラップは2ヶ月前にクローズされました