いろいろなルートがありえるわけですが、今回はとりあえずマイクテストてすてすって感じで、最もベーシックな方法といえるSlack本体のIncoming WebHooksを使うことにしまして、まず、投稿先チャンネル/ダイレクトメッセージ先/プライベートグループのWebhook URL(https://hooks.slack.com/services/ ではじまる)を取得しておきます。
しかるのち、
- DrupalのRulesで新しいルールを追加。
- 何かイベントを登録します。(例)新しいコンテンツを保存後 of タイプ お仕事
- それに対するアクションを登録し、種類を「Request HTTP data」(Rules HTTP Clientをインストールしたことによってこの選択肢が増えています)とします。
- このアクションの設定画面に以下のように記入します:
- URL->Value: Slackから取得したWebhook URL
- HEADERS->Value: Content-Type:application/x-www-form-urlencoded ※ここ重要ッス。自明のように思えますが、これを指定してやらないと、エラーが出て、アクションが引き起こされません。
- METHOD->Value: POST
- DATA->Value: payload=Slackへ送りたいJSON (例)payload={"text": "お仕事が登録されました: [node:url]"} ※Content-Type:application/jsonとしてここのpayload=を省いて生JSONにしてみましたが動作しませんでした。
とすれば動作します。
上の例ではプレーンテキストを投稿しているだけですが、もっとリッチなテキストにする方法や、Slackのアバターや投稿先オーバライドなどの指定方法も、Incoming WebHooksの設定画面で具体的に記されていますので、必要に応じてJSON内で指定すればOKです。