組み込み変数
Asgard の Expression と Template には組み込み変数が用意されており、ワークフローの実行中に対話の内容、ファイルの情報、チャネルの状態を読み取れます。
変数の一覧
対話関連
prevMessage
- 型:
string - 内容: 直前のユーザーメッセージ
- 使い方:
// Expression
prevMessage || 'メッセージなし'
prevBlobs
- 型:
array<Blob> - 内容: 直前のメッセージに添付されたファイルの一覧
- 使い方:
// Expression
prevBlobs && prevBlobs.length > 0 ? `${prevBlobs.length} 件のファイルを受け取りました` : 'ファイルなし'
prevPayload
- 型:
object - 内容: 直前のメッセージが運ぶ payload
- 使い方:
// Expression
prevPayload && prevPayload.userAction
prevError
- 型:
string - 内容: 直近のプロセッサーのエラーメッセージ
- 使い方:
// Expression
prevError ? `エラーが発生しました: ${prevError}` : '正常に処理されました'
チャネル関連
customChannelId
- 型:
string - 内容: 独自のチャネル ID
- 使い方:
// Expression
`チャネル: ${customChannelId}`
customMessageId
- 型:
string - 内容: 直前のメッセージの独自 ID。クライアントが指定しない場合は空文字列です
- 使い方:
// Expression
customMessageId || '独自 ID なし'
Blob オブジェクト
interface Blob {
blobId: number; // blob の識別 ID
fileType: FileType; // ファイルの種類
fileName?: string; // 元のファイル名(任意)
size: number; // ファイルサイズ(bytes)
mime: string; // MIME タイプ
}
type FileType = 'BINARY' | 'IMAGE' | 'VIDEO' | 'AUDIO' | 'DOCUMENT';
変数の読み取り
安全に読む書き方
Expression モード
// 変数の存在を確認する
prevMessage && prevMessage.length > 0 ? prevMessage : 'メッセージなし'
// 論理演算子を使う
prevMessage || '既定のメッセージ'
// 配列に安全にアクセスする
prevBlobs && prevBlobs[0] && prevBlobs[0].fileName
// オブジェクトのプロパティを確認する
prevPayload && 'property' in prevPayload ? prevPayload.property : '既定値'
Template モード
実用例
対話の状態の確認
// Expression: 状態をまとめて確認する
(() => {
let status = [];
if (prevMessage) {
status.push(`メッセージ: ${prevMessage.substring(0, 50)}...`);
}
if (prevBlobs && prevBlobs.length > 0) {
status.push(`ファイル: ${prevBlobs.length} 件`);
}
if (prevError) {
status.push(`エラー: ${prevError}`);
}
return status.length > 0 ? status.join(' | ') : '状態なし';
})()
ファイルの扱い
// Expression: 種類ごとの件数を集計する
(() => {
if (!prevBlobs || prevBlobs.length === 0) {
return 'ファイルなし';
}
const stats = {};
prevBlobs.forEach(blob => {
stats[blob.fileType] = (stats[blob.fileType] || 0) + 1;
});
return Object.entries(stats)
.map(([type, count]) => `${type}: ${count}`)
.join(', ');
})()
よくある質問
Q: 変数が存在するかを確認するには
// Expression
typeof prevMessage !== 'undefined' && prevMessage !== null
// undefined と null を同時に確認する
prevMessage != null
Q: 空の配列を扱うには
// Expression
prevBlobs && Array.isArray(prevBlobs) && prevBlobs.length > 0
Q: ファイルのプロパティを安全に読むには
// Expression
prevBlobs && prevBlobs[0] && prevBlobs[0].fileName
Q: payload を扱うには
// Expression: payload のプロパティを安全に読む
prevPayload && typeof prevPayload === 'object' && 'action' in prevPayload ? prevPayload.action : 'アクションなし'
これらの変数を適切に使うことで、状況を踏まえた個別性のある対話を組み立てられます。