Laravel でcommand を使ってchatwork通知してみた

PHP

Laravel で作ったシステムがあるのですが、chatwork に通知する必要が出てきました。ただ、処理の開始と終了などであれば、処理の終わりにchatwork に飛ばす通知をcontroller で設定できるかもしれません。

ただ、今回要件としてあったのが、毎日定期的にchatwork に通知することでした。なので、今回はcommand に登録してcron で定期的に通知できるようにしていきます!!

command で artisan のコマンドを作ろう

command を作るためには、最初に artisan コマンドを使って、command 登録していきましょう!!

# command 作成
php artisan make:command ChatworkNotification

そうすると、/app/Console/Commands/ の中に ChatworkNotification.php というファイルが生成されます。command を実行するためのコマンドとそのdescription を最初に設定していきます。

$signature と $description を設定していきます。$signature に記載したコマンドを実行すると、このphp ファイルの中身が実行されるような仕組みになっています。

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;


class ChatworkNotification extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'command:chatworknofify';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'chatwork notification';

    /**
     * Execute the console command.
     */
    public function handle()
    {
                //
    }

}

command が登録されているかを確認するために、artisan で実行できる一覧を表示してみましょう。

# php aritisan で実行できるコマンドの一覧表示
php artisan 

これによって、command の項目で表示されると準備はオッケーとなります。次に中身をリッチにして、chatwork に通知されるように実装していきます。

Chatwork に通知されるような実装をしていこう

chatwork に通知されるためには、handle() のメソッドの中身をコーディングしていきましょう。

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
                
handle(){
                // client インスタンス
                $client = new \GuzzleHttp\Client();

                // url 作成
                $url = "https://api.chatwork.com/v2/rooms/${your_room_id}/messages";
        
                 
                $message = "これはchatwork通知です";

                // ENV 登録
                $token = config('chatwork.apitoken');
                
                $response = $client->request('POST', $url, [
                    'form_params' => [
                        'self_unread' => 0,
        
                        'body' => $message
                    ],
                    'headers' => [
                        'accept' => 'application/json',
                        'content-type' => 'application/x-www-form-urlencoded',
                        'X-ChatWorkToken' => $token,
                    ],
                ]);
                $response = $response->getBody();
          
               //chatwork に通知される内容を返す
               return $response;
}

上のような形で実装していきました。もう一個config のファイルを定義する必要があるので、別途/config/ ディレクトリにenv を呼び出せるファイルを作成する必要があります。

chatwork.php

<?php

return [
  'apitoken' => env('CHATWORK_API_TOKEN'),
];
.env

CHATWORK_API_TOKEN={your_chatwork_token}

上のようにconfigも作成できたら、呼び出していきましょう。自分のchatwork のルームに通知されたら、今回の通知実装は成功です。

php artisan command:ChatworkNotification

message で定義した内容がエラー発生せずにchatwork に通知されていることを確認してみてください!

これをcron などに設定すれば、毎日であったり毎週土曜日など実行することができるようになります

まとめ

結構簡単にchatwork 通知の実装はできるので、皆さんも是非やってみてください。他の書き方などもあるかもしれないので、今度投稿する時は別の書き方も紹介できたらなと思います。

コメント

タイトルとURLをコピーしました