Skip to main content

REST 요청으로 예측 가져오기

학습 목표

이 유닛을 완료하면 다음을 수행할 수 있습니다.

  • REST 클라이언트에서 Einstein 예측 서비스에 액세스하는 데 필요한 사항을 설명할 수 있습니다.
  • REST API 요청에 대한 인증을 관리하기 위해 연결된 앱을 만들 수 있습니다.
  • REST 클라이언트를 사용하여 Einstein 예측 서비스와 상호 작용할 수 있습니다.

소개

이제 모델이 Salesforce에 배포되었으므로 Einstein 예측 서비스와 즐겨찾는 REST 클라이언트를 사용하여 예측 값을 얻을 수 있습니다.

시작하기 전에

이전 기기에서 가입한 CRM Analytics 지원 DE 조직에는 이 유닛의 단계를 완료하는 데 필요한 모든 것을 갖추고 있습니다. 

그러나 이 모듈을 완료한 후 REST 클라이언트를 사용하여 Einstein 예측 서비스와 상호 작용하려면 다음 전제 조건이 필요합니다.

  • CRM Analytics Plus 라이선스 또는 Einstein Predictions 라이센스. 두 라이선스는 추가 비용 없이 사용할 수 있습니다.
  • Einstein Discovery 추천 보기 시스템 권한이 있는 사용자 계정
  • 요청을 제출하고 결과를 처리하기 위한 임의의 REST 클라이언트. 이 유닛에서는 Postman 앱(데스크톱 버전)에 대한 지침 및 예제 스크린샷을 사용합니다. 그러나 Einstein 예측 서비스 리소스와 상호 작용하기 위한 작업은 대부분의 REST 클라이언트에서 유사하므로 다른 도구를 사용하고 비슷한 단계를 따라도 좋습니다. Postman 데스크톱 앱을 다운로드하려면 www.postman.com으로 이동하여 Postman 앱 다운로드 페이지로 이동합니다.

    참고: 이 유닛의 지침은 Postman 데스크톱 버전으로 테스트되었습니다. Salesforce에 대한 특별 설정 지침이 필요한 Postman Web은 이 Trailhead 모듈과 함께 사용하도록 승인되지 않았습니다.
  • REST 클라이언트의 REST API 요청을 승인하는 Salesforce의 관리형 앱에 액세스합니다. Salesforce에서 연결된 앱을 만들려면 사용자 계정에 Manage Connected App(연결된 앱 관리) 권한이 있어야 합니다.

참고: 조직에서 Salesforce 관리자가 관리 앱을 만들 수도 있습니다.

1단계: Salesforce에서 연결된 애플리케이션 만들기

REST 클라이언트가 Salesforce org에 안전하게 연결할 수 있도록 연결된 앱을 만드는 것으로 시작합니다. 자세한 내용은 연결된 앱 기본사항 Trailhead 모듈을 참조합니다.  

  1. Setup(설정)에서 Quick Find box(빠른 찾기 상자)에 apps(앱)를 입력한 다음 App Manager(앱 관리자)를 클릭합니다.
    '앱' 검색 문자열 및 앱 관리자를 보여주는 설정의 빠른 찾기 상자
  2. Lightning Experience 앱 관리자에서 New Connected App(새로 연결된 앱)을 클릭합니다. 그런 다음 New Connected App(새로운 연결된 앱) 페이지에서 다음 기본 정보를 지정합니다.
    앱 이름, API 이름 및 연락처 이메일에 대한 새로운 연결된 앱 프롬프트를 표시하는 Lightning Experience 앱 관리자 화면
    설정 설명
    연결된 앱 이름 알기 쉽고 구별하기 쉬운 이름을 지정합니다.
    API 이름 Salesforce API 이름 구조를 사용합니다.
    이메일 사용자 자격 증명과 연결된 이메일 주소를 지정합니다.
  3. 다음으로 Enable OAuth Settings(OAuth 설정 활성화) 확인란을 선택하고 다음 설정을 지정합니다.
    콜백 URL과 선택된 OAuth 범위를 보여주는 Lightning Experience 앱 관리자 화면
    설정 설명
    콜백 URL 이 예제에서는 https://login.salesforce.com/services/oath2/callback을 사용합니다. Salesforce org와 관련된 URL을 사용할 수 있습니다(예: https://test.salesforce.com/services/oauth2/callback).
    선택된 OAuth 범위 다음 OAuth 범위를 추가합니다:
    • 분석 REST API 리소스 액세스(WAVE_API)
    • API(api)를 통해 사용자 데이터 관리
  4. 설정을 저장한 다음 Continue(계속)를 클릭하여 연결된 앱을 만듭니다.
  5. Manage Consumer Details(소비자 세부 정보 관리)를 클릭합니다.
    Manage Consumer Details(소비자 세부 정보 관리) 버튼
  6. 프롬프트가 표시되면 이메일로 전송된 인증 정보를 제공하고 Verify(확인)를 클릭합니다.
    본인 인증 프롬프트

