出力Transformer
説明
出力Transformer
は、Flowからのすべての出力に対してトリガーされるが、Transformer関数の動作は、使用されるTransformerの基本タイプによって大きく異なり、その詳細については以下で説明します。
出力Transformer
は、EndpointのTransformerにhandleOutput
関数を実装することで構成されます。
Transformerの種類の違い
REST Transformers
RESTベースのTransformersでは、ユーザーに複数の出力を送信することはできませんが、ユーザーからの入力ごとに、1つのFlowで複数のSay Nodeを実行することが可能です。そのため、すべての出力は「バッファ」に格納され、実行が終了すると1つの出力にマージされます。つまり、handleOutput関数の戻り値はユーザーに送信されず、バッファに格納され、handleExecutionFinished
トランスフォーマで処理されます。したがって、handleOutput関数で個々の出力を操作してそれらを返すことで、ユーザーへの最終出力に影響を与えることが可能です。
WebhookとSocketのTransformers
WebhookおよびSocketベースのTransformerでは、Flowからの出力が出力されるとすぐにユーザーに送信されます。これは、handleOutput関数の戻り値が、それ以上変更されることなく、ユーザーに直接送信されることを意味します。このことは、handleOutput関数の戻り値の形式が、チャネルで使用される形式に対応する正しい形式であることを確認するのは、Transformerエディタの責任であることを意味します。したがって、ユーザーへのメッセージ送信に必要な形式を決定するために、問題のチャネルのドキュメントを読む必要があります。
この場合、handleOutput関数は、processedOutput
と呼ばれるもう1つの引数を取得します。この変数には、チャネルにそのまま送信される出力、つまり特定のチャネルに対応する正しいフォーマットの出力が格納されます。こちらに例があります
Transformer関数の引数
handleOutput
関数は、設定オブジェクトを引数として受け取ります。オブジェクト内のキーの概要を以下に示します。
引数 | 説明 | Webhook Transformers | REST Transformers | Socket Transformers |
endpoint | Endpoint の設定オブジェクト。URLTokenなどが含まれます。 | X | X | X |
output | Flowからの未処理出力。 | X | X | X |
processedOutput | 特定のチャネルが求める形式に処理された出力。出力Transformerが実行されない場合、これがユーザーに送られます。 | X | X | |
userId | ユーザー固有のID。 | X | X | X |
sessionId | トーク固有のID。 | X | X | X |
Transformerの戻り値
出力Transformer
の戻り値は、Transformerのタイプにより異なります。出力Transformerの戻り値の検証はありません。
REST Transformers
出力Transformer
は、outputs
配列に格納される出力を返さなければなりません。これは handleExecutionFinished
Transformer関数で利用可能です。出力は通常、以下のような形式を持ちますが、異なる出力形式を出力配列に格納することも可能です。
戻り値の形式
handleOutput: async ({ }) => {
const modifiedOutput = {
text: "someText",
data: {}
};
return modifiedOutput;
}
出力Transformer
がfalsy(偽)値を返した場合、特定の出力は出力
配列に格納されず、基本的に破棄されます。
Webhook と Socket Transformer
出力Transformer
は、特定のチャネルに直接送信できる出力を返す必要があります。つまり、Sunshine Conversations EndpointでTransformerを使用する場合は、Sunshine Conversations
のドキュメントに記載されているメッセージ形式に従わなければなりません。
以下は、Sunshine Conversations Endpointの正しいリターン形式の例です:
Webhook / Socket のリターン形式
handleOutput: async ({ }) => {
const requestPayload = {
role: "appMaker",
type: "text",
text: "some text"
};
return requestPayload;
}
出力Transformer
がfalsy(偽)値を返した場合、出力はユーザーに送信されず、破棄されます。