Salesforce Mobile App Rollout: Craft Your Rollout Strategy

Admin Intermediate > Salesforce Mobile App Rollout > Craft Your Rollout Strategy

폰으로 앱을 만들때는 사용자들의 심리를 잘 분석해야해요. 책상에 앉아서 데스크탑 버젼을 사용할때랑 폰으로 앱을 사용할 때랑은 사용자의 마음가짐 자체가 많이 달라요. 사람들이 폰은 좀더 짧게 자주 보는 식이죠. 지도로 원하는 곳에 가거나 간단한 메세지를 확인하지 폰으로 업무를 길게 하기에는 방해요소가 너무 많아요.

그래서 Salesforce에서는 이렇게 짧게 집중할 수 있는 순간들은 micro-moment이라고 부르고 빨리 처리할 수 있는 액션이라던가 간단히 볼수 있는 정보등을 제공합니다. 모든 기능은 1분 이내로 성취할 수 있게 설계해서 사용율을 높이는 거죠. micro-moment가 너무 짧다고 해서 무시하지 마세요. 짧은 시간은 제약이 아니라 기회입니다! 사용자의 하루 중 중요한 순간에 접근하여 그들의 니즈를 예측하고 더욱 효율적으로 일할 수 있도록 도울 수 있는 기회입니다.

마이크로 모멘트는 짧고, 개별적이며, 맥락에 기반한 특정한 유형의 상호작용을 유도하기 때문에 강력한 힘을 지닙니다.

  • Short: 상호작용이 짧습니다. 완료하는 데 걸리는 시간은 1분 30초를 넘지 않습니다.
  • Atomic: 상호작용이 개별적이고 집중적입니다. 하나의 워크플로 또는 활동이며, 다른 요소에 의존하지 않습니다. 사용자가 현재 작업 흐름에서 벗어나 다른 곳으로 이동하여 작업을 완료할 필요가 없습니다.
  • Contextual: 상호작용이 실시간으로 발생하며 사용자의 현재 상황과 관련이 있습니다. 사용자는 지금 무엇을 하고 있나요? 무엇이 필요하나요? 어디에 있나요? 다음 일정은 무엇인가요?

모바일 사용자가 이러한 짧은 순간 동안 가치를 얻을 수 있다면 Salesforce 앱은 사용자의 업무를 더욱 편리하게 만들어주는 필수 도구가 될 것입니다. 사용자에게는 영웅이 될 것이고, Salesforce의 전반적인 도입률 또한 높일 수 있을 것입니다. 모두에게 이득이 되는 상황이죠!

아래는 직급별로 필요한 주요 기능들입니다.

RoleMobile Use Cases
Sales RepLog activities
Collaborate on deals
Update deal information
Review new leads
Convert leads
Get immediate answers to customer questions
Sales ManagerApprove discounts
View the pipeline
Support sales reps
Sales ExecutiveView real-time company performance metrics
Get updates before important meetings
Service RepCapture photos of customer sites
Check order status
Get immediate answers from experts
Get directions to customer sites
Update and close cases
View customer information

무엇보다 중요한건 당신의 고객이 무엇을 원하는가입니다. 시간이 오래 걸리더라도 반드시 고객의 요구를 최대한 알아내는것이 가장 중요한 핵심입니다.

고객과 소통하는 여러가지 방법:

  • 차량 동승
  • 인터뷰
  • 포커스 그룹
  • 설문조사
  • 채터(또는 기타 협업 도구)

그러니 적어도 출장이 잦은 직원 중 한 명과 함께 하루 일과를 보내보세요. 모든 약속 장소에 동행하고, 회의에 참석하는 모습을 지켜보고, 크고 작은 상호작용을 관찰하세요. 탐정처럼 단서를 찾아보세요.

  • 고객은 어떤 질문을 하나요?
  • 고객이 손쉽게 확인할 수 있으면 유용한 정보는 무엇인가요?
  • 어떤 작업이 가장 번거롭거나 시간이 많이 걸리나요?
  • 클립보드, 인쇄물, 스프레드시트를 사용하나요? 포스트잇을 사용하나요?
  • 에버노트나 드롭박스 같은 소비자용 앱에 정보를 저장하나요? Salesforce에 해당 데이터를 쉽게 저장할 수 있는 방법을 제공할 수 있나요?

사용자들의 행동을 관찰하는 것이 시간과 노력을 들일 만한 가치가 있다는 것을 여러분께 확신시켜 드렸기를 바랍니다. 하지만 어떤 연구 방법을 선택하든, 좋은 경청자가 되어 꼼꼼하게 메모하는 것을 잊지 마세요.

Interpret User Research

조사를 완료했다면, 이러한 귀중한 통찰력을 어떻게 실제 사용 사례로 전환할 수 있을까요? 다음은 몇 가지 문제점과 Salesforce 앱을 통해 이를 해결할 수 있는 방법에 대한 예시입니다.

The Problem You ObservedA Potential Solution
영업 사원들은 고객 방문 후 회의록을 작성할 시간이 부족합니다. 그래서 판매에 도움이 될 만한 정보를 잊어버리는 경우가 종종 있습니다.빠른 통화 기록 사용자 지정 작업을 만드세요. 날짜와 방문 유형을 기본값으로 설정하고 설명 필드를 추가하세요. 사용자는 휴대폰의 음성-텍스트 변환 기능을 사용하여 설명 필드에 메모를 음성으로 입력할 수 있으며, 1분도 채 걸리지 않습니다. 타이핑할 필요가 전혀 없습니다!
영업 사원들이 제품 데이터시트를 찾는 것은 번거로운 일입니다. 서류철을 뒤지거나 사무실에 전화해야 하기 때문입니다.마케팅 팀이 데이터시트를 게시할 수 있는 전용 Chatter 그룹을 만드세요. 모바일 사용자는 휴대폰에서 최신 파일을 쉽게 볼 수 있습니다.
영업 담당자들은 미팅 직후 본사에 전화해서 주문을 넣을 시간이 없는 경우가 많습니다. 고객의 주문 요청과 주문 접수 사이에 시간차가 발생합니다.‘주문하기’라는 사용자 지정 작업을 생성합니다. 사용자가 몇 가지 필수 필드를 입력하면, 해당 업데이트가 시작되어 고객 서비스 담당자에게 이메일을 보냅니다. 이메일에는 주문 처리에 필요한 최소한의 정보만 포함됩니다. 이제 상담원은 고객 응대 중에도 주문을 처리할 수 있습니다.