연결된 앱을 만들 때 Salesforce는 Consumer Key(소비자 키)Customer Secret(소비자 시크릿)이라는 두 가지 자격 증명을 만듭니다.

소비자 키와 소비자 시크릿을 보여주는 Lightning Experience 앱 관리자 화면이 자격 증명은 나중에 이 연결된 앱을 통해 REST 클라이언트에서 Salesforce로 연결할 때 필요한 자격 증명입니다.

  • 소비자 키는 클라이언트 ID 역할을 합니다.
  • 소비자 시크릿은 클라이언트 시크릿으로 간주됩니다.

이 유닛에서 나중에 소비자 키 와 소비자 시크릿을 복사할 수 있도록 이 창을 열어 둡니다.

2단계: REST 클라이언트에서 인증 설정하기

방금 만든 Connected App 자격 증명을 사용하여 REST 클라이언트에서 인증을 설정하겠습니다. Einstein 예측 서비스에 액세스하려면 인증이 필요합니다.
참고: 다음 지침은 Postman 클라이언트(데스크톱 앱)를 예로 사용하지만 비슷한 기능을 가진 REST API 클라이언트를 사용할 수 있습니다.

필요한 경우 Postman에서 새 workspace를 만듭니다. 그런 다음 설명적 이름을 사용하여 새 컬렉션(선택 사항이지만 권장함)을 만듭니다. 컬렉션은 모든 Einstein 예측 서비스 요청을 한곳에 저장합니다.

Postman 데스크톱 스크린 - myEinsteinPredictionServiceRequests라는 이름의 새 컬렉션

  1. 목록에서 컬렉션을 선택하고 Add request(요청 추가)를 클릭한 다음 이 요청의 이름을 Authenticate(인증)로 변경합니다.
    Postman 데스크톱 화면-Authenticate이라는 이름의 새로운 요청
  2. 그런 다음 Authenticate 요청에 대해 다음 매개변수를 설정합니다.
    Postman 데스크톱 화면-Authenticate 요청 설정
    설정 설명
    요청 유형 POST로 변경합니다.
    요청 URL https://login.salesforce.com/services/oauth2/token을 지정합니다.

  3. Body(본문) 탭을 클릭하고 Body Type(본문 유형)을 x-www-form-urlencoded로 변경하고 나서 키와 값을 다음과 같이 추가합니다.
    Postman 데스크톱 화면-요청 본문 설정 완료
    grant_type password로 지정합니다.
    client_id 이전에 만든 Connected App(연결된 앱)에서 Consumer Key(소비자 키)를 복사하여 붙여 넣습니다.
    client_secret 이전에 만든 Connected App(연결된 앱)에서 Consumer Secret(소비자 시크릿)을 복사하여 붙여 넣습니다.
    username DE Trailhead 조직과 연결된 계정의 사용자 이름을 지정합니다.
    password DE Trailhead 조직과 연결된 계정의 암호를 지정합니다.

  4. 요청을 저장한 다음 Send(전송)를 클릭합니다. 설정을 올바르게 구성한 경우 다음 예와 유사한 응답이 표시되어야 합니다(보안 정보는 의도적으로 가려져 있습니다).
    Postman 데스크톱 화면-인증 요청에 대한 응답
  5. 마지막으로 다음 단계를 완료합니다.
    • access_token 문자열을 복사하여 나중에 사용할 수 있도록 어딘가에 붙여 넣습니다. Einstein 예측 서비스에 대한 API 요청을 실행하려면 해당 문자열이 필요합니다.
    • Instance_URL 문자열을 복사하여 나중에 사용할 수 있도록 다른 곳에 붙여넣습니다. 후속 요청에 필요합니다.

