Soracom

Users

ドキュメント
Home ドキュメント SORACOM Flux アクションリファレンス

アクション、コンディションの記法

[アクションの実行条件] や一部の入力欄では、Flux アプリの中を流れるデータを参照したり、演算したりできます。

項目説明
データの参照

変数 を利用して Flux アプリの中を流れるデータを参照できます。

たとえば、${payload} のように書くと、チャネルに送信された MESSAGE を参照できます。また、MESSAGE が JSON オブジェクトの場合は、${payload.xxxxx} のように書くと、JSON オブジェクトのプロパティ xxxxx の値を参照できます。

演算

演算子 や 関数 を利用して、変数 を使って参照したデータに対して、さまざまな計算ができます。

たとえば、[アクションの実行条件] では、演算結果が true の場合にアクションが実行される仕組みです。営業時間だけアクションを実行する、値がしきい値を超えたときにアクションを実行するなど、実行条件を詳細に定義できます。

また、[OUTPUT] → [高度な設定] → [データを変換する] → [Content] では、アクションの実行結果のデータを参照できます。アクションが出力した機械的なデータを、人が見てわかりやすい表現にするなど、必要に応じて自由に変換できます。具体的には、以下のような変換が考えられます。

  • 単位を変換する。
  • 機械的な値を人が見てわかりやすい表現にする (UNIX 時間 (ミリ秒) → 日付を表す文字列)。

[アクションの実行条件] の入力例

[アクションの実行条件] では、入力された式が評価され、その結果が true であればアクションが実行されます。

入力例 (1-1)

チャネルに送信された MESSAGE が {"temperature": 42} で、かつ Flux アプリの現在時刻が 2024-07-17T00:00:00Z を過ぎている場合に、true と評価されます。

(payload.temperature - 2.12) >= 32.8 && now() >= datetimeFromISOString("2024-07-17T00:00:00Z")

入力例 (1-2)

イベントソースから送信された MESSAGE が {"clickTypeName": "SINGLE"}、またはチャネルに送信された CONTEXT に {"protocol": "http"} が含まれる場合に、true と評価されます。

startsWith(toUpperCase(event.payload.clickTypeName), "SINGLE") || context.protocol == "http"

そのほかの入力欄での入力例

[アクションの実行条件] 以外の入力欄では、${ と } で囲む形式で入力します (例: ${event.payload.presignedUrls.get})。入力した式は、文字列に置き換えられます。

入力例 (2-1)

イベントソースから送信された MESSAGE の {"presignedUrls": {"get": "xxxxxx"}} の xxxxxx を取得します。

<${event.payload.presignedUrls.get}|画像>

入力例 (2-2)

現在のチャネルに送信された MESSAGE (前のチャネルの出力データ) の {"output": {"people": 1, "people_with_blue_shirts": 0}} の 1 と 0 を取得します。

人が ${payload.output.people} 人います。そのうち、青いシャツの人が ${payload.output.people_with_blue_shirts} 人います!!

入力例 (2-3)

現在のチャネルに送信された MESSAGE (前のチャネルの出力データ) の {"weather": ["sunny", "cloudy", "rain"]} から weather の配列の要素の数を取得します。

${len(payload.weather)}

入力できる変数、演算子、関数について

変数

Flux アプリのアクションでは、Flux アプリの中を流れるデータを参照できます。たとえば、${payload} のように書くと、チャネルに送信された MESSAGE を参照できます。また、MESSAGE が JSON オブジェクトの場合は、${payload.xxxxx} のように書くと、JSON オブジェクトのプロパティ xxxxx の値を参照できます。

利用できる変数は以下のとおりです。

変数説明
event.payloadイベントソースからチャネルに送信されたオリジナルの MESSAGE です。
event.contextイベントソースからチャネルに送信された CONTEXT に対応する JSON オブジェクトです。
payloadチャネルに送信された MESSAGE です。JSON オブジェクトの場合 payload.temperature や payload.values[1].foo["click type"] のようにして、JSON オブジェクトの値を取り出します。JSON オブジェクトでない場合は、payload は文字列として扱われます。
contextチャネルに送信された CONTEXT に対応する JSON オブジェクトです。Object のスキーマはイベントタイプごとに異なります。イベントソースリファレンス を参照してください。
resultアクションの実行結果です。アクションの [OUTPUT] → [高度な設定] → [データを変換する] → [Context] で利用できる変数です。詳しくは、データを変換する を参照してください。

