Topik ini menjelaskan cara mengonfigurasi komponen Panggil Fungsi. Komponen ini memungkinkan Anda memanggil fungsi kustom dari Alibaba Cloud Function Compute dalam alur Anda untuk menerapkan logika bisnis kustom, seperti pemrosesan data, panggilan layanan remote, pengiriman pesan, dan penyimpanan data.
Informasi komponen
Ikon komponen | Nama komponen |
| Panggil Fungsi |
Ikhtisar
Untuk menggunakan komponen Panggil Fungsi, aktifkan terlebih dahulu layanan Alibaba Cloud Function Compute, lalu buat dan rancang fungsi di Konsol Function Compute. Prosesnya terdiri dari tiga langkah utama:
Buat dan konfigurasi fungsi: Buat dan konfigurasi fungsi di Function Compute.
Rancang fungsi: Rancang logika fungsi di Function Compute.
Konfigurasi komponen: Konfigurasi komponen Panggil Fungsi dalam alur Anda untuk memanggil fungsi kustom Anda.
Prasyarat
Layanan Function Compute telah diaktifkan.
1. Buat dan konfigurasi fungsi
Ikuti langkah-langkah berikut untuk membuat dan mengonfigurasi fungsi.
Buka Konsol Function Compute. Di panel navigasi sebelah kiri, pilih . Di bagian atas halaman, pilih wilayah yang sama dengan alur Anda.

Di halaman Functions, klik .
Konfigurasi utama: Untuk , pilih runtime yang sesuai. Contoh ini menggunakan fungsi dengan runtime .

Konfigurasikan parameter lain sesuai kebutuhan.
2. Rancang fungsi
Menggunakan templat fungsi di editor alur memungkinkan Anda fokus pada implementasi logika bisnis kustom dan cepat men-deploy fungsi alur sederhana yang dapat digunakan.
Di halaman Function Details, pada tab Code, ganti isi file
index.pydefault dengan konten templat berikut.CatatanKonten ini merupakan penanganan Web Server Gateway Interface (WSGI) yang kompatibel dengan logika pemanggilan alur. Konten ini tidak berisi logika bisnis kustom Anda. Jangan ubah fungsi atau isinya dalam file ini.

import json from my import * # DO NOT CHANGE THIS ENTIRE FILE! # handle wsgi request # about wsgi: https://wsgi.readthedocs.io/en/latest/learn.html 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 triggering request to json # as flow node input args body = json.loads(request_body.decode('utf-8')) # do 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')]Buat file skrip bernama
my.py. Salin kode berikut ke dalam filemy.py.
Templat berikut mengimplementasikan fitur yang menghasilkan bilangan acak dengan panjang tertentu berdasarkan variabel alur random_number_length. Lalu mengembalikan kode cabang (even atau odd) berdasarkan paritas bilangan tersebut dan mengeluarkan dua variabel (random dan type) ke alur.
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)
Terlepas dari logika kustom Anda, file my.py harus berisi dua fungsi berikut.
Kedua fungsi ini digunakan untuk pemanggilan alur dan penanganan event. Jika Anda telah mengonfigurasi penanganan event untuk komponen Function Compute di Chat Flow, Anda tidak perlu menangani event lagi di fungsi.
def handle_exec(variables) -> dictdef handle_awake(async_id, async_event_data, variables) -> dict
Terlepas dari logika kustom Anda, struktur pengembalian kedua fungsi bersifat tetap.
success: Menunjukkan apakah pemanggilan fungsi berhasil. Jika gagal, alur akan melemparkan error dan berhenti.
message: Pesan kustom.
await: Menunjukkan apakah perlu menunggu penanganan event selanjutnya. Ini berlaku jika Anda telah mengonfigurasi penanganan event untuk komponen Function Compute dalam alur. Dalam kebanyakan kasus, penanganan event tidak diperlukan. Jika diatur ke False, alur akan menggunakan variabel output dan kode cabang berikut untuk melanjutkan.
outputVariables: Nama dan nilai variabel yang akan dikirim ke alur. Anda dapat mereferensikan variabel ini di langkah-langkah selanjutnya dalam alur. Variabel ini hanya diadopsi oleh alur ketika await bernilai False.
toBranchCode: Kode cabang yang dikirim ke alur. Ini berlaku jika Anda telah mengonfigurasi beberapa cabang untuk komponen Function Compute. Alur menentukan langkah berikutnya berdasarkan kode cabang yang dikembalikan dan konfigurasi alur Anda di editor alur. Kode ini hanya diadopsi oleh alur ketika await bernilai False.
result = {
'success': True,
'message': 'OK',
'await': False,
'outputVariables': {
'myVarExample1': 'a',
'myVarExample2': 'b'
},
'toBranchCode': 'example'
}
Setelah mengubah file, klik Deploy.

