OAuth 지원으로 외부 연결 사용

  • 릴리스 버전: Australia
  • 업데이트 날짜 2026년 03월 12일
  • 소요 시간: 5분
  • 외부 연결을 사용하면 보강을 통해 타사 시스템에서 데이터를 검색하여 구성을 개선할 수 있습니다. 보안에 OAuth가 필요한 경우 클라이언트 자격 증명을 사용하여 OAuth 핸드셰이크를 설정하고 외부 API에 액세스할 수 있습니다. 이 접근 방식은 구성 중에 가격 업데이트 또는 속성 채우기와 같은 작업에 대한 안전한 데이터 교환을 보장합니다.

    보강은 규칙 엔진 외부에서 실행되며 의 구성에 CPQ영향을 주는 스크립트입니다. 환경에서 사용할 CPQ 수 있는 5가지 유형의 보강이 있습니다.

    • 구성/재구성 시
    • BOM 응답 시
    • 확인
    • 선택 목록 확장 가격 책정
    • 요청 시

    외부 연결은 외부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;