すべてのプロダクト
Search
ドキュメントセンター

Chat App Message Service:関数の呼び出し

最終更新日:Mar 07, 2026

このトピックでは、関数の呼び出しコンポーネントの設定方法について説明します。このコンポーネントを使用すると、フロー内で Alibaba Cloud の Function Compute のカスタム関数を呼び出すことができます。このコンポーネントを使用して、データ処理、リモートサービス呼び出し、メッセージ配信、データストレージなどのカスタムビジネスロジックを実装します。

コンポーネント情報

コンポーネントアイコン

コンポーネント名

调用函数@1x (1)

関数の呼び出し

概要

「関数の呼び出し」コンポーネントを使用するには、まず Alibaba Cloud の Function Compute サービスを有効化し、次に Function Compute コンソールで関数を作成して設計する必要があります。このプロセスは、主に次の 3 つのステップで構成されます。

  1. 関数の作成と設定:Function Compute で関数を作成し、設定します。

  2. 関数の設計:Function Compute で関数ロジックを設計します。

  3. コンポーネントの設定:フロー内で「関数の呼び出し」コンポーネントを設定し、カスタム関数を呼び出します。

前提条件

Function Compute サービスが有効化されていること。

1. 関数の作成と設定

次の手順に従って、関数を作成および設定します。

  1. Function Compute コンソールに移動します。左側のナビゲーションウィンドウで、関数管理 > [関数] を選択します。ページの上部で、ご利用のフローと同じリージョンを選択します。image

  2. [関数] ページで、関数を作成 > Web 関数 > Web Function の作成 をクリックします。

    1. 主な設定:コード > [ランタイム] で、適切なランタイムを選択します。この例では、組み込み実行時 > Python > Python 3.10 ランタイムを持つ関数を使用します。

      image

    2. 必要に応じて他のパラメーターを設定します。

2. 関数の設計

フローエディターで関数テンプレートを使用すると、カスタムビジネスロジックの実装に集中でき、シンプルで実用的なフロー関数を迅速にデプロイできます。

  1. 関数の詳細 ページの コード タブで、デフォルトの index.py ファイルの内容を、次のテンプレートの内容に置き換えます。

    説明

    この内容は、フローの呼び出しロジックと互換性のある Web Server Gateway Interface (WSGI) ハンドラです。カスタムビジネスロジックは含まれていません。このファイル内の関数やその内容を変更しないでください。

    image

    import json
    from my import *
    
    
    # このファイル全体を変更しないでください。
    
    # wsgi リクエストを処理します
    # wsgi について: https://wsgi.readthedocs.io/en/latest/learn.html
    def handler(environ, start_response):
        # request_body を取得します
        try:
            request_body_size = int(environ.get('CONTENT_LENGTH', 0))
        except ValueError:
            request_body_size = 0
    
        request_body = environ['wsgi.input'].read(request_body_size)
        print(request_body)
    
        # path_info を取得します
        path_info = environ['PATH_INFO']
        print(path_info)
    
        # HTTP トリガーリクエストを JSON にロードします
        # フローノードの入力引数として
        body = json.loads(request_body.decode('utf-8'))
    
        # カスタムノードプロセスを実行します
        if path_info == '/handle_exec':
            output = handle_exec(body['variables'])
        elif path_info == '/handle_awake':
            output = handle_awake(
                body['asyncId'],
                body['async_event_data'],
                body['variables']
            )
        else:
            raise Exception('Invalid path ' + path_info)
    
        status = '200 OK'
        response_headers = [('Content-type', 'text/plain')]
        start_response(status, response_headers)
    
        return [json.dumps(output).encode('utf-8')]
     
  2. my.py という名前のスクリプトファイルを作成します。次のコードを my.py ファイルにコピーします。

説明

次のテンプレートは、random_number_length フロー変数に基づいて指定された長さの乱数を生成する機能を実装しています。次に、数値のパリティに基づいてブランチコード (even または odd) を返し、2 つの変数 (randomtype) をフローに出力します。

import random


# 実装: py spi handle_exec
def handle_exec(variables) -> dict:
    # 関数リクエストを変換します
    random_number_length = variables['random_number_length']

    random_number = generate_random_by_length(random_number_length)
    print("random generated as " + str(random_number))

    if (random_number % 2) == 0:
        number_type = "even"
    else:
        number_type = "odd"

    result = {
        'success': True,
        'message': 'OK',
        'await': False,
        'outputVariables': {
            'random': random_number,
            'type': number_type
        },
        'toBranchCode': number_type
    }

    return result


# 実装: py spi handle_awake
def handle_awake(async_id, async_event_data, variables) -> dict:
    return {}


def generate_random_by_length(random_number_length) -> int:
    length = int(random_number_length)

    start = 10 ** (length - 1)
    stop = 10 ** length

    print("from " + str(start) + "(inclusive) to " + str(stop) + "(exclusive)")
    return random.randrange(start, stop)

カスタムロジックに関係なく、my.py ファイルには次の 2 つの関数を含める必要があります。

説明

これら 2 つの関数は、フローの呼び出しとイベント処理に使用されます。Chat Flow の Function Compute コンポーネントで既にイベント処理を設定している場合は、関数内で再度イベントを処理する必要はありません。

  • def handle_exec(variables) -> dict

  • def handle_awake(async_id, async_event_data, variables) -> dict

カスタムロジックに関係なく、2 つの関数の戻り値の構造は固定されています。

  • success:関数の呼び出しが成功したかどうかを示します。失敗した場合、フローはエラーをスローして停止します。

  • message:カスタムメッセージ。

  • await:後続のイベント処理を待機するかどうかを示します。これは、フロー内の Function Compute コンポーネントに対してイベント処理を設定した場合に適用されます。ほとんどの場合、イベント処理は不要です。これを False に設定すると、フローは次の出力変数とブランチコードを使用して処理を続行します。

  • outputVariables:フローに出力する変数の名前と値。フローの後続のステップでこれらの変数を参照できます。これらは、await が False の場合にのみフローに採用されます。

  • toBranchCode:フローに出力するブランチコード。これは、Function Compute コンポーネントに複数のブランチを設定した場合に適用されます。フローは、返されたブランチコードとフローエディターでのフロー設定に基づいて次のステップを決定します。これは、await が False の場合にのみフローに採用されます。

result = {
    'success': True,
    'message': 'OK',
    'await': False,
    'outputVariables': {
        'myVarExample1': 'a',
        'myVarExample2': 'b'
    },
    'toBranchCode': 'example'
}
  1. ファイルを変更した後、デプロイメントコード をクリックします。

image

3. コンポーネントの設定

次の手順に従って、フロー内の「関数の呼び出し」コンポーネントを設定します。これにより、フローは Function Compute で作成したカスタム関数を呼び出し、ビジネスロジックを実行できるようになります。

  1. 前提条件

    既存のフローのキャンバスページに移動するか、新しいフローを作成します。

    • 既存のフローのキャンバスページに移動します。

      Chat Flow > Flow Management タブで、編集したいフローの Flow Name をクリックして、フローオーケストレーションページに移動します。

      image

    • 新しいフローを作成してキャンバスページに移動します。詳細については、「フローの作成」をご参照ください。

  2. キャンバスで、関数の呼び出しコンポーネントのアイコンをクリックして、右側にその設定ペインを表示します。

    image

  3. 必要に応じてコンポーネントのパラメーターを設定します。詳細については、「パラメーター詳細」をご参照ください。

  4. 設定後、Save をクリックします。表示されるダイアログボックスで、Save をクリックします。

    image

パラメーター詳細

親設定項目

子設定項目

説明

実行設定

非同期ウェイクアップ

有効にすると、トリガーとウェイクアップのための非同期呼び出しをサポートします。

image

非同期待機タイムアウト

非同期待機のタイムアウト期間を秒単位で設定します。

HTTP トリガー設定

URL

関数の URL。URL を取得するには、Function Compute コンソールに移動します。左側のナビゲーションウィンドウで、関数管理 > [関数] を選択します。対象の関数を見つけて、その 関数の詳細 ページに移動します。トリガー タブで、インターネットエンドポイント を見つけます。

説明

初めて使用する際は、Authorize ChatApp to Invoke Your Function をクリックしてください。

image

image

リージョン

リージョン:関数設定における ARN の 3 番目のセグメント。

Function Compute コンソールの左側のナビゲーションバーで、関数管理 > [関数リスト] をクリックします。対象の関数を見つけて、その 関数の詳細 ページに移動します。次に、設定 をクリックし、設定 セクションで ARN をコピーする をクリックして ARN を取得します。

説明

例えば、コピーされた ARN が acs:fc:ap-southeast-1:112xxxxxx4926620:functions/test1 の場合、

リージョンは ap-southeast-1 です。

image

タイムアウト

カスタムのタイムアウト期間を設定します。

image

パラメーター設定

-

必要に応じて、関数の入力パラメーターを定義します。パラメーター名は、関数コード内の名前と一致させる必要があります。値は定数またはフロー変数にすることができます。

image

マルチブランチ設定

-

必要に応じて、関数の出力に対するブランチを設定します。ブランチコードは、関数から返される `toBranchCode` の値と一致させる必要があります。関数がフローで定義されていないブランチコードを返した場合、フローは Else ブランチに進みます。

image

応答設定

-

必要に応じて、関数の出力をフロー変数にマッピングします。ここで定義する変数名は、関数から返される `outputVariables` ディクショナリ内のキーと一致させる必要があります。

image