🐰
【5分でできるWebhook】obnizからDiscordに通知を送ろう
よく忘れるやつなのに記事にしてなかったから書いておきます。
Discord側でWebhook URLを用意する(2分)
デスクトップアプリから。
Bot(Webhookの先となる仮想ユーザー)を作りたいサーバーを開き、サーバー名の右側のプルダウンメニューからServer Settings
を開きます。
Integrations
からWebhooks
を選択。
New Webhook
ボタンをクリックし、上図に従ってください。
Webhook URLをコピーして控えておきましょう。
Postmanでテスト(ここやらなくてもよい)
DiscordのWebhookに関する決まりは基本的に3つだけです。
- POSTで送信すること
-
content
キーに被送信データを入れること - Content-Typeは
application/x-www-form-urlencoded
ormultipart/form-data
orapplication/json
のいずれかにすること
application/x-www-form-urlencoded のとき
multipart/form-data のとき
application/json のとき
ちゃんと送れてるかな?
上記3つの各Content-Typeのいずれの方法でも送れていることが確認できました。
obniz側でコード書く(コピペ3分)
セットアップ等は省略です。
プッシュボタンスイッチを押すとDiscordに「ランダムなおみくじの結果文字列」が送られるスクリプトをサンプルとして以下に示します。
axiosがPOSTするときのContent-Typeはデフォルトでapplication/json
なので、第2パラメータにそのままオブジェクト({ content: omikuji }
)を置けばよいです。
omikuji.js
const axios = require('axios');
const Obniz = require('obniz');
const obniz = new Obniz('Obniz_ID'); // 自分のObniz IDを入れる
const DISCORD_WEBHOOK_URL = 'ここに取得したWebhook URLを入れる';
obniz.onconnect = async function () {
obniz.display.clear();
obniz.display.print('Hello obniz!');
// スイッチの反応を常時監視し変化があれば実行します
obniz.switch.onchange = async function (state) {
if (state === 'push') {
// プッシュスイッチが押されたとき以下を実行
// ランダム値から「おみくじ結果」を作成します
const v = Math.random();
const omikuji = (v > 0.8) ? '大吉' : (v > 0.6) ? '中吉' : (v > 0.4) ? '吉' : '凶';
console.log('おみくじ結果:' + omikuji);
obniz.display.clear(); // 画面を消去
obniz.display.print('pushed'); // pushed と画面に表示
// axiosで送る
try {
// POSTリクエストでDiscordにおみくじ結果を送信
const response = await axios.post(
DISCORD_WEBHOOK_URL,
{ content: omikuji } // このオブジェクトがJSONとして送信される
);
// データ送信が成功するとレスポンスが来る
console.log('レスポンスを受信しました:' + response.data);
console.log('POSTに成功しました!');
} catch (error) {
// ネットワークに接続できてない・サーバーが落ちてる・URLが違うなど
console.log('POSTに失敗しました……');
console.error(error);
}
} else {
// プッシュスイッチ戻された・左右などの場合
obniz.display.clear(); // 画面を消去
}
}
}
Node.jsで実行し、プッシュスイッチを押してみましょう。
$ node omikuji.js
うまく動いていればDiscordにこのように投稿されます。
おつかれさまでした。
Discussion