C# でチャットワークの API を使ってメッセージを投稿する

タイトルの通りです。

チャットワークには Web ベースの API が用意されており、それを使用することでプログラムからメッセージを投稿することができます。

今のところ認証は単一の API トークンによるもののみで、とてもシンプルです。 APIトークンはこちら https://www.chatwork.com/service/packages/chatwork/subpackages/api/token.php から確認できます。

投稿先(グループ)は、ルームID で指定します。URL で #!ridXXXXXXXXX となっている XXX... の数字部分がルームIDになります。

各エンドポイントについては公式ドキュメントに記載があります。メッセージを投稿する場合は /rooms/<ルームID>/messages です。
リクエストを作るところはこんな感じになります。

var req = (HttpWebRequest)WebRequest.Create("https://api.chatwork.com/v2/rooms/<ルームID>/messages");

req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.Headers.Set("X-ChatWorkToken", <APIトークン>);


ここで、コンテントタイプを application/x-www-form-urlencoded にするのを忘れないようにします。
チャットワークの API は、レスポンスは JSON 形式ですが、POSTする内容はURLエンコード形式になります。

POSTする部分はこんな感じになります。

var message = "こんにちは\n世界";
var content = "body=" + Uri.EscapeDataString(message);
var bytes = Encoding.ASCII.GetBytes(content);
req.ContentLength = bytes.Length;

new MemoryStream(bytes).CopyTo(req.GetRequestStream());

using (var resp = req.GetResponse() as HttpWebResponse)
using (var reader = new StreamReader(resp.GetResponseStream()))
{
    // レスポンスでは投稿したメッセージのIDが取れる
    reader.ReadToEnd();
}


メッセージに改行を入れれば、チャットワーク上でもちゃんと改行されます。
メッセージは body というパラメタで設定することになっているので、それを POST します。