✈️
SORACOMとAWS IoT1-Clickでボタンを押したらDiscordにポストしてみたメモ
やったこと
SORACOMのボタンを押して、Discordに投稿できるようにしてみました。
SORACOMも、Lambdaも初めて触りましたが、めちゃめちゃ簡単にできました!すごい!!
使ったもの
- SORACOM LTE-M Button powered by AWS
- AWS IoT1-Click: SORACOMボタンを押したときに、AWS Lambdaの関数をトリガーするために使います。
- AWS Lambda
- axios: LambdaでDiscord API叩くのに仕様するNode.jsのモジュール
- Discord: 今回は自分が管理しているDiscordサーバーに投稿をします。
Discordに投稿されるまでの流れ
- SORACOMのボタンを押す
- AWS IoT1-ClickがLambdaの関数をトリガーし、DiscordのAPIを叩く
- Discordに投稿される
手順
DiscordのWEB hook URLを準備
こちらを参考にDiscordのWEB hook URLを取得します。
AWS LambdaでDiscord APIを叩く関数を準備する
関数を作成し、axiosモジュールをアップロード
AWS Lambdaにアクセスし、ダッシュボードで新しい「関数」を作成します。
今回、APIを叩くのにaxiosモジュールを使いたいのですが、
LambdaでNode.jsを使う時、WEBのエディタではnode-moduleのインストールをする手段がありません。
ではどうやるか...!?
私も調べて驚いたのですが、
- プロジェクトを一度エクスポート
- ローカルでnpm install
- node-moduleディレクトリも含めてZipに圧縮
- Lambdaのエディタからアップロード
という手順で行う必要があるようです。アナログ感!笑
下記資料参考に、使いたいモジュールをアップしてください。
参考資料: Lambda の Node.js でもっといろんなパッケージを使いたいとき
コードを書く
下記コードをコピペし、URLを御自身のDiscord Webhook URLに書き換えます。
axiosでDiscord APIを叩くのはこちらを参考にしました。
Node.js(axios)からDiscordに通知を送るメモ
const axios = require('axios');
const URL = `https://discord.com/api/webhooks/【取得したWeb hook URLに変更してください】`;
exports.handler = function(event, context){
//ヘッダーなどの設定
const config = {
headers: {
'Content-type': 'application/json',
}
}
//送信するデータ
const postData = {
username: 'Myソラコム',
content: 'ソラコムから送信'
}
const main = async () => {
const res = await axios.post(URL, postData, config);
console.log(res);
}
main();
};
ここまで完了したら、「Deploy」を押してデプロイしてください。
AWS IoT1-ClickにSORACOMデバイスと関数を登録する
デバイスの登録
AWS IoT1-Clickにアクセスし、
ダッシュボードから「デバイスの登録」を行います。
デバイスIDは、デバイスの電池蓋を外すと見えます。
いろいろな番号が書いてありますが、「DSN」と書いてあるところにある、アルファベットと数字の羅列がデバイスのIDです。
※写真の、ピンクで消してある部分。
プロジェクトを作成し、設定を行う
図のように設定し、先程作った関数を選択します。
プレイスメントを作成する
「デバイスの設定」をクリックし、自分のデバイスを選択します。
完成
このように、Discordに投稿されれば成功です!
Discussion