✈️

SORACOMとAWS IoT1-Clickでボタンを押したらDiscordにポストしてみたメモ

2021/04/29に公開

やったこと

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に投稿されるまでの流れ

  1. SORACOMのボタンを押す
  2. AWS IoT1-ClickがLambdaの関数をトリガーし、DiscordのAPIを叩く
  3. Discordに投稿される

手順

DiscordのWEB hook URLを準備

こちらを参考にDiscordのWEB hook URLを取得します。

AWS LambdaでDiscord APIを叩く関数を準備する

関数を作成し、axiosモジュールをアップロード

AWS Lambdaにアクセスし、ダッシュボードで新しい「関数」を作成します。

今回、APIを叩くのにaxiosモジュールを使いたいのですが、
LambdaでNode.jsを使う時、WEBのエディタではnode-moduleのインストールをする手段がありません。

ではどうやるか...!?

私も調べて驚いたのですが、

  1. プロジェクトを一度エクスポート
  2. ローカルでnpm install
  3. node-moduleディレクトリも含めてZipに圧縮
  4. 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