PHPからSlack/Discordに、Webhookで簡単に通知を送る。

takahashi 著者:takahashi

PHPからSlack/Discordに、Webhookで簡単に通知を送る。

SlackやDiscordを使っていると何かと便利なのがWebhook通知。

専用のチャンネルを用意し、何かイベントが発生したときの通知などに、メールの代わりにこのWebhookで通知を飛ばしてやることで取りこぼしなく通知を確認できます。

このWebhook、既存のサービスやシステム以外で通知を飛ばしたいときに”どうやってやればいいんだろう?”と思ってしまう方もいらっしゃるかと思います。
調べるとcurlとかめんどくさいパラメータアレコレとか指定するものが多く出てくるのでつい面倒な印象を持ってしまいがちですが、いろいろ調べていたところ、PHPで超簡単にできる方法を見つけました!

PHP から Slack の Incoming webHooks を叩く – Qiita

<?php

//処理内容を定義
function send_to_slack($message) {
  $webhook_url = 'Webhook受付URL';
  $options = array(
    'http' => array(
      'method' => 'POST',
      'header' => 'Content-Type: application/json',
      'content' => json_encode($message),
    )
  );
  $response = file_get_contents($webhook_url, false, stream_context_create($options)); //要求を$webhook_urlのURLに投げて結果を受け取る
  return $response === 'ok'; //$responseの値がokならtrueを返す
}

//メッセージの内容を定義
$message = array(
  'username' => '送付元として表示するユーザー名', 
  'text' => 'メッセージ内容', //Slackの場合
  //'content' => 'メッセージ内容', //Discordの場合
);

send_to_slack($message); //処理を実行
?>

これだけで行けちゃうそうです。
要するに、送付先とデータ形式とメソッド(POST・GETなど)さえ合っていれば、どんな方法でも大丈夫なようです。

ちなみにコードをそのままDiscordに転用する場合は、$messageに入れている要素名’text’を’content’に書き換える必要があります。
‘text’のまま実行してしまうと400エラーが返ってきてしまい、Webhookの内容が送信されません。

上記の内容をテキストエディタなどで書き、
hoge.php
のような適当なファイル名で保存してください

あとはコマンドライン上で

php ./hoge.php

のようにしてやればWebhookが実行され、入力した内容がSlack/Discordに届くはずです。

内容さえ書き換えてやればいくらでも応用ができるので、例えばリモートでサーバーを再起動したときの起動通知とか、システムで障害が発生したときのエラー通知なんかにも使うことができます。

メール通知の場合だと、メールサーバーが落ちて送付できなかったり、通知メールが遅延してしまうことがあったりもするので、Webhook経由でも通知が送れると便利ですね。

  • この記事いいね! (0)

著者について

takahashi

takahashi administrator

Webエンジニア。 趣味で自宅サーバーを稼働中。 ファンタジーが好き。