ChatWorkのAPIを叩いてメッセージを投稿
chatworkのAPIをドキュメント(以下URL)を参考にすると
http://developer.chatwork.com/ja/endpoint_rooms.html#POST-rooms-room_id-messages
curl -X POST -H "X-ChatWorkToken: 自分のAPIトークン" -d "body=Hello+ChatWork%21" "https://api.chatwork.com/v2/rooms/{room_id}/messages"
とパラメータを指定して叩けばメッセージが登録されるらしいです。
room_id : チャットワークのルームのURLの#!ridより後の値
APIトークン : アカウントごとに発行するごとにできるAPIトークン値
Guzzleで叩いてみた
// xxxxxは各自設定を行う
define('ROOM_ID', 'xxxxxxx');
define('API_TOKEN', 'xxxxxxxxxxxxxxxxxxxxxx');
try {
$client = new GuzzleHttp\Client();
$request_url = "https://api.chatwork.com/v2/rooms/". ROOM_ID ."/messages";
$client->post($request_url, [
'headers' => ['X-ChatWorkToken' => API_TOKEN],
'body' => ['body' => 'hogehoge']
]);
} catch (GuzzleHttp\Exception\ClientException $e) {
echo $e->getResponse()->getStatusCode();
exit;
}
これを実行したところ、
と投稿されました!
#エラった体験談
エラった1(ステータスコード:400)
APIを叩くときのbodyの中身が空文字の場合に、400が返ってきます。
上ケースではエラーになりませんでしたが、
文字数があまりにも多い場合にも、400が返ってくる挙動っぽいです。この場合にエラリました。
これは調べても該当ドキュメントが見つからず、まだよくわかってないのですが、
bodyにバイト数制限もしくは文字数制限があるんじゃないかと思ってます。
ちなみに
$hoge = '';
foreach (range(1,20000) as $value) {
$hoge .= 'hoge';
}
try {
$client = new GuzzleHttp\Client();
$request_url = "https://api.chatwork.com/v2/rooms/". ROOM_ID ."/messages";
$client->post($request_url, [
'headers' => ['X-ChatWorkToken' => API_TOKEN],
'body' => ['body' => $hoge]
]);
} catch (GuzzleHttp\Exception\ClientException $e) {
echo $e->getResponse()->getStatusCode();
exit;
}
とした場合に400が返ってきました。
hoge * 10000なら200でしたので、このあたりに上限がありそうです。
私もこの文字数多すぎ問題でどうしようかと思ってるところです。。
心当たりがある人は確認してらいいかもしれません
エラった例2(ステータスコード:401)
アクセストークンが失効している場合には、401が返ってきます。
間違ったAPIトークンを設定している場合に401が返ってきました。
正しいAPIトークンかどうか確認してください。
以上です。