3. Konfigurasi komponen
Ikuti langkah-langkah berikut untuk mengonfigurasi komponen Panggil Fungsi dalam alur Anda agar dapat memanggil fungsi kustom yang telah Anda buat di Function Compute dan menjalankan logika bisnis Anda.
Prasyarat
Buka halaman kanvas alur yang sudah ada atau buat alur baru.
Buka halaman kanvas alur yang sudah ada.
Di , klik Flow Name dari alur yang ingin Anda edit untuk membuka halaman orkestrasi alur.

Buat alur baru untuk membuka halaman kanvas. Untuk informasi lebih lanjut, lihat Buat alur.
Di kanvas, klik ikon komponen Panggil Fungsi untuk melihat panel konfigurasinya di sebelah kanan.

Konfigurasikan parameter komponen sesuai kebutuhan. Untuk informasi lebih lanjut, lihat Detail parameter.
Setelah dikonfigurasi, klik Save. Di kotak dialog yang muncul, klik Save.

Detail parameter
Item konfigurasi induk | Item Konfigurasi Anak | Deskripsi | Contoh |
Execution Settings | Asynchronous Awakening | Jika diaktifkan, mendukung pemanggilan asinkron untuk pemicuan dan pembangkitan. |
|
Asynchronous Wait Timeout | Tetapkan periode timeout untuk penantian asinkron, dalam detik. | ||
HTTP Trigger Settings | URL | URL fungsi. Untuk mendapatkan URL, buka Konsol Function Compute. Di panel navigasi sebelah kiri, pilih . Temukan fungsi target dan buka halaman Function Details-nya. Di tab Trigger, temukan Internet Endpoint. Catatan Pertama kali menggunakannya, klik Authorize ChatApp to Invoke Your Function.
|
|
Region | Wilayah: Segmen ketiga dari ARN dalam konfigurasi fungsi. Di Konsol Function Compute, di bilah navigasi kiri, klik . Temukan fungsi target dan buka halaman Function Details-nya. Lalu klik Configuration, dan di bagian Configuration, klik Copy ARN untuk mengambil ARN. Catatan Sebagai contoh, jika ARN yang disalin adalah maka Wilayahnya adalah |
| |
Timeout | Tetapkan periode timeout kustom. |
| |
Parameter Settings | - | Jika diperlukan, definisikan parameter input untuk fungsi. Nama parameter harus sesuai dengan yang ada di kode fungsi Anda. Nilainya dapat berupa konstanta atau variabel alur. |
|
Multi-branching Settings | - | Jika diperlukan, konfigurasikan cabang untuk output fungsi. Kode cabang harus sesuai dengan nilai `toBranchCode` yang dikembalikan oleh fungsi Anda. Jika fungsi mengembalikan kode cabang yang tidak didefinisikan dalam alur, alur akan melanjutkan ke cabang Else. |
|
Response Settings | - | Jika diperlukan, petakan output fungsi ke variabel alur. Nama variabel yang didefinisikan di sini harus sesuai dengan kunci dalam kamus `outputVariables` yang dikembalikan oleh fungsi Anda. |
|







