これは?

Chatworkに決まった内容を定期送信してほしいという要件があったので実装しました。
そこまで複雑なことをしているわけでありませんが、備忘録として残しておきます。
需要あるかな…?

実装

まずはChatworkのAPIトークンを取得

こちらからログインし、APIの利⽤申請を⾏います。
私の時は申請から1時間弱でメールが届きました。早い。

メールのリンクを確認するとこんな感じでAPIトークンが発⾏されます。こちらを利⽤します。


当たり前ですが⾃分のトークンを利⽤することになるので、送信者も⾃分になります。

コード

では実装。今回はLaravel(PHP)でコード書いてます。

app\Console\Commands\SendMessageToChatwork.php

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;

class SendMessageToChatwork extends Command
{
  /**
  * The name and signature of the console command.
  *
  * @var string
  */
 protected $signature = 'batch:send-message-to-chatwork';

  /**
   * The console command description.
   *
   * @var string
   */
  protected $description = 'Chatworkにメッセージを送るバッチ';

  /**
   * Create a new command instance.
   *
   * @return void
   */
  public function __construct()
  {
      parent::__construct();
 }

  /**
   * Execute the console command.
   *
   * @return mixed
   */
  public function handle()
  {
      // 現在⽇時取得
      $now_datetime = date('Y-m-d H:i:s');

      // メッセージ内容
      $message = '⽇時 ' . $now_datetime . 'をお知らせします。';

      // 通知
      $this->noticeSalesToChatwork($message);
  }

  /**
   * Chatworkに実際に通知する関数
   *
   * @param string $message メッセージ内容
   */
  private function sendMessageToChatwork($message)
  {
      $client = new \GuzzleHttp\Client();

      // URLの作成
     $url = env('CHATWORK_API_URL') . env('CHATWORK_ROOM_ID') . 
'/messages';

        try {
            $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' => env('CHATWORK_TOKEN'),
                ],
           ]);
           $response = $response->getBody();

           Log::info('Chatwork通知', (array)$response);
       } catch (Exception $e) {
           $response = json_encode(
               [
                   'status' => 'error',
                   'message' => '通知に失敗しました。',
                   'exception' => $e,
               ]
           );

          Log::error('Chatwork通知', $response);
       }

       return $response;
   }
}

解説

定期実⾏なので、artisanコマンドでクラスを作成します。

> php artisan make:command SendMessageToChatwork

あとは基本的なLaravelの書き⽅です。
hundle()内に処理を書いていきます。

さらに実際に通知処理を⾏う関数を作成し、hundle()内で呼び出しています。

$client = new \GuzzleHttp\Client();

今回ChatworkのAPIを呼び出すのにGuzzleを使⽤しています。
ライブラリのインストールが必要になる可能性があります。

// URLの作成
$url = env('NOTIFICATION_CHATWORK_ENDPOINT') . env('CHATWORK_ROOM_ID') . 
'/messages';

// CHATWORK_API_URL = ChatworkのAPIのベースURL。
// CHATWORK_ROOM_ID = 送信先のルームID。

ChatworkAPIの情報は環境変数に定義しました。
APIのベースURLはこちら
チャットにメッセージを送信するのにルームIDが必要なのですが、こちらは右上⻭⾞マークの「グループチ
ャットの設定」から確認することができます。

$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' => env('CHATWORK_TOKEN'),
 ],
]);

$response = $response->getBody();

上記のような形で必要情報を付与します。
x-chatworktokenには、最初に取得したAPIトークンを利⽤します。

実装はこんな感じです。
次にKarnel.phpに、スケジューラーとして登録します。

app\Console\Karnel.php

// (略)
/**
 * Define the application's command schedule.
 *
 * @param \Illuminate\Console\Scheduling\Schedule $schedule
 * @return void
 */
protected function schedule(Schedule $schedule)
{
    // Chatwork売上通知バッチ
    $schedule->command('batch:send-message-to-chatwork')->hourlyAt(0); // 毎
時00分に実⾏
}

最後にサーバー側にcronを設定します

* * * * * cd laravel/ && php artisan schedule:run

これで定期実⾏されるようになります。

さいごに

⽐較的簡単なので、そこまで詰まりポイントもないかなと。
もし実装する機会があれば参考にしていただければ幸いです。

各APIのエンドポイントはこちらです。
いろいろありますので、状況に応じて利⽤してみてください。