Soracom

Users

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

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

[アクションの実行条件] や一部の入力欄では、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}}10 を取得します。

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

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

演算子

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

演算子説明
||論理和: どちらかの条件が 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 を含んでいるかどうかを判断し、truefalse を返します。
startsWith(string, prefix)string が、prefix で始まるかどうかを判断し、truefalse を返します。prefix"" の場合は true を返します。
endsWith(string, suffix)string が、suffix で終わるかどうかを判断し、truefalse を返します。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 時間 (ミリ秒) で返します。
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)指定した角度 (ラジアン単位) を度単位に変換します。