Webhook設定詳細
設定項目フィールド一覧
Webhook 新規登録画面に表示されている各項目については以下の通りです。
項目 | 必須 | 説明 |
---|---|---|
トリガ名 | 必須 | トリガの名称です。 |
Webhook URL | 必須 | Webhook通知の受信先となるサーバーのURLです。 |
指標設定 | 必須 | しきい値判定情報を設定します。最大5つまで増やせます。 |
指標 | 必須 | 判定対象の指標を指定します。 |
条件 | 必須 | 指標としきい値の判定条件です。 |
しきい値 | 必須 | 検証を行う指標のしきい値を設定します。 |
加重平均係数 | 必須 | 指標に対する加重平均を設定します。 値の範囲: 0.0-1.0 |
判定式 | 必須 | 複数指標で判定する際の式を設定します。 指標設定が1つの場合 x[0] を入力してください。 |
最小通知間隔 | 必須 | Webhookの通知間隔を秒設定します。 値の範囲: 60-86400 |
Webhook 更新画面ではWebhook 新規作成画面の項目に加えて、下記の項目が追加されています。
項目 | 説明 |
---|---|
アプリID | アプリID。 |
アプリSecret | アプリSecret。 |
検証 | 押下することで、現在入力されているWebhook URLに対してWebhookイベントオブジェクトを含むHTTP POSTリクエストが送られます。 レスポンスのステータスコードが 200 の場合に検証が成功判定とされるため、レスポンスのステータスコードは200 を返してください。 |
設定可能な指標
データ定義 15秒間隔データ のAPI
のアイテムが指定できます。
条件としきい値
計算された今回加重平均値に対してしきい値判定を実施します。しきい値判定は以下の5種類が可能です。条件の判定はJavaScriptで実施されます。
- under: 今回加重平均値 <= しきい値
- over: 今回加重平均値 >= しきい値
- inner: abs(今回加重平均値) <= しきい値
- outer: abs(今回加重平均値) >= しきい値
- equal: 今回加重平均値 == しきい値
用途に応じたデータのフィルタリング
Webhook APIの演算では標準で isl == false のフィルタ(isl: メガネに動きがある時にfalseになるフラグ)がかかっており、もしそれ以外でも除外したいシーンがある場合は自分で条件を追加します。以下がフィルタに関するサンプルです。
サンプル | 指標 | 加重平均値 | しきい値 | 条件 |
---|---|---|---|---|
ノイズ時間が3秒以内の時 | nis_time | 0 | 3 | under |
歩行が10歩以上の時 | stp | 0 | 10 | over |
下向き平均角が45°より浅い時 | tl_yav | 0 | 45 | under |
加重平均係数
Webhook API では JINS MEME アプリから送られてきたデータに加重平均処理をかけてトリガー判定を実施します。加重判定処理は以下のように算出します。
- 前回加重平均値: IndexWA(m-1)
- 今回生値: Index(m)
- 加重平均係数(前回値重み): coeff
- 今回加重平均値(使用される値): IndexWA(m) = IndexWA(m-1) * coeff + Index(m-1) * (1 - coeff)
加重平均係数 coeff = 0 の場合は加重平均がかからずに今回値がそのまま判定されます。加重平均係数 coeff が1に近づくと直近の値の影響を受けづらくなります。
IndexWA(m-1) | Index(m) | coeff | IndexWA(m) |
---|---|---|---|
60 | 80 | 0.5 | 70 |
60 | 80 | 0 | 80 |
60 | 80 | 0.8 | 64 |
判定式
- 設定された条件に対し、最終判定の式を記述します
AND(&&)
とOR(||)
とカッコのみが許可されています||, &&
の論理演算子は5つまで設定できます。- 不正な式を記載した場合、結果がfalseになり続けWebhookは発行されないのでご注意ください
- 例:
x[0] || x[1], (x[0] || x[1]) && x[2]
署名検証方法
リクエストがJINS MEMEから送られたことを確認するために、サーバーでリクエストヘッダーのX-JINSMEME-SIGNATURE
に含まれる署名を検証することが可能です。
- アプリシークレットを秘密鍵として、HMAC-SHA256アルゴリズムを使用してリクエストボディのダイジェスト値を取得します。
- ダイジェスト値をBase64エンコードした値と、リクエストヘッダーの
X-JINSMEME-SIGNATURE
に含まれる署名が一致することを確認します。
JavaScriptで署名の検証を実装する例は以下のようになります。
const crypto = require('crypto');
const secret = '...' // Webhook 更新画面で確認したアプリシークレット
const body = '...' // リクエストbody
const hmac = crypto.createHmac('sha256', secret);
hmac.update(JSON.stringify(body));
const signature = hmac.digest('base64');
サンプル
姿勢通知(うつむき過ぎ)
- 条件1: (tl_yav >= 20, 加重平均係数 = 0)
- 評価式: x[0]
- 最小通知間隔: 60
姿勢通知(うつむき過ぎでもなく、上向き過ぎでもない)
- 条件1: (tl_yav >= -20, 加重平均係数 = 0)
- 条件2: (tl_yav <= 20, 加重平均係数 = 0)
- 評価式: x[0] && x[1]
- 最小通知間隔: 60
姿勢通知(うつむき過ぎでもなく、上向き過ぎでもなく、毎分120(30x4)歩の速めのペースで歩いている)
- 条件1: (tl_yav >= -20, 加重平均係数 = 0)
- 条件2: (tl_yav <= 20, 加重平均係数 = 0)
- 条件3: (stp >= 30, 加重平均係数 = 0)
- 評価式: x[0] && x[1] && x[2]
- 最小通知間隔: 60
長時間の姿勢通知(うつむき過ぎでもなく、上向き過ぎでもないのを間隔長めに判断する)
- 条件1: (tl_yav >= -20, 加重平均係数 = 0.9)
- 条件2: (tl_yav <= 20, 加重平均係数 = 0.9)
- 評価式: x[0] && x[1]
- 最小通知間隔: 600