イベントソースからはじめに送信されたチャネルでは、payload と event.payload は同じ値です。同様に context と event.context も同じ値です。

演算子

${payload.temp * 100} のように書くと、payload.temp と 100 の積 (payload.temp を 100 倍した値) を利用できます。

演算子説明
||論理和: どちらかの条件が true の場合、true を返します。
&&論理積: 両方の条件が true の場合、true を返します。
? :条件 (三項) 演算子: a ? b : c のように用い、条件 a を評価した結果が true の場合は b を、false の場合は c を返します。
例: event.payload.click_type == 1 ? "Single click" : "Double click"
==等しい: 値が等しい場合、true を返します。
!=等しくない: 値が等しくない場合、true を返します。
>=以上: 左の値が右の値以上の場合、true を返します。
>より大きい: 左の値が右の値より大きい場合、true を返します。
<=以下: 左の値が右の値以下の場合、true を返します。
<より小さい: 左の値が右の値より小さい場合、true を返します。
+加算: 2 つの値の合計を返します。
-減算: 2 つの値の差を返します。
*乗算: 2 つの値の積を返します。
/除算: 2 つの値の商を返します。
%剰余: 左の値を右の値で割った余りを返します。
**累乗: 左の値を右の値乗した結果を返します。

関数

値の評価

関数説明
includes(string, value)string が、value を含んでいるかどうかを判断し、true か false を返します。
startsWith(string, prefix)string が、prefix で始まるかどうかを判断し、true か false を返します。prefix が "" の場合は true を返します。
endsWith(string, suffix)string が、suffix で終わるかどうかを判断し、true か false を返します。suffix が "" の場合は true を返します。

データ変換

関数説明
toLowerCase(string)string を小文字に変換します。
toUpperCase(string)string を大文字に変換します。
int(value)value (文字列または数値) を整数に変換します。小数の場合、小数点以下を切り捨てます。
toNumber(string)string を数値に変換します。
toString(number)number を文字列に変換します。
abs(number)number の絶対値を返します。
ceil(number)number の小数を切り上げて整数にします。
floor(number)number の小数を切り捨てて整数にします。
round(number)number の小数を四捨五入して整数にします。
max(number1, number2)指定した 2 つの数値の最大値を返します。
min(number1, number2)指定した 2 つの数値の最小値を返します。
len(value)value (文字列または配列) の長さを返します。文字列の長さは、Unicode のコードポイント数です。配列の長さを取得する場合は、len(payload) のように変数で配列を指定してください。

時間処理

例:

${datetime("2025-02-05T00:00:00Z")} // 日付を表す文字列の例
${getUTCYear(1738713600000)} // UNIX 時間 (ミリ秒) の例
関数説明
now()現在の時刻を UNIX 時間 (ミリ秒) で返します。now() はアクションの実行時に評価されます。アクションは 非同期に実行される ため、イベントの発生時刻と now() の値が異なる場合があります。
datetime(iso_string)日付を表す文字列 (*1) を、UNIX 時間 (ミリ秒) に変換します。
datetimeFromISOString(iso_string)日付を表す文字列 (*1) を、UNIX 時間 (ミリ秒) に変換します。
getUTCYear(value)value で指定した UNIX 時間 (ミリ秒) または日付を表す文字列 (*1) を、協定世界時 (UTC) に変換して、「年」を返します。
getUTCMonth(value)value で指定した UNIX 時間 (ミリ秒) または日付を表す文字列 (*1) を、協定世界時 (UTC) に変換して、「月」を返します。
getUTCDate(value)value で指定した UNIX 時間 (ミリ秒) または日付を表す文字列 (*1) を、協定世界時 (UTC) に変換して、「日」を返します。
getUTCHours(value)value で指定した UNIX 時間 (ミリ秒) または日付を表す文字列 (*1) を、協定世界時 (UTC) に変換して、「時」を返します。
getUTCMinutes(value)value で指定した UNIX 時間 (ミリ秒) または日付を表す文字列 (*1) を、協定世界時 (UTC) に変換して、「分」を返します。
getUTCSeconds(value)value で指定した UNIX 時間 (ミリ秒) または日付を表す文字列 (*1) を、協定世界時 (UTC) に変換して、「秒」を返します。
getUTCMilliseconds(value)value で指定した UNIX 時間 (ミリ秒) または日付を表す文字列 (*1) を、協定世界時 (UTC) に変換して、「ミリ秒」を返します。
getUTCDayOfWeek(value)value で指定した UNIX 時間 (ミリ秒) または日付を表す文字列 (*1) を、協定世界時 (UTC) に変換して、曜日を 0 (日曜日) - 6 (土曜日) の数字で返します。
addSeconds(value, number)value で指定した UNIX 時間 (ミリ秒) または日付を表す文字列 (*1) に、number 秒 (*2) を加算して、その結果を UNIX 時間 (ミリ秒) で返します。
addMinutes(value, number)value で指定した UNIX 時間 (ミリ秒) または日付を表す文字列 (*1) に、number 分 (*2) を加算して、その結果を UNIX 時間 (ミリ秒) で返します。
addHours(value, number)value で指定した UNIX 時間 (ミリ秒) または日付を表す文字列 (*1) に、number 時間 (*2) を加算して、その結果を UNIX 時間 (ミリ秒) で返します。
addDays(value, number)value で指定した UNIX 時間 (ミリ秒) または日付を表す文字列 (*1) に、number 日 (*2) を加算して、その結果を UNIX 時間 (ミリ秒) で返します。
addMonths(value, number)value で指定した UNIX 時間 (ミリ秒) または日付を表す文字列 (*1) に、number 月 (*2) を加算して、その結果を UNIX 時間 (ミリ秒) で返します。
addYears(value, number)value で指定した UNIX 時間 (ミリ秒) または日付を表す文字列 (*1) に、number 年 (*2) を加算して、その結果を UNIX 時間 (ミリ秒) で返します。
  • (*1) Flux の関数では、以下の形式の文字列に対応しています。日時や時刻は省略できません。

    • YYYY-MM-DDThh:mm:ssTZD (例: 2025-01-23T04:56:30+01:00)
    • YYYY-MM-DDThh:mm:ss.sssTZD (例: 2025-01-23T04:56:30.456+01:00)

    なお TZD には、Z または +09:00 の形式でタイムゾーンを指定できます。

  • (*2) 小数点以下は切り捨てられます。

数学関数

関数説明
Math.acos(number)指定した数値の逆余弦 (アークコサイン) をラジアン単位で返します。
Math.acosh(number)指定した数値の逆双曲線余弦 (ハイパーボリックアークコサイン) を返します。
Math.asin(number)指定した数値の逆正弦 (アークサイン) をラジアン単位で返します。
Math.asinh(number)指定した数値の双曲線逆正弦 (ハイパーボリックアークサイン) を返します。
Math.atan(number)指定した数値の逆正接 (アークタンジェント) をラジアン単位で返します。
Math.atanh(number)指定した数値の双曲線逆正接 (ハイパーボリックアークタンジェント) を返します。
Math.cbrt(number)指定した数値の立方根を返します。
Math.cos(number)指定した角度 (ラジアン単位) の余弦 (コサイン) を返します。
Math.cosh(number)指定した数値の双曲線余弦 (ハイパーボリックコサイン) を返します。
Math.exp(number)自然対数の底 e を number (指定した数値) 乗した値を返します。
Math.log(number)指定した数値の自然対数を返します。
Math.log10(number)指定した数値の常用対数を返します。
Math.log2(number)指定した数値の底 2 の対数を返します。
Math.random()0 以上 1 未満の疑似乱数を返します。
Math.sign(number)指定した数値の符号を返します。0 の場合は 0 を、負の数の場合は -1 を、正の数の場合は 1 を返します。
Math.sin(number)指定した角度 (ラジアン単位) の正弦 (サイン) を返します。
Math.sinh(number)指定した数値の双曲線正弦 (ハイパーボリックサイン) を返します。
Math.tan(number)指定した角度 (ラジアン単位) の正接 (タンジェント) を返します。
Math.tanh(number)指定した数値の双曲線正接 (ハイパーボリックタンジェント) を返します。
Math.degreesToRadians(number)指定した角度 (度単位) をラジアン単位に変換します。
Math.radiansToDegrees(number)指定した角度 (ラジアン単位) を度単位に変換します。