PHP で Slack のチャンネルにファイルをアップロードする
とある Web サーバーから PHP を使って Slack にファイルをアップロードしたくなったのですが、意外とやっている方が少なかったのでいろいろ試しました。
環境
- PHP 7.1.2 (on XServer)
API トークンの取得
トークンの取得は Slack API 推奨Tokenについて - Qiita を参考にさせていただきました。
OAuth Access Token をコピーしておきます。
スコープ (Scopes) にはファイル書き込みのため files:write:user
が必要です。必要であればメッセージ投稿のため chat:write:user
か chat:write:bot
も付与しておきましょう。
PHP スクリプト
<?php
$params = [
'token' => 'xoxp-xxxxxxxxxxx-xxxxxxxxxxx-xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'channels' => '#hoge',
'file' => new CURLFile('./hogehoge.zip'),
'filename' => 'hogehoge.zip',
'filetype' => 'zip',
'initial_comment' => 'This is a hogehoge file.',
'title' => 'HOGEHOGE',
];
$ch = curl_init();
// curl_setopt($ch, CURLOPT_VERBOSE, 1); // デバッグ出力
curl_setopt_array($ch, [
CURLOPT_URL => 'https://slack.com/api/files.upload',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $params,
]);
$response = curl_exec($ch);
curl_close($ch);
curl 系のメソッドを使うので PHP 5.5 以降が必要です。
multipart/form-data で送信するので CURLOPT_POSTFIELDS
には普通の連想配列を渡します。
file
パラメーターには new CURLFile('./hogehoge.zip')
のような形で CURLFile
を作って渡します。