コンテンツにスキップ

変数変換ノードの使い方

「変数変換(ベータ版)」ノードでは、CallFlowで取得した変数を使って計算や文字列の組み立てを行い、結果を別のフロー変数へ保存できます。たとえば、単価と数量から合計金額を計算したり、購入回数から顧客区分を決めたりできます。

CEL(Common Expression Language)は、値の計算や比較に使う式の言語です。JavaScriptのような汎用プログラミング言語ではなく、CallFlowに渡された変数を使った計算や判定に用途を限定しています。外部通信、ファイル操作、任意のライブラリの読み込みはできません。

変数変換では、次の関数と演算子だけを使えます。括弧内は有効なextensionのversionです。

containsstartsWithendsWithmatchessizeintdoublestring、四則演算・比較・論理演算、および map / filter / all / exists マクロが使えます。

cel.bindで式の途中の値に一時的な名前を付け、同じ式の中で再利用できます。

trimreplacesplitjoinlowerAsciiupperAsciisubstringindexOflastIndexOfcharAtformatstrings.quotereverseが使えます。

regex.replaceregex.extractregex.extractAllが使えます。

optional値のindex/access、orValueoptMapoptFlatMapfirstlastなどが使えます。

distinctsortsortBysliceflattenreverselists.rangeが使えます。

math.leastmath.greatestmath.absmath.signmath.ceilmath.floormath.roundmath.trunc、有限性チェック、math.sqrt、bitwise操作が使えます。

sets.containssets.intersectssets.equivalentが使えます。

json.decode(string)はstrict JSONのobject、array、string、number、boolean、nulldynとして読み取ります。読み取った値は、そのままMapや配列の値として参照できます。

{"顧客名": json.decode(input["顧客情報"]).name}

json.encode(dyn)はJSON互換の値を、object keyを昇順に並べた空白なしの決定的なJSON文字列へ変換します。Unicodeはそのまま出力されます。

{"JSON": json.encode({"z": "日本", "a": [1, true]})}

この式の結果は {"a":[1,true],"z":"日本"} です。json.decodeはmalformed JSON、コメント、trailing comma、重複key、__proto__ / prototype / constructorNaN / Infinity、有限でない指数、CEL int64範囲外の整数を受け付けません。値の深さは10(rootを0とする)、各配列・Mapは100要素、文字列は10,000文字までです。1回の変換では選択した入力全体と宣言した出力全体に、それぞれ総値数1,000を適用し、json.decode / json.encodeの各呼び出しでは対象値ごとに同じ上限を独立して適用します。Decode入力とEncode出力も10,000文字以内である必要があり、違反時は変数を更新せず失敗時の遷移先へ進みます。

date.parse(string, format)は、日付文字列をCELのtimestampへ変換します。一引数のoverloadはありません。formatで使えるtokenはyyyyMMddと、時刻を指定する場合のHH(00〜23)およびmm(00〜59)だけです。yyyy / MM / ddは必須、各tokenは1回まで、HHmmは指定するなら両方必須です。token以外はそのまま一致する区切り文字で、未知のASCII英数字、重複・不足token、引用符やバックスラッシュのliteral escapingは使えません。tokenの並べ替えと連結は使えますが、入力はゼロ埋めされたASCII数字による完全一致です。

日付だけの場合はAsia/Tokyo(JST)の00:00:00、時刻付きの場合は同じタイムゾーンの24時間制として解釈します。形式不正、桁不一致、実在しない日付、時刻範囲外は失敗時の遷移先へ進み、入力値や形式はエラーへ表示されません。

{
"曜日": date.parse("2026/08/29", "yyyy/MM/dd").getDayOfWeek("Asia/Tokyo"),
"受付時刻": date.parse("2026/08/29 14:30", "yyyy/MM/dd HH:mm").getHours("Asia/Tokyo")
}