이제 REST API 요청을 Einstein 예측 서비스에 생성하고 제출할 준비가 되었습니다!

3단계: 사용 가능한 예측 정의 가져오기

조직에서 사용할 수 있는 모든 예측 정의 목록을 가져오는 것으로 시작하겠습니다.

  1. 새 GET 요청을 생성하고 이름을 Get Prediction Definitions(예측 정의 가져오기)로 지정합니다. 다음 설정을 사용하여 요청을 설정합니다.
    Postman 데스크톱 화면-요청 구성 시작
    설정 설명
    요청 유형 GET
    요청 URL instance_URL/services/data/v55.0/smartdatadiscovery/predictionDefinitions를 지정합니다. 여기서 instance_URL은 인증 요청에서 반환된 것입니다.

  2. Authorization(인증) 탭을 클릭하고 다음 설정을 구성합니다.
    Postman 데스크톱 화면-요청에 대한 인증 설정
    설정 설명
    인증 유형 OAuth2.0을 선택합니다.
    액세스 토큰 설정 이전 단계에서 저장한 액세스 토큰을 붙여 넣습니다.

  3. 요청을 저장한 다음 Send(전송)를 클릭합니다. 요청 설정을 올바르게 구성한 경우 다음 예제와 유사한 응답을 볼 수 있습니다.
{
  "nextPageUrl": null,
  "predictionDefinitions": [
    {
      "countOfActiveModels": 1,
      "countOfModels": 1,
      "createdBy": {
        "id": "your-account-id",
        "name": "your-name",
        "profilePhotoUrl": "https://xxx-instance-url-xxx/profilephoto/005/T"
      },
      "createdDate": "2022-06-09T21:23:54.000Z",
      "id": "1ORB00000008RSROA2",
      "label": "Sales_per_Customer",
      "lastModifiedBy": {
        "id": "your-account-id",
        "name": "your-name",
        "profilePhotoUrl": "https://xxx-instance-url-xxx/profilephoto/005/T"
      },
      "lastModifiedDate": "2022-06-09T21:23:54.000Z",
      "modelsUrl": "/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2/models",
      "name": "Sales_per_Customer",
      "outcome": {
        "goal": "Maximize",
        "label": "Sales per Customer",
        "name": "Sales_per_Customer"
      },
      "predictionType": "Regression",
      "status": "Enabled",
      "url": "/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2"
     }
  ],
  "totalSize": 1,
  "url": "/services/data/v55.0/smartdatadiscovery/predictiondefinitions?pageSize=25"
}

4단계: 예측 정의 메타데이터 가져오기

3단계의 응답에는 이전 유닛에서 만든 예측 정의에 대한 메타데이터를 검색하기 위한 URL이 포함됩니다. 응답은 다음 예시와 비슷하게 표시되어야 합니다.

/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2

예측 ID는 이전에 모델 관리자에서 본 예측 ID와 일치합니다. 

  1. 새 GET 요청을 추가하고 Get Prediction Definition(예측 정의 가져오기)이라는 이름을 지정하고 URL을 다음 요청 문자열로 변경합니다. instance_Url을 꼭 포함하세요.

    instance_Url/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2
  2. 또한 이전과 같이 인증 설정(인증 유형 및 액세스 토큰)을 구성합니다. Send(전송)를 클릭하고 응답을 검토합니다. 응답은 다음 예시와 비슷하게 표시되어야 합니다.
    {
      "countOfActiveModels": 1,
      "countOfModels": 1,
      "createdBy": {
        "id": "your-account-id",
        "name": "your-name",
        "profilePhotoUrl": "https://xxx-instance-url-xxx/profilephoto/005/T"
      },
      "createdDate": "2022-06-09T21:23:54.000Z",
      "id": "1ORB00000008RSROA2",
      "label": "Sales_per_Customer",
      "lastModifiedBy": {
        "id": "your-account-id",
        "name": "your-name",
        "profilePhotoUrl": "https://xxx-instance-url-xxx/profilephoto/005/T"
      },
      "lastModifiedDate": "2022-06-09T21:23:54.000Z",
      "modelsUrl": "/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2/models",
      "name": "Sales_per_Customer",
      "outcome": {
        "goal": "Maximize",
        "label": "Sales per Customer",
        "name": "Sales_per_Customer"
      },
      "predictionType": "Regression",
      "status": "Enabled",
      "url": "/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2"
    }

5단계: 예측과 관련된 모델 가져오기

4단계의 응답에는 이전 유닛에서 배포한 모델의 메타데이터를 검색하기 위한 URL이 포함됩니다. 응답은 다음 예시와 비슷하게 표시되어야 합니다.

/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2/models
  1. 새로운 GET 요청을 추가하고 Get Models(모델 가져오기)로 이름을 지정하고 URL을 다음 요청 문자열로 변경합니다. instance_Url을 꼭 포함하세요.

    instance_Url/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2/models
  2. 또한 이전과 같이 인증 설정(인증 유형 및 액세스 토큰)을 구성합니다. Send(전송)를 클릭하고 응답을 검토합니다. 응답은 다음 예시와 비슷하게 표시되어야 합니다.

    {
      "models": [
        {
          "createdBy": {
            "id": "your-account-id",
            "name": "your-name",
            "profilePhotoUrl": "https://xxx-instance-url-xxx/profilephoto/005/T"
          },
          "createdDate": "2022-06-09T21:23:55.000Z",
          "fieldMappingList": [
            {
              "modelField": {
                "label": "Quantity",
                "name": "Quantity",
                "type": "Number"
              }
            },
            {
              "modelField": {
                "label": "Sub-Category",
                "name": "Sub_Category",
                "type": "Text"
              }
            },
          {
            "modelField": {
              "label": "Category",
              "name": "Category",
              "type": "Text"
            }
          },
          {
            "modelField": {
              "label": "Sales",
              "name": "Sales",
              "type": "Number"
            }
          }, 
          {
            "modelField": {
              "label": "Profit per Order",
              "name": "Profit_per_Order",
              "type": "Number"
              }
            }
          ],
          "filters": [],
          "historyUrl": "/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2/models/1ORB00000008RSROA2/histories",
          "id": "1Ot4W000000XezqSAC",
          "isRefreshEnabled": false,
          "label": "Sales_per_Customer",
          "lastModifiedBy": {
            "id": "your-account-id",
            "name": "your-name",
            "profilePhotoUrl": "https://xxx-instance-url-xxx/profilephoto/005/T"
          },
          "lastModifiedDate": "2020-08-31T21:23:55.000Z",
          "model": {
             "id": "1OT4W000000LejUWAS"
          },
          "modelType": "Regression",
          "name": "Sales_per_Customer",
          "predictionDefinitionUrl": "/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2",
          "prescribableFields": [
            {
              "customDefinitions": [],
              "field": {
                "label": "Quantity",
                "name": "Quantity",
                "type": "Number"
              }
            }
          ],
          "sortOrder": 0,
          "status": "Enabled",
          "url": "/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2/models/1Ot4W000000XezqSAC"
        }
      ],
      "totalSize": 1,
      "url": "/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2/models"
    }

모델의 필드 목록을 제공하는 fieldMappingList를 확인합니다. 다음 단계에서 해당 항목을 사용해보겠습니다.

6단계: 예측 가져오기

