ハウツーガイド - CLIでのトリガーの実行

このページは機械翻訳により提供されています。翻訳内容と英語版に相違がある場合は、英語版が優先されます。

このセクションでは、Workato Gemを使用してトリガーを実行する方法について説明します。

前提条件

  • Workato SDK Gemをインストール済みで、実行できること。 詳細については、はじめにガイドを参照してください。
  • 少なくとも1つのトリガーを持つ動作中のコネクタがあること。 以下に示すサンプルを使用すること。
  • 動作する認証情報のセットがあること。 サンプルコネクタコードを使用している場合は、そのコネクタに適した認証情報があることを確認してください。

サンプルコネクタ - Chargebee

connector.rb内のコード。

ruby
{
  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内の認証情報。

yaml
api_key: valid_api_key
domain: valid_domain

TIP

暗号化されたsettings.yamlファイルを使用している場合、ファイルを編集または作成するにはworkato edit <PATH>を使用する必要があります。 暗号化されたファイルの編集の詳細については、workato editを参照してください。

SDK Gemを使用すると、アクション内の個々のlambda関数を呼び出し、アクションの各部分の動作をより細かく制御できます。 たとえば、execute lambda関数をinput_fields lambdaとは独立して実行できます。

input fieldsとoutput fields lambdaの実行

このガイドでは、output_fields lambdaについて説明します。 input_fields lambdaも同じ方法で実行できます。

TIP

場合によっては、サンプルのペイロードリクエストまたはレスポンスがあることがあります。 workato generate schema CLIコマンドを使用して、このペイロードを簡単にWorkatoスキーマに変換することもできます。 Workato CLI generate schemaの詳細をご確認ください。

output_fields lambdaは、ユーザーに表示する入力フィールドに対応するWorkatoスキーマを返すことが想定されています。 上記のケースでは、output_fields lambdaを呼び出すと、Gemは参照している下流のobject_definitionsまたはmethodsの評価を処理します。

shell
$ 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ファイルに保存したりすることもできます。

gemはコネクターを確認するときにobject_definitionsを参照できるため、object_definitions引数には何も渡す必要はありません。

poll lambdaの実行

poll lambdaは、poll lambdaの出力を表すハッシュを返すことが想定されています。 機能をテストするためにpoll lambdaを実行する方法は2つあります。

  1. ページネーションを使用したpoll lambdaの実行
  2. ページネーションを使用しないpoll lambdaの実行

ページネーションを使用したpoll lambdaの実行

これは.pollコマンドで行います。このコマンドは、can_poll_moreがtrueの場合にすべてのレコードをページ分割して処理するようSDK Gemに指示します。 以下の例では、.pollを指定し、6/09/2021since入力を指定していることがわかります。 その後、SDK Gemはポーリングメカニズムをシミュレートするために必要な数のリクエストを送信します。 コマンド内でinputを参照しており、それがfixturesフォルダに保存されているJSONファイルを指していることがわかります。 このファイルには、input_fieldsおよびconfig_fieldsからpoll lambdaに渡される実際の値を含める必要があります。

この例のfixtures/triggers/new_updated_object/customer_input_poll.jsonファイルには、次の内容が含まれています:

JSON
{
  "object": "customer",
  "since": "6/09/2021"
}
shell
$ 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では、executepoll、またはwebhook lambdaで受け取ると、config_fieldsは通常のinput_fieldsとマージされます。

ページネーションを使用しないpoll lambdaの実行

これは.poll_pageコマンドで行います。このコマンドは、can_poll_moreの値に関係なくpoll lambdaを1回だけ呼び出すようSDK Gemに指示します。 以下の例では、.pollを指定し、6/09/2021since入力を指定していることがわかります。 SDK Gemは単一のリクエストを送信し、最初のリクエストが完了すると実行を停止します。

shell
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では、executepoll、またはwebhook lambdaで受け取ると、config_fieldsは通常のinput_fieldsとマージされます。

最終更新日: