# How to ガイド - CLI におけるトリガーの実行
ここでは、Workato Gem を使用してトリガーを実行する方法について説明します。
# 前提条件
- Workato SDK Gem がインストールされており、実行可能であること。詳細については、入門ガイドを参照してください。
- 少なくとも1つのトリガーを備えた有効なコネクターがあること。ここでは以下のサンプルを使用します。
- 有効な資格情報があること。サンプルコネクターのコードを使用する場合は、そのコネクターの適切な資格情報があることを確認してください。
# サンプルコネクター - Chargebee
connector.rb
のコードを以下に示します。
{
title: 'Chargebee-demo',
connection: {
fields: [
{
name: 'api_key',
control_type: 'password',
hint: 'You can find your API key final change3' \
"under 'Settings'=>'Configure Chargebee'=>'API Keys and Webhooks'" \
" in Chargebee's web console.",
label: 'Your API Key'
},
{
name: 'domain',
control_type: 'subdomain',
url: 'chargebee.com'
}
],
authorization: {
type: 'basic_auth',
apply: lambda do |connection|
user(connection['api_key'])
end
},
base_uri: lambda do |connection|
"https://#{connection['domain']}.chargebee.com"
end
},
test: lambda do |_connection|
get('/api/v2/plans', limit: 1)
end,
triggers: {
new_updated_object: {
description: lambda do |_input, picklist_label|
"New/updated <span class='provider'>#{picklist_label['object'] || 'object'}</span> in <span class='provider'>Chargebee</span>"
end,
config_fields: [
{
name: 'object',
control_type: 'select',
pick_list: 'objects',
optional: false
}
],
input_fields: lambda do
[
{
name: 'since',
type: :date_time,
optional: true,
sticky: true
}
]
end,
poll: lambda do |_connection, input, closure|
page_size = 100
closure = {} if closure.blank?
closure['updated_since'] = (closure['updated_since'] || input['since'] || 1.hour.ago).to_time.utc.to_i
params = {
"sort_by[asc]": 'updated_at',
limit: page_size,
"updated_at[after]": closure['updated_since']
}
params['offset'] = closure['offset']
response = get("/api/v2/#{input['object'].pluralize}", params)
if response['next_offset'].present?
closure['offset'] = response['next_offset']
else
closure['offset'] = nil
unless response['list'].size == 0
closure['updated_since'] =
response['list'].last[input['object']]['updated_at']
end
end
{
events: response['list'],
next_poll: closure,
can_poll_more: response['next_offset'].present?
}
end,
dedup: lambda do |event|
if event['subscription'].present?
"#{event['subscription']['id']}@#{event['subscription']['updated_at']}"
else
"#{event['customer']['id']}@#{event['customer']['updated_at']}"
end
end,
output_fields: lambda do |object_definitions|
object_definitions['new_updated_object_output']
end
},
},
}
settings.yaml.enc
に格納されている資格情報です。
api_key: valid_api_key
domain: valid_domain
TIP
暗号化された settings.yaml ファイルを使用する場合は、workato edit <PATH>
を使用してファイルを編集または作成する必要があります。詳細については、こちらを参照してください。
SDK Gem を使用すると、アクションの lambda 関数を個別に呼び出して、各部の動作をより詳細に制御することができます。たとえば、input_fields
lambda とは独立して execute
lambda 関数を実行することができます。
# input_fields lambda と output_fields lambda の実行
このガイドでは、output_fields lambda を取り上げますが、input_fields lambda も同じように実行することができます。
TIP
サンプルのペイロードのリクエストやレスポンスを入手できることがあります。workato generate schema
CLI コマンドを使用して、このペイロードを簡単に Workato スキーマに変換することもできます。Workato CLI のスキーマ生成の詳細については、こちらを参照してください。
output_fields lambda は、ユーザーに表示すべき入力項目 (input_fields) に対応する Workato のスキーマを返すことが予期されています。上記コードでは、output_fields
lambda を呼び出すと、参照したダウンストリームの object_definitions
または methods
の評価を Gem が処理します。
$ workato exec triggers.new_updated_object.output_fields --config-fields='fixtures/triggers/new_updated_object/customer_config.json'
[
{
"name": "customer",
"type": "object",
"properties": [
{
"control_type": "text",
"label": "ID",
"type": "string",
"name": "id"
},
# More Schema here
]
}
]
TIP
ここでは他のオプションも使うことができます。たとえば、--verbose
を指定すると output_fields
の構築時に送信された HTTP リクエストの詳細なログが表示され、--output
を指定すると関数の出力が JSON ファイルに保存されます。
object_definitions 引数には何も渡す必要はありません。これは、Gem がコネクターを検査する際にその情報を参照できるからです。
# poll lambda の実行
poll lambda は、poll lambda の出力を表すハッシュを返すことが予期されています。poll lambda を実行して機能をテストする方法は2つあります。
# ページネーションありの poll lambda の実行
これには .poll
コマンドを使用します。このコマンドは、can_poll_more
が true であればすべてのレコードをページネーションするよう SDK Gem に指示します。以下の例では、.poll
を指定し、since
の入力に 6/09/2021
を指定していることがわかります。これにより SDK Gem は、ポーリングメカニズムのシミュレートに必要な数のリクエストを送信します。fixtures
フォルダーに格納される JSON ファイルを指すコマンドで input
を参照していることがわかります。このファイルには、input_fields
と config_fields
から poll
lambda に渡される実際の値が格納されているはずです。
この場合、ファイル fixtures/triggers/new_updated_object/customer_input_poll.json
の内容は以下のとおりです。
{
"object": "customer",
"since": "6/09/2021"
}
$ workato exec triggers.new_updated_object.poll --input='fixtures/triggers/new_updated_object/customer_input_poll.json' --verbose
SETTINGS
{
"api_key": "valid_api_key",
"domain": "valid_domain"
}
INPUT
{
"object": "customer",
"since": "6/09/2021"
}
RestClient.get "https://live_Zbaoo7hGqvi3cqrza8WiXxQa8kBPAPQF@empressporridge.chargebee.com/api/v2/customers?limit=10&offset=&sort_by%5Basc%5D=updated_at&updated_at%5Bafter%5D=1630857600", "Accept"=>"application/json", "Accept-Encoding"=>"gzip, deflate", "User-Agent"=>"rest-client/2.0.2 (darwin19.6.0 x86_64) ruby/2.4.10p364"
# => 200 OK | application/json 2608 bytes
RestClient.get "https://live_Zbaoo7hGqvi3cqrza8WiXxQa8kBPAPQF@empressporridge.chargebee.com/api/v2/customers?limit=10&offset=%5B%221630857607410%22%2C%2240736845%22%5D&sort_by%5Basc%5D=updated_at&updated_at%5Bafter%5D=1630857600", "Accept"=>"application/json", "Accept-Encoding"=>"gzip, deflate", "User-Agent"=>"rest-client/2.0.2 (darwin19.6.0 x86_64) ruby/2.4.10p364"
# => 200 OK | application/json 1800 bytes
Progress: |=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---|
OUTPUT
{
"events": [
{
"customer": {
"id": "abc",
"first_name": "John",
"last_name": "Doe",
"email": "[email protected]",
"phone": "+100",
"auto_collection": "on",
"net_term_days": 0,
"allow_direct_debit": false,
"created_at": 1629814951,
"taxability": "taxable",
"updated_at": 1630857613,
"locale": "en-SG",
"pii_cleared": "active",
"resource_version": 1630857613348,
"deleted": false,
"object": "customer",
"card_status": "valid",
"promotional_credits": 0,
"refundable_credits": 0,
"excess_payments": 0,
"unbilled_charges": 0,
"preferred_currency_code": "SGD",
},
},
# More customers here
],
"can_poll_more": false,
"next_poll": {
"updated_since": 1630857613,
"offset": null
}
}
--verbose
を使用すると、SDK Gem が、API リクエストやレスポンスなど、より多くの情報を出力することに注意してください。
TIP
--output
などのオプションを使用して、関数の出力を JSON ファイルに保存することもできます。
config_field
(object
) が入力 JSON で渡されていることがわかります。Workato では、config_fields が execute
、poll
、または webhook
lambda で受信されると、通常の input_fields
とマージされます。
# ページネーションなしの poll lambda の実行
これには .poll_page
コマンドを使用します。このコマンドは、can_poll_more
の値にかかわらず、poll
lambda を一度だけ呼び出すよう SDK Gem に指示します。以下の例では、.poll
を指定し、since
の入力に 6/09/2021
を指定していることがわかります。SDK Gem はリクエストを1つだけ送信し、最初のリクエストが完了すると実行を停止します。
workato exec triggers.new_updated_object.poll_page --input='fixtures/triggers/new_updated_object/customer_input_poll.json' --verbose
SETTINGS
{
"api_key": "valid_api_key",
"domain": "valid_domain"
}
INPUT
{
"object": "customer",
"since": "6/09/2021"
}
RestClient.get "https://live_Zbaoo7hGqvi3cqrza8WiXxQa8kBPAPQF@empressporridge.chargebee.com/api/v2/customers?limit=10&offset=&sort_by%5Basc%5D=updated_at&updated_at%5Bafter%5D=1630857600", "Accept"=>"application/json", "Accept-Encoding"=>"gzip, deflate", "User-Agent"=>"rest-client/2.0.2 (darwin19.6.0 x86_64) ruby/2.4.10p364"
# => 200 OK | application/json 2608 bytes
Progress: |=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---|
OUTPUT
{
"events": [
{
"customer": {
"id": "abc",
"first_name": "John",
"last_name": "Doe",
"email": "[email protected]",
"phone": "+100",
"auto_collection": "on",
"net_term_days": 0,
"allow_direct_debit": false,
"created_at": 1629814951,
"taxability": "taxable",
"updated_at": 1630857613,
"locale": "en-SG",
"pii_cleared": "active",
"resource_version": 1630857613348,
"deleted": false,
"object": "customer",
"card_status": "valid",
"promotional_credits": 0,
"refundable_credits": 0,
"excess_payments": 0,
"unbilled_charges": 0,
"preferred_currency_code": "SGD",
},
},
# More customers here
],
"next_poll": {
"updated_since": 1630857600,
"offset": "[\"1630857607410\",\"40736845\"]"
},
"can_poll_more": true
}
--verbose
を使用すると、SDK Gem が、API リクエストやレスポンスなど、より多くの情報を出力することに注意してください。
TIP
--output
などのオプションを使用して、関数の出力を JSON ファイルに保存することもできます。
config_field
(object
) が入力 JSON で渡されていることがわかります。Workato では、config_fields が execute
、poll
、または webhook
lambda で受信されると、通常の input_fields
とマージされます。
Last updated: 2024/7/10 18:18:20