出力Transformer

説明

出力Transformerは、Flowからのすべての出力に対してトリガーされるが、Transformer関数の動作は、使用されるTransformerの基本タイプによって大きく異なり、その詳細については以下で説明します。

出力Transformerは、EndpointのTransformerにhandleOutput関数を実装することで構成されます。

出力Transformerの例

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 TransformersREST TransformersSocket Transformers
endpointEndpoint の設定オブジェクト。URLTokenなどが含まれます。XXX
outputFlowからの未処理出力。XXX
processedOutput特定のチャネルが求める形式に処理された出力。出力Transformerが実行されない場合、これがユーザーに送られます。XX
userIdユーザー固有のID。XXX
sessionIdトーク固有のID。XXX

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(偽)値を返した場合、出力はユーザーに送信されず、破棄されます。