SlackのWebhook URLを取得する
(1) Incoming Webhookのページを開きます。
(2) メッセージを送信するチャンネルを選択して、「Incoming Webhookインテグレーションの追加」ボタンをクリックします。
(3) Webhook URLをコピーします。
(4)「設定を保存する」ボタンをクリックします。
Laravelの設定
セキュリティのため、.envファイルにWebhook URLを設定します。
この値は公開されるべきではないため、注意して管理してください。
# Slack Webhook URL
SLACK_WEBHOOK_URL=<コピーしたWebhook URLを貼り付ける>
# Slackの投稿者の名前
SLACK_USERNAME=webhookbot
# Slackの投稿者のアイコン
SLACK_ICON_EMOJI=:ghost:
Laravelプロジェクトの config ディレクトリ内に slack.php ファイルを作成し、以下の内容を貼り付けます。
<?php
// config/slack.php
return [
'webhook_url' => env('SLACK_WEBHOOK_URL'),
'username' => env('SLACK_USERNAME'),
'icon_emoji' => env('SLACK_ICON_EMOJI'),
];
Slackにメッセージを送信するクラスを作成する
Slackにメッセージを送信するクラスを作成します。
<?php
declare(strict_types=1);
// app/Services/SlackService.php
namespace App\Services;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Support\Facades\Log;
class SlackService
{
public static function post(string $message): bool
{
$client = new Client();
$webhookUrl = config('slack.webhook_url');
$username = config('slack.username');
$iconEmoji = config('slack.icon_emoji');
try {
$client->request(
'POST',
$webhookUrl,
[
'headers' => [
'Content-Type' => 'application/json',
],
'body' => json_encode([
'username' => $username,
'text' => $message,
'icon_emoji' => $iconEmoji,
]),
]);
return true;
} catch (GuzzleException $e) {
Log::error('Slack Post Failed: '.$e->getMessage());
Log::error('Failed message: '.$message);
Log::error($e->getTraceAsString());
return false;
}
}
}
Slackにメッセージを送信する
SlackServiceを使用して、メッセージを送信します。
例として、コントローラーから以下のように呼び出すことができます。
use App\Services\SlackService;
// コントローラーのメソッド内で
SlackService::post('Hello, Slack!');