LaravelからSlackにメッセージを送信する

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!');

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください