이 가이드에서는 Discourse Salesforce 플러그인을 사용하여 Discourse를 Salesforce에 연결하는 데 필요한 구성 단계를 설명합니다.
Discourse Salesforce는 Enterprise 요금제에서만 사용할 수 있습니다.
필요 사용자 수준: 관리자
단계 0: 조직 내에서 적임자 찾기
Discourse에서 아무것도 시작하기 전에, Salesforce 측에서 요구되는 사항을 처리하기 위해 조직 내에서 참여해야 할 적임자가 누구인지 먼저 확인하십시오.
Salesforce 관리자
대상자: 대부분의 조직에서는 보통 팀이 "Salesforce 관리자"라고 부르는 사람, 즉 Salesforce 조직의 구성을 관리하는 사람을 말합니다(IT 시스템 관리자와는 다를 수 있습니다).
역할: Salesforce Setup에서 External Client App(또는 Connected App)을 생성하고, OAuth 설정을 구성하며, Consumer Key와 Consumer Secret을 검색하여 Salesforce 측의 초기 설정을 처리합니다.
필요한 조건: Salesforce Setup 및 특히 External Client App Manager에 접근할 수 있어야 합니다. Salesforce에서는 이를 위해 Customize Application 시스템 권한이 필요합니다. 이 권한은 표준 System Administrator 프로필에 포함되어 있습니다. 설정을 수행하는 사람이 System Administrator 프로필을 가지고 있지 않다면, Salesforce 관리자가 "Customize Application"을 포함하는 권한 세트(permission set)를 해당 사용자에게 부여해야 합니다.
Salesforce 통합 사용자
대상자: Discourse 플러그인이 Salesforce에 API 호출을 할 때 계정 자격 증명을 사용하는 Salesforce 사용자입니다.
역할: Discourse의 salesforce username 설정에 입력할 사용자 이름을 제공하여 Discourse에서 Salesforce로 이루어지는 모든 API 호출을 가능하게 합니다.
필요한 조건: 이 사용자에게는 다음 권한이 있어야 합니다:
| 권한 | 필요한 이유 |
|---|---|
| API Enabled | 모든 Salesforce API 접근에 필요 |
| Create, Read, Edit on Lead | Discourse 사용자로부터 리드(Lead) 생성 및 연결 |
| Create, Read, Edit on Contact | Discourse 사용자로부터 연락처(Contact) 생성 및 연결 |
| Create, Read, Edit on Case | Discourse 주제(topic)로부터 케이스(Case) 생성 |
| Create on Case Comment | 주제 답변을 케이스 코멘트(Case Comment)로 동기화 |
| Create on FeedItem (Chatter) | 주제 활동 내용을 Chatter에 게시 |
참고: Salesforce 통합 사용자는 Salesforce 관리자일 수도 있습니다. 그러나 보안 모범 사례로서, 통합 사용자용으로는 더 좁게 권한이 부여된 별도의 계정을 사용하는 것을 권장합니다.
단계 1: 인증서 및 개인 키 생성
역할: Discourse 관리자
Discourse Salesforce는 Salesforce와 인증하기 위해 JWT Bearer Flow를 사용합니다. 이를 위해 RSA 키 쌍이 필요하며, 여기에는 플러그인의 신원을 확인하는 데 Salesforce가 사용하는 **공개 인증서(public certificate)**와 Discourse가 요청에 서명하는 데 사용하는 **개인 키(private key)**가 포함됩니다.
- 이 지침을 따르서 키 쌍을 생성합니다:
server.crt- Discourse가 권한을 부여받은 앱임을 증명하는 공개 인증서server.key- Salesforce에 대한 Discourse의 API 요청에 서명하는 개인 키
server.crt파일을 Salesforce 관리자에게 보내 단계 3에서 업로드할 수 있도록 하십시오.server.key를 보관해 두었다가 단계 5에서 Discourse Salesforce 설정에 붙여넣으십시오.
단계 2: Salesforce에서 External Client App 생성
역할: Salesforce 관리자
-
Salesforce에 로그인합니다.
-
오른쪽 상단의 톱니바퀴 아이콘(
)을 클릭하고 Setup을 선택합니다. -
Quick Find 상자에 External Client App Manager를 검색하고 선택합니다.
-
New External Client App을 클릭합니다.
참고: 이 단계에서는 Salesforce Spring '25에 도입된 External Client App Manager를 사용합니다. 조직이 이전 릴리스를 사용하는 경우, UI가 App Manager 또는 Connected Apps로 표시될 수 있습니다 — 기본 설정은 동일합니다.
단계 3: 기본 정보 및 OAuth 설정 작성
역할: Salesforce 관리자
-
Basic Information 섹션을 작성합니다(App Name 및 Contact Email은 필수입니다).
-
API (Enable OAuth Settings) 섹션을 확장하고 Enable OAuth 설정을 확인합니다.
-
이 섹션에서 다음 설정을 구성합니다:
- Callback URL: 다음 두 링크를 모두 추가하며,
<your-discourse-site>을(를) Discourse 사이트의 전체 URL(예:meta.discourse.org)로 대체합니다:
https://<your-discourse-site>
https://<your-discourse-site>/auth/salesforce/callback
두 URL 모두 끝에 뒷 슬래시 /가 없어야 합니다! - Available OAuth Scopes: 다음 세 가지를 모두 추가합니다:
- Access the identify URL service (id, profile, email, address, phone)
- Manage user data via APIs (api)
- Perform requests at any time (refresh_token, offline_access)
- Flow Enablement: 다음 두 가지를 모두 활성화합니다:
- Enable Client Credentials Flow
- Enable JWT Bearer Flow — 플러그인이 리드(Leads), 연락처(Contacts), 케이스(Cases)를 생성하려면 이 항목이 필수입니다.
- Callback URL: 다음 두 링크를 모두 추가하며,
-
Certificate Upload 아래에서 Upload files를 클릭하고 단계 1의
server.crt파일을 업로드합니다. -
Create를 클릭합니다.
단계 4: Consumer Key 및 Consumer Secret 검색
역할: Salesforce 관리자
-
새로 생성된 External Client App에서 Settings 탭을 클릭합니다.
-
아래로 스크롤하여 OAuth Settings를 확장합니다.
-
Consumer Key and Secret을 클릭합니다.
-
프롬프트가 표시되면 Salesforce 로그인 자격 증명을 다시 입력합니다.
-
Consumer Key와 Consumer Secret을 복사하여 단계 5를 위해 Discourse 관리자에게 보내십시오.
단계 5: Discourse 플러그인 설정 구성
역할: Discourse 관리자
-
Discourse에서 Admin → Plugins → Salesforce → Settings으로 이동합니다.
-
다음 설정을 작성합니다:
설정 값 salesforce enabled통합을 활성화하려면 상자를 선택하세요 salesforce client id단계 4의 Consumer Key salesforce client secret단계 4의 Consumer Secret salesforce rsa private key단계 1의 server.key파일 내용을 전체 붙여넣기salesforce usernameSalesforce 통합 사용자의 사용자 이름 salesforce authorization server url사용자 정의 Salesforce 도메인(예: https://mycompany.my.salesforce.com)을 사용하는 경우에만 필요 -
Save changes를 클릭합니다.
단계 6: Salesforce에서 Discourse 앱 승인
역할: Salesforce 통합 사용자
<your-discourse-site>을(를) Discourse 사이트의 전체 URL(예:meta.discourse.org)로 대체하여https://<your-discourse-site>/salesforce/admin/authorize로 이동합니다.- Salesforce로 리디렉션되며 앱 승인을 요청하는 메시지가 표시됩니다.
- Salesforce에 로그인하고 앱에 접근 권한을 부여합니다.
이 단계를 완료하면 설정이 모두 완료됩니다. Discourse에서 아무 사용자 프로필이나 확인하여 정상 작동 여부를 확인할 수 있습니다 — 관리자 메뉴에 Sync with Salesforce 옵션이 표시되어야 합니다.
문제 해결
설정이 완료된 후에도 플러그인이 제대로 작동하지 않으면 다음을 먼저 확인하십시오:
-
관리자 대시보드 상태 점검: 구성이 잘못되면 플러그인은
/admin에서 두 가지 경고를 표시합니다:SalesforceInvalidCredentials: Consumer Key, Consumer Secret, RSA 개인 키 또는 사용자 이름이 올바르지 않음SalesforceAppNotApproved: 승인 단계(단계 6)가 완료되지 않았거나 연결된 앱이 거부됨
-
상세 로그 활성화:
salesforce_auth_verbose_logging사이트 설정을 켜서 상세한 인증 출력을 Discourse의/logs에 기록합니다. 일반적인 오류와 원인:
| 증상 | 예상 원인 |
|---|---|
| 리드(Lead) 또는 연락처(Contact) 생성 시 “Insufficient privileges” | 통합 사용자가 Lead 또는 Contact 객체에 대한 Create/Edit 권한이 없음 |
| 케이스(Case) 생성 시 “Insufficient privileges” | 통합 사용자가 Case 또는 Case Comment 권한이 없음 |
| 승인 단계에서 “Invalid grant” | RSA 키가 단계 3에서 업로드된 인증서와 일치하지 않거나 JWT Bearer Flow가 활성화되지 않음 |
| 리드(Lead) 또는 연락처(Contact) 생성 시 “DUPLICATE_VALUE” 오류 | 사용자가 이미 Salesforce에 존재하는 경우의 예상 동작입니다 — 플러그인이 이를 처리하지만, 자세한 내용은 메인 플러그인 문서를 참조하세요 |
| Chatter 게시물이 나타나지 않음 | 통합 사용자가 FeedItem Create 권한이 없을 수 있습니다 |






