2015年7月21日火曜日

Drupalで新記事登録とか何か起きたらSlackへ自動通知

 Rules HTTP ClientというDrupalモジュールがありますので、これをオレオレDrupal環境にインストールすればいいのですが(7.x-1.0-beta1)、設定に癖があり、ややハマったのち成功したので備忘録。

 いろいろなルートがありえるわけですが、今回はとりあえずマイクテストてすてすって感じで、最もベーシックな方法といえるSlack本体のIncoming WebHooksを使うことにしまして、まず、投稿先チャンネル/ダイレクトメッセージ先/プライベートグループのWebhook URL(https://hooks.slack.com/services/ ではじまる)を取得しておきます。

 しかるのち、

  1. DrupalRulesで新しいルールを追加。
  2. 何かイベントを登録します。(例)新しいコンテンツを保存後 of タイプ お仕事
  3. それに対するアクションを登録し、種類を「Request HTTP data」(Rules HTTP Clientをインストールしたことによってこの選択肢が増えています)とします。
  4. このアクションの設定画面に以下のように記入します:
  • 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です。