MENU

Soracom

Users

クリックして Slack に通知する

SORACOM LTE-M Button powered by AWS(LTE-M Button) を AWS IoT 1-Click および SORACOM ボタン管理に登録します。AWS IoT 1-Click から AWS Lambda を呼び出し、Slack に通知します。以下のステップにそって解説します。

当ガイドの前提は以下のとおりです。

  • SORACOM のアカウントを作成済みであること
  • AWS IoT 1-Click、SORACOM ボタン管理に未登録の LTE-M Button を持っていること

AWS IoT 1-Click 概要 および AWS IoT 1-Click 開発者ガイド を合わせてご確認ください。

ステップ 1: SORACOM ガジェット管理へ登録する

Getting Started: ガジェット管理に登録する を参考に登録してください。

ステップ 2: AWS IoT 1-Click に登録する

LTE-M Button を AWS IoT 1-Click に登録するには、 AWS IoT 1-Click のコンソール もしくはモバイルアプリケーションから登録します。登録にあたっては、デバイスに付属の製造番号 (Device Serial Number, DSN)を使用します。 ここでは、iOS 向けのモバイル・アプリケーションから登録をおこないます。あらかじめ AppStore から AWS IoT 1-Click アプリをインストールしてください。

アプリケーションを起動して、AWS アカウントでログインします。以下から「Claim with Device ID」を選択します。

LTE-M Button のケースを開け、QR コードを読み込みます。 「1 Device(s) Added」が表示されていれば正しく読み込まれています。 「Stop Scanning」をクリックします。

続いて「Claim」をタップします。

以下の画面が表示されたら、LTE-M Button のボタンを一度クリックしてください。

「Claim: Succeeded」が表示されれば登録が完了です。

「Finish」をタップします。

ステップ 3: AWS IoT 1-Click のプロジェクトを作成する

続いて、AWS IoT 1-Click のコンソールからプロジェクトとテンプレートを作成します。 ここでは、SMS に送信します。( ステップ 4: Lambda 関数を作成して Slack に通知する で、Lambda 関数を作成して Slack に通知します。)

先ほど登録した LTE-M Button が表示されていることを確認してください。

登録直後の時点では「無効」になっているので「有効化」します。

次にプロジェクトを作成します。左のメニューから「管理」->「プロジェクト」をクリックして、「プロジェクトの作成」をクリックします。

プロジェクト名を入力します。

次にデバイステンプレートを作成します。 デバイステンプレート名を入力し、ここではアクションに「SMS を送信する」を選択します。

続いて、プレイスメントの属性に電話番号と SMS メッセージを入力します。 SMS が受信できる電話番号を入力してください。電話番号は国番号から入力してください。

「プロジェクトの作成」をクリックします。

次にプレイスメントを作成します。 「プレイスメントの作成」をクリックします。

デバイスのプレイスメント名を入力し、さきほど登録した LTE-M Button を選択します。

「プレイスメントの作成」をクリックします、

Button をクリックして、SMS が送信されることを確認してください。

SMS が送信されない場合、これまでの設定をご確認ください。 また、AWS IoT 1-Click のダッシュボードから呼び出し回数を確認できますので、こちらも合わせてご確認ください。

ステップ 4: Lambda 関数を作成して Slack に通知する

ここでは、LTE-M Button がクリックされたら Lambda 関数を呼び出し Slack に通知します。 まず、Lambda 関数を定義します。

AWS Lambda のコンソールから新規関数を作成します。 ランタイム、ロールは以下を参考にしてください。

サンプルとして以下のスクリプトをペーストしてください。 (当スクリプトに関するお問い合わせはお受けできませんので、ご了承ください。)

const https = require("https");
const url = require("url");
const defaultSlackUrl = process.env["SLACK_URL"];
const defaultMessage = {
  SINGLE: "Single Click",
  DOUBLE: "Double Click",
  LONG: "Long Click",
};

exports.handler = (event, context, callback) => {
  console.log("Received event:", JSON.stringify(event, null, 2));
  var slackUrl = event.placementInfo.attributes.slackUrl ? event.placementInfo.attributes.slackUrl : defaultSlackUrl;
  if (!slackUrl) {
  }
  var slackReqOptions = url.parse(slackUrl);
  slackReqOptions.method = "POST";
  slackReqOptions.headers = { "Content-Type": "application/json" };
  var text = event.placementInfo.attributes[event.deviceEvent.buttonClicked.clickType];
  if (text) {
    var text = event.placementInfo.attributes[event.deviceEvent.buttonClicked.clickType];
    var payload = { text: text };
  } else {
    var text = defaultMessage[event.deviceEvent.buttonClicked.clickType];
    var payload = { text: text, attachments: [{ text: JSON.stringify(event, null, 2) }] };
  }
  if (event.placementInfo.attributes.username) {
    payload.username = event.placementInfo.attributes.username;
  }
  if (event.placementInfo.attributes.iconEmoji) {
    payload.icon_emoji = event.placementInfo.attributes.iconEmoji;
  }
  if (event.placementInfo.attributes.iconUrl) {
    payload.icon_url = event.placementInfo.attributes.iconUrl;
    payload.as_user = false;
  }
  if (event.placementInfo.attributes.slackChannel) {
    payload.channel = event.placementInfo.attributes.slackChannel;
  }
  var body = JSON.stringify(payload);
  slackReqOptions.headers = {
    "Content-Type": "application/json",
    "Content-Length": Buffer.byteLength(body),
  };
  var req = https.request(slackReqOptions, function (res) {
    if (res.statusCode === 200) {
      console.log("Posted to slack");
      callback(null, { result: "ok" });
    } else {
      callback(false, { result: "ng", reason: "Failed to post slack " + res.statusCode });
    }
    return res;
  });
  req.write(body);
  req.end();
};

環境変数に Slack Webhook の URL を貼り付けてください。 Slack Webhook の URL は Slack でご確認ください。

次に、IoT 1-Click のコンソールから Slack 用のプロジェクトを作成します。 プロジェクトから「作成」をクリックします。

プロジェクト名を入力します。

次にデバイステンプレートを設定します。 アクションでは「Lambda 関数」を選択し、さきほど作成した Lambda 関数を選択します。

プレイスメントを指定します。ここでは、Slack の channelusername を指定しています。 これ以外に icon_emoji やメッセージのテキストをいれることも可能です。

プロジェクトを作成後、プレイスメントを作成します。 (すでに別のプロジェクトに登録済みの場合は、あらかじめ「プレイスメントの削除」をしてください。)

Slack への通知設定は完了です。

LTE-M Button をクリックして、Slack の通知を確認します。 以下のように表示されます。