Laravel8 chatworkのAPIを使用して受信メッセージを取得する方法

準備するもの

chatwork APIトークンとルームIDが必要となります。

APIトークンの調べ方

アカウント名をクリック -> 「サービス連携」をクリック

chatwork サービス連携

「APIトークン」をクリック

chatwork APIトークン

APIトークンが表示される。

chatwork APIトークン表示

ルームIDの調べ方

投稿したいグループチャット、またはコンタクトをクリック

chatwork グループチャットリスト

その時に表示されるURLの”rid”より右の部分がルームID。

例)https://www.chatwork.com/#!rid999999999の場合
ルームIDは、”999999999″となる。

ここからはLaravelのコーディング

chatworkへの通知を行うコントローラー内で以下を追記。

    public function polling(Request $request)
    {
        $token = 'APIトークン';    // 取得したAPIトークン
        $room_id = 'ルームID';     // 取得したルームID

        $headers = [
            'X-ChatWorkToken: ' . $token,
        ];

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://api.chatwork.com/v2/rooms/{$room_id}/messages");
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        $response = curl_exec($ch);

        if ($response === false) {
            // エラー処理
            die('Error: ' . curl_error($ch));
        }

        $messages = json_decode($response, true);

        // 取得した$messagesの処理を行う
    }

以下のような構造で返ってくる。

chatwork API 受信メッセージの中身

宛先指定をした場合は、body部の先頭に”[To:xxxxxx]〇〇さん”が入る。
宛先用のカラムを用意してくれれば良いのに。。。
これはちょっと加工が必要だな。。。

chatwork API 受信メッセージの中身 宛先指定

ファイルを添付した場合は、body部の最後にファイル情報が記述されている。
添付ファイルを取得することは出来ないのかな?

chatwork API 受信メッセージの中身 ファイル添付

ファイルを複数添付した場合は、添付した数分にメッセージが分割される。
1メッセージに1添付ファイルとなる。当たり前だけどchatworkの仕様と同じ。

chatwork API 受信メッセージの中身 ファイル添付複数

1度メッセージを取得すると新しいメッセージを受信するまではNULLが帰ってくる。
処理済みメッセージの仕分けをしなくて良いので助かる仕様。

chatwork API 受信メッセージの中身 受信メッセージがない場合

返信を残す

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