고객 연락처 생성/업데이트 API
목적
이 API는 외부 서비스의 회원가입, 예약, 문의 폼 등에서 수집한 고객 정보를 Sidetalk 고객 연락처에 생성하거나 업데이트합니다.
동일한 memberId가 이미 존재하면 기존 고객 정보를 업데이트하고, 존재하지 않으면 새 고객 정보를 생성합니다.
URL
JavaScript
💡https://api.sidetalk.ai/v1/usersHTTP 메서드
POST
헤더
| 헤더 | 값 | 설명 |
|---|---|---|
| Content-Type | application/json | 요청 본문이 JSON 형식임을 나타냅니다. |
| Authorization | Bearer <api_key> | Sidetalk 대시보드에서 설치하기 메뉴에 제공된 API 키를 사용하세요. |
본문
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
| userInfoId | Number/String | 조건부 필수 | Sidetalk 고객정보 ID입니다. 기존 고객 연락처를 직접 업데이트할 때 사용합니다. |
| memberId | String | 조건부 필수 | 외부 서비스의 회원 고유 ID입니다. 동일한 memberId가 있으면 기존 고객 연락처를 업데이트합니다. |
| sessionId | String | 조건부 필수 | 채팅 세션 ID입니다. 비회원 채팅 세션 기준으로 고객 연락처를 생성/업데이트할 때 사용합니다. |
| userName | String | 아니요 | 고객 이름입니다. Sidetalk 고객 정보의 userName에 저장됩니다. |
| userEmail | String | 아니요 | 고객 이메일입니다. Sidetalk 고객 정보의 userEmail에 저장됩니다. |
| userPhone | String | 아니요 | 고객 전화번호입니다. Sidetalk 고객 정보의 userPhone에 저장됩니다. |
| customerMemory | String | 아니요 | 고객 메모입니다. |
| extraFields | Object | 아니요 | 추가 고객 정보 항목입니다. key는 Sidetalk 대시보드 고객정보 설정의 항목 코드와 동일해야 합니다. |
| customerAlias | String | 아니요 | 고객 이름(userName)과 별도로 관리하는 고객 별칭입니다. 생략하면 기존 별칭을 유지합니다. |
userInfoId, memberId, sessionId 중 하나는 반드시 포함해야 합니다.
extraFields 사용 방법
Sidetalk 고객정보 설정에서 추가 항목을 만든 경우, 해당 항목의 항목 코드를 extraFields의 key로 사용합니다.
예를 들어 고객정보 설정에 다음 항목이 있다면:
| 항목 이름 | 항목 코드 |
|---|---|
| 회사 이름 | company_name |
요청 본문은 다음처럼 전송합니다.
JavaScript
{
"extraFields": {
"company_name": "코스모스팜"
}
}요청 예시
회원 고객 생성/업데이트
memberId를 기준으로 고객 연락처를 생성하거나 업데이트합니다.
회원가입, 로그인 회원 정보 동기화, 외부 서비스 회원 정보 연동에 사용합니다.
JavaScript
curl -X POST https://api.sidetalk.ai/v1/users \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${API_KEY}" \
-d '{
"memberId": "user_123",
"userName": "홍길동",
"userEmail": "hong@example.com",
"customerAlias": "VIP 고객",
"userPhone": "01012345678",
"customerMemory": "VIP 고객",
"extraFields": {
"company_name": "코스모스팜"
}
}'비회원 고객 생성/업데이트
sessionId를 기준으로 고객 연락처를 생성하거나 업데이트합니다.
채팅 세션, 비회원 예약, 비회원 문의 폼처럼 회원 ID가 없는 고객 정보 연동에 사용합니다.
JavaScript
curl -X POST https://api.sidetalk.ai/v1/users \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${API_KEY}" \
-d '{
"sessionId": "chat_session_abc123",
"userName": "홍길동",
"customerAlias": "VIP 고객",
"userEmail": "hong@example.com",
"userPhone": "01012345678",
"customerMemory": "VIP 고객",
"extraFields": {
"company_name": "코스모스팜"
}
}'기존 고객 연락처 직접 업데이트
Sidetalk 고객정보 ID를 알고 있는 경우 userInfoId로 직접 업데이트할 수 있습니다.
JavaScript
curl -X POST https://api.sidetalk.ai/v1/users \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${API_KEY}" \
-d '{
"userInfoId": 123,
"userName": "홍길동",
"customerMemory": "상담 후 VIP 고객으로 변경"
}'응답 본문
JavaScript
{
"success": true,
"data": {
"siteId": 1,
"userInfoId": 123,
"sessionId": "",
"memberId": "user_123",
"userName": "홍길동",
"customerAlias": "VIP 고객",
"userEmail": "hong@example.com",
"userPhone": "821012345678",
"userPhoneCountryCode": "82",
"customerMemory": "{\"_sidetalk_customer_profile\":\"1\",\"memo\":\"VIP 고객\",\"extra_fields\":{\"company_name\":\"코스모스팜\"}}",
"isManual": "1",
"createdAt": "20260527143000",
"updatedAt": "20260527143000"
}
}- userPhone은 저장 시 숫자만 정규화되어 저장될 수 있습니다. 예: 01012345678 → 821012345678
- userPhoneCountryCode가 함께 저장될 수 있습니다. 예: 82
응답 필드 설명
| 필드 | 타입 | 설명 |
|---|---|---|
| success | Boolean | 요청 성공 여부입니다. |
| data | Object | 저장된 고객정보 데이터입니다. |
| data.userInfoId | Number | Sidetalk 고객정보 ID입니다. |
| data.memberId | String | 요청한 외부 회원 고유 ID입니다. |
| data.sessionId | String | 연결된 채팅 세션 ID입니다. |
| data.userName | String | 저장된 고객 이름입니다. |
| data.userEmail | String | 저장된 고객 이메일입니다. |
| data.userPhone | String | 저장된 고객 전화번호입니다. |
| data.customerMemory | String | 고객 메모와 추가 항목 데이터입니다. |
| data.userPhoneCountryCode | String | 저장된 전화번호 국가번호입니다. |
| data.isManual | String | 직접 입력 여부입니다. 1 또는 0입니다. |
| data.createdAt | String | 생성 일시입니다. |
| data.updatedAt | String | 수정 일시입니다. |
오류 응답
JavaScript
{
"success": false,
"error": "userInfoId, memberId, or sessionId is required."
}JavaScript
{
"success": false,
"error": "At least one customer field is required."
}JavaScript
{
"success": false,
"error": "Name must be at least 2 characters."
}JavaScript
{
"success": false,
"error": "Invalid phone format."
}| 필드 | 타입 | 설명 |
|---|---|---|
| success | Boolean | 요청 실패 여부입니다. |
| error | String | 오류 메시지입니다. |
예시 이미지

참고 사항
- memberId와 sessionId를 함께 보내면, 비회원 채팅 세션으로 쌓인 CRM 활동이 해당 memberId 고객 연락처로 연결될 수 있습니다.
- 이 API로 저장된 고객 연락처는 CRM 활동 이력의 기준 고객으로 사용됩니다.
- 외부 API로 저장된 연락처는 고객 연락처 화면에서 외부 API 연동 이력으로 확인할 수 있습니다.
- 동일한 userInfoId가 있으면 해당 고객 연락처를 직접 업데이트합니다.
- 동일한 sessionId가 있으면 해당 비회원 세션의 고객 연락처를 생성하거나 업데이트합니다.
- 하위 호환 및 외부 서비스 연동 편의를 위해 다음 별칭 필드도 지원됩니다.
- customerAlias는 userName과 별도로 저장되는 고객 별칭입니다.
- customerAlias를 생략하면 기존 별칭은 변경되지 않습니다.
| 대표 필드 | 지원 별칭 |
|---|---|
| userInfoId | user_info_id, id |
| memberId | member_id, wpUserId, wp_user_id, userId, user_id |
| sessionId | session_id |
| userName | user_name |
| userEmail | user_email |
| userPhone | user_phone |
| userPhoneCountryCode | user_phone_country_code |
| customerMemory | customer_memory |
| extraFields | extra_fields |
| isManual | is_manual |
| customerAlias | customer_alias |
