실시간 Salesforce 데이터로 구동되는 인터랙티브 이메일

Salesforce는 서버 간 연동을 비밀번호나 조용히 만료되는 리프레시 토큰이 아니라 서명된 JWT로 인증합니다. MailInApp의 API 데이터 소스는 이 흐름을 그대로 구사합니다: Connected App의 인증서와 개인 키로 로그인하고, SOQL 쿼리를 실행한 뒤, 반환된 행을 KPI 스코어카드나 차트 블록에 직접 연동하세요 — 이메일에 붙여넣은 스크린샷이 아니라 발송할 때마다 실제 현재 수치를 담은 파이프라인 다이제스트입니다.

제목

Your pipeline this week

Salesforce는 서버 간 연동을 비밀번호가 아니라 서명된 JWT로 인증합니다 — 그리고 MailInApp의 API 데이터 소스는 이 흐름을 그대로 구사합니다. 한 번 연결하면, KPI 스코어카드나 차트 블록이 실시간 Opportunity, Account, Contact 행에 바로 연동됩니다. 관리해야 할 리프레시 토큰도, 발송 전마다 다시 내보내야 할 CSV도 없습니다.

대부분의 "주간 파이프라인" 이메일은 리포트의 스크린샷이며, 누군가 붙여넣는 순간 이미 낡은 정보가 됩니다. 차트 블록을 Salesforce 기반 데이터 소스에 직접 연동한다는 것은 블록 자체의 수치가 실제 SOQL 쿼리에서 나온다는 뜻입니다 — 그리고 반복 발송은 발송할 때마다 그 쿼리를 새로 실행하므로, 월요일의 다이제스트는 실제로 월요일의 파이프라인을 반영합니다.

연결이 작동하는 방식

MailInApp

Connected App의 개인 키로 JWT에 서명합니다

Salesforce 토큰 엔드포인트

서명을 검증하고 액세스 토큰을 반환합니다

Salesforce REST API

베어러 토큰으로 인증되어 SOQL 쿼리를 실행합니다

내 이메일

KPI 스코어카드 & 차트 블록이 행에 실시간으로 연동됩니다

모든 단계는 발송할 때마다 서버 사이드에서 일어납니다. 비밀번호는 전혀 전송되지 않으며, 리프레시 토큰도 없습니다 — 낡은 토큰은 새 어설션에 서명함으로써 대체됩니다.

이는 Salesforce가 자신의 서버 간 연동을 위해 직접 문서화한 것과 동일한 JWT Bearer 흐름이며, Salesforce 전용으로 만들어진 별도의 연동이 아니라 MailInApp의 기존 API 데이터 소스용 OAuth2 인증 모드에 그대로 연결되어 있습니다.

Connected App을 한 번만 설정하기

Salesforce Setup에서 Connected App을 만들고, OAuth 설정을 활성화한 다음, Use digital signatures 아래에서 자체 서명 인증서를 업로드하세요 — 인증서는 Salesforce로, 짝이 되는 RSA 개인 키는 MailInApp으로 갑니다. Permitted Users를 Admin approved users are pre-authorized로 설정하세요. 이것이 바로 교환을 비대화형으로 만드는 부분입니다: 스크립트가 클릭해서 통과할 동의 화면이 존재하지 않습니다. Connected App의 Consumer Key와 조직의 My Domain URL을 기록해 두세요 — 둘 다 MailInApp 쪽 연결 설정에 입력합니다.

SOQL 쿼리로 향하게 하기

데이터 소스의 Endpoint는 REST 쿼리 URL이며, 쿼리 문자열이 곧 실제로 돌려받는 데이터입니다.

SELECT Name, Amount, StageName, CloseDate FROM Opportunity WHERE IsClosed = false

Data path를 records로 설정하세요 — Salesforce는 쿼리 결과를 records 배열로 감싸서 반환합니다. Owner.Email 같은 관계 필드는 중첩되어 반환되며 MailInApp의 행 파서에 의해 버려지므로, 쿼리는 평면 형태로 유지하세요. 나중에 필터링이나 병합에 담당자 식별자가 필요하다면 대신 OwnerId를 선택하세요.

병합 태그가 아니라 블록을 바로 연동하기

스튜디오의 데이터 패널에서 collection 역할로 이 연결을 프로젝트에 추가하세요 — 반복 블록이 사용하는 것과 동일한 연동입니다. 그 지점부터 KPI 스코어카드, 막대, 선, 원형 차트 블록이 각자의 인스펙터에서 직접 연동될 수 있습니다.

  • Amount에 합계 집계를 설정한 KPI 스코어카드는 실시간 "전체 미결 파이프라인" 수치가 됩니다.
  • StageName으로 그룹화하고 Amount를 시리즈(역시 합계 집계)로 설정한 막대 그래프는 단계별 파이프라인 내역이 됩니다.

두 블록 모두 직접 입력할 병합 태그가 하나도 필요하지 않습니다 — 연동이 그 일을 대신하며, 거래가 단계를 이동하거나 성사되어도 둘 다 계속 정확합니다.

예약 발송으로 보내기