返り値のtimestampは式内の比較や標準timestamp操作に使う中間値です。出力MapはJSON-onlyのため、timestampを直接保存するとinvalid_outputになり、自動RFC3339変換もされません。string型のFlow変数へ時刻を出力する場合は、標準のstring(...)変換を明示的に使います。

{"受付日時": string(date.parse("2026/08/29 14:30", "yyyy/MM/dd HH:mm"))}

この式は{"受付日時":"2026-08-29T05:30:00Z"}を返します。これ以外の暗黙変換や任意のtimestamp formattingは提供しません。

  1. CallFlowに「変数変換(ベータ版)」ノードを追加します。
  2. 「入力変数」で、CEL式から参照する変数を選択します。
  3. 「出力変数」で、計算結果を保存する変数を選択します。
  4. 「CEL式」に、出力変数をキーとしたMapを記述します。
  5. 成功時と失敗時の遷移先を設定します。

Mapは、変数名と値を組み合わせたデータです。CEL式が返すMapのキーは、選択した出力変数と完全に一致させてください。

次の3項目を1セットで設定します。

項目 設定例
入力変数 単価数量
出力変数 合計金額
CEL式 {"合計金額": int(input["単価"]) * int(input["数量"])}

通話中に収集した値は文字列として保存されます。整数として計算や比較に使う場合はint(input["変数名"])、小数を含む数値として扱う場合はdouble(input["変数名"])の形式で変換してください。たとえば"12.5"intでは変換できないため、doubleを使います。

保存時に、通話実行時と同じCELの仕組みで式を確認し、CEL式の出力Mapと選択した出力変数を照合します。式に構文エラーがある場合、選択した出力変数がMapにない場合、未選択のキーや重複するキーがMapにある場合、または出力Mapを確認できない式の場合は保存できません。検証処理が一時的に利用できない場合も、未検証の式は保存されません。

入力変数は、input["変数名"]の形式で参照します。日本語の変数名にも対応しています。

input["単価"]

変数名を変更した場合、CEL式の記述は自動では変更されません。入力変数の選択とCEL式を手動で更新してください。

用途 記述例
足し算 int(input["金額"]) + int(input["送料"])
掛け算 int(input["単価"]) * int(input["数量"])
小数の掛け算 double(input["単価"]) * double(input["数量"])
比較 int(input["購入回数"]) >= 10
複数条件 input["会員"] && int(input["購入回数"]) >= 10
条件で値を変える int(input["購入回数"]) >= 10 ? "リピーター" : "通常"
文字列をつなぐ input["姓"] + " " + input["名"]
文字数や件数 size(input["商品名"])
候補に含まれるか input["都道府県"] in ["東京都", "神奈川県"]

入力変数として「単価」と「数量」、出力変数として「合計金額」を選択します。

{"合計金額": int(input["単価"]) * int(input["数量"])}

入力変数として「購入回数」、出力変数として「顧客区分」を選択します。

{"顧客区分": int(input["購入回数"]) >= 10 ? "リピーター" : "通常"}

cel.bindを使うと、途中の計算結果に一時的な名前を付け、同じ式の中で再利用できます。次の例では、小計を一度だけ計算し、「小計」と「送料無料」の2つの出力に使用しています。

cel.bind(
subtotal,
int(input["単価"]) * int(input["数量"]),
{
"小計": subtotal,
"送料無料": subtotal >= 5000
}
)

この場合、出力変数として「小計」と「送料無料」の両方を選択してください。

式の実行と出力の確認が完了すると、すべての出力変数がまとめて更新され、成功時の遷移先へ進みます。

式に誤りがある場合や、出力のキー・型が設定と一致しない場合は、変数を更新せずに失敗時の遷移先へ進みます。更新した値によって次の処理を変える場合は、後続に条件分岐ノードを接続してください。

項目 上限
ノード名 1〜100文字
CEL式 1〜4,000文字
入力変数 50件
出力変数 1〜50件