OAuth サポートでの外部接続の使用

  • リリースバージョン: Australia
  • 更新日 2026年03月12日
  • 所要時間:5分
  • 外部接続を使用すると、拡張によりサードパーティシステムからデータを取得して構成を拡張できます。セキュリティで OAuth が必要な場合は、クライアント認証情報を使用して OAuth ハンドシェイクを設定し、外部 API を認証してアクセスすることができます。このアプローチにより、構成中の価格の更新や属性の入力などのタスクのための安全なデータ交換が保証されます。

    拡張は、ルールエンジンの外部で実行され、 CPQの構成に影響を与えるスクリプトです。CPQ環境で有効にできる拡張には、次の 5 つのタイプがあります。

    • 構成/再構成時
    • BOM 応答時
    • 検証
    • Picklist 拡張の価格設定
    • 要求に応じて

    外部接続は、外部CPQからCPQ構成のデータを取得します。外部接続は拡張からのみ呼び出すことができます。

    外部接続でセキュリティ上の理由から OAuth ハンドシェイクが必要になることがあります。たとえば、価格設定やその他の属性など、サードパーティアプリケーションのデータをフィールドまたは拡張スクリプトに入力する必要がある場合があります。

    OAuth 外部接続を設定するには、次の手順を実行します。

    1. 外部接続を定義するには、[アドミン>ユーティリティ] > [外部接続] にアクセスします。

      外部接続のユーザーインターフェイス

    2. 認証トークンを定義します。
      • 外部接続がオープン API を呼び出す場合、認証トークンは必要ありません。
      • 外部接続が Salesforce の場合、 CPQ が認証トークンを処理します。
      • 認証がベアラートークンをサポートしている場合は、認証のために外部サービスによって提供されるベアラートークンを挿入します。
      • 認証に OAuth 認証が必要な場合:
        1. OAuth - クライアント認証情報フローを選択
        2. クライアント ID を挿入
        3. クライアントシークレットを挿入
        4. トークン URL フィールドを挿入

        必須の OAuth 入力:

        表 : 1. 必須の OAuth 入力
        フィールド タイプ 説明 検証
        クライアント ID (必須) varchar (無制限) 認証サーバーとの CPQ 用に作成されたクライアント ID を保持します 空ではない
        クライアントシークレット (必須) varchar (無制限)

        クライアントシークレットへのトークン化された参照を保持します

        実際の値は GCP シークレットストアに格納されますが、開発環境では値が直接保存されます

        空ではない
        トークン URL (必須) varchar (無制限)

        クライアント ID/シークレットをトークンと交換する認証サーバーの URL

        空ではない
        スコープ (オプション) varchar (無制限) オプション - トークン要求とともに送信されるスコープを指定するために使用できます なし
    3. 宛先サーバーに渡す必要があるパラメーターを [パス] の入力に指定します。

      パラメーター変数を使用して、パスを動的に定義できます。パスの例は /v4/latest/{{inputVariable}} です。ここで、 {{inputVariable}} はパラメーター変数として使用されるパスのセクションです。

      パスでパラメーター変数を使用している場合は、変数を定義するときに拡張スクリプトで encodeURIComponent() を使用します。例については、次のコードを参照してください。

      let inputs = {"inputVariable":encodeURIComponent(cfgRequest.baseCurrency.value)};
      let results = External.exchangeRatesAPI(inputs);
      var resultsMap = results.body.rates;

      1 行目は変数を定義し、外部接続 "inputVariable" からのパラメーター変数を参照します。必要なデータを格納する CPQ フィールドは encodeURIComponent でラップされ、inputVariable パスを完了します。

      次に、2 行目と 3 行目は、定義された入力を使用して外部接続 exchangeRatesAPI をトリガーします。必要なユースケースである場合は、コールを絞り込んで目的のデータを取得し、フィールドを設定するには、追加のスクリプトが必要です。

      タイムアウト制限が必要です。開始点として 500 ミリ秒をお勧めします。外部接続が定期的にこの制限を超える場合は、この値を増やすことができます。ただし、これによりエンドユーザー構成のパフォーマンスが低下する可能性があります。

      次の拡張スクリプトは外部接続を使用します。この部品表 (BOM) 拡張は、顧客データを使用して powerPricing API を照会します。サービスから取得された顧客固有のレート日を使用して、拡張によって既存の ProductList レコードの価格が調整されます。

      var powerInputs = {"membershipCode":cfg.eCMembershipCode, "icp":cfg.eCICPNumber}; let powerResponse = External.powerPricing(powerInputs);
      
      let dailyCharge = 0; let ratesArr = [];
      
      if(powerResponse.status == 200) {
      
      for(var record of powerResponse.body) { if(record.chargeType == cfg.expectedUsage) {
      
      dailyCharge = record.dailyCharges; ratesArr = record.rates;
      
      }
      
      }
      
      for(var prod of ProductList) { if(prod.id=="electricBillEstimator") {
      
      let addedPrice = dailyCharge * cfg.serviceDurationInDays; prod.price = addedPrice;
      
      }
      
      if(prod.id=="Standard Rate" || prod.id=="Low Rate") { prod.price = dailyCharge;
      
      }
      
      }
      
      for(var rateVal of ratesArr) {
      
      ProductList.id = "Additional Charge Per KWH: " + rateVal.name; ProductList.quantity = 1;
      ductList.bomType="Manufacturing"; ProductList.orderNumber = 2;
      
      ProductList.price = rateVal.rate; ProductList.notes = rateVal.measure;
      ductList.parentProduct="electricBillEstimator"; ProductList.next();
      
      }
      
      }
      
      return ProductList;