# AWS Lambda Nodejs で chatwork へ post 送信

AWS の SNS で拾った内容を Lambda 経由でチャットワークへ送信するプログラム作成しました。Python で Lambda 作成して Chatwork に送信する記事はよくありますが、敢えて Nodejs で挑戦しました。
外部のモジュール使わずにもらったデータをチャットワークのフォーマットに合わせて送信しているだけなので、特に問題なくできました。

Chatwork 準備

  • API トークンの取得
  • ルーム ID の取得

Chatwork API の利用は組織管理者への申請してトークン取得する必要があります。
ルーム ID は URL から取得できます。

API 用のトークンとルーム ID がわかったら、もうほぼ出来上がり🎉

# Lambda Nodejs で chatwork 送信



 
 





































const https = require("https");
const querystring = require("querystring");

const token = process.env.CHATWORK_TOKEN;
const room_id = process.env.CHATWORK_ROOM_ID;
const env = process.env.ENVIRONMENT;

exports.handler = function (event, context) {
  const payload = Buffer.from(event.awslogs.data, "base64");
  const parsed = JSON.parse(zlib.gunzipSync(payload).toString("utf8"));
  const logEvent = parsed["logEvents"][parsed["logEvents"].length - 1];

  const postMessage =
    (env == "production" ? "[toall] " : "") +
    `${env} エラー発生! [code]${JSON.stringify(logEvent)}[/code]`;

  const post_data = querystring.stringify({ body: postMessage });
  const options = {
    host: "api.chatwork.com",
    path: `/v2/rooms/${room_id}/messages`,
    headers: {
      "X-ChatWorkToken": token,
      "Content-Type": "application/x-www-form-urlencoded",
    },
    method: "POST",
  };
  const post_req = https.request(options, function (res) {
    res.setEncoding("utf8");
    res.on("data", function (chunk) {
      console.log("Response: " + chunk);
      context.succeed();
    });
    res.on("error", function (e) {
      console.log("Got error: " + e.message);
      context.fail("FAILURE");
    });
  });
  post_req.write(post_data);
  post_req.end();
};

# Cloudwatch から Lambda 経由で Chatwork 送信

基本的ににやっていることは一緒ですが、CloudWatch が base64 で圧縮しているため、ひと手間が必要









 
 


























const https = require("https");
const querystring = require("querystring");
const zlib = require("zlib");
const host = "localhost.com";
const path = "/api/post_data";

exports.handler = function (event, context) {
  console.log("Event.awslogs: ", event.awslogs);
  const payload = Buffer.from(event.awslogs.data, "base64");
  const parsed = JSON.parse(zlib.gunzipSync(payload).toString("utf8"));

  var postMessage = JSON.stringify(parsed);
  var post_data = querystring.stringify({ body: postMessage });
  let options = {
    host: host,
    path: path,
    headers: {
      "Content-Type": "application/json",
    },
    method: "POST",
  };
  var post_req = https.request(options, function (res) {
    res.setEncoding("utf8");
    res.on("data", function (chunk) {
      console.log("Response: " + chunk);
      context.succeed();
    });
    res.on("error", function (e) {
      console.log("Got error: " + e.message);
      context.done(null, "FAILURE");
    });
  });
  post_req.write(post_data);
  post_req.end();
};

# ChatWork の API について

チャットワークは社内コミュニケーションツールとして復旧して来ましたが、より良く使うために開発者向けに API 公開されております。

API の利用申請 (opens new window)

チャットワークの API でできること一覧

エンドポイント 説明
me 自分の情報を取得
my/status 自分の状態を取得
my/tasks 自分のタスク一覧を取得
contacts コンタクト一覧を取得
rooms チャット一覧を取得・チャットを作成
rooms/{room_id} チャットの情報を取得変更・退席/削除
rooms/{room_id}/members チャットのメンバー一覧を取得・チャットのメンバーを変更
rooms/{room_id}/messages チャットのメッセージ一覧を取得・チャットにメッセージを投稿
rooms/{room_id}/messages/read チャットのメッセージを既読に
rooms/{room_id}/messages/unread チャットのメッセージを未読に
rooms/{room_id}/messages/{message_id} チャットのメッセージを取得変更削除
rooms/{room_id}/tasks チャットのタスク一覧を取得・チャットにタスクを追加
rooms/{room_id}/tasks/{task_id} チャットのタスクの情報を取得
rooms/{room_id}/tasks/{task_id}/status チャットのタスクの状態を変更
rooms/{room_id}/files チャットのファイル一覧を取得・チャットにファイルをアップロード
rooms/{room_id}/files/{file_id} チャットのファイルの情報を取得
rooms/{room_id}/link チャットへの招待リンクを取得作成変更削除
incoming_requests コンタクト承認依頼一覧を取得
incoming_requests/{request_id} コンタクト承認依頼を承認・コンタクト承認依頼を拒否

参考 Chatwork エンドポイント一覧 (opens new window)

2022-08-20
  • aws
  • chatwork

関連記事

AWS CloudWatch ログ監視で Lambda 処理
AWS SES メール開封確認  DB に集計
AWS Unresolved resource dependencies [AWSEBV2LoadBalancer] エラー
AWS Elastic Beanstalk php.ini 設定変更
AWS Elastic Beanstalk 環境設定
AWS のタイムゾーンを UTC 協定世界時から JST 日本標準時に変更
Amazon DynamoDB 制限調査
AWS 504 Gateway Timeout エラー対応
Elastic Beanstalk \$\SERVER['REMOTEADDR'] 取得できない
AWS EC2 の amazon-linux-extras の話
デプロイツール Capistrano