📂
Slack APIで画像ファイルは送れないのか~Node.js編~
概要
残念ながらSlack webhook APIで画像ファイルをそのまま送ることは出来ません。
JSON形式しか対応していないからです。
「AWSなど使わず、無料で済ませたい!」
という場合は下記の手順が有効であることを発見しました。
図らずも人類初の偉業を達成してしまったようです。
1.画像ファイルをbase64にエンコードする
2.imagekit上にアップロードする
3.attachmentsとして添付する
コード
imagekitでAPIキーを取得し.envに登録しましょう。
require('dotenv').config();
const fs = require('fs');
const ImageKit = require("imagekit");
const { IncomingWebhook } = require("@slack/webhook");
(async () => {
const imageFile = fs.readFileSync('./画像ファイル.png');
const encoded = Buffer.from(imageFile).toString('base64');
//環境変数を読み込む
const imagekit = new ImageKit({
publicKey: process.env.PUBLIC_KEY,
privateKey: process.env.PRIVATE_KEY,
urlEndpoint: process.env.URL_ENDPOINT
});
imagekit.upload({
file: encoded,
fileName: "my_file_name.jpg",
}).then(response => {
const webhook = new IncomingWebhook(process.env.SLACK_HOOK_URL);
webhook.send({
text: '表示するテキスト',
username: '通知ユーザー名',
icon_url: 'https://表示したいアイコン.png',
"attachments": [{
"image_url": response.url
}]
});
}).catch((error) => {
console.error('Error:', error);
});
})();
用途としては、Herokuにデプロイ、schedulerを設定し、Puppeteerで撮ったスクショを定期的にSlackへ送信する際に使用しています。
以上です。
実装したリポジトリ
Discussion