API

활동 수정

작성일 2026.03.24 | 수정일 2026.05.08

PATCH/crm-core/v1/activities/{activityId}
Parameters
activityId*— 수정할 활동의 고유 ID

활동의 속성(제목·설명·예정일·담당자·결과·메타데이터 등)을 부분 업데이트합니다. 전달된 필드만 갱신됩니다. MEMBER 이상 권한이 필요합니다.

Path Params

NameTypeRequiredDescription
activityIdstring*수정할 활동의 고유 ID

Body Params

NameTypeRequiredDescription
activityTypestring활동 유형. enum 검증 적용 — 가능 값: CALL, EMAIL, MEETING, NOTE, TASK, MESSAGE, OTHER. 다른 값 입력 시 400
subjectstring활동 제목. 빈 문자열 금지 (@IsNotEmpty)
descriptionstring활동 상세 설명
relatedRecordIdsarray<string>연관 레코드 ID 목록 (전체 교체)
attachmentIdsarray<string>첨부파일 ID 목록 (최대 20개, 전체 교체)
scheduledAtdate예정 일시 (ISO 8601)
completedAtdate완료 일시 (ISO 8601)
dueDatedate마감 일시 (ISO 8601)
assignedMemberIdstring대표 담당 멤버 ID
assignedMemberIdsarray<string>다중 담당 멤버 ID 목록 (전체 교체)
outcomestring활동 결과. enum 검증 적용 — 가능 값: COMPLETED, CANCELLED, RESCHEDULED, NO_ANSWER, PENDING. 다른 값 입력 시 400
outcomeNotestring결과 메모
durationMinutesnumber소요 시간 (분)
metadataobject추가 메타데이터 (전체 교체)

Response

업데이트된 전체 활동 객체. 구조는 활동 조회 응답과 동일합니다.

Structure

Request
{ "subject": "신규 고객 첫 통화 (일정 조정)", "scheduledAt": "2026-04-26T05:00:00.000Z", "outcome": "RESCHEDULED", "outcomeNote": "고객 요청으로 하루 연기" }
Response
{ "activityId": "CRMAC1260423091530123ACT11122233", "accountId": "24010100001234", "recordId": "CRMRC1260423081530123REC11122233", "activityType": "CALL", "subject": "신규 고객 첫 통화 (일정 조정)", "description": "도입 검토 상담", "attachmentIds": [], "outcome": "RESCHEDULED", "outcomeNote": "고객 요청으로 하루 연기", "scheduledAt": "2026-04-26T05:00:00.000Z", "assignedMemberId": "MEMXm8i2H3o2z0", "assignedMemberIds": [ "MEMXm8i2H3o2z0" ], "durationMinutes": 15, "dateCreated": "2026-04-23T09:15:30.000Z", "dateUpdated": "2026-04-23T09:25:00.000Z" }

코드 예제

const crypto = require('crypto');
const apiKey = 'NCSXXXXXXXXXXXXX';
const apiSecret = 'YOUR_API_SECRET';
const dateTime = new Date().toISOString();
const salt = crypto.randomBytes(16).toString('hex');
const signature = crypto.createHmac('sha256', apiSecret).update(dateTime + salt).digest('hex');
const authHeader = HMAC-SHA256 apiKey=${apiKey}, date=${dateTime}, salt=${salt}, signature=${signature};
const response = await fetch('https://api.solapi.com/crm-core/v1/activities/CRMAC1260423091530123ACT11122233', {
  method: 'PATCH',
  headers: { 'Authorization': authHeader, 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "subject": "신규 고객 첫 통화 (일정 조정)",
    "scheduledAt": "2026-04-26T05:00:00Z",
    "outcome": "RESCHEDULED"
  })
});
const data = await response.json();

import hmac, hashlib, secrets, requests
from datetime import datetime, timezone
api_key = 'NCSXXXXXXXXXXXXX'
api_secret = 'YOUR_API_SECRET'
date_time = datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ')
salt = secrets.token_hex(16)
signature = hmac.new(api_secret.encode(), (date_time + salt).encode(), hashlib.sha256).hexdigest()
auth_header = f'HMAC-SHA256 apiKey={api_key}, date={date_time}, salt={salt}, signature={signature}'
response = requests.patch('https://api.solapi.com/crm-core/v1/activities/CRMAC1260423091530123ACT11122233', headers={
    'Authorization': auth_header,
    'Content-Type': 'application/json'
}, json={
    "subject": "신규 고객 첫 통화 (일정 조정)",
    "scheduledAt": "2026-04-26T05:00:00Z",
    "outcome": "RESCHEDULED"
})
data = response.json()

API_KEY="NCSXXXXXXXXXXXXX"
API_SECRET="YOUR_API_SECRET"
DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
SALT=$(openssl rand -hex 16)
SIGNATURE=$(echo -n "${DATE}${SALT}" | openssl dgst -sha256 -hmac "${API_SECRET}" | awk '{print $NF}')
AUTH="HMAC-SHA256 apiKey=${API_KEY}, date=${DATE}, salt=${SALT}, signature=${SIGNATURE}"
curl -X PATCH 'https://api.solapi.com/crm-core/v1/activities/CRMAC1260423091530123ACT11122233' \
  -H "Authorization: ${AUTH}" \
  -H "Content-Type: application/json" \
  -d '{"subject": "신규 고객 첫 통화 (일정 조정)", "scheduledAt": "2026-04-26T05:00:00Z", "outcome": "RESCHEDULED"}'

lightbulb

완료 처리만 하고 싶다면 전용 엔드포인트 `POST /crm-core/v1/activities/{activityId}/complete`를 사용하세요 — `outcome`이 COMPLETED로 설정되고 `completedAt`이 서버 시각으로 자동 기록됩니다.

lightbulb

입력 검증: `subject`에 빈 문자열을 입력하면 400 Bad Request 응답이 반환됩니다. `activityType` / `outcome`은 enum 검증이 적용되어 정의된 값 외에는 400 응답입니다.

lightbulb

401 응답: `{ "errorCode": "Unauthorized", "errorMessage": "권한이 없습니다." }`