Einstein 예측 서비스와의 상호 작용을 연습했으므로 몇 가지 예측을 가져오겠습니다.

  1. 새 요청을 추가하고 이름을 Get Predictions(예측 가져오기)로 지정하고 나서 다음 매개변수를 구성합니다.
    Postman Desktop 화면 - 예측을 위한 요청 설정 구성
    설정 설명
    요청 유형 POST로 변경합니다.
    요청 URL 인증 요청에서 instance_URL이 반환되는 instance_URL/services/data/v55.0/smartdatadiscovery/predict를 지정합니다.


  2. 이전과 같이 인증 설정(인증 유형 및 액세스 토큰)을 구성합니다. Add Authorization Request To(권한 부여 요청 추가)하려면 Request Headers(요청 헤더)를 선택해야 합니다.
  3. POST 호출이므로 요청 본문을 지정해야 합니다. Body(본문) 탭을 클릭하고 다음 옵션을 선택합니다.

    설정 설명
    본문 유형 RAW를 선택합니다.
    본문 유형 요청 JSON을 선택합니다.

  4. JSON 형식으로 요청 본문을 추가합니다.
{  "predictionDefinition": "yourPredictionDefinitionId",
   "type": "RawData",
   "columnNames": ["Quantity","Category","Sub_Category","Sales","Profit_per_Order"],
   "rows": [
      ["2","Furniture","Chairs","300","10"]
   ]
} 
  1. yourPredictionDefinitionId를 이전에 조회한 예측 ID로 대체합니다. 이 요청 본문에 대한 몇 가지 확인 사항입니다.

    요소 확인 사항
    "type": "RawData" RawData 유형을 사용하면 예측 요청에서 원시 입력 값을 직접 지정할 수 있습니다. 예측이 Salesforce 개체와 연결될 때 사용할 수 있는 다른 두 가지 유형인 RecordsRecordOverrides가 있습니다. 그러나 Salesforce 예측은 Salesforce 개체와 관련이 없습니다.
    "columnNames" 모델을 입력 변수로 나타내는 쉼표로 구분된 이름 목록입니다. 이는 5단계의 응답에서 반환된 fieldMappingList"modelField":"Name” 요소에 해당합니다.
    "rows" 모델에 전송할 텍스트 값의 쉼표로 구분된 목록입니다. 모델이 예측을 도출하는 데 사용하는 입력 변수입니다.

  2. 요청을 저장하고 Send(전송)를 클릭한 후 응답을 검토합니다. 응답은 다음 예시와 비슷하게 표시되어야 합니다.
{
  "predictionDefinition": "1ORB00000008RSR",
  "predictions": [
      {
        "model": {
          "id": "1OtB00000008S34KAE"
         },
      "prediction": {
        "middleValues": [],
        "total": 88.68177540182317
      },
      "prescriptions": [],
      "status": "Success"
    }
  ],
  "settings": {
    "maxMiddleValues": 0,
    "maxPrescriptions": 0,
    "prescriptionImpactPercentage": 0
  }
}

"prediction":"total” 값은 모델이 입력 값을 기준으로 계산한 고객당 예상 매출입니다.

  1. 그런 다음, 다음 코드를 복사하여 요청 본문에 붙여넣습니다(현재 코드를 대체). 예측 ID를 추가한 다음 Send(전송)를 클릭합니다.
{  "predictionDefinition": "yourPredictionDefinitionId",
  "type": "RawData",
  "columnNames": ["Quantity","Category","Sub_Category","Sales","Profit_per_Order"],
  "rows": [
    ["2","Furniture","Chairs","262","42"],
    ["5","Office Supplies","Art","7","25"]    
  ]
}

응답은 다음 예와 비슷해야 합니다(예측값은 다를 수 있음).

{
  "predictionDefinition": "1ORB00000008RSR",
  "predictions": [
    {
      "model": {
        "id": "1OtB00000008S34KAE"
      },
      "prediction": {
        "middleValues": [],
        "total": 88.68177540182317
      },
      "prescriptions": [],
      "status": "Success"
    },
    {
      "model": {
        "id": "1OtB00000008S34KAE"
      },
      "prediction": {
        "middleValues": [],
        "total": -155.263449836085
      },
      "prescriptions": [],
      "status": "Success"
    }
  ],
  "settings": {
    "maxMiddleValues": 0,
    "maxPrescriptions": 0,
    "prescriptionImpactPercentage": 0
  }
}

