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

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

最終更新日:Jul 01, 2026

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

コンポーネント情報

アイコン

名前

调用函数@1x (1)

関数の呼び出し

手順の概要

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

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

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

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

前提条件

Function Compute サービスが有効になっていること。

1. 関数の作成と設定

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

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

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

      Tab 1 title

      Tab 1 Content

      Tab 2 title

      Tab 2 Content

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

2. 関数の設計

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

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

    説明

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

    import json
    from my import *
    # DO NOT CHANGE THIS ENTIRE FILE!
    # about wsgi: https://wsgi.readthedocs.io/en/latest/learn.html
    # handle wsgi request
    def handler(environ, start_response):
        # get 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)
        # get path_info
        path_info = environ['PATH_INFO']
        print(path_info)
        # load http trigger request to json
        # as flow node's input args
        body = json.loads(request_body.decode('utf-8'))
        # execute custom node process
        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
# impl: py spi handle_exec
def handle_exec(variables) -> dict:
    # translate fun request
    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
# impl: 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 値と一致している必要があります。関数がフローで定義されていないブランチコードを返す場合、フローはデフォルトで Else ブランチに従います。

レスポンス設定

-

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