準備するもの
chatwork APIトークンとルームIDが必要となります。
APIトークンの調べ方
アカウント名をクリック -> 「サービス連携」をクリック
「APIトークン」をクリック
APIトークンが表示される。
ルームIDの調べ方
投稿したいグループチャット、またはコンタクトをクリック
その時に表示される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の処理を行う
}
以下のような構造で返ってくる。
宛先指定をした場合は、body部の先頭に”[To:xxxxxx]〇〇さん”が入る。
宛先用のカラムを用意してくれれば良いのに。。。
これはちょっと加工が必要だな。。。
ファイルを添付した場合は、body部の最後にファイル情報が記述されている。
添付ファイルを取得することは出来ないのかな?
ファイルを複数添付した場合は、添付した数分にメッセージが分割される。
1メッセージに1添付ファイルとなる。当たり前だけどchatworkの仕様と同じ。
1度メッセージを取得すると新しいメッセージを受信するまではNULLが帰ってくる。
処理済みメッセージの仕分けをしなくて良いので助かる仕様。