Skip to content

カスタムルール機能(ダイナミックパラメーター / ユーザーカスタム属性)

リリース日: 2024年05月10日

エンジニア稼働が可能なお客様向けの機能です

本機能はサーバ実装が必要なため、エンジニアリソースが必要です。


ダイナミックパラメーター

概要

診断サイトに ダイナミック(動的)パラメーター を渡し、その値をルールの条件に利用できる機能です。

個人情報は渡さない

URLパラメータに乗せる仕組みのため、個人情報などのセキュアな情報は後述する ユーザーカスタム属性 を利用 してください。

ユースケース例

  • 診断サイトへのアクセスが 自社アプリのウェブビュー経由か / LP のネイティブブラウザ経由か を判定
  • お客様が自社EC に登録してから 何日経過したか を判定

設定方法

ルール編集で「ダイナミックパラメーター」を選択

  • ルール一覧 > ルール編集 > 達成条件「ダイナミックパラメーター」 を選択
    • パラメーターキー: 識別子(例: from
    • 値: 分類される可能性のある識別子を列挙(例: web

利用方法1: skinsense 提供のホスティングサイトの場合

pid などと同じ要領で d-params クエリに Base64 エンコードした JSON 文字列 を渡します。

json
{
  "from": "app",
  "registeredAt": "2024-01-01"
}

を Base64 にすると:

eyJmcm9tIjoiYXBwIiwicmVnaXN0ZXJlZEF0IjoiMjAyNC0wMS0wMSJ9

アクセスさせるURL:

https://hosting.skinsense.jp/?pid=***&d-params=eyJmcm9tIjoiYXBwIiwicmVnaXN0ZXJlZEF0IjoiMjAyNC0wMS0wMSJ9

JavaScript でエンコードするスニペット

ts
function encodeBase64(json) {
  const textEncoder = new TextEncoder()
  const uint8Array = textEncoder.encode(JSON.stringify(json))
  const binaryString = uint8Array.reduce(
    (str, uint8) => str + String.fromCharCode(uint8),
    '',
  )
  return btoa(binaryString)
}
const base64 = encodeBase64({
  from: 'web',
  registeredAt: '2024-01-01',
})

利用方法2: 自社ホスティングの場合

setup 関数に dynamicParams キーで Record<string, any> 型を渡します。

ts
window.s2Ready = function(instance) {
  instance.setup({ projectId, idToken, dynamicParams })
}

URL長の上限

パラメーター量が多すぎると URL 化した際 414 エラー(URI が長すぎる)になる可能性があるためご注意ください。


ユーザーカスタム属性

前提

  • ID連携 機能をご利用中のお客様向けの機能です
  • エンジニア稼働が可能なお客様向けの機能です

概要

ID連携 と併用することで、自社で管理している様々なユーザー情報を skinsense のルールで柔軟に利用 できるようになります。

設定方法

サンプルとして「20歳以上のお客様に表示する」ルールを作成する例

診断ユーザー > カスタムユーザー属性 > 新規登録

  • 診断ユーザー > カスタムユーザー属性 から 「新規登録」 をクリック

属性の入力フォーム

  • 以下を登録して 「登録する」 をクリック
    • タイトル: 識別用のタイトル
    • 属性名: 実際に渡すプロパティ名
    • タイプ: プロパティの型(文字列 / 数値 / 真偽値 / 日付)

ルール編集で達成条件にカスタム属性を設定

  • ルール > ルール編集「達成条件」 に上記を設定すると、20歳以上のお客様に表示するルールになります

API について

メソッド

POST

リクエストヘッダー

  • Content-Type: application/json
  • x-sha2-signature: <呼び出し元を保証するシグネチャ>

リクエストボディ

json
{
  "connectId": "事前に連携いただいたユーザーID"
}

レスポンスボディ

json
{
  "attributes": {
    "key1": "value1",
    "key2": true
  }
}
  • attributes: 別途登録いただいたユーザーカスタム属性キーとその値を含むオブジェクト

パフォーマンスについて

  • Cache-Control の設定を推奨
    • 例: Cache-Control: private, max-age=86400 → 同一ユーザーからのリクエストを1日1回に制限
    • 未設定の場合、86400(1日)がデフォルト
  • APIのレスポンスは 3 秒以内に返す 必要があります。タイムアウトすると対象ルールは不成立になります

セキュリティ

x-sha2-signature ヘッダーには、リクエストボディに対して別途提供しているシークレットキーを用いて生成したシグネチャが設定されています。 これを用いてリクエスト元の信頼性を確認できます。

TypeScript の例

ts
import { createHmac } from 'crypto';

const SECRET_KEY = 'your_secret_key';

function verifySignature(request) {
  const body = typeof request.body === 'string'
    ? request.body
    : JSON.stringify(request.body);
  // リクエストボディ全体から sha256 形式のハッシュ値を生成
  const signature = createHmac('sha256', SECRET_KEY).update(body).digest('hex');
  return request.headers['x-sha2-signature'] === signature;
}

ご利用のサーバープログラミング言語に応じて適宜調整してください。

※ 事前に skinsense 側の IP などを許可する IP ホワイトリストはご利用いただけません。


ダイナミックパラメーターとユーザーカスタム属性の比較

ダイナミックパラメーターユーザーカスタム属性
導入の手軽さ
セキュリティ

渡せる値について

ts
{
  [key: string]: string | number | string[] | number[] | boolean
}
  • 入れ子オブジェクトは使えません
  • 日付は ISO8601 形式の日付文字列 で渡してください

関連

skinsense プロバイダーコンソール 操作マニュアル