[NodeJS]依存ライブラリを一切インストールせずにSlackにメッセージを送る一番簡単な方法
今回はタイトル通り余計なライブラリに依存しないでSlackにメッセージを送る一番簡単な方法を書きます。
俺自身がAWSのLabmdaで利用するために、できる限り簡単なコードを模索してこれにたどり着きました。メッセージをSlackに送るだけなのに、依存ライブラリをLambdaでLayerとして登録するとか、もしくは依存ライブラリをソースコードと一緒にLambdaにアップロードするとかするのが果てしなく嫌なのは俺だけではないはず!
とりあえずやってみよう
下記のSnippetを実行すると指定のEndPoint(Webhook URL)
にメッセージが送られます。
EndPoint
は「 https://slack.com/services/new/incoming-webhook 」から取得できます。
const https = require ('https');
// ここは各々EndPointに書き換えてください
const endPoint = "https://hooks.slack.com/services/...";
function sendMessage(message) {
let options = {
method : 'POST',
headers : {
'Content-Type' : 'application/json'
}
};
const request = https.request(endPoint, options);
request.write( JSON.stringify({text: message}) );
request.end();
}
// メッセージ入力
sendMessage("Test message");
解説
ライブラリについて
Slackにメッセージを送るのは、要は指定のEndPointにPostとしてJSONの中身にtext
を送ることです。Request
やBent
、got
などRequest関連の素晴らしいライブラリが多数存在しますが、簡単なHttpsのRequest操作ならNodeJSのBuilt-inのライブラリで十分です。
ちなみにRequest
はDeprecatedされているので、使わないことにしましょう!どうしてもこの手のライブラリが使いたいなら、今の流行りではgot
が良いかな。
https://www.npmtrends.com/bent-vs-fetch-vs-request-vs-request-promise-vs-got
非同期処理について
Slackにメッセージを一方的に送るだけですので、一般的なRequest処理で見られる非同期処理(Async/AwaitもしくはPromise)はしなくても問題ありません。もちろんSlackにメッセージを送った後に何か処理をする必要があるなら、きちんと非同期処理やりましょう。
エラー処理について
上の非同期処理と同じく、Slackにメッセージを一方的に送るだけですので、エラー処理も俺は要らないと思います。しかし、「エラー処理がないと気持ち悪い!」方も確かにいらっしゃるし、その理由も分かります。ですのでエラー処理が必要な場合は下記の参考にしてエラー処理を追加ください。
req.on('error', (e) => {
console.error(`problem with request: ${e.message}`);
});
Slackに送るメッセージデータ(Payload)の送信時カスタマイズについて
Slackにメッセージを送る時に必須であるので、textのみです。他のChannel、Icon、User NameなどはEndPoint取得時に設定してあるDefaultのを使いますが、メッセージ送信時にカスタマイズすることもできます。必要な方は
を下記を参考に変えてみてください。request.write( JSON.stringify({text: message}) );
const PAYLOAD = {
"channel": "...",
"username": "...",
"text": "...",
"icon_url": "..."
};
request.write( JSON.stringify(PAYLOAD) );
Posted by YongJin Kim
関連記事
NodeJS v12で「error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol」解決方法
NodeJS v10では正常に動作していたコードがNodeJS v12では下記の ...
[NodeJS]localとremoteファイルサイズを取得する方法
ファイルサイズを取得する方法は様々ですが、その中で俺が知っている一番簡単な方法を ...
[NodeJS]相対パスを絶対パスに変換する方法
ローカルのリソースを読み込んで作業するとかで相対パスを絶対パスに変換しなければな ...
node.jsとnpmとインストールされているpackageのバージョン確認する方法
前のポストでNode.jsとNPMをnを利用して気軽にアップデートする方法を書き ...
複数のnpm run を簡単にまとめて実行してみよう(npm-run-all)
Gruntと出会うー>救世主降臨! Gulp.jsと出会うー>神再臨! しばらく ...
ディスカッション
コメント一覧
まだ、コメントがありません