PHPでMattermostへファイル送信

hebishima.shogo

はい、hebiです。

Mattermostへメッセージを送信する記事に引き続き、メッセージとファイルを送信する方法を記事にしました。

メッセージだけではなく、ファイルを送信したい需要も多くあると思いますので是非参考にしてみてください。

具体的な例として、朝一に前日の売り上げ情報をCSVで送信したり、データを整えたPDFを送信したりなどで利用できます。

メッセージの送信方法やPDFの作成方法を以下の記事をどうぞ(^_-)-☆

あわせて読みたい
PHPでMattermostへメッセージ送信
PHPでMattermostへメッセージ送信
あわせて読みたい
PHPでPDFを作成する方法
PHPでPDFを作成する方法
スポンサーリンク

ファイル送信処理実装

ファイルを送信するためにsendFiles関数を実装します。

public function sendFiles($message, $files)
{
    $mattermostUrl = "http://43.207.160.244:8065";
    $apiToken = "9bb4owrd4t8dxcs5aooo4ezhrw";
    $channelId = "4cki6gqt3fg1pepfzc86be8qaa";
    
    $headers = [
        "Authorization: Bearer $apiToken"
    ];

    $fileIds = array();
    foreach ($files as $file) {
        $mime_type = mime_content_type($file);
        $fileName = end(explode('/', rtrim($file, '/')));
        // ファイルをHTTP POSTリクエストで送信するためにCURLFileへ変換
        $curlFile = new CURLFile($file, $mime_type, $fileName);

        $option = [
            'channel_id' => $channelId,
            'files' => $curlFile
        ];

        $ch = curl_init( "$mattermostUrl/api/v4/files");
        curl_setopt($ch, CURLOPT_FAILONERROR, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $option);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        // ファイルをアップロード
        $response = curl_exec($ch);
        curl_close($ch);

        // アップロードしたファイルIDを取得して$fileIds配列に保持
        $obj = json_decode($response, true);
        $fileIds[] = $obj['file_infos'][0]['id'];
    }

    $url = "$mattermostUrl/api/v4/posts";

    $data = [
        'channel_id' => $channelId,
        'message' => $message,
        'file_ids' => $fileIds, // 保持したファイルIDを指定しないとファイルは表示されない
    ];

    // cURLセッションの初期化
    $ch = curl_init($url);

    // cURLオプションの設定
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer $apiToken",
        'Content-Type: application/json'
    ]);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));

    // cURLリクエストの実行
    $response = curl_exec($ch);

    // HTTPステータスコードの取得
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    // cURLセッションのクローズ
    curl_close($ch);

    // レスポンスの確認
    if ($httpCode == 201) {
        return true;
    } else {
        return false;
    }
}
ポイント

メッセージを送信する前にファイルをアップロードします。
アップロード後にファイルIDを配列保持しておき、メッセージを送信する際にそのファイルIDの配列を指定することで、メッセージとファイルをMattermostへ送信できます。

※use CURLFile;の定義をお忘れなく。

<?php

namespace App\Commands;

use CodeIgniter\CLI\BaseCommand;
use CodeIgniter\CLI\CLI;
use CURLFile;

class TestCommand extends BaseCommand
{

作成したsendFilesをcronのrunで呼び出します。

public function run(array $params)
{
    // 生成したファイルのパスを配列に指定して渡す
    $files = array(WRITEPATH . 'test1.txt', WRITEPATH . 'test2.txt');
    if ($this->sendFiles('ファイル送信テスト', $files)){
        CLI::write('successfully.', 'green');
    }else{
        CLI::error('error');
    } 
}

cronの実行

Tera Termからcommand:testを実行してみます!

sudo php spark command:test

成功することを確認!

Mattermostへのファイル送信確認

test1.txtとtest2.txtが指定したチャンネルに送信されました!!

最後に

ファイル送信を行うことができましたね!

これで自動的にファイルを送信し共有することができます。
ぜひ、今まで手動で行っていたことを自動化していきましょう!

最後までお読みいただきありがとうございました(^^♪

スポンサーリンク
ABOUT ME
hebi
hebi
エンジニア
フルスタックエンジニアとして活躍中。
HTML5プロフェッショナル認定Level1、Level2所持者です。

未経験の方でも簡単にプログラミングを学べるようにと情報を発信しております。
記事URLをコピーしました