전화통화도 Salesforce통해서 하도록하면 어떨까?? 그건 좀 너무 투머치인가?
전화통화 자동녹음 뒤 AI로 요약정리해서 시스템에 저장하기!
내가 AI를 직접 개발하는건 힘들겠지만 AI를 응용하는건 얼마든지 할수 있지..

Identify Winning Use Cases

여러분의 아이디어와 사용자로부터 받은 의견을 종합해 보면 수많은 잠재적 활용 사례가 있을 겁니다. 그중에서 가장 좋은 사례를 어떻게 찾아낼 수 있을까요?

성공적인 활용 사례를 구성하는 세 가지 요소는 다음과 같습니다.

  • It’s designed for micro-moments. 상호 작용은 짧고, 맥락에 맞으며, 원자적입니다.
  • There’s value for the end user. 이 사용 사례는 직원들에게 도움이 되고 업무를 더 쉽게 만들어 줄 것입니다.
  • The business impact is high. 이 사용 사례를 KPI 또는 중요한 비즈니스 지표와 연결할 수 있습니다. 이 사용 사례가 조직에 가져다 줄 가치를 측정할 수 있어야 합니다.

Prioritize Use Cases

이런 아이디어를 한번에 출시하면 좋겠지만 사실살 그렇지 않아요. 고객들은 한번에 큰 변화를 원하지 않고 필요한 기능을 조금씩 배우기를 원합니다. 그래서 우선순위를 두어 단계별로 출시를 하는 것이 좋아요. 그걸 위해서 가장 효율적인 투자 대비 효과를 얻을 수 있는 사용 사례를 간단한 그래프로 시각화할 수 있는 유용한 매트릭스를 개발했습니다. 사용 방법은 다음과 같습니다.

  1. 가로축은 문화적 수용 용이성입니다. 각 사용 사례를 평가하고 사용자의 기존 행동을 바꾸는 데 얼마나 많은 노력이 필요한지 판단하세요.
  2. 세로축은 비즈니스 영향입니다. 각 사용 사례가 비즈니스에 얼마나 많은 가치를 더할지 순위를 매기세요.
  3. 그래프에 사용 사례를 표시하여 어디에 위치하는지 확인하세요.

먼저 빠르게 성과를 낼 수 있고 쉽게 구현할 수 있는 것에 집중하세요. 기왕이면 빨리 구현가능한데 큰 성과를 낼수 있는것이 가장 유력하겠죠.

아마도 여러분은 획기적인 변화를 가져올 수 있는 몇 가지 사용 사례를 생각해냈을 것입니다. 하지만 이러한 사례들은 일반적으로 구현에 더 광범위한 계획, 자원 및 기술력을 필요로 합니다. 따라서 모바일 도입 초기 단계에서, 단기적인 성과와 쉽게 달성할 수 있는 목표를 통해 모바일 사용률을 일정 수준으로 끌어올린 후, 이러한 대규모 모바일 프로젝트에 집중하는 것이 좋습니다.

자, 이제 모바일 사용 사례의 우선순위를 정했으니, Salesforce 앱에 대해 제대로 알아보고 회사에서 신뢰받는 모바일 전문가가 될 차례입니다.

Quiz +50

  1. Which of the following use cases is a good example of a micro-moment? A(X) > E(O)
    • A. Asking a question on Chatter
    • B. Completing a 12-step wizard
    • C. Updating an opportunity
    • D. A and B
    • E. A and C
  2. What’s the most effective method for researching the mobile needs of your users?
    • A. Surveys
    • B. Ride-Alongs
    • C. Interviews
    • D. Focus Groups
    • E. Chatter
  3. A solid mobile use case has the following qualities:
    성공적인 모바일 사용 사례는 다음과 같은 특징을 갖습니다.
    • A. The use case is designed for micro-moments.
    • B. The ease of cultural adoption is high.
    • C. The business impact is relatively low.
    • D. A and B
    • E. All of the above

Salesforce Mobile App Rollout: Get Started with Your Salesforce App Rollout

Admin Intermediate > Salesforce Mobile App Rollout > Get Started with Your Salesforce App Rollout

Salesforce를 통해서 사용자들에게 Mobile버젼의 플랫폼을 제공할 수 있습니다. 하지만 모바일버젼을 사용자들에게 공개하기 전에 생각해야할 것들이 있습니다.

  • 사용자 요구사항과 비즈니스 요구사항 이해
  • 모바일 요구사항 및 사용 사례 정의
  • 성공 지표 식별
  • 사용 사례를 반영하도록 Salesforce 모바일 앱 맞춤 설정
  • 프로토타입 구축 및 테스트
  • 출시 팀 구성
  • 커뮤니케이션 및 교육 계획 수립
  • 모바일 기기 및 보안 정책 개발
  • 사용 촉진
  • 피드백 수집 및 비즈니스 영향 측정

Quiz

  1. Why should you develop a rollout strategy for the Salesforce mobile app?
    • To satisfy a business requirement
    • To improve adoption and provide more value to users
    • To stay within your project budget
    • To impress your friends
  2. Which of the following is an element of a comprehensive mobile rollout strategy?
    • Forming a team of mobile developers
    • Hiring a mobile consultant
    • Defining your mobile requirements and use cases
    • Purchasing mobile devices for all of your employees

