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

Chat App Message Service:関数を呼び出す

最終更新日:Nov 25, 2025

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

コンポーネント情報

コンポーネント アイコン

调用函数@1x (1)

コンポーネント

関数を呼び出す

プロセス概要

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

  1. 関数の作成: Function Compute コンソールで関数を作成し、設定します。

  2. 関数の設計: 関数にカスタムビジネスロジックを追加します。

  3. コンポーネントの設定: フローで [関数を呼び出す] コンポーネントを設定して、作成した関数を呼び出します。

前提条件

Function Compute が有効化されていること。

1. 関数の作成と設定

以下の手順に従って、関数を作成し、設定します。

  1. Function Compute コンソールに移動します。左側のナビゲーションウィンドウで、[関数管理] > [関数リスト] を選択します。ページの上部で、リージョンを選択します。フローが存在するリージョンと同じリージョンを選択することをお勧めします。image

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

    1. 基本設定を構成します。[関数コード] > [ランタイム] で、ランタイムを選択します。この例では、[Built-in Runtimes] > [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:
    # fun リクエストを変換
    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 つの関数は、それぞれフローの呼び出しとイベント処理に使用されます。フロー内の「関数を呼び出す」コンポーネントのイベント処理をすでに設定している場合は、関数内で再度イベントを処理する必要はありません。

  • def handle_exec(variables) -> dict

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

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

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

  • message: カスタマイズ可能なメッセージ。

  • await: 後続のイベント処理を待機するかどうかを指定します。このパラメーターは、フロー内の「関数を呼び出す」コンポーネントのイベント処理を設定した場合に使用されます。ほとんどの場合、イベント処理は必要ありません。このパラメーターが `false` に設定されている場合、フローは出力変数とブランチコードを使用して続行します。

  • outputVariables: フローに出力する変数の名前と値。後続のステップでこれらの変数を参照できます。フローは `await` が `false` に設定されている場合にのみこれらの変数を使用します。

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

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

image

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

以下の手順に従って、フロー内の「関数を呼び出す」コンポーネントを設定します。この設定により、フローは Function Compute のユーザー定義関数を呼び出し、カスタムビジネスロジックを実装できます。

  1. キャンバス上の [関数を呼び出す] コンポーネントアイコンをクリックして、右側にコンポーネント設定パネルを表示します。

    image

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

  3. 右上隅の [保存] をクリックします。表示されるメッセージで、[保存] をクリックします。

    image

設定項目

親設定項目

子設定項目

説明

実行設定

非同期ウェイクアップ

このスイッチをオンにすると、トリガーとウェイクアップのための非同期呼び出しがサポートされます。

image

非同期待機タイムアウト

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

HTTP トリガー設定

URL

URL を設定します。Function Compute コンソールで、左側のナビゲーションウィンドウで [関数管理] > [関数リスト] を選択します。ターゲット関数を見つけて [関数詳細] ページに移動します。[トリガー] をクリックし、[パブリックエンドポイント] > [パブリックアクセスアドレス] を見つけます。

説明

これを初めて使用する場合は、[Authorize Us To Call 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

マルチブランチ設定

-

必要に応じて、関数に複数のブランチを設定します。ブランチコードは、関数が返すブランチコードに対応している必要があります。関数がフローで定義されていないブランチコードを返した場合、フローは Else ブランチに進みます。

image

応答設定

-

必要に応じて、関数の出力をフロー変数として設定します。変数名は、関数から返される変数名と一致する必要があります。

image