매주 반복되는 발송은 발동할 때마다 SOQL 쿼리를 다시 실행하고 Salesforce의 현재 행에 맞춰 두 블록을 다시 렌더링합니다 — 같은 다이제스트 구조에, 매주 월요일 새로운 수치가, 아무도 수작업으로 다시 만들 필요 없이 반영됩니다. 각 Opportunity 자신의 Salesforce URL로 향하는 버튼 블록은 다이제스트를 읽는 사람에게 눈길을 끈 수치 뒤의 레코드를 한 번의 클릭으로 여는 방법을 제공합니다.

시작하기

JWT Bearer 흐름을 위한 인증서로 Salesforce Connected App을 만들고, Consumer Key, 연동 사용자명, 개인 키로 MailInApp의 데이터 소스 탭에서 연결한 다음, records를 데이터 경로로 하는 SOQL 쿼리로 엔드포인트를 지정하고, 스튜디오의 데이터 패널에서 KPI 스코어카드와 막대 그래프를 여기에 연동하세요. 필드별 전체 설정 방법은 Salesforce 연동 가이드를 참고하세요.

일반적인 제작 및 발송 순서

  1. 1

    서버 간 접근을 위한 Salesforce Connected App 만들기

    OAuth 설정을 활성화하고, 자체 서명 인증서를 업로드하고, JWT Bearer Flow를 켠 다음, Permitted Users를 "Admin approved users are pre-authorized"로 설정하세요 — 그러면 사람이 동의 화면을 클릭할 필요가 없습니다.

  2. 2

    Salesforce를 API 데이터 소스로 연결하기

    MailInApp의 데이터 소스 탭에서 OAuth2 JWT Bearer를 선택한 다음, 토큰 URL, Connected App의 Consumer Key(발급자로), 연동 사용자의 사용자명(주체로), 로그인 호스트(대상으로), 그리고 짝이 되는 개인 키를 붙여넣으세요.

  3. 3

    엔드포인트를 SOQL 쿼리로 지정하기

    엔드포인트는 조직의 REST 쿼리 URL이고, 데이터 경로는 "records"입니다 — SELECT Name, Amount, StageName, CloseDate FROM Opportunity WHERE IsClosed = false 같은 쿼리는 조회할 때마다 실시간 파이프라인 행을 반환합니다.

  4. 4

    KPI와 차트 블록을 바로 연동하기

    스튜디오의 데이터 패널에서 소스에 컬렉션 역할 연동을 추가한 다음, KPI 스코어카드의 값 필드(Amount의 합계)와 막대 그래프의 그룹화 기준(StageName)을 여기에 연동하세요 — 직접 입력할 병합 태그가 없습니다.

  5. 5

    반복 예약으로 발송하기

    매주 반복되는 발송은 매번 쿼리를 다시 실행하고 Salesforce의 현재 행에 맞춰 두 블록을 다시 렌더링하므로, 월요일의 다이제스트는 항상 월요일의 파이프라인을 반영합니다.

자주 묻는 질문

액세스 토큰을 수동으로 갱신해야 할 때가 있나요?

아니요 — 캐시된 토큰이 만료에 가까워질 때마다, 그리고 호출이 인증 실패로 돌아올 때도, MailInApp이 새 JWT 어설션에 서명해 자동으로 새 액세스 토큰으로 교환합니다. 이 흐름에는 관리해야 할 리프레시 토큰이 없습니다 — 낡은 토큰은 그저 새로 발급된 토큰으로 교체될 뿐입니다.

제 Salesforce 비밀번호가 MailInApp에 전달되나요?

아니요 — JWT Bearer 흐름은 인증서로 검증되는 서명된 어설션으로 인증하며, 사용자명/비밀번호 교환은 전혀 사용하지 않습니다. MailInApp이 저장하는 유일한 비밀 정보는 그 인증서 쌍의 개인 키 절반이며, 저장한 뒤에는 모든 응답에서 마스킹됩니다.

각 영업 담당자가 자신의 Opportunity만 볼 수 있나요?

SOQL 쿼리가 필터링할 평면 필드를 반환하는 경우에만 가능합니다 — Owner.Email 같은 관계 필드는 중첩된 객체로 돌아오며, MailInApp의 행 파서가 중첩된 값을 평탄화하지 않으므로 버려집니다. 대신 OwnerId 같은 평면 식별자를 선택하고, 오디언스 자신의 연락처 행에 있는 일치하는 필드로 연동된 차트 블록을 필터링하면(차트의 데이터 연동 필터는 수신자 병합 태그를 참조할 수 있습니다) 수신자별로 같은 공유 쿼리를 나눠서 보여줄 수 있습니다.

어떤 Salesforce 에디션이 필요한가요?

REST API 접근이 활성화된 에디션이면 됩니다 — Enterprise, Unlimited, Performance, Developer Edition에는 기본 포함되어 있고, Professional과 Essentials는 API 애드온이 필요합니다. 연동 사용자 자신의 프로필에도 API Enabled가 켜져 있어야 합니다.

프로덕션 대신 샌드박스에도 사용할 수 있나요?

네 — 토큰 URL 호스트와 대상 값 모두에 https://test.salesforce.com을 사용하고, 엔드포인트는 프로덕션이 아니라 샌드박스 자신의 My Domain URL로 지정하세요.

스튜디오에서 만들어보세요

무료 플랜으로 시작하세요 — 모든 인터랙티브 블록과 전체 폴백 엔진이 모든 플랜에 포함됩니다.