Use External Services With a Flow: Create a Flow Using External Services Actions

Admin Intermediate > Use External Services With a Flow > Create a Flow Using External Services Actions

Create Flow

Flow 생성

  1. Setup > Quick Find > Flows > New Flow > Screen Flow
    이렇게 해도 똑같아요. Setup > App Launcher > Automation > New > Screen Flow
  2. Create

상단에 Auto-Layout을 Free-Form으로 변경하면 좌측에 툴바가 보이게 되요.

Screen 추가

  1. 좌측 Elements탭에서 Screen을 끌어다 Start 밑에 놓습니다.
    • Label: Bank Account Record
    • API Name: Bank_Account_Record
    • 좌측 Components메뉴에서 input하단에 Text를 끌어다 중앙에 Flow Label밑에 놓습니다.
      텍스트상자를 놔도 되는 곳에서 초록색이 됩니다.
      • Label: Last Name on Account
    • Text를 하나더 끌어다 놓습니다.
      • Label: Bank Account Type
    • Done
  2. Save
    • Flow Label: Bank Account Records
    • Save

Action 추가

  1. 좌측 Elements탭에서 Action을 끌어다 Screen밑에 갖다 놓습니다.
  2. 팝업이 뜨면 좌측에 Filter By: Category로 된거를 Type으로 바꾸고 External Service를 선택합니다.
    이렇게 해도 똑같아요. Filter By: Category > BankService를 선택합니다.
  3. 우측 Action 검색창에서 Add Account를 선택합니다.
    • Label: Add Bank Account
    • Account Name:
      • Bank Account Record > Last Name on Account 선택
    • Account Type:
      • Bank Account Record > Bank Account Type 선택
    • Advanced ✅ Manually assign variables
      • 201 > New Resource
        • Resource Type: Variable
        • API Name: account
        • Data Type: Apex-Defined
        • Apex Class: ExternalService_BankService_accountDetails
        • Availability Outside the Flow
          • ✅ Available for input
          • ✅ Available for output
        • Done
      • 409 > New Resource
        • Resource Type: Variable
        • API Name: existingAccount
        • Data Type: Apex-Defined
        • Apex Class: ExternalService_BankService_accountDetails
        • Availability Outside the Flow
          • ✅ Available for input
          • ✅ Available for output
        • Done
      • Done

Decision 추가

  1. 좌측 Elements탭에서 Decision을 끌어다 Action밑에 갖다 놓습니다.
    • Label: Bank Account Updated?
    • New Outcome
      • Label: Bank Account Created
      • Condition Requirements to Execute Outcome: All Conditions Are met (AND)
        • Resource: existingAccount

          Object를 선택하고 나면 필드를 선택하도록 유도하는데 우리는 레코드 자체의 존재유무를 파악해야하기 때문에 필드는 선택하지 않습니다.

          필드를 선택하지 않으면 Resource에 그냥 Resource이름만 들어갑니다.
        • Operator: is Null
        • Value: GlobalConstant > True
      • 왼쪽 메뉴에 Default Outcome 선택
        • Label: Bank Account Found
        • Done

Default Outcome은 이름만 있고 조건은 없습니다. 왜냐면 조건에 부합하지 않는 모든 흐름은 Default Outcome으로 흘러가기 때문입니다. IF문의 Else같은거죠.

Assignment 추가

  1. 좌측 Elements탭에서 Assignment을 끌어다 Decision밑에 갖다 놓습니다.
    • Label: Assign Existing Bank Account ID
    • Set Variable Values
      • Variable
        • Apex-Defined Variables 밑에 account를 선택합니다.

          그러면 필드를 선택하는 창이 뜨는데 여기서 id를 클릭합니다.
        • account가 입력창에 들어가면 그 다음에 필드명 id를 선택합니다.
        • Operator: Equals
        • Value: existingAccount.id
    • Done

Update Records 추가

  1. 좌측 Elements탭에서 Update Records을 끌어다 Decision밑에 갖다 놓습니다.
    • Label: Update Salesforce User Record
    • How to Find Records to Update and Set Their Values
      • ✅ Specify conditions to identify records and set fields individually
    • Update Records of This Object Type
      • Object: User
    • Filter User Records
      • Condition Requirements to Update Records: All Conditions Are Met (AND)
      • Field: Last Name
      • Operator: Equals
      • Value: Bank Account Record > Last Name on Account
    • Set Field Value for the User Records
      • Field: Account ID
      • Value: account.id
    • Add Field버튼 클릭
      • Field: Account Type
      • Value: Bank_Account_Type
    • Done

  1. 좌측 Manager탭에서 New Resource를 클릭합니다.
    • Resource Type: Variable
    • API Name: accountTypeField
    • Data Type: Record
    • Object: User
    • Availability Outside the Flow
      • ✅ Available for output
    • Done
  2. 좌측 Manager탭에서 New Resource를 클릭합니다.
    • Resource Type: Variable
    • API Name: user
    • Data Type: Record
    • Object: User
    • Availability Outside the Flow
      • ✅ Available for output
    • Done

Connect Elements & Run

  1. Start → Screen → Action → Decision → Update Records
    • Outcome: Bank Account Created
    • Done
  2. Decision → Assignment
    • 자동으로 Decision중 선택하지 않은 나머지 하나가 할당됨
  3. Assignment → Update Records
  4. Save

Debug

Thompson으로 실행하면 에러가 난다 [409 ERROR]

  1. Debug버튼을 클릭합니다.
  2. ✅ Select Run the latest version of each flow called by subflow elements.
  3. 하단에 Run버튼을 클릭합니다.
    • Last Name on Account: Thompson
    • Bank Account Type: Checking
    • Next

test1은 valid한 Last Name이 아니다 [Bad Request]

  1. Debug버튼을 클릭합니다.
  2. ✅ Select Run the latest version of each flow called by subflow elements.
  3. 하단에 Run버튼을 클릭합니다.
    • Last Name on Account: test1
    • Bank Account Type: Checking
    • Next

