Laravel5.4からSlackのIncoming Webhookでメッセージを飛ばす

Laravelの新しいバージョン(5.4か5.3)から、NotificationでSlackのメッセージを飛ばせるようになりました。
下記の記事にその方法をまとめました。

はじめに 先日LaravelからSlackメッセージが送れるようになって、「やった!これで楽しくなる!」って思っていたのですが、 @nan...

LaravelからSlackのメッセージを飛ばしてみました。

こちらの記事が非常によくまとまっていたのですが、試したところうまく動きませんでした。

どうやら利用しているライブラリがメンテナンスされなくなったようです。
Laravel5.4以降では動かないようで、新しいライブラリを使ったところうまくいきました。

遭遇したエラー

参考サイトではmaknz/slackというライブラリを使っていました。

こちらをインストールして使おうとするとphp artisanが通らなくなります。
下記のようなエラーです。

$ php artisan
[2017-08-09 11:04:11] local.ERROR: Symfony\Component\Debug\Exception\FatalThrowableError: Call to undefined method Illuminate\Foundation\Application::share() in /Users/yousan/git/l2psm/laravel/vendor/maknz/slack/src/SlackServiceProviderLaravel5.php:27
Stack trace:
#0 /Users/yousan/git/l2psm/laravel/vendor/maknz/slack/src/SlackServiceProvider.php(53): Maknz\Slack\SlackServiceProviderLaravel5->register()
#1 /Users/yousan/git/l2psm/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(574): Maknz\Slack\SlackServiceProvider->register()
#2 /Users/yousan/git/l2psm/laravel/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php(75): Illuminate\Foundation\Application->register(Object(Maknz\Slack\SlackServiceProvider))
#3 /Users/yousan/git/l2psm/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(549): Illuminate\Foundation\ProviderRepository->load(Array)
#4 /Users/yousan/git/l2psm/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/RegisterProviders.php(17): Illuminate\Foundation\Application->registerConfiguredProviders()
#5 /Users/yousan/git/l2psm/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(208): Illuminate\Foundation\Bootstrap\RegisterProviders->bootstrap(Object(Illuminate\Foundation\Application))
#6 /Users/yousan/git/l2psm/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(267): Illuminate\Foundation\Application->bootstrapWith(Array)
#7 /Users/yousan/git/l2psm/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(114): Illuminate\Foundation\Console\Kernel->bootstrap()
#8 /Users/yousan/git/l2psm/laravel/artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#9 {main}

調べたところ下記のように、Laravel 5.4以降は対応していない、とのことでした。

https://github.com/TeraDox/Notify-Laravel/issues/9
Notify-Laravel`を使うと良いよ、という記述もありましたが、こちらは少し毛色が違うようです。
(SlackかメールのNotificationを飛ばす)

フォークされたリストを見るとrazorpay/slackが多く使われているようでした。
こちらを使います。

新しいパッケージ

手元で試したのはLaravelの5.4.30です。

$ php artisan --version
Laravel Framework 5.4.30

基本的な使い方はmaknzのものと変わりません。
composerでインストールして使います。

$ composer require razorpay/slack

僕はテスト用にUnitテストの中で行いました。

/tests/Unit/ExampleTest.php

    public function testBasicTest()
    {
        // $this->assertTrue(true);
        $endpoint = 'https://hooks.slack.com/services/.......';
        $settings = [
            'username' => 'Cyril',
            'channel' => '#bot',
            'link_names' => true
        ];
        $client = new \Razorpay\Slack\Client($endpoint, $settings);
        $client->send('Hello world!');
        $client->to('#random_l2tp')->send('Are we rich yet?');
        $client->from('Jake the Dog')->to('#bot')->send('Adventure time!');
    }
$ phpunit
 PHPUnit 5.2.10 by Sebastian Bergmann and contributors.

..                                                                  2 / 2 (100%)

Time: 2.47 seconds, Memory: 16.00Mb

OK (2 tests, 1 assertion)


というわけでうまく行けました。
めでたしめでたし。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする