untitled .engineer

技術系のブログ(仮)

Mattermostの内向きWebhookをPHPのfile_get_contentsで叩く方法


目次


本エントリの概要

  • Slackクローンとして頑張っているMattermostの統合機能「内向きウェブフック(Incoming WebHooks)」へPHPから送信するのをやってみたメモです
  • PHPの環境の制約によりcURLが使えなかったので代わりにfile_get_contents()を使いました
  • file_get_contents()を使うサンプルコードがあまり見当たらなかったので書きました

f:id:dupont_kedama:20181217184629p:plain

コード

// サーバーで作った内向きウェブフックのURL
$url = "http://mattermost.server.path/hooks/xxxxxxxxxxxxxxxxxxxxxxxxxxx";

$body = '変なBlogに投稿がありました。

**[untitled.engineer No.20181 Mattermostの内向きWebhookをPHPのfile_get_contentsで叩く方法](http://path/to/blog/entry/20181)**

+ Slackクローンとして頑張っているMattermostの統機能「内向きウェブフック」へPHPから送信するのをやってみたメモです。
+ PHPの環境の制約によりcURLが使えなかったので代わりにfile_get_contentsを使っています。
';

$content = array(
    "icon_url" => "/path/to/icon.png",
    "username" => "NoticeFromWebApplication",
    "text"     => $body,
);

$context = stream_context_create(array(
    "http" => array(
        "ignore_errors" => true,
        "method" => "POST",
        "header" => "Content-Type: application/json",
        "content" => json_encode($content),
    )
));

$response = file_get_contents($url, false, $context);

// まずサーバーに届いて受け取られたかを確認します
$pos = strpos($http_response_header[0], '200');
if ($pos === false) {
    // ここに適当な例外を
}

// 次に投稿に成功したかを確認します
// 投稿成功した場合$responseには文字列"ok"が入ります。
// 投稿失敗の場合はエラー内容がjsonで返ります
if($response != 'ok' ) {
    // ここに適当な例外を
}

ポイント

  • PHP5.3(!)(察してください)で動作確認しています
  • 本文にMarkdown書けます。
  • 本文に @ユーザー名 を書けばメンションも送れます。

まとめ

  • 簡単ですね
  • ただ、本当はcURLを使った方がいいみたいですよ。

以下のサイトを参考にさせていただきました