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が提供されていますが、リポジトリ単位でこまごまと設定する必要があったり
特定のイベントしかサポートされていなかったりと,不十分です

https://github.com/integrations/slack

更新は2年前に止まってます

かいものかいもの

Slack Webhook Flatten Proxyという提案

なんらかのWebhook元サービス(ここではGitHub) -> Slack Webhook
👆この間にProxyとなるようなURL呼び出しできるサーバレスな関数サービスを挟むことで解決します

かいものかいもの

提供する機能 + α

  • JSONをFlattenする
  • クエリパラメータに応じたフィルタ機能
    • 例えばGitHub Webhookのeventのworkflow_runにはworkflow_run.conclustionというパラメータがあります。これはWorkflowの実行結果を示しており、この値が失敗したときだけ転送してほしい。
  • クエリパラメータに応じた転送先の制御
    • 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ヶ月前にクローズされました