Salesforce

ElevenLabs 에이전트를 Salesforce CRM과 연결하세요

개요

ElevenLabs AI 에이전트를 Salesforce CRM과 연결하여 고객 데이터에 액세스하고, 리드를 관리하며, 영업 기회를 생성하세요. 이 통합을 사용하면 에이전트가 기존 고객 레코드를 조회하고, 새 리드와 연락처를 생성하며, 대화 중 Salesforce 객체를 쿼리할 수 있습니다.

기능

기능지원
제로 보존 모드(ZRM)지원되지 않음
트리거의 첨부 파일지원되지 않음 — 수신 케이스 댓글 및 이메일의 첨부 파일은 에이전트로 전달되지 않음
도구의 첨부 파일지원되지 않음 — 도구는 텍스트만 처리함

설정

이 통합은 인증에 Salesforce OAuth 2.0 Client Credentials를 사용합니다. Salesforce에서 External Client App을 만들어야 합니다.

1

External Client App 만들기

  1. 관리자로 Salesforce 조직에 로그인합니다.
  2. Setup > External Client App Manager로 이동합니다.
  3. New External Client App을 클릭합니다.
  4. External Client App Name(예: ElevenLabs Agents), API Name, Contact Email을 입력합니다.
  5. API (Enable OAuth Settings) 에서 다음을 설정합니다.
    • Enable OAuth 및 Enable Client Credentials Flow를 선택합니다.
    • Callback URL: https://api.elevenlabs.io/oauth/callback
    • OAuth Start URL: https://api.elevenlabs.io/oauth/start
    • Selected OAuth Scopes: 다음 스코프를 추가합니다.
      • Full access (full)
      • Perform requests on your behalf at any time (refresh_token, offline_access)
      • Manage user data via api
  6. Create를 클릭합니다.
  7. 앱 페이지에서 Settings 탭을 열고 OAuth Settings로 이동한 후 Consumer Key and Secret을 클릭합니다.
  8. 인증에 필요한 Consumer Key와 Consumer Secret을 복사합니다.
2

OAuth Client Credentials 흐름 구성

Client Credentials Flow는 사용자 상호작용이 필요 없는 서버 간 통합에 권장됩니다. Salesforce 관리자가 이 흐름을 활성화했는지 확인하세요.

  1. External Client App에서 Edit를 클릭합니다.
  2. Enable Client Credentials Flow를 선택합니다. 그러면 Run As 필드가 나타납니다.
  3. Run As를 관리자 사용자 또는 전용 서비스 계정으로 설정합니다. 이 설정은 모든 API 호출의 권한을 결정합니다.
  4. Permitted Users를 Admin approved users are pre-authorized로 설정합니다.
  5. Save를 클릭합니다.

Run As 사용자가 모든 API 호출의 권한을 결정합니다. 시스템 관리자 프로필이 있거나 API 액세스 및 에이전트에 필요한 객체(Contact, Lead, Account 등)에 대한 권한이 있는 사용자 지정 프로필을 가진 사용자를 선택하세요. 사용자 레코드에서 API Enabled 권한이 선택되어 있어야 합니다.

3

Salesforce 도메인 찾기

API 호출에는 Salesforce 도메인이 필요합니다.

방법 1: 현재 URL 확인

Salesforce에 로그인한 상태에서 브라우저 주소 표시줄을 확인합니다.

  • Lightning Experience: https://acme.lightning.force.com/
  • My Domain: https://acme.my.salesforce.com/

방법 2: Setup > Company Information

Setup > Company Information으로 이동하여 My Domain URL 또는 조직 정보를 확인합니다.

방법 3: Setup > Domain Management

Setup > Domain Management > My Domain으로 이동합니다. 페이지 상단에 도메인이 표시됩니다.

일반적인 도메인 형식:

  • https://acme.my.salesforce.com (My Domain)
  • https://acme.lightning.force.com (Lightning)
  • https://acme.develop.my.salesforce.com (Sandbox)
후행 슬래시 없이 전체 도메인을 사용하세요.
4

ElevenLabs에서 연결

ElevenLabs 통합 설정에서 Salesforce 인스턴스 호스트 이름(예: acme.my.salesforce.com), Client ID(Consumer Key), Client Secret(Consumer Secret)을 입력합니다.

데모 비디오

이 데모는 레거시 웹훅 도구를 사용합니다. 기본 Salesforce 통합을 사용하는 경우 도구가 자동으로 구성되므로 웹훅을 수동으로 설정할 필요가 없습니다.

Salesforce 통합 데모

작동 방식

1

초기 고객 문의

에이전트가 고객 정보를 수집하고 관련 질문을 통해 비즈니스 요구 사항과 현재의 과제를 파악합니다.

2

고객 데이터 조회

에이전트가 salesforce_search_records를 사용해 기존 레코드를 확인하고 연락처, 계정 또는 리드를 찾습니다. salesforce_get_record로 전체 세부 정보를 가져와 대화를 개인화합니다.

3

리드 적격성 평가

고객이 신규 고객인 경우 에이전트가 연락처 정보를 수집하고, 비즈니스 요구를 평가하며, 적절한 영업 프로세스 또는 라우팅을 결정합니다.

4

레코드 생성

에이전트가 salesforce_create_record를 사용해 적절한 레코드(리드, 연락처 또는 기회)를 만들고, 고객에게 생성 사실을 확인한 뒤 다음 단계를 안내합니다.

Workplace Auth Connections를 사용하여 도구 인증을 관리할 수 있으며, 토큰 갱신은 자동으로 처리됩니다. 도구는 기술적 ID 대신 사람이 읽을 수 있는 이름과 설명을 반환하여 대화 품질을 높입니다.

도구 구성

salesforce_search_records, salesforce_get_record, salesforce_create_record의 세 가지 웹훅 도구를 사용할 수 있습니다. 각각의 인증은 Workplace Auth Connection을 사용해 구성하세요.

인증 - Workplace OAuth2 연결

1

Workplace Auth Connections로 이동

ElevenLabs 대시보드에서 Agents > Workplace Auth Connections로 이동한 뒤 Add Auth를 클릭합니다.

2

Salesforce 연결 구성

Salesforce 통합에 다음 필드를 입력합니다.

Connection Name: Salesforce CRM

Client ID

  • External Client App의 Consumer Key
  • 예: 3MVG9JJlvRU3L4pRiOu8pQt5xXB4xGZGm0yW...

Client Secret

  • External Client App의 Consumer Secret
  • 예: 1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF...

Token URL

  • Salesforce 도메인의 OAuth 토큰 엔드포인트
  • 형식: https://{domain}.my.salesforce.com/services/oauth2/token
  • 예: https://acme.my.salesforce.com/services/oauth2/token

Scopes (선택 사항)

  • Salesforce API 액세스용 OAuth 스코프
  • 권장: full, api, refresh_token
  • External Client App의 기본 스코프를 사용하려면 비워 둡니다.

Extra Parameters (JSON)

  • 설정에 따른 추가 OAuth 파라미터
  • Client Credentials 흐름 예시:
{
"grant_type": "client_credentials"
}
4

인증 연결 만들기

Create auth connection을 클릭하여 구성을 추가합니다.

5

도구 구성에서 사용

연결에 성공하면 저장하고, 웹훅 도구 구성의 Authentication 섹션에서 이를 참조합니다.

Workplace Auth Connections가 토큰 갱신을 자동으로 처리하므로 토큰을 수동으로 관리할 필요가 없습니다.

웹훅 도구 구성

각 도구의 Authentication 섹션에 Workplace Auth Connection(OAuth2)을 추가합니다. 아래 탭에서 각 도구의 구성을 확인하세요.

이름: salesforce_search_records 설명: SOQL 쿼리를 사용하여 Salesforce의 기존 레코드를 검색합니다. ID뿐 아니라 이름을 포함한 사람이 읽을 수 있는 정보를 항상 반환합니다. 메서드: GET URL: https://acme.my.salesforce.com/services/data/v58.0/query/?q={soql_query}

헤더:

  • Content-Type: application/json

쿼리 파라미터:

  • q: SOQL 쿼리 문자열(예: “SELECT Id, Name, Email FROM Contact WHERE Email = ‘example@email.com’”)

도구 JSON:

{
"type": "webhook",
"name": "salesforce_search_records",
"description": "Searches for existing records in Salesforce using SOQL queries. Always returns human-readable names and details, not just IDs.",
"api_schema": {
"url": "https://acme.my.salesforce.com/services/data/v58.0/query/",
"method": "GET",
"path_params_schema": [],
"query_params_schema": [
{
"id": "q",
"type": "string",
"description": "SOQL query string to search for records. Always include Name fields and other human-readable information. Example: SELECT Id, Name, Email, Phone, Company FROM Contact WHERE Email = 'customer@example.com'. For Opportunities, include: SELECT Id, Name, StageName, Amount, CloseDate, Account.Name FROM Opportunity",
"dynamic_variable": "",
"constant_value": "",
"required": true,
"value_type": "llm_prompt"
}
],
"request_body_schema": null,
"request_headers": [
{
"type": "value",
"name": "Content-Type",
"value": "application/json"
}
]
},
"response_timeout_secs": 30,
"dynamic_variables": {
"dynamic_variable_placeholders": {}
}
}

일반적인 Salesforce 객체

객체용도일반적인 필드
Lead아직 적격성 평가를 거치지 않은 잠재 고객FirstName, LastName, Email, Phone, Company, Industry, Status
Contact계정과 연결된 적격 개인FirstName, LastName, Email, Phone, AccountId, Title
Account조직 또는 회사Name, Type, Industry, Phone, BillingAddress
Opportunity진행 중인 영업 거래Name, StageName, Amount, CloseDate, AccountId
Case고객 서비스 요청Subject, Description, Status, Priority, ContactId

일반적인 SOQL 쿼리

에이전트의 시스템 프롬프트를 맞춤 설정할 때 다음 SOQL 쿼리를 시작점으로 사용하세요. 모든 쿼리는 기술적 ID 대신 사람이 읽을 수 있는 정보를 반환합니다.

이메일로 연락처 검색

SELECT Id, Name, Email, Phone, Title, Account.Name, Account.Type FROM Contact WHERE Email = 'customer@example.com'

이메일 또는 전화번호로 리드 검색

SELECT Id, Name, Email, Phone, Company, Industry, Status, LeadSource, Title FROM Lead WHERE Email = 'customer@example.com' OR Phone = '+1234567890'

이름으로 계정 검색

SELECT Id, Name, Type, Industry, Phone, BillingCity, BillingState, Website FROM Account WHERE Name LIKE '%Company Name%'

최근 기회 검색

SELECT Id, Name, StageName, Amount, CloseDate, Account.Name, Account.Type, Owner.Name, Description FROM Opportunity WHERE CreatedDate = THIS_MONTH

계정별 기회 검색

SELECT Id, Name, StageName, Amount, CloseDate, Probability, NextStep, Owner.Name FROM Opportunity WHERE Account.Name LIKE '%Company Name%'

통합 테스트

External Client App을 설정하고 통합을 연결한 후, 프로덕션에 배포하기 전에 테스트하세요.

  1. 검색 기능: 에이전트에게 기존 연락처를 검색하도록 요청합니다.
  2. 레코드 생성: 에이전트가 새 리드 또는 연락처를 만들도록 합니다.
  3. 데이터 조회: 에이전트가 상세 고객 정보를 가져올 수 있는지 확인합니다.

케이스 댓글 트리거: Email-to-Case용 이메일 답장

Salesforce Case Comment 트리거(Service Cloud 케이스에 대한 에이전트 자동 응답)를 활성화한 경우, 수신 이메일이 하나 이상 있는 케이스에 대한 답장은 단순한 내부 케이스 댓글이 아니라 실제 스레드 이메일로 고객에게 전송됩니다. 이는 케이스의 Origin 선택 목록 값이 아닌 수신 이메일 유무를 기준으로 하므로, 조직에서 리터럴 값인 “Email” 대신 “Email - Returns”와 같은 맞춤 Origin 값을 사용해도 정상적으로 작동합니다. 수신 이메일이 없는 케이스는 기존과 동일하게 공개 케이스 댓글로 계속 게시됩니다. 고객 원본 이메일에서 참조(CC)된 주소는 사람 상담원의 “전체 답장”처럼 답장에도 자동으로 참조에 추가됩니다. 단, 조직의 Email-to-Case 라우팅 주소는 의도적으로 참조에서 제외됩니다. 답장이 Email-to-Case로 다시 수집되어 에이전트가 자신의 메시지에 다시 트리거되는 것을 방지하기 위해서입니다.

이메일 답장을 전송하려면 케이스 댓글만 사용할 때보다 추가 설정이 필요합니다.

  • Run As 사용자의 프로필 또는 권한 세트에는 통합에 이미 필요한 API Enabled 권한 외에 Send Email 시스템 권한도 활성화되어 있어야 합니다(Setup > Users > Profiles의 System Permissions 아래).
  • 조직의 Email Deliverability 설정(Setup > Email > Deliverability)에서 외부 이메일을 허용해야 합니다. Sandbox는 기본적으로 제한된 설정을 사용하며, 이 경우 발신 이메일이 조용히 차단됩니다.
  • 답장을 Run As 사용자 자신의 사서함이 아닌 지원 별칭에서 보내려면 트리거의 Org-Wide Email Address Id 필드에 Organization-Wide Email Address의 Id를 설정합니다(Setup > Organization-Wide Addresses > 주소 클릭 > URL에서 Id 복사). Run As 사용자 자신의 주소에서 보내려면 비워 두세요.
  • 트리거의 Email-to-Case Routing Address(es) 필드를 조직의 Email-to-Case 주소로 설정합니다(여러 개인 경우 쉼표로 구분, Setup > Email-to-Case). 이 설정이 없으면 통합은 고객 이메일의 To 주소에서 라우팅 주소를 추정합니다. 라우팅 주소가 주 수신자가 아니라 참조에만 포함된 케이스는 이 방식으로 놓치며, 그런 상황에서 답장에 해당 주소를 다시 참조로 추가하면 에이전트가 자신의 메시지에 다시 트리거됩니다.

고객 조직에서 이를 구성하지 않은 경우 이메일 전송 실패 시 공개 케이스 댓글 게시으로 대체되므로 답장이 조용히 누락되지는 않습니다. 단, 위 설정이 완료될 때까지 고객은 이메일로 답장을 받지 못합니다.

보안 고려 사항

  • 모든 API 호출에 HTTPS 엔드포인트를 사용하세요.
  • Salesforce에서 적절한 필드 수준 보안이 구성되었는지 확인하세요.
  • Run As 사용자의 권한이 통합에서 액세스할 수 있는 데이터를 결정하므로 적절히 범위를 제한하세요.
  • API 액세스 및 사용량을 정기적으로 감사하세요.

유용한 링크