응답에서의 예측의 순서는 요청 본문에서의 입력 값의 순서와 일치합니다.

  1. 마지막으로, 응답의 주요 요인과 개선 사항을 살펴보겠습니다. 두 번째 데이터 행을 제거하고 다음의 행을 요청에 추가한 다음 Send(전송)를 클릭합니다.
{  "predictionDefinition": "yourPredictionDefinitionId",
  "type": "RawData",
  "columnNames": ["Quantity","Category","Sub_Category","Sales","Profit_per_Order"],
  "rows": [
    ["2","Furniture","Chairs","262","42"]
  ],
  "settings": {
    "maxMiddleValues": 2,
    "maxPrescriptions": 2}
}

이 요청에서 다음 작업을 수행합니다.

  • maxMiddleValues는 상위 인수를 반환할 수 있습니다(이 예에서는 최대 2개).
  • maxPrescriptions를 사용하면 개선 사항을 반환할 수 있습니다(이 예에서는 최대 2개).

응답은 다음 예시와 비슷하게 표시되어야 합니다.

{
  "predictionDefinition": "1ORB00000008RSR",
  "predictions": [
    {
      "model": {
        "id": "1OtB00000008S34KAE"
      },
    "prediction": {
      "baseLine": 438.5059113062626,
      "middleValues": [
        {
        "columns": [
          {
            "columnLabel": "Sub-Category",
            "columnName": "Sub_Category",
            "columnValue": "Chairs"
          },
          {
            "columnLabel": "Sales",
            "columnName": "Sales",
            "columnValue": "262"
          }
        ],
          "value": -730.8852909080902
        },
      {
      "columns": [
        {
          "columnLabel": "Sales",
          "columnName": "Sales",
          "columnValue": "262"
        }
      ],
          "value": 244.82002630727217
          }
        ],
        "other": 136.2411286963786,
        "smallTermCount": 3,
        "total": 88.68177540182317
      },
      "prescriptions": [],
      "status": "Success"
    }
  ],
  "settings": {
    "maxMiddleValues": 2,
    "maxPrescriptions": 2,
    "prescriptionImpactPercentage": 0
  }
}

이 응답은 다음과 같습니다. 

  • total은 예측 값을 나타냅니다.
  • middlevalues섹션에서는 이 예측에 대해 반환되는 두 가지 상위 요인에 대해 설명합니다. 이 예의 경우 다음과 같습니다.
    • 하위 범주가 의자이며 매출이 262일 때 효과는 예측치가 거의 731(730.8852)만큼 감소하는 것입니다.
    • 매출이 262인 경우 효과는 예측치가 약 245(244.8200) 증가한 것입니다.

응답의 다른 요소에 대한 자세한 내용은 Salesforce 도움말에서 Get Predictions(예측 가져오기)를 참고하세요.

사용량 모니터링 검토하기

Einstein Discovery는 사용량 통계를 실시간으로 모니터링합니다. 조직의 사용량 통계를 보려면 Setup(설정)의 Quick Find(빠른 찾기) 상자에 discovery(검색)를 입력하고 Usage(사용량)를 선택합니다.

오늘 실행되는 예측 API 호출 수를 보여주는 Einstein Discovery 사용량 모니터링 화면

Einstein은 Number of prediction API calls run today(오늘 실행되는 예측 API 호출 수)에서 다른 프로그램 예측 요청과 함께 REST API 요청을 추적합니다.

리소스

Salesforce 도움말에서 Trailhead 피드백을 공유하세요.

Trailhead에 관한 여러분의 의견에 귀 기울이겠습니다. 이제 Salesforce 도움말 사이트에서 언제든지 새로운 피드백 양식을 작성할 수 있습니다.

자세히 알아보기 의견 공유하기