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

Chat App Message Service:関数呼び出し

最終更新日:Jul 31, 2026

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

コンポーネント情報

アイコン

名前

[関数を呼び出す] ダイアログボックスで、[関数の入力] タブを選択し、コードエディタに JSON 形式の入力パラメーター (たとえば、{"key": "value"}) を入力してから、[関数を呼び出す] をクリックします。

関数呼び出し

手順の概要

[関数呼び出し] コンポーネントを使用するには、まず Function Compute サービスを有効化し、次に関数を作成する必要があります。

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

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

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

前提条件

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

1. 関数の作成と設定

  1. Function Compute コンソールにログインします。ページ上部でリージョンを選択します。フローと同じリージョン (例:シンガポール) を選択することを推奨します。左側のナビゲーションウィンドウで、関数管理 > 関数リスト を選択し、[関数] ページに移動します。

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

    1. 主な構成: コード セクションで、[ランタイム] には、適切なランタイムタイプを選択します。このトピックでは、組み込み実行時 > Python > Python 3.10 を例に説明します。

      タブ 1 のタイトル

      タブ 1 のコンテンツ

      タブ 2 のタイトル

      タブ 2 のコンテンツ

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

2. 関数の設計

提供されている関数テンプレートを使用すると、ビジネスロジックに集中し、迅速に関数をデプロイできます。

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

    説明

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

    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 = 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 ブランチに分岐させ、randomtype の 2 つの変数を出力します。

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

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

  • success:関数呼び出しが成功したかどうかを示します。false に設定すると、フローはエラーで停止します。

  • message:追加情報を提供するためのカスタムメッセージです。

  • await:フローが後続のイベント処理を待機する必要があるかどうかを示します。false に設定すると、フローは返された outputVariablestoBranchCode を使用して直ちに続行します。

  • outputVariables:フローに出力変数として渡されるキーと値のペアの辞書です。後続のコンポーネントでこれらの変数を参照できます。この辞書は awaitfalse の場合にのみ使用されます。

  • toBranchCode:複数分岐設定に基づいて、フローが次にどの分岐に進むかを決定するコードです。このコードは awaitfalse の場合にのみ使用されます。

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

3. コンポーネント設定

次の手順に従って、フロー内の [関数呼び出し] コンポーネントを設定します。

  1. 前提条件

    このコンポーネントを設定するには、既存のフローを使用するか、新しいフローを作成してフローキャンバスにアクセスします。

    • 既存のフローのキャンバスに移動

      フローエディター > フロー管理 > フロー名

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

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

    フローエディターで、[関数呼び出し] (FunctionComputeNode) ノードを選択します。右側に設定パネルが開きます。利用可能な変数には、incomingMessagewabaIdwabaPhoneNumbercustomerPhoneNumbercustomerName があります。[HTTP トリガー設定] セクションで、[URL][リージョン] (必須) を入力し、[タイムアウト (秒)] を設定します。[ランタイム設定] セクションでは、Webhook または API を使用してノードをトリガーし、必要に応じて非同期トリガースイッチを有効にできます。設定が完了したら、[保存] をクリックします。

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

  4. 設定が完了したら、保存 をクリックします。表示されるダイアログボックスで、保存 をクリックします。

パラメーター

セクション

パラメーター

説明

実行設定

非同期呼び起こし

有効にすると、コンポーネントは非同期で実行され、フローを一時停止し、後で「呼び起こし」て実行を再開できます。

非同期待機タイムアウト

非同期待機のタイムアウト期間 (秒)。

HTTP トリガー設定

URL

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

説明

関数の URL を入力した後、関数を呼び出す権限を付与してください。 をクリックして、1 回限りの権限付与を完了します。

リージョン

関数がデプロイされているリージョン。これは、関数の ARN の 3 番目のセグメントに対応します。

ARN を確認するには、[Function Compute コンソール]に移動します。 左側のナビゲーションウィンドウで、関数管理 > 関数リストを選択します。 目的の関数を見つけ、その関数の詳細ページに移動します。 設定タブをクリックし、次にARN をコピーするをクリックします。

説明

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

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

タイムアウト

HTTP リクエストのタイムアウト (秒)。

パラメーター設定

-

必要に応じて、関数の入力パラメーターを設定します。パラメーター名は、関数が受け取ることを想定しているパラメーターと一致する必要があります。値には定数またはフロー変数を指定できます。

複数分岐設定

-

必要に応じて、関数の出力に対して複数の分岐を設定します。分岐コードは、関数から返される toBranchCode の値と一致する必要があります。関数がフローで定義されていない分岐コードを返した場合、フローはデフォルトで [その他] の分岐に進みます。

応答設定

-

必要に応じて、関数の出力をフロー変数にマップします。変数名は、関数から返される outputVariables 辞書のキーと一致する必要があります。