아마도 이름에 숫자가 들어가서 그런거 같아요.

Bank Service API에 새레코드 추가 [201 OK]

  1. Debug버튼을 클릭합니다.
  2. ✅ Select Run the latest version of each flow called by subflow elements.
  3. 하단에 Run버튼을 클릭합니다.
    • Last Name on Account: Howard
    • Bank Account Type: Checking
    • Next

Salesforce User에 동일한 레코드 추가 [201 OK]

  1. Setup > Users > New User > Ellie Howard

다시 로직을 돌립니다.

  1. Setup > Flows > Bank Account Records
  2. Debug > Run
  3. Last Name on Account: Howard
  4. Bank Account Type: Checking
  5. Next

결과 확인

  1. Setup > Users > Ellie Howard
    • Account Type: Checking
    • Account ID: 144

어쩐지 Thompson으로는 테스트가 안되고, Bank Service Records에 새로운 레코드 Howard를 입력해서 Bank API에 데이타를 추가한 뒤에, Salesforce에서 동일한 레코드를 추가한 뒤, 다시 Bank Service Records를 돌려서 해당 레코드를 Bank API를 통해 검색한 뒤, Salesforce에서 데이타를 갱신하도록 유도했더니 결과가 잘 나왔다.

Use External Services With a Flow: Access External Business Actions

Admin Intermediate > Use External Services With a Flow > Access External Business Actions

Add Fields

기존 Account Object에 Account Type이랑 Account ID를 추가해주세요.

  1. Setup > Object Manager > User > Fields & Relationships > New
    • Data Type: Text
    • Next
    • Field Label: Account Type
    • Length: 25
    • Next, Next, Save & New
    • Data Type: Text
    • Field Label: Account ID
    • Length: 25
    • Next, Next, Save

Add Record

사용자를 아래와 같이 추가할게요.

  1. Setup > Users > New User
    • First Name: Maria
    • Last Name: Thompson
    • Role: Marketing Team
    • User License: Salesforce Platform
    • Profile: Standard Platform User
    • Email: whatever@whatever.com
    • Save

추가한 뒤에 Account Type과 Account ID가 비어있는 것도 확인하세요.

Use External Services With a Flow: Register an External Service

Admin Intermediate > Use External Services With a Flow > Register an External Service

이번시간에는 지난 시간에 말로만 떠들어 대던걸 직접 만들어 볼거에요. 일단 External Service로 새로운 Playground를 하나 만드세요.

Plan to Create Process

지난 시간에 연습했던 bank API로 좀더 각색해서 처리하는 로직을 만들거에요. 이 로직에서는:

  • 은행 담당자가 bank account를 Salesforce에 추가하게 해주고
  • Account Type이나 Account ID가 은행에서 가지고 있는 데이타와 Salesforce Account의 데이타가 서로 일치하는지를 확인합니다.
  • 담당자는 한사람 이상이고, 은행 API에서 받아온 정보로 Salesforce에 해당 고객이 있으면 필요한 정보를 추가하고, 만약 기존에 없는 고객이라면 새로운 고객으로 레코드를 생성하여 필요한 정보와 함께 저장합니다.
  • 은행 API를 External Service에 등록시키고 Flow Builder에서 사용할거에요.

Flow

  1. Screen: 은행 계좌 기록. 은행 직원이 화면에 입력한 정보에서 계좌 이름과 계좌 유형을 캡처합니다.
  2. Action: 은행 계좌 추가. 외부 서비스에 은행 서비스의 API 사양을 등록했으므로, 사양에 정의된 모든 API 작업은 이제 해당 작업으로 플로우 내에서 사용할 수 있습니다. 우리는 addAccount 작업을 사용하고 Salesforce 조직과 은행 서비스 간에 사용할 변수에 할당할 API 입력 및 출력을 지정합니다.
  3. Decision: 은행 계좌 정보가 업데이트되었나요? 이 로직은 은행 계좌가 존재하는지, 업데이트가 필요한지 평가하거나, 필요한 경우 새 은행 계좌를 생성합니다.
  4. Assignment: 기존 은행 계좌 ID를 할당합니다. 은행 계좌가 있는 경우, 기존 은행 계좌의 계좌 ID를 할당하고 이 값을 사용하여 Salesforce 사용자 계정을 업데이트합니다.
  5. Update Records: Salesforce 사용자 레코드를 업데이트합니다. Salesforce 사용자의 성이 은행 계좌 기록과 일치하면, 저희 워크플로는 Salesforce 사용자 레코드를 은행 계좌 유형 및 은행 계좌 ID로 업데이트합니다. 은행 서비스에서 일치하는 성을 찾지 못하고 새로운 은행 계좌 레코드가 생성된 경우, Salesforce 사용자 레코드(Salesforce에 일치하는 이름이 있는 경우)를 새 은행 계좌 유형 및 은행 계좌 ID로 업데이트합니다.

Named Credential

Named Credential은 뭐라고 했죠? 외부 API에 접근하는데 필요한 인증절차를 밟는 거라고 했어요. 근데 지금 테스트하도록 나온 앱이 최신인증을 지원하는 API가 아니라서요. 인증을 안할거라서 New Legacy를 선택할거에요. 그 이유는 지지난 시간에 설명드렸는데 왜 그런지 기억하시죠? 기억안나면 여기

  1. Setup > Named Credentials > New Legacy

External Services

여기에서 외부 API의 API Specification을 등록해주는 건데요. API의 스키마는 바로 해당 API에서 제공하고 있어요. Account의 스키마면, https://th-external-services.herokuapp.com/accounts/schema 여기에 JSON으로 API Specification이 다 들어가 있습니다.

  1. Setup > External Services > Add an External Service
  2. From API Specification을 선택합니다.
  3. Next
  4. Provide Registration Details
    • External Service Name: BankService
    • Select a Named Credential: Bank
    • Service Schema: Relative URL
    • URL: /accounts/schema
    • Save & Next
  5. Select Operations (전부선택합니다)
    • ✅ addAccount
    • ✅ DeleteAccount
    • ✅ getAccount
    • ✅ updateAccount
    • Next
  6. Finish

지금 우리가 뭘했냐면요 addAccount, DeleteAccount, getAccount, 그리고 updateAccount를 External Service로 등록한거에요. 이거 등록할때 schema도 명시한 이유는 해당 서비스가 어떤 입력값을 받는지도 같이 등록하기 때문이에요. view-source:https://th-external-services.herokuapp.com/accounts/schema여기 보시면 addAccount에 parameters가 accountName이랑 accountType이렇게 두개 나오잖아요. 이게 뒤에서 갑자기 튀어나오거든요? 그러면 아 우리가 addAccount를 External Service에 등록할때 schema를 알려줘서 parameters로 accountName이랑 accountType를 받는게 나오는구나 하시면 되요.

여기까지 하시고 도전과제 제출하시면 됩니다.

External Services: Define an API Specification for an External Service

Admin Intermediate > External Services > Define an API Specification for an External Service

이번시간에는 API Specification을 정의하는 방법에 대해서 설명드리도록 하겠습니다. 양식은 JSON이나 YAML로 쓰여지는데 우리는 JSON으로 사용된 것을 기준으로 설명드리도록 하겠습니다.

지난시간에 API Spec의 예제를 보여드렸는데 전체양식은 생략하고 기능정의하는 부분만 좀더 보강해서 자세히 보도록 해볼게요. 상대경로 별로 GET, POST, PUT, DELETE이렇게 4가지 방법으로 API를 호출합니다. 각 Method별 설명은 아래와 같습니다.

Operations for path: /accounts/{accountName}Description
GETaccount 조회
POSTaccount 생성
PUTaccount 갱신
DELETEaccount 삭제

API Spec의 “paths”부분 밑으로 API Endpoint를 정의합니다. 그리고 그 밑으로 Method들을 나열하고 각 Method별로 입력값과 출력값을 정의합니다. 그중에 GET Method하나만 자세히 좀 보자면요.

"paths": {
    "/accounts/{accountName}": {            << 이게 상대경로
      "get": {                              << 이게 Method
        "operationId": "getAccount",        << 함수명
        "summary": "Retrieves an account",  << 짧은 설명
        "description": "Retrieves the account with specific name",<< 긴설명
        "consumes": ["text/plain"],         << 호출받을때 문서형식
        "produces": ["application/json"],   << 응답할때 문서형식
        "parameters": [                     << 검색필터
          {
            "name": "accountName",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Name of the account"
          }
        ],
        "responses": {                       << 응답코드
          "200": {                           << 200 문제없을때
            "description": "The response when system finds an account with given name",
            "schema": {                     << 결과스키마는 accountDetails에
               "$ref": "#/definitions/accountDetails"
            }
          },
        "400": {                             << 400 입력값에 문제있으때
          "description": "Error response if the account name parameter is less than minimum characters",
          "schema": {
            "$ref": "#/definitions/errorModel"
          }
        },
        "404": {                              << 404 결과없을때
          "description": "Error response if the account is not supported by service or account is not found",
          "schema": {
            "$ref": "#/definitions/errorModel"
          }
        }
      }
    }
  }
}

Quiz

  1. What is an API spec?
    A. A human-readable file that External Services consumes to generate invocable actions.
    B. A human-readable file that a flow creates for the parameters needed in the definition when your flow runs.
    C. A human-readable file definition that a flow outputs at the end of a flow interview.
    D. A machine-readable external service that must be compiled.
  2. Which of these schemas is valid to use with External Services?
    A. The schema includes POST methods and a GET method with an empty request body.
    B. The schema includes a form parameter and properties without values.
    C. The schema adheres to OpenAPI specification and includes parameters with names.
    D. The schema has less than 100,000 characters and includes response headers.

External Services: Get Started with External Services

Admin Intermediate > External Services > Get Started with External Services

External Services?

서비스를 하다보면요. 외부에서 제공하는 데이타를 사용해야할 경우가 있잖아요. 어떤 회사는 기존에 가지고 있던 플랫폼이 있어서 그거랑 Salesforce랑 동시에 운영하면서 데이타를 서로 연동하고 싶어하는 경우도 있거든요. 그럴때 Salesforce에서 코딩없이 외부 데이타를 가져와서 Salesforce에서 사용할 수 있도록 만든기능이 바로 External Service에요

Named Credential

해당 페이지에서 제공하는 동영상을 보면서 하나씩 차근히 짚어볼게요. 따라하지는 않으셔도 되고 그냥 눈으로 머리로 생각하면서 대충 흐름을 파악하시면 됩니다. 다다음 시간에 이거 실제로 따라하는걸 해보건데요. 일단 여러번 들어본다음에 하면 더 기억이 잘남잖아요 그래서 일단 한번 대충 훑어보고 가는거니까 여기서는 자세한 내용은 그냥 넘어가도 됩니다.

일단 Salesforce가 해당 API에 접근하려면 인증절차를 밟아야 하잖아요. 그때 필요한게 바로 Named Credential이에요. 아래 안내를 따라 Named Credential을 생성합니다.

Setup > Quick Find > Named Credentials

New버튼옆에 드롭다운을 클릭해서 New Legacy를 클릭합니다.

New와 New Legacy차이점:
요즘 나오는 API는 OAuth 2.0, JWT, AWS SigV4 등 최신 인증방식을 지원하고, REST/HTTP규격에 맞춰 완벽히 지원하며, Flow/External Services 연동을 완벽하게 지원합니다. 하지만 예전에 만들었던 구형 API들은 인증도 전통적 Username+Password, Basic Auth 중심이거나 API가 오래되어 최신 OAuth나 인증 방식 지원 안하는 경우가 많은데 그런 경우에 New Legacy를 사용하여 연동합니다. 가능하면 New를 쓰는 게 좋고, Legacy는 구형 시스템과 연동할 때만 선택하는 거예요.

Name Credential새로 만드는 화면에서 아래 정보를 입력하고 Save버튼을 눌러서 Named Credential을 생성합니다.

API Specification

API Specification는 외부 API가 무엇을 제공하고, 어떻게 호출해야 하는지를 JSON이나 YAML형식으로 기술한 구조화된 문서에요. 어떤 엔드포인트(URL)가 있는지, 요청(Request) 파라미터는 무엇인지, 응답(Response) 데이터 형식은 어떻게 되는지, 인증 방식(예: OAuth, API Key)은 무엇인지등등이요. Salesforce가 이 스펙을 읽고 “어, 이 API는 이렇게 생겼고, 이렇게 써야 하는구나” 하고 이해할 수 있게 만드는 파일이에요.

API Specification은 대부분 OpenAPI (Swagger) 2.0나 3.0 JSON/YAML 형식을 사용합니다. 아래는 API Specification의 예입니다.

{
  "openapi": "3.0.0",
  "info": {
    "title": "Credit Check API",
    "version": "1.0"
  },
  "paths": {
    "/checkScore": {
      "post": {
        "summary": "신용 점수 확인",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreditRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "점수 조회 성공",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditResponse"
                }
              }
            }
          }
        }
      }
    }
  }
}

External Services

방금 정의한 API Specification을 등록하시려면:

Setup > Quick Find > External Services를 선택하세요.

우측상단에 New External Service버튼을 클릭합니다.

API Source를 등록하는 화면에서 From MuleSoft Anypoint Platform을 선택하시거나 From API Specification을 선택하실 수가 있는데, From API Specification를 선택합니다.

Add an External Service화면에서:

  • External Service Name: bankService44
  • Description: account sync
  • Service Schema: Relative URL
  • Select Named Credential: bank
  • URL: /accounts/schema

Service Schema로 Relative URL를 선택하면 기존 API URL에 해당 상대경로를 덧붙여서 호출하겠다는 의미입니다. Named Credential만들때 넣었던 API URL이 https://th-external-services.herokuapp.com/였는데 URL을 /accounts/schema로 설정하면 https://th-external-services.herokuapp.com/accounts/schema에서 스키마를 찾을 수 있다고 알려주는 거에요.

Save & Next버튼을 클릭하면, API Specification을 로딩하고 Scheme에 문제가 없는지 Validation을 실시합니다.

또다시 Save & Next를 누르면 API Specification을 바탕으로 가능한 기능들을 나열합니다. 이중에 Salesforce에서 사용하고자 하는 기능을 선택하고 Next버튼을 누릅니다.

그러면 External Service가 사용가능한 모든 Action들을 보여줍니다. 모든 입력값과 출력값을 정리해서보여줘요. 여기서 Done 버튼을 클릭하면, 새롭게 생성한 bankService44를 External Service목록에 보여줍니다.

Invocable Actions

지금까지 Named Credential을 통해서 Authenticate을 구현했고, External Service에 API Specification을 등록함으로써 기능을 정의했습니다. 이제 Flow, Einstein Bots, OmniStudio, Apex등의 툴을 이용해서 Invocable actions를 Integrate을 할 차례입니다.

우리는 Flow를 만들어에요.

  • Start
  • Screen: 사용자가 찾고자하는 Account의 Lastname과 Bank Account Type을 입력값으로 받습니다.
  • Action: 위에서 받은 입력값으로 외부 서비스에서 Account Type과 Account ID를 찾아서 Decision으로 넘깁니다.
  • Decision: 입력받은 고객값이 Salesforce에 존재하는지를 확인해서 없으면 입력받은 Account Type과 Account ID로 새로운 Account를 생성하고, 만약 기존에 해당 Account가 존재한다면 해당 Account의 Account Type과 Account ID를 갱신합니다.
    • 기존 Account에 해당 Account가 없다면 새로운 Account를 생성하고,
    • Assignment: 만약 기존 Account를 찾았다면 기존데이타에 Account Type과 Account ID을 추가하고
  • Update Records: 넘겨받은 데이타로 데이타를 갱신합니다 .

좌측메뉴에 Manager탭을 열면 Apex-Defined Variables가 있는데 account를 클릭해서 열어보면, Apex Class에 정확하게 어디서 가져와서 어떻게 하라고 Class 이름으로 한눈에 확인이 가능합니다.

  • Data Type: Apex-Defined
  • Apex Class: ExternalService__bankService44_accountDetails

우리가 정의한 API Specification의 accountDetails가 Apex의 Class이름으로 들어갑니다

ExternalService__bankService44_accountDetails클래스는 어디서나 호출해서 사용할 수 있게 됩니다.

Flow Builder에서 만든 Flow가 동작을 잘하는지 확인 하려면, Run을 눌러보세요. 그러면 검색할 사용자의 Lastname과Bank Account Type을 입력받는 창이 뜹니다. 예를 들어 Thompson의 Checking계정을 검색하면, flow가 처리되고 결과를 보여줍니다.

실제로 Accounts에서 Thompson을 검색해보면 Account Type은 Checking으로 Account ID는 100으로 변경된 것을 확인하실 수 있습니다.

여기까지가 동영상의 내용이었습니다. API를 어떻게 정의하고 어떻게 가져와서 사용하는지 대충 감이 왔을거에요.

그밖에도 다양한 API들을 통해 각종 서비스들을 뒷단에서 연결하고 Salesforce에서 기능을 제공할 수 있어요.

Quiz

  1. What can you do with External Services?
    • A. Authenticate into a named credential to update its database.
    • B. Declaratively create a schema to use in External Services.
    • C. Connect to an external endpoint to bring its data into Salesforce.
    • D. Declaratively authenticate the external database for External Services.
  2. Which of the following is true about External Services?
    • A. The steps to create an external service are done by the public API provider in Named Credentials.
    • B. Much of the work to register an external service in Salesforce can be performed declaratively.
    • C. You must learn to program using Apex if you want to use External Services.
    • D. Using an OpenAPI specification is optional if you want to register an external service registration.

AppExchange Basics: Connect and Contribute to the AppExchange Community

Admin Intermediate > AppExchange Basics > Connect and Contribute to the AppExchange Community

AppExchange의 우측단에 Profile을 클릭하면 My Installs and Subscriptions가 있습니다. 여기에서 설치한 모든 App들을 관리할 수있습니다.

더 많은 정보를 위해서 AppExchange newsletter를 구독하고, LinkedIn과 X계정을 Follow하세요.

AppExchange Basics: Install AppExchange Packages

Admin Intermediate > AppExchange Basics > Install AppExchange Packages

Managed and Unmanaged Packages

Managed Package는 개발회사에서 코드를 전적으로 관리하고 사용자는 코드나 메타데이타를 전혀 건드리지 못합니다. 그래서 패키지가 업그레이드 될때는 개발회사에서 과거버젼과 호환되는 새로운 버젼을 만들어서 배포하면 사용자는 손쉽게 패키지를 업그레이드 합니다. Managed Package 안에는 절대 Object나 Tab 또는 다른 앱등을 포함하지 않아요. 그 반면에 Unmanaged Package는 코드나 메타데이타를 직접 수정할 수도 있는데 업그레이드를 하려면 기존에 설치된 패키지를 삭제하고 새로운 패키지를 설치해야해요. 기존에 코드를 수정했다면 어디어디 고쳤는지 다 기억해서 새로 설치한 패키지에 다시 적용을 해야하는 지옥이 열립니다. 그리고 Unmanaged Package는 Object와 탭 그리고 앱등을 포함합니다.

AttributeManaged PackagesUnmanaged Packages
CustomizationYou CANNOT view or change the solution’s code or metadata.You can customize code and metadata, if desired.
UpgradesThe provider can automatically upgrade the solution.To receive an upgrade, you must uninstall the package from your org and then reinstall a new version from AppExchange.
Org limitsThe contents of the package DONOT count against the app, tab, and object limits in your org.The contents of the package count against the app, tab, and object limits in your org.

How to Install Solutions

이전 강의에서 패키지를 찾기 전에 미리 전략을 좀 세우면 검색하는 시간을 훨씬 단축할 수 있다고 말씀드렸자나요. 마찬가지에요 패키지를 설치할때도 몇가지 스스로 질문을 해보면 실수없이 설치를 마무리 할수 있습니다.

  • 내가 지금 어디다가 이걸 설치하고 있는거지?
    • 개발자들은 절대 어떤 코드도 바로 Production에 적용하지 않아요. 무조건 Sandbox에서 테스트 먼저 하고, Staging에서 또 테스트하고 매우 안전하다는 판단이 서면 그때 Production에 설치합니다. 내가 지금 설치하려는 환경이 Sandbox인지 Production인지 다시한번 확인하세요.
  • 관련 문서 숙지했나?
    • 많은 개발회사가 설치나 패키지 구성, 혹은 문제해결에 대한 관련문서를 제공합니다. 문서가 있으면 앱의 Overview나 More Details탭에 관련문서가 안내될거에요.
  • 누구한테 이앱에 대한 접근 권한을 주지?
    • 설치할때 보셨죠? 누구한테 이 앱에 대한 접근권한을 주는지 물어보잖아요. 그부분도 미리 심사숙고 하셔서 결정을 내리신 뒤에 설치를 하시면 좋을거 같아요. 만약에 누구한테 줘야하지 모르겠는 경우에는요 일단 Admin만 접근하도록 설치를 해주세요. 나중에 다른 사용자 접근할수 있게 바꾸면 되니까요.

Get Your Trailhead Playground Username and Password

Salesforce 2. Playground Username and Password에서 가장 초반에 다루었던 내용인데요. 패키지를 설치하시려면 Trailhead의 Playground에 대한 Username과 Password가 있어야 합니다. Credentials을 만드는 하면은 Playground Starter에 있습니다. 만약 Launch버튼을 눌러서 열었는데 Playground Starter가 안뜨고 앱이 바로 뜨면 App Launcher에 들어가셔서 Playground Starter를 실행해주세요. 그러면 상단 탭에 Get Your Login Credentials가 보일겁니다.

  1. Playground Starter > Get Your Login Credentials
    • Take Note your username: sol1000@cunning-shark-a7jp3r.com
    • Reset My Password를 클릭합니다.
    • OK버튼 클릭하면 이메일이 옵니다.
    • 링크를 클릭하면 비번을 바꿀수 있어요. Reset Password를 클릭합니다.


Connect Your Trailhead Playground Account to Your Trailblazer Profile

다음 단계는 Trailhead Playground 계정을 Trailblazer 계정에 연결하여 Playground에 패키지를 설치하는 것입니다. 하나의 Trailblazer 계정에 여러 개 Playground를 연결할 수 있어요. Trailblazer 계정에 연결하면 실습 → 기록 → 관리 → 커뮤니티 연계까지 한 곳에서 할 수 있어서 효율적이에요. 그리고 자격증 준비할 때 Playground 계정에서 만든 실습 데이터와 설정을 그대로 활용 가해서 실제 시험 환경과 유사한 실습 경험을 쌓을 수 있어요. 도전과제를 완료하시려면 반드시 연결하셔야합니다.

  1. Trailblazer settings 페이지를 여세요
  2. Connect An Account 버튼을 클릭하시면 팝업이 열리는데 여기서 Salesforce버튼을 클릭하세요
  3. Trailhead Playground의 username과 password를 입력한 뒤 Login버튼을 누르면 아래 화면이 뜨는데 Allow버튼을 눌러 주세요.
  4. 그러면 아래와 같이 Salesforce Account가 추가됩니다. 여기서 중요한게 연결하고자 하는 Playground로 만든 Account가 Logged In이라고 아래와 같이 표시가 되어 있어야합니다. 가끔 브라우저에서 로그인이 안되는 경우가 있어요.
  5. 연결이 잘 되었는지 확인해볼게요! appexchange.salesforce.com으로 가셔서요. Salesforce Adoption Dashboards를 찾아서 Get It Now버튼을 클릭해주세요
  6. 그러면 이제는 어떤 계정으로 연결할건지를 물어봅니다. 설치할 Playground에 해당하는 계정을 선택하고 Install in Production버튼을 클릭합니다. Production이라고 하니까 좀 떨리는데 모든 Playground는 Production으로 인식되기 때문에 그래요. 안심하고 클릭하셔도 됩니다.
  7. 그러면 입력하신 정보를 한번더 확인합니다. 약관에 동의하시고 Confirm and Install버튼을 눌러주세요.
  8. 필요한 경우에 다시한번 로그인을 해주고 핸드폰인증까지 해야할 수도 있어요.
  9. 그러면 이제 설치를 어떻게 할지를 결정하는 화면이 뜹니다. Install for Admins Only로 선택해주시고 Install버튼을 눌러서 Package를 설치합니다.
  10. 설치가 완료 되었습니다. Done버튼을 누르면 Installed Package에서 방금 설치한 Salesforce Adoption Dashboards을 확인하 실수 있으세요.
  11. 이제 설치한 Salesforce Adoption Dashboards을 사용하러 가볼까요? 설치한 Playground를 Launch하시고, Setup에 가셔서 App Launcher에서 Dashboards를 클릭해주세요. 왼쪽 메뉴에서 All Folders를 선택하시면 목록에 Salesforce Adoption Dashboards이 보이실거에요. 거기에 3가지 Dashboard가 있는데요 그중에 1 – User Adoption (Logins)를 열어서 볼게요.
    • 1) 누가 가장 많이 로그인을 했나
    • 2) 누가 가장 적게 로그인을 했나
    • 3) 로그인 합계
    • 4) Role별 로그인 총합

Hands-on Challenge

Install Salesforce Adoption Dashboards in your Trailhead Playground

Test your AppExchange expertise by installing the Salesforce Adoption Dashboards package, available on AppExchange, into your Trailhead Playground. If you followed along with the steps in this unit and already installed the Salesforce Adoption Dashboards package in your playground, simply click Check Challenge below. If you didn’t follow the steps in this unit, follow them now to install the Salesforce Adoption Dashboards package from AppExchange.

풀이

도전과제는 Salesforce Adoption Dashboards를 Playground에 설치하는거에요. 우리가 이미 강의를 진행하면서 설치를 했는데 만약에 같이 따라하지 않으셨다면 지금 바로 실습을 시작하세요.

도전과제에서 확인하는것은 다음과 같습니다.

  • Playground자체 계정(credential)을 만들어서 Trailblazer profile에 연결했는지
  • 그리고 Salesforce Adoption Dashboards을 Admin Only로 설치했는지

AppExchange Basics: Explore AppExchange Listings

Admin Intermediate > AppExchange Basics > Explore AppExchange Listings

Solution Listings

AppExchange사이트에서 필터등을 통해서 Solution을 찾았다면 요약을 읽고 캡쳐화면도 보고 리뷰등을 통해서 신뢰성을 확인하고 더 많은 정보를 원한다면 More Details를 통해서 자세한 문서에 대한 링크에 접근할 수 있습니다.

Consultant Listings

컨설턴트는 솔루션과는 살짝 다르게 얼마나 많은 프로젝트 경험이 있는지, 회사가 언제 설립되었는지, 몇명의 자격증소유자가 있는지 등을 소개합니다. 어떤 분야에 전문가인지 전문가 레벨이나 자격증 여부등이 컨설턴트를 선택하는 기준이 됩니다.

Trust in Community Reviews

리뷰총점이 몇점인지 얼마나 많은 사람들이 리뷰를 했는지 리뷰를 한 사람이 Salesforce MVP인지 리뷰한 사람의 Trailhead 레벨이 몬지 Top Reviewer인지 등을 보고 믿을 만한 리뷰를 골라서 확인합니다.

Try Before You Buy

유료앱을 구매하기 전에 시현해볼 수 있는 옵션이 제공되는데 무료시현 옵션은 아래의 3가지 입니다.

  1. Test Drive: 읽기 전용으로 제공되며 샘플데이타까지 전부 들어가기 때문에 기능을 파악하기가 쉽습니다.
  2. Sandbox trial: 샌드박스에 설치할 수 있는 버젼입니다.
  3. Trialforce trial: 실제 앱을 설치할 수 있는 버젼이며 Text Drive와 비슷합니다. 설정이 이미 되어 있고 샘플데이타도 들어옵니다. 모든 기능을 실전처럼 사용할 수 있으나 제한된 시간 동안만 사용이 가능합니다. 특이한 점은 고객이 구매의사를 밝히면 새로 설치할 필요없이 그걸로 바로 서비스를 할수 있게 시간제한을 풀어줍니다.

Quiz

  1. How does a test drive differ from a Trialforce trial?
    • A test drive uses a read-only org, while a Trialforce trial uses a writeable org.
    • Test drives include sample data, but Trialforce trials don’t.
    • A test drive is available on every listing, but a Trialforce trial may not be.
    • To start a test drive, you contact the provider, but to start a Trialforce trial, you click Get It Now on the listing.
  2. How can you learn more about a solution when you have questions?
    • Read reviews from community members.
    • Search on the internet.
    • Read documentation from the provider on the More Details tab.
    • B and C
    • A and C