원클릭으로
s-skill-interview-to-ticket
인터뷰 피드백에서 SAL(Engineering) 팀 티켓 초안을 작성할 때 사용. "인터뷰 티켓", "피드백 티켓", "SAL 티켓 만들어" 등의 요청 시 자동 호출.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
인터뷰 피드백에서 SAL(Engineering) 팀 티켓 초안을 작성할 때 사용. "인터뷰 티켓", "피드백 티켓", "SAL 티켓 만들어" 등의 요청 시 자동 호출.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
시프티(Shiftee) 근태/휴가 조회 스킬. 첫 호출 시 shiftee CLI를 자동 다운로드하여 휴가 내역, 출퇴근 기록, 스케줄, 누락 조회, 출퇴근 수정 요청 등 근태 관련 질문에 답한다. Use when asked about vacation, attendance, leave, schedule, clock-in/out, 휴가, 출퇴근, 근태, 스케줄, 누락, or anything HR/time-tracking related.
s-skills 설치 후 MCP 서버(Linear/Slack/Notion)와 GitHub CLI를 대화형으로 설정하는 스킬. 사용 중인 도구만 골라 설정하고, 이미 돼 있으면 스킵, 안 돼 있으면 단계별 안내·검증까지 전부 끌고 간다. Use when asked "셋업", "setup", "처음 설정", "s-skills 설치했어요", or after installing s-skills.
s-skills 정리 스킬. Slack 앱/토큰, MCP 설정(Slack/Linear/Notion), Shiftee 로그인, GitHub CLI 로그인, 설치된 스킬 파일 자체까지 하나씩 물어보면서 선택적으로 제거한다. setup의 반대편. Use when asked "셋업 지워", "정리", "teardown", "uninstall", "로그아웃", "토큰 폐기", "슬랙 봇 지워", "시프티 로그아웃", "스킬 지워", or after "이제 안 써".
UI 문구 작성 및 검토. 컴포넌트 유형과 상황을 전달하면 SMWS 기준으로 문구를 작성하거나 기존 문구를 검토한다. Use when asked to "UI 문구", "문구 작성", "문구 검토", "라이팅", "writing", "토스트 문구", "다이얼로그 문구", "에러 메시지", "버튼 텍스트", or anything involving UI copy writing/review.
링크드인 포스트 스크랩 스킬. 키워드나 인물명으로 링크드인 포스트를 검색·수집·저장. Use when asked to "링크드인 스크랩", "linkedin scrap", "포스트 모아줘", "링크드인 검색", "linkedin search", or when the user wants to collect LinkedIn posts.
슬랙 조회/작성 스킬. Slack MCP를 사용해서 채널 메시지 검색, 스레드 읽기, 메시지 작성을 대신 해준다. Use when asked to "슬랙 찾아줘", "슬랙 보내줘", "slack 메시지", "슬랙 검색", "최근 슬랙", "슬랙 디엠", "slack search", or anything involving Slack reads/writes.
| name | s-skill-interview-to-ticket |
| version | 1.1.0 |
| description | 인터뷰 피드백에서 SAL(Engineering) 팀 티켓 초안을 작성할 때 사용. "인터뷰 티켓", "피드백 티켓", "SAL 티켓 만들어" 등의 요청 시 자동 호출. |
| allowed-tools | ["Bash","Read","Write","AskUserQuestion","ToolSearch","mcp__claude_ai_Notion__notion-fetch","mcp__linear-server__linear_getIssueById"] |
고객 인터뷰 피드백을 세일즈맵 CRM 커스텀 오브젝트 티켓으로 생성한다.
$ARGUMENTS: 피드백이 담긴 소스 (URL, 텍스트 등 형식 무관)입력 형식을 자동 판별하여 내용을 가져온다:
notion-fetch로 페이지 내용을 가져온다.linear_getIssueById로 이슈 내용을 가져온다.아래 양식으로 초안을 작성하여 사용자에게 보여준다:
**제목**: [{기능영역}] {핵심 문제 요약}
**1. 주관적 온도 (10점 척도)**
{사용자가 제공한 점수, 없으면 사용자에게 질문}
**2. 배경/문제 상황**
- {고객사} {담당자}님 인터뷰({날짜})에서 접수된 피드백
- {확인된 문제 상황 서술}
- {비교 대상이 있으면 언급 (예: 타 서비스에서는 되는데 세일즈맵에서는 안 됨)}
**3. 해결책 (있다면)**
- {구현 방식을 한정짓지 않는 열린 형태로 작성}
- {고객이 제안한 방식은 예시로만 포함}
[기능영역] 핵심 문제 요약초안을 보여준 뒤 다음을 확인한다:
사용자 피드백을 반영하여 최종본을 확정한다.
최종본 확정 후 세일즈맵 CRM에 커스텀 오브젝트 티켓을 생성한다.
| 타입 | Definition ID |
|---|---|
| CRM 티켓 | 019abebf-887c-755f-b526-2567e2476fde |
| SDR 티켓 | 019e3dbe-f9e0-7000-80c2-001c51ebb091 |
사용자가 명시하지 않으면 질문한다. 대부분의 경우 CRM 티켓이다.
중요: 환경변수
$SALESMAP_API_TOKEN이 Bash 세션에서 로드되지 않을 수 있다. 실패 시~/.zshrc에서 토큰 값을 직접 읽어서 사용한다.
# 환경변수 먼저 시도, 실패 시 zshrc에서 추출
TOKEN=${SALESMAP_API_TOKEN:-$(grep SALESMAP_API_TOKEN ~/.zshrc | sed 's/.*"\(.*\)"/\1/')}
중요: 필드 정의 API(
GET /v2/field/custom-object)는 모든 커스텀 오브젝트의 필드를 섞어서 반환한다. 동일 이름 필드가 여러 개 나오므로 반드시 아래 검증된 필드 ID를 사용한다. 필드 정의 API를 호출하여 필드를 탐색하지 않는다.
| 필드명 | 필드 ID | 타입 | 비고 |
|---|---|---|---|
| 티켓(CRM) 이름 | 35f19e7e-039f-40d1-912e-da8b93a329ef | string | 대표 필드 — 반드시 포함 |
| 소스 | d1ae8285-8b1b-4494-a89d-f1f113af04a0 | multiSelect | 옵션: VOC, 인터뷰, 정량 지표, 기타 |
| 이슈 유형 | 815c9050-3d43-4261-a3d3-225e5dc7ee1c | singleSelect | 옵션: Regular Track, Fast Track, Quick Win Track |
| 기능 카테고리 | bd9561e3-fab6-4fe6-b610-798d9542d11a | multiSelect | 아래 옵션 목록 참조 |
| 제보 일자 | 1930963f-eaf5-4d29-a2a8-9676187665e6 | date | 미검증 — 실패 시 스킵 |
| 담당자 | 미확정 | user | 미검증 — 실패 시 스킵 |
| 요청사 | 6cf84776-146a-4b9e-bd1e-2e9f2dcbc5e9 | multiOrganization | 검증됨 — organizationValueIdList 사용 |
| 요청자 | e59cd00d-17d2-4e68-bb1b-3a90f3c1e86e | multiPeople | 검증됨 — peopleValueIdList 사용 |
SDR 티켓은 CRM 티켓과 필드 ID가 다르다. 아래는 추정이며, 첫 사용 시 필드 정의 API로 검증 필요.
| 필드명 | 필드 ID | 타입 | 비고 |
|---|---|---|---|
| 티켓(SDR) 이름 | 019e3dbe-f9f3-7000-80c2-09141ab99ffe | string | 대표 필드 — 반드시 포함 |
| 소스 | ad7b5383-af11-46f5-a313-33e5b920a3e1 | multiSelect | 추정 — 첫 사용 시 검증 |
| 이슈 유형 | 6f89d747-5ea5-4c5d-abbf-d966d4de7aae | singleSelect | 추정 — 첫 사용 시 검증 |
| 기능 카테고리 | 13a23b63-f036-4656-8893-cafafe961b9b | multiSelect | 추정 — 첫 사용 시 검증 |
SDR 티켓 필드 ID가 검증되면 이 표를 업데이트할 것.
노트, 검색, 다국어, 데이터 업로드, 데이터 필드 관리, 레이아웃, 목록/파이프라인, 마케팅 이메일, 문서, 미리보기, 미팅, 병합, 뷰(필터/정렬/컬럼), 사용자 관리, 상세 페이지, 상품/견적서, 시퀀스, 알림, 에디터, 연동, 워크플로우, 웹 폼, 이메일, 차트/대시보드, 커스텀 오브젝트, AI, UX/UI, API/웹훅, TODO/캘린더, 타임라인/히스토리, SMS/알림톡, 전체 선택, 권한, 기타, 그룹, 모바일
{
"customObjectDefinitionId": "{definitionId}",
"name": "[기능영역] 핵심 문제 요약",
"fieldList": [
{"id": "{대표필드ID}", "name": "{대표필드명}", "stringValue": "[기능영역] 핵심 문제 요약"},
{"id": "{소스ID}", "name": "소스", "stringValueList": ["인터뷰"]},
{"id": "{이슈유형ID}", "name": "이슈 유형", "stringValue": "Regular Track"},
{"id": "{기능카테고리ID}", "name": "기능 카테고리", "stringValueList": ["목록/파이프라인"]}
]
}
핵심 규칙:
fieldList에 대표 필드(티켓 이름)를 반드시 포함해야 한다. 누락 시 "대표 필드를 입력해 주세요" 오류 발생.name (최상위)과 대표 필드의 stringValue에 동일한 제목을 넣는다.stringValueList (배열), singleSelect -> stringValue (문자열), user -> userValueId, date -> dateValue인터뷰 대상 고객사/담당자가 특정되면 티켓에 연결한다. 연결 가능하면 묻지 않고 바로 연결한다.
POST /v2/object/{targetType}/search
people, organization, deal, lead{
"filterGroupList": [
{
"filters": [
{
"fieldName": "이름",
"operator": "CONTAINS",
"value": "검색어"
}
]
}
]
}
fieldName: 한글 필드명 사용 (예: "이름", "이메일")operator: 대문자 (예: EQ, CONTAINS, IN, EXISTS, NOT_EXISTS, LT, GTE 등)filterGroupList: 최대 3개 그룹, 그룹 간 ORfilters: 그룹 내 최대 3개, 필터 간 ANDPOST /v2/object/organization/search로 회사명 검색하여 UUID 확보{ "name": "요청사", "organizationValueIdList": ["<ORG_UUID>"] }로 설정POST /v2/object/people/search로 담당자명 검색하여 UUID 확보{ "name": "요청자", "peopleValueIdList": ["<PEOPLE_UUID>"] }로 설정POST /v2/custom-object/{id} (PATCH 아님)생성된 티켓에 메모를 추가하여 상세 설명을 기록한다.
메모 포맷 (반드시 이 형식을 따른다):
1. 주관적 온도(10점 척도)
{N}
2. 배경/문제 상황
- {항목 1}
- {항목 2}
3. 해결책(있다면)
- {항목 1}
- {항목 2}
\n\n(빈 줄)으로 구분하되, CRM UI가 연속 줄바꿈을 무시하므로 실제 표시에서는 빈 줄 없이 붙어 보임 (API 한계)- bullet list로 작성POST https://salesmap.kr/api/v2/custom-object/{생성된 티켓 ID}
{
"memo": "1. 주관적 온도(10점 척도)\n{N}\n\n2. 배경/문제 상황\n- {항목1}\n- {항목2}\n\n3. 해결책(있다면)\n- {항목1}\n- {항목2}"
}
$ARGUMENTS