メインコンテンツまでスキップ

REFERENCE

開発者リファレンス

認証、API、SDK、Flow Agent のプロセッサ、パラメータ解決のリファレンスです。

組み込み変数

Asgard の Expression と Template には組み込み変数が用意されており、ワークフローの実行中に対話の内容、ファイルの情報、チャネルの状態を読み取れます。

  1. 変数の一覧​

    対話関連​

    prevMessage​

    • 型: string
    • 内容: 直前のユーザーメッセージ
    • 使い方:
    // Expression
    prevMessage || 'メッセージなし'
    {{! Template }}
    {{#if prevMessage}}
    お話の内容: {{prevMessage}}
    {{/if}}

    prevBlobs​

    • 型: array<Blob>
    • 内容: 直前のメッセージに添付されたファイルの一覧
    • 使い方:
    // Expression
    prevBlobs && prevBlobs.length > 0 ? `${prevBlobs.length} 件のファイルを受け取りました` : 'ファイルなし'
    {{! Template }}
    {{#if prevBlobs}}
    ファイル一覧:
    {{#each prevBlobs}}
    • {{fileName}} ({{size}} bytes)
    {{/each}}
    {{/if}}

    prevPayload​

    • 型: object
    • 内容: 直前のメッセージが運ぶ payload
    • 使い方:
    // Expression
    prevPayload && prevPayload.userAction
    {{! Template }}
    {{#if prevPayload}}
    payload: {{{toJson prevPayload}}}
    {{/if}}

    prevError​

    • 型: string
    • 内容: 直近のプロセッサーのエラーメッセージ
    • 使い方:
    // Expression
    prevError ? `エラーが発生しました: ${prevError}` : '正常に処理されました'
    {{! Template }}
    {{#if prevError}}
    エラー: {{prevError}}
    {{else}}
    正常に処理されました
    {{/if}}

    チャネル関連​

    customChannelId​

    • 型: string
    • 内容: 独自のチャネル ID
    • 使い方:
    // Expression
    `チャネル: ${customChannelId}`
    {{! Template }}
    現在のチャネル: {{customChannelId}}

    customMessageId​

    • 型: string
    • 内容: 直前のメッセージの独自 ID。クライアントが指定しない場合は空文字列です
    • 使い方:
    // Expression
    customMessageId || '独自 ID なし'
    {{! Template }}
    {{#if customMessageId}}
    メッセージ ID: {{customMessageId}}
    {{/if}}
  2. Blob オブジェクト​

    interface Blob {
    blobId: number; // blob の識別 ID
    fileType: FileType; // ファイルの種類
    fileName?: string; // 元のファイル名(任意)
    size: number; // ファイルサイズ(bytes)
    mime: string; // MIME タイプ
    }

    type FileType = 'BINARY' | 'IMAGE' | 'VIDEO' | 'AUDIO' | 'DOCUMENT';
  3. 変数の読み取り​

    安全に読む書き方​

    Expression モード

    // 変数の存在を確認する
    prevMessage && prevMessage.length > 0 ? prevMessage : 'メッセージなし'

    // 論理演算子を使う
    prevMessage || '既定のメッセージ'

    // 配列に安全にアクセスする
    prevBlobs && prevBlobs[0] && prevBlobs[0].fileName

    // オブジェクトのプロパティを確認する
    prevPayload && 'property' in prevPayload ? prevPayload.property : '既定値'

    Template モード

    {{#if prevMessage}}
    メッセージあり: {{prevMessage}}
    {{else}}
    メッセージなし
    {{/if}}

    {{#each prevBlobs}}
    ファイル
    {{@index}}:
    {{fileName}}
    {{/each}}
  4. 実用例​

    対話の状態の確認​

    // 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(' | ') : '状態なし';
    })()
    {{! Template: 状態のレポート }}
    • 対話の状態

    {{#if prevMessage}}
    • 最後のメッセージ: {{prevMessage}}
    {{else}}
    • まだメッセージを受け取っていません
    {{/if}}

    {{#if prevBlobs}}
    • ファイル情報:
    {{#each prevBlobs}}
    • {{fileName}} ({{fileType}}, {{size}} bytes)
    {{/each}}
    {{else}}
    • 添付なし
    {{/if}}

    {{#if prevError}}
    • エラー: {{prevError}}
    {{else}}
    • 正常に動作しています
    {{/if}}

    • チャネル: {{customChannelId}}

    ファイルの扱い​

    // 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(', ');
    })()
    {{! Template: ファイルの詳細 }}
    {{#if prevBlobs}}
    • ファイルの詳細:
    {{#each prevBlobs}}
    {{@index}}.
    {{fileName}}
    • 種類: {{fileType}}
    • サイズ: {{size}} bytes
    • MIME: {{mime}}
    • ID: {{blobId}}
    {{/each}}
    {{/if}}
  5. よくある質問​

    Q: 変数が存在するかを確認するには

    // Expression
    typeof prevMessage !== 'undefined' && prevMessage !== null

    // undefined と null を同時に確認する
    prevMessage != null
    {{! Template }}
    {{#if prevMessage}}
    変数が存在します
    {{/if}}

    Q: 空の配列を扱うには

    // Expression
    prevBlobs && Array.isArray(prevBlobs) && prevBlobs.length > 0
    {{! Template }}
    {{#if prevBlobs}}
    {{#if prevBlobs.length}}
    ファイルがあります
    {{/if}}
    {{/if}}

    Q: ファイルのプロパティを安全に読むには

    // Expression
    prevBlobs && prevBlobs[0] && prevBlobs[0].fileName
    {{! Template }}
    {{#if prevBlobs}}
    {{#each prevBlobs}}
    {{#if fileName}}
    ファイル名: {{fileName}}
    {{/if}}
    {{/each}}
    {{/if}}

    Q: payload を扱うには

    // Expression: payload のプロパティを安全に読む
    prevPayload && typeof prevPayload === 'object' && 'action' in prevPayload ? prevPayload.action : 'アクションなし'
    {{! Template: payload の内容を表示する }}
    {{#if prevPayload}}
    payload の内容: {{{toJson prevPayload}}}
    {{/if}}

    これらの変数を適切に使うことで、状況を踏まえた個別性のある対話を組み立てられます。

始める準備はできましたか?

Asgard をチームでどう活用できるか、お気軽にご相談ください。

お問い合わせ