diff options
| -rw-r--r-- | components/knox/approval/ApprovalCancel.tsx | 341 | ||||
| -rw-r--r-- | components/knox/approval/ApprovalDetail.tsx | 362 | ||||
| -rw-r--r-- | components/knox/approval/ApprovalList.tsx | 322 | ||||
| -rw-r--r-- | components/knox/approval/ApprovalManager.tsx | 190 | ||||
| -rw-r--r-- | components/knox/approval/ApprovalSubmit.tsx | 476 | ||||
| -rw-r--r-- | components/knox/approval/index.ts | 23 | ||||
| -rw-r--r-- | components/knox/approval/mocks/approval-mock.ts | 230 | ||||
| -rw-r--r-- | lib/knox-api/approval/approval-guide.html | 4999 | ||||
| -rw-r--r-- | lib/knox-api/approval/approval.ts | 603 | ||||
| -rw-r--r-- | lib/knox-api/employee/employee-guide.html | 2154 | ||||
| -rw-r--r-- | lib/knox-api/employee/employee.ts | 435 | ||||
| -rw-r--r-- | lib/knox-api/index.ts | 6 | ||||
| -rw-r--r-- | lib/knox-api/mail/knox-mail.ts | 312 | ||||
| -rw-r--r-- | lib/knox-api/mail/mail-guide.html | 2114 | ||||
| -rw-r--r-- | lib/knox-api/messenger/messenger-guide.html | 9422 | ||||
| -rw-r--r-- | lib/knox-api/messenger/messenger.ts | 925 | ||||
| -rw-r--r-- | lib/knox-api/realtime-notification/realtime-notification-guide.html | 764 | ||||
| -rw-r--r-- | lib/knox-api/realtime-notification/realtime-notification.ts | 333 |
18 files changed, 24011 insertions, 0 deletions
diff --git a/components/knox/approval/ApprovalCancel.tsx b/components/knox/approval/ApprovalCancel.tsx new file mode 100644 index 00000000..d077bfc6 --- /dev/null +++ b/components/knox/approval/ApprovalCancel.tsx @@ -0,0 +1,341 @@ +'use client' + +import { useState } from 'react'; +import { Button } from '@/components/ui/button'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; +import { Input } from '@/components/ui/input'; +import { Label } from '@/components/ui/label'; +import { Badge } from '@/components/ui/badge'; +import { Separator } from '@/components/ui/separator'; +import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger } from '@/components/ui/alert-dialog'; +import { toast } from 'sonner'; +import { Loader2, XCircle, AlertTriangle, CheckCircle } from 'lucide-react'; + +// API 함수 및 타입 +import { cancelApproval, getApprovalDetail } from '@/lib/knox-api/approval/approval'; +import type { ApprovalDetailResponse } from '@/lib/knox-api/approval/approval'; + +// Mock 데이터 +import { mockApprovalAPI, getStatusText } from './mocks/approval-mock'; + +interface ApprovalCancelProps { + useFakeData?: boolean; + systemId?: string; + initialApInfId?: string; + onCancelSuccess?: (apInfId: string) => void; +} + +export default function ApprovalCancel({ + useFakeData = false, + systemId = 'EVCP_SYSTEM', + initialApInfId = '', + onCancelSuccess +}: ApprovalCancelProps) { + const [apInfId, setApInfId] = useState(initialApInfId); + const [approvalDetail, setApprovalDetail] = useState<ApprovalDetailResponse['data'] | null>(null); + const [isLoading, setIsLoading] = useState(false); + const [isCancelling, setIsCancelling] = useState(false); + const [error, setError] = useState<string | null>(null); + const [cancelResult, setCancelResult] = useState<{ apInfId: string } | null>(null); + + const fetchApprovalDetail = async () => { + if (!apInfId.trim()) { + toast.error('결재 ID를 입력해주세요.'); + return; + } + + setIsLoading(true); + setError(null); + setApprovalDetail(null); + setCancelResult(null); + + try { + const response = useFakeData + ? await mockApprovalAPI.getApprovalDetail(apInfId) + : await getApprovalDetail(apInfId, systemId); + + if (response.result === 'SUCCESS') { + setApprovalDetail(response.data); + } else { + setError('결재 정보를 가져오는데 실패했습니다.'); + toast.error('결재 정보를 가져오는데 실패했습니다.'); + } + } catch (err) { + console.error('결재 상세 조회 오류:', err); + setError('결재 정보를 가져오는 중 오류가 발생했습니다.'); + toast.error('결재 정보를 가져오는 중 오류가 발생했습니다.'); + } finally { + setIsLoading(false); + } + }; + + const handleCancelApproval = async () => { + if (!approvalDetail) return; + + setIsCancelling(true); + + try { + const response = useFakeData + ? await mockApprovalAPI.cancelApproval(approvalDetail.apInfId) + : await cancelApproval(approvalDetail.apInfId, systemId); + + if (response.result === 'SUCCESS') { + setCancelResult({ apInfId: response.data.apInfId }); + toast.success('결재가 성공적으로 취소되었습니다.'); + onCancelSuccess?.(response.data.apInfId); + + // 상태 업데이트 + setApprovalDetail({ + ...approvalDetail, + status: '4' // 상신취소 + }); + } else { + toast.error('결재 취소에 실패했습니다.'); + } + } catch (err) { + console.error('결재 취소 오류:', err); + toast.error('결재 취소 중 오류가 발생했습니다.'); + } finally { + setIsCancelling(false); + } + }; + + const formatDate = (dateString: string) => { + if (!dateString || dateString.length < 14) return dateString; + const year = dateString.substring(0, 4); + const month = dateString.substring(4, 6); + const day = dateString.substring(6, 8); + const hour = dateString.substring(8, 10); + const minute = dateString.substring(10, 12); + const second = dateString.substring(12, 14); + + return `${year}-${month}-${day} ${hour}:${minute}:${second}`; + }; + + const getStatusBadgeVariant = (status: string) => { + switch (status) { + case '2': // 완결 + return 'default'; + case '1': // 진행중 + return 'secondary'; + case '3': // 반려 + return 'destructive'; + case '4': // 상신취소 + return 'outline'; + default: + return 'outline'; + } + }; + + const canCancelApproval = (status: string) => { + // 진행중(1), 보류(0) 상태에서만 취소 가능 + return ['0', '1'].includes(status); + }; + + const getCancelabilityMessage = (status: string) => { + if (canCancelApproval(status)) { + return '이 결재는 취소할 수 있습니다.'; + } + + switch (status) { + case '2': + return '완결된 결재는 취소할 수 없습니다.'; + case '3': + return '반려된 결재는 취소할 수 없습니다.'; + case '4': + return '이미 취소된 결재입니다.'; + case '5': + return '전결 처리된 결재는 취소할 수 없습니다.'; + case '6': + return '후완결된 결재는 취소할 수 없습니다.'; + default: + return '현재 상태에서는 취소할 수 없습니다.'; + } + }; + + return ( + <Card className="w-full max-w-4xl"> + <CardHeader> + <CardTitle className="flex items-center gap-2"> + <XCircle className="w-5 h-5" /> + 결재 취소 + </CardTitle> + <CardDescription> + 결재 ID를 입력하여 상신을 취소합니다. {useFakeData && '(테스트 모드)'} + </CardDescription> + </CardHeader> + + <CardContent className="space-y-6"> + {/* 검색 영역 */} + <div className="flex items-center gap-3"> + <div className="flex-1"> + <Label htmlFor="apInfId">결재 ID</Label> + <Input + id="apInfId" + placeholder="결재 ID를 입력하세요" + value={apInfId} + onChange={(e) => setApInfId(e.target.value)} + onKeyPress={(e) => e.key === 'Enter' && fetchApprovalDetail()} + /> + </div> + <Button + onClick={fetchApprovalDetail} + disabled={isLoading} + > + {isLoading ? ( + <> + <Loader2 className="w-4 h-4 mr-2 animate-spin" /> + 조회 중... + </> + ) : ( + '조회' + )} + </Button> + </div> + + {/* 취소 완료 메시지 */} + {cancelResult && ( + <div className="p-4 bg-green-50 border border-green-200 rounded-lg"> + <div className="flex items-center gap-2 text-green-700"> + <CheckCircle className="w-4 h-4" /> + <span className="font-medium">취소 완료</span> + </div> + <p className="text-sm text-green-600 mt-1"> + 결재 ID: {cancelResult.apInfId}가 성공적으로 취소되었습니다. + </p> + </div> + )} + + {/* 에러 메시지 */} + {error && ( + <div className="p-4 bg-red-50 border border-red-200 rounded-lg"> + <div className="flex items-center gap-2 text-red-700"> + <AlertTriangle className="w-4 h-4" /> + <span className="font-medium">오류</span> + </div> + <p className="text-sm text-red-600 mt-1">{error}</p> + </div> + )} + + {/* 결재 정보 */} + {approvalDetail && ( + <div className="space-y-6"> + <div className="space-y-4"> + <h3 className="text-lg font-semibold">결재 정보</h3> + + <div className="grid grid-cols-2 gap-4 p-4 bg-gray-50 rounded-lg"> + <div> + <Label className="text-sm font-medium text-gray-600">결재 ID</Label> + <p className="text-sm font-mono mt-1">{approvalDetail.apInfId}</p> + </div> + <div> + <Label className="text-sm font-medium text-gray-600">제목</Label> + <p className="text-sm mt-1 font-medium">{approvalDetail.subject}</p> + </div> + <div> + <Label className="text-sm font-medium text-gray-600">상신일시</Label> + <p className="text-sm mt-1">{formatDate(approvalDetail.sbmDt)}</p> + </div> + <div> + <Label className="text-sm font-medium text-gray-600">현재 상태</Label> + <div className="mt-1"> + <Badge variant={getStatusBadgeVariant(approvalDetail.status)}> + {getStatusText(approvalDetail.status)} + </Badge> + </div> + </div> + </div> + </div> + + <Separator /> + + {/* 취소 가능 여부 */} + <div className="space-y-4"> + <h3 className="text-lg font-semibold">취소 가능 여부</h3> + + <div className={`p-4 rounded-lg border ${ + canCancelApproval(approvalDetail.status) + ? 'bg-blue-50 border-blue-200' + : 'bg-yellow-50 border-yellow-200' + }`}> + <div className="flex items-center gap-2 mb-2"> + {canCancelApproval(approvalDetail.status) ? ( + <CheckCircle className="w-4 h-4 text-blue-600" /> + ) : ( + <AlertTriangle className="w-4 h-4 text-yellow-600" /> + )} + <span className={`font-medium ${ + canCancelApproval(approvalDetail.status) + ? 'text-blue-700' + : 'text-yellow-700' + }`}> + {canCancelApproval(approvalDetail.status) ? '취소 가능' : '취소 불가'} + </span> + </div> + <p className={`text-sm ${ + canCancelApproval(approvalDetail.status) + ? 'text-blue-600' + : 'text-yellow-600' + }`}> + {getCancelabilityMessage(approvalDetail.status)} + </p> + </div> + </div> + + {/* 취소 버튼 */} + {canCancelApproval(approvalDetail.status) && ( + <> + <Separator /> + + <div className="flex justify-end"> + <AlertDialog> + <AlertDialogTrigger asChild> + <Button variant="destructive" disabled={isCancelling}> + {isCancelling ? ( + <> + <Loader2 className="w-4 h-4 mr-2 animate-spin" /> + 취소 중... + </> + ) : ( + <> + <XCircle className="w-4 h-4 mr-2" /> + 결재 취소 + </> + )} + </Button> + </AlertDialogTrigger> + <AlertDialogContent> + <AlertDialogHeader> + <AlertDialogTitle>결재 취소 확인</AlertDialogTitle> + <AlertDialogDescription> + 정말로 이 결재를 취소하시겠습니까? + <br /> + <br /> + <strong>결재 ID:</strong> {approvalDetail.apInfId} + <br /> + <strong>제목:</strong> {approvalDetail.subject} + <br /> + <br /> + 이 작업은 되돌릴 수 없습니다. + </AlertDialogDescription> + </AlertDialogHeader> + <AlertDialogFooter> + <AlertDialogCancel>취소</AlertDialogCancel> + <AlertDialogAction + onClick={handleCancelApproval} + className="bg-red-600 hover:bg-red-700" + > + 결재 취소 + </AlertDialogAction> + </AlertDialogFooter> + </AlertDialogContent> + </AlertDialog> + </div> + </> + )} + </div> + )} + </CardContent> + </Card> + ); +}
\ No newline at end of file diff --git a/components/knox/approval/ApprovalDetail.tsx b/components/knox/approval/ApprovalDetail.tsx new file mode 100644 index 00000000..034bde7d --- /dev/null +++ b/components/knox/approval/ApprovalDetail.tsx @@ -0,0 +1,362 @@ +'use client' + +import { useState, useEffect } from 'react'; +import { Button } from '@/components/ui/button'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; +import { Input } from '@/components/ui/input'; +import { Label } from '@/components/ui/label'; +import { Badge } from '@/components/ui/badge'; +import { Separator } from '@/components/ui/separator'; +import { toast } from 'sonner'; +import { Loader2, Search, FileText, Clock, User, AlertCircle } from 'lucide-react'; + +// API 함수 및 타입 +import { getApprovalDetail, getApprovalContent } from '@/lib/knox-api/approval/approval'; +import type { ApprovalDetailResponse, ApprovalContentResponse, ApprovalLine } from '@/lib/knox-api/approval/approval'; + +// Mock 데이터 +import { mockApprovalAPI, getStatusText, getRoleText, getApprovalStatusText } from './mocks/approval-mock'; + +interface ApprovalDetailProps { + useFakeData?: boolean; + systemId?: string; + initialApInfId?: string; +} + +interface ApprovalDetailData { + detail: ApprovalDetailResponse['data']; + content: ApprovalContentResponse['data']; +} + +export default function ApprovalDetail({ + useFakeData = false, + systemId = 'EVCP_SYSTEM', + initialApInfId = '' +}: ApprovalDetailProps) { + const [apInfId, setApInfId] = useState(initialApInfId); + const [approvalData, setApprovalData] = useState<ApprovalDetailData | null>(null); + const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState<string | null>(null); + + const fetchApprovalDetail = async (id: string) => { + if (!id.trim()) { + toast.error('결재 ID를 입력해주세요.'); + return; + } + + setIsLoading(true); + setError(null); + setApprovalData(null); + + try { + const [detailResponse, contentResponse] = await Promise.all([ + useFakeData + ? mockApprovalAPI.getApprovalDetail(id) + : getApprovalDetail(id, systemId), + useFakeData + ? mockApprovalAPI.getApprovalContent(id) + : getApprovalContent(id, systemId) + ]); + + if (detailResponse.result === 'SUCCESS' && contentResponse.result === 'SUCCESS') { + setApprovalData({ + detail: detailResponse.data, + content: contentResponse.data + }); + } else { + setError('결재 정보를 가져오는데 실패했습니다.'); + toast.error('결재 정보를 가져오는데 실패했습니다.'); + } + } catch (err) { + console.error('결재 상세 조회 오류:', err); + setError('결재 정보를 가져오는 중 오류가 발생했습니다.'); + toast.error('결재 정보를 가져오는 중 오류가 발생했습니다.'); + } finally { + setIsLoading(false); + } + }; + + const formatDate = (dateString: string) => { + if (!dateString || dateString.length < 14) return dateString; + // YYYYMMDDHHMMSS 형식을 YYYY-MM-DD HH:MM:SS로 변환 + const year = dateString.substring(0, 4); + const month = dateString.substring(4, 6); + const day = dateString.substring(6, 8); + const hour = dateString.substring(8, 10); + const minute = dateString.substring(10, 12); + const second = dateString.substring(12, 14); + + return `${year}-${month}-${day} ${hour}:${minute}:${second}`; + }; + + const getSecurityTypeText = (type: string) => { + const typeMap: Record<string, string> = { + 'PERSONAL': '개인', + 'CONFIDENTIAL': '기밀', + 'CONFIDENTIAL_STRICT': '극기밀' + }; + return typeMap[type] || type; + }; + + const getSecurityTypeBadgeVariant = (type: string) => { + switch (type) { + case 'PERSONAL': + return 'default'; + case 'CONFIDENTIAL': + return 'secondary'; + case 'CONFIDENTIAL_STRICT': + return 'destructive'; + default: + return 'outline'; + } + }; + + const getStatusBadgeVariant = (status: string) => { + switch (status) { + case '2': // 완결 + return 'default'; + case '1': // 진행중 + return 'secondary'; + case '3': // 반려 + return 'destructive'; + case '4': // 상신취소 + return 'outline'; + default: + return 'outline'; + } + }; + + // 초기 로딩 (initialApInfId가 있는 경우) + useEffect(() => { + if (initialApInfId) { + fetchApprovalDetail(initialApInfId); + } + }, [initialApInfId, useFakeData, systemId]); + + return ( + <Card className="w-full max-w-6xl"> + <CardHeader> + <CardTitle className="flex items-center gap-2"> + <FileText className="w-5 h-5" /> + 결재 상세 조회 + </CardTitle> + <CardDescription> + 결재 ID를 입력하여 상세 정보를 조회합니다. {useFakeData && '(테스트 모드)'} + </CardDescription> + </CardHeader> + + <CardContent className="space-y-6"> + {/* 검색 영역 */} + <div className="flex items-center gap-3"> + <div className="flex-1"> + <Label htmlFor="apInfId">결재 ID</Label> + <Input + id="apInfId" + placeholder="결재 ID를 입력하세요" + value={apInfId} + onChange={(e) => setApInfId(e.target.value)} + onKeyPress={(e) => e.key === 'Enter' && fetchApprovalDetail(apInfId)} + /> + </div> + <Button + onClick={() => fetchApprovalDetail(apInfId)} + disabled={isLoading} + > + {isLoading ? ( + <> + <Loader2 className="w-4 h-4 mr-2 animate-spin" /> + 조회 중... + </> + ) : ( + <> + <Search className="w-4 h-4 mr-2" /> + 조회 + </> + )} + </Button> + </div> + + {/* 에러 메시지 */} + {error && ( + <div className="p-4 bg-red-50 border border-red-200 rounded-lg"> + <div className="flex items-center gap-2 text-red-700"> + <AlertCircle className="w-4 h-4" /> + <span className="font-medium">오류</span> + </div> + <p className="text-sm text-red-600 mt-1">{error}</p> + </div> + )} + + {/* 결재 상세 정보 */} + {approvalData && ( + <div className="space-y-6"> + {/* 기본 정보 */} + <div className="space-y-4"> + <h3 className="text-lg font-semibold flex items-center gap-2"> + <FileText className="w-5 h-5" /> + 기본 정보 + </h3> + + <div className="grid grid-cols-2 gap-4 p-4 bg-gray-50 rounded-lg"> + <div> + <Label className="text-sm font-medium text-gray-600">결재 ID</Label> + <p className="text-sm font-mono mt-1">{approvalData.detail.apInfId}</p> + </div> + <div> + <Label className="text-sm font-medium text-gray-600">시스템 ID</Label> + <p className="text-sm mt-1">{approvalData.detail.systemId}</p> + </div> + <div> + <Label className="text-sm font-medium text-gray-600">제목</Label> + <p className="text-sm mt-1 font-medium">{approvalData.detail.subject}</p> + </div> + <div> + <Label className="text-sm font-medium text-gray-600">상신일시</Label> + <p className="text-sm mt-1 flex items-center gap-2"> + <Clock className="w-4 h-4" /> + {formatDate(approvalData.detail.sbmDt)} + </p> + </div> + <div> + <Label className="text-sm font-medium text-gray-600">상태</Label> + <div className="mt-1"> + <Badge variant={getStatusBadgeVariant(approvalData.detail.status)}> + {getStatusText(approvalData.detail.status)} + </Badge> + </div> + </div> + <div> + <Label className="text-sm font-medium text-gray-600">보안 등급</Label> + <div className="mt-1"> + <Badge variant={getSecurityTypeBadgeVariant(approvalData.detail.docSecuType)}> + {getSecurityTypeText(approvalData.detail.docSecuType)} + </Badge> + </div> + </div> + <div> + <Label className="text-sm font-medium text-gray-600">긴급 여부</Label> + <div className="mt-1"> + <Badge variant={approvalData.detail.urgYn === 'Y' ? 'destructive' : 'outline'}> + {approvalData.detail.urgYn === 'Y' ? '긴급' : '일반'} + </Badge> + </div> + </div> + <div> + <Label className="text-sm font-medium text-gray-600">언어</Label> + <p className="text-sm mt-1">{approvalData.detail.sbmLang}</p> + </div> + </div> + </div> + + <Separator /> + + {/* 결재 내용 */} + <div className="space-y-4"> + <h3 className="text-lg font-semibold">결재 내용</h3> + + <div className="p-4 bg-gray-50 rounded-lg"> + <div className="mb-2"> + <Label className="text-sm font-medium text-gray-600">내용 형식</Label> + <Badge variant="outline" className="ml-2"> + {approvalData.content.contentsType} + </Badge> + </div> + + <div className="mt-4 p-4 bg-white rounded border"> + <pre className="whitespace-pre-wrap text-sm"> + {approvalData.content.contents} + </pre> + </div> + </div> + </div> + + <Separator /> + + {/* 결재 경로 */} + <div className="space-y-4"> + <h3 className="text-lg font-semibold flex items-center gap-2"> + <User className="w-5 h-5" /> + 결재 경로 + </h3> + + <div className="space-y-3"> + {approvalData.detail.aplns.map((apln: ApprovalLine, index: number) => ( + <div key={index} className="flex items-center gap-4 p-4 border rounded-lg"> + <Badge variant="outline" className="min-w-[40px] text-center"> + {apln.seq} + </Badge> + + <div className="flex-1 grid grid-cols-4 gap-4"> + <div> + <Label className="text-xs font-medium text-gray-600">사용자 ID</Label> + <p className="text-sm mt-1">{apln.userId || apln.epId || '-'}</p> + </div> + <div> + <Label className="text-xs font-medium text-gray-600">이메일</Label> + <p className="text-sm mt-1">{apln.emailAddress || '-'}</p> + </div> + <div> + <Label className="text-xs font-medium text-gray-600">역할</Label> + <div className="mt-1"> + <Badge variant="secondary"> + {getRoleText(apln.role)} + </Badge> + </div> + </div> + <div> + <Label className="text-xs font-medium text-gray-600">상태</Label> + <div className="mt-1"> + <Badge variant={apln.aplnStatsCode === '1' ? 'default' : + apln.aplnStatsCode === '2' ? 'destructive' : 'outline'}> + {getApprovalStatusText(apln.aplnStatsCode)} + </Badge> + </div> + </div> + </div> + + <div className="flex flex-col gap-1 text-xs"> + {apln.arbPmtYn === 'Y' && ( + <Badge variant="outline" className="text-xs">전결권한</Badge> + )} + {apln.contentsMdfyPmtYn === 'Y' && ( + <Badge variant="outline" className="text-xs">본문수정</Badge> + )} + {apln.aplnMdfyPmtYn === 'Y' && ( + <Badge variant="outline" className="text-xs">경로변경</Badge> + )} + </div> + </div> + ))} + </div> + </div> + + {/* 첨부파일 */} + {approvalData.detail.attachments && approvalData.detail.attachments.length > 0 && ( + <> + <Separator /> + <div className="space-y-4"> + <h3 className="text-lg font-semibold">첨부파일</h3> + + <div className="space-y-2"> + {approvalData.detail.attachments.map((attachment: any, index: number) => ( + <div key={index} className="flex items-center gap-3 p-3 bg-gray-50 rounded-lg"> + <FileText className="w-4 h-4 text-gray-500" /> + <div className="flex-1"> + <p className="text-sm font-medium">{attachment.fileName || `첨부파일 ${index + 1}`}</p> + <p className="text-xs text-gray-500">{attachment.fileSize || '크기 정보 없음'}</p> + </div> + <Button variant="outline" size="sm"> + 다운로드 + </Button> + </div> + ))} + </div> + </div> + </> + )} + </div> + )} + </CardContent> + </Card> + ); +}
\ No newline at end of file diff --git a/components/knox/approval/ApprovalList.tsx b/components/knox/approval/ApprovalList.tsx new file mode 100644 index 00000000..7f80e74a --- /dev/null +++ b/components/knox/approval/ApprovalList.tsx @@ -0,0 +1,322 @@ +'use client' + +import { useState, useEffect } from 'react'; +import { Button } from '@/components/ui/button'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; +import { Badge } from '@/components/ui/badge'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; +import { toast } from 'sonner'; +import { Loader2, List, Eye, RefreshCw, AlertCircle } from 'lucide-react'; + +// API 함수 및 타입 +import { getSubmissionList, getApprovalHistory } from '@/lib/knox-api/approval/approval'; +import type { SubmissionListResponse, ApprovalHistoryResponse } from '@/lib/knox-api/approval/approval'; + +// Mock 데이터 +import { mockApprovalAPI, getStatusText } from './mocks/approval-mock'; + +interface ApprovalListProps { + useFakeData?: boolean; + systemId?: string; + type?: 'submission' | 'history'; + onItemClick?: (apInfId: string) => void; +} + +type ListItem = { + apInfId: string; + subject: string; + sbmDt: string; + status: string; + urgYn?: string; + docSecuType?: string; + actionType?: string; + actionDt?: string; + userId?: string; +}; + +export default function ApprovalList({ + useFakeData = false, + systemId = 'EVCP_SYSTEM', + type = 'submission', + onItemClick +}: ApprovalListProps) { + const [listData, setListData] = useState<ListItem[]>([]); + const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState<string | null>(null); + + const fetchData = async () => { + setIsLoading(true); + setError(null); + + try { + let response: SubmissionListResponse | ApprovalHistoryResponse; + + if (type === 'submission') { + response = useFakeData + ? await mockApprovalAPI.getSubmissionList() + : await getSubmissionList(systemId); + } else { + response = useFakeData + ? await mockApprovalAPI.getApprovalHistory() + : await getApprovalHistory(systemId); + } + + if (response.result === 'SUCCESS') { + setListData(response.data); + } else { + setError('목록을 가져오는데 실패했습니다.'); + toast.error('목록을 가져오는데 실패했습니다.'); + } + } catch (err) { + console.error('목록 조회 오류:', err); + setError('목록을 가져오는 중 오류가 발생했습니다.'); + toast.error('목록을 가져오는 중 오류가 발생했습니다.'); + } finally { + setIsLoading(false); + } + }; + + const formatDate = (dateString: string) => { + if (!dateString || dateString.length < 14) return dateString; + const year = dateString.substring(0, 4); + const month = dateString.substring(4, 6); + const day = dateString.substring(6, 8); + const hour = dateString.substring(8, 10); + const minute = dateString.substring(10, 12); + + return `${year}-${month}-${day} ${hour}:${minute}`; + }; + + const getStatusBadgeVariant = (status: string) => { + switch (status) { + case '2': // 완결 + return 'default'; + case '1': // 진행중 + return 'secondary'; + case '3': // 반려 + return 'destructive'; + case '4': // 상신취소 + return 'outline'; + default: + return 'outline'; + } + }; + + const getSecurityTypeText = (type: string) => { + const typeMap: Record<string, string> = { + 'PERSONAL': '개인', + 'CONFIDENTIAL': '기밀', + 'CONFIDENTIAL_STRICT': '극기밀' + }; + return typeMap[type] || type; + }; + + const getSecurityTypeBadgeVariant = (type: string) => { + switch (type) { + case 'PERSONAL': + return 'default'; + case 'CONFIDENTIAL': + return 'secondary'; + case 'CONFIDENTIAL_STRICT': + return 'destructive'; + default: + return 'outline'; + } + }; + + const getActionTypeText = (actionType: string) => { + const actionMap: Record<string, string> = { + 'SUBMIT': '상신', + 'APPROVE': '승인', + 'REJECT': '반려', + 'CANCEL': '취소', + 'DELEGATE': '위임' + }; + return actionMap[actionType] || actionType; + }; + + const handleItemClick = (apInfId: string) => { + onItemClick?.(apInfId); + }; + + // 컴포넌트 마운트 시 데이터 로드 + useEffect(() => { + fetchData(); + }, [type, useFakeData, systemId]); + + return ( + <Card className="w-full max-w-6xl"> + <CardHeader> + <CardTitle className="flex items-center gap-2"> + <List className="w-5 h-5" /> + {type === 'submission' ? '상신함' : '결재 이력'} + </CardTitle> + <CardDescription> + {type === 'submission' + ? '상신한 결재 목록을 확인합니다.' + : '결재 처리 이력을 확인합니다.' + } {useFakeData && '(테스트 모드)'} + </CardDescription> + </CardHeader> + + <CardContent className="space-y-4"> + {/* 새로고침 버튼 */} + <div className="flex justify-between items-center"> + <div className="text-sm text-gray-500"> + 총 {listData.length}건 + </div> + <Button + onClick={fetchData} + disabled={isLoading} + variant="outline" + size="sm" + > + {isLoading ? ( + <> + <Loader2 className="w-4 h-4 mr-2 animate-spin" /> + 조회 중... + </> + ) : ( + <> + <RefreshCw className="w-4 h-4 mr-2" /> + 새로고침 + </> + )} + </Button> + </div> + + {/* 에러 메시지 */} + {error && ( + <div className="p-4 bg-red-50 border border-red-200 rounded-lg"> + <div className="flex items-center gap-2 text-red-700"> + <AlertCircle className="w-4 h-4" /> + <span className="font-medium">오류</span> + </div> + <p className="text-sm text-red-600 mt-1">{error}</p> + </div> + )} + + {/* 목록 테이블 */} + <div className="border rounded-lg"> + <Table> + <TableHeader> + <TableRow> + <TableHead>결재 ID</TableHead> + <TableHead>제목</TableHead> + <TableHead>상신일시</TableHead> + <TableHead>상태</TableHead> + {type === 'submission' && ( + <> + <TableHead>긴급</TableHead> + <TableHead>보안등급</TableHead> + </> + )} + {type === 'history' && ( + <> + <TableHead>처리일시</TableHead> + <TableHead>처리자</TableHead> + <TableHead>처리유형</TableHead> + </> + )} + <TableHead>작업</TableHead> + </TableRow> + </TableHeader> + <TableBody> + {listData.length === 0 ? ( + <TableRow> + <TableCell + colSpan={type === 'submission' ? 7 : 8} + className="text-center py-8 text-gray-500" + > + {isLoading ? '데이터를 불러오는 중...' : '데이터가 없습니다.'} + </TableCell> + </TableRow> + ) : ( + listData.map((item) => ( + <TableRow key={item.apInfId} className="hover:bg-gray-50"> + <TableCell className="font-mono text-sm"> + {item.apInfId} + </TableCell> + <TableCell className="font-medium"> + {item.subject} + </TableCell> + <TableCell> + {formatDate(item.sbmDt)} + </TableCell> + <TableCell> + <Badge variant={getStatusBadgeVariant(item.status)}> + {getStatusText(item.status)} + </Badge> + </TableCell> + + {type === 'submission' && ( + <> + <TableCell> + {item.urgYn === 'Y' ? ( + <Badge variant="destructive" className="text-xs"> + 긴급 + </Badge> + ) : ( + <Badge variant="outline" className="text-xs"> + 일반 + </Badge> + )} + </TableCell> + <TableCell> + <Badge + variant={getSecurityTypeBadgeVariant(item.docSecuType || 'PERSONAL')} + className="text-xs" + > + {getSecurityTypeText(item.docSecuType || 'PERSONAL')} + </Badge> + </TableCell> + </> + )} + + {type === 'history' && ( + <> + <TableCell> + {item.actionDt ? formatDate(item.actionDt) : '-'} + </TableCell> + <TableCell> + {item.userId || '-'} + </TableCell> + <TableCell> + {item.actionType ? ( + <Badge variant="outline" className="text-xs"> + {getActionTypeText(item.actionType)} + </Badge> + ) : '-'} + </TableCell> + </> + )} + + <TableCell> + <Button + variant="ghost" + size="sm" + onClick={() => handleItemClick(item.apInfId)} + > + <Eye className="w-4 h-4 mr-2" /> + 상세 + </Button> + </TableCell> + </TableRow> + )) + )} + </TableBody> + </Table> + </div> + + {/* 페이지네이션 영역 (향후 구현 예정) */} + {listData.length > 0 && ( + <div className="flex justify-center pt-4"> + <div className="text-sm text-gray-500"> + 페이지네이션 기능은 향후 구현 예정입니다. + </div> + </div> + )} + </CardContent> + </Card> + ); +}
\ No newline at end of file diff --git a/components/knox/approval/ApprovalManager.tsx b/components/knox/approval/ApprovalManager.tsx new file mode 100644 index 00000000..cac534c4 --- /dev/null +++ b/components/knox/approval/ApprovalManager.tsx @@ -0,0 +1,190 @@ +'use client' + +import { useState } from 'react'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; +import { Badge } from '@/components/ui/badge'; +import { Switch } from '@/components/ui/switch'; +import { Label } from '@/components/ui/label'; +import { Separator } from '@/components/ui/separator'; +import { FileText, Eye, XCircle, List, History, Settings } from 'lucide-react'; + +// 결재 컴포넌트들 +import ApprovalSubmit from './ApprovalSubmit'; +import ApprovalDetail from './ApprovalDetail'; +import ApprovalCancel from './ApprovalCancel'; +import ApprovalList from './ApprovalList'; + +interface ApprovalManagerProps { + useFakeData?: boolean; + systemId?: string; + defaultTab?: string; +} + +export default function ApprovalManager({ + useFakeData = false, + systemId = 'EVCP_SYSTEM', + defaultTab = 'submit' +}: ApprovalManagerProps) { + const [currentTab, setCurrentTab] = useState(defaultTab); + const [isTestMode, setIsTestMode] = useState(useFakeData); + const [selectedApInfId, setSelectedApInfId] = useState<string>(''); + + const handleSubmitSuccess = (apInfId: string) => { + setSelectedApInfId(apInfId); + setCurrentTab('detail'); + }; + + const handleCancelSuccess = (apInfId: string) => { + setSelectedApInfId(apInfId); + setCurrentTab('detail'); + }; + + const handleListItemClick = (apInfId: string) => { + setSelectedApInfId(apInfId); + setCurrentTab('detail'); + }; + + const handleTestModeChange = (checked: boolean) => { + setIsTestMode(checked); + }; + + return ( + <div className="w-full max-w-7xl mx-auto space-y-6"> + {/* 헤더 */} + <Card> + <CardHeader> + <CardTitle className="flex items-center gap-2"> + <FileText className="w-6 h-6" /> + Knox 결재 시스템 + </CardTitle> + <CardDescription> + 결재 상신, 조회, 취소 등 모든 결재 업무를 관리할 수 있습니다. + </CardDescription> + </CardHeader> + + <CardContent> + <div className="flex items-center justify-between"> + <div className="flex items-center gap-4"> + <div className="flex items-center gap-2"> + <Label htmlFor="test-mode">테스트 모드</Label> + <Switch + id="test-mode" + checked={isTestMode} + onCheckedChange={handleTestModeChange} + /> + </div> + {isTestMode && ( + <Badge variant="outline" className="text-yellow-600 border-yellow-600"> + 테스트 모드 활성화 + </Badge> + )} + </div> + + <div className="flex items-center gap-2 text-sm text-gray-500"> + <span>시스템 ID:</span> + <Badge variant="outline">{systemId}</Badge> + </div> + </div> + </CardContent> + </Card> + + {/* 메인 탭 */} + <Tabs value={currentTab} onValueChange={setCurrentTab} className="w-full"> + <TabsList className="grid w-full grid-cols-5"> + <TabsTrigger value="submit" className="flex items-center gap-2"> + <FileText className="w-4 h-4" /> + 상신 + </TabsTrigger> + <TabsTrigger value="detail" className="flex items-center gap-2"> + <Eye className="w-4 h-4" /> + 상세조회 + </TabsTrigger> + <TabsTrigger value="cancel" className="flex items-center gap-2"> + <XCircle className="w-4 h-4" /> + 취소 + </TabsTrigger> + <TabsTrigger value="list" className="flex items-center gap-2"> + <List className="w-4 h-4" /> + 상신함 + </TabsTrigger> + <TabsTrigger value="history" className="flex items-center gap-2"> + <History className="w-4 h-4" /> + 이력 + </TabsTrigger> + </TabsList> + + {/* 결재 상신 탭 */} + <TabsContent value="submit" className="space-y-6"> + <ApprovalSubmit + useFakeData={isTestMode} + systemId={systemId} + onSubmitSuccess={handleSubmitSuccess} + /> + </TabsContent> + + {/* 결재 상세 조회 탭 */} + <TabsContent value="detail" className="space-y-6"> + <ApprovalDetail + useFakeData={isTestMode} + systemId={systemId} + initialApInfId={selectedApInfId} + /> + </TabsContent> + + {/* 결재 취소 탭 */} + <TabsContent value="cancel" className="space-y-6"> + <ApprovalCancel + useFakeData={isTestMode} + systemId={systemId} + initialApInfId={selectedApInfId} + onCancelSuccess={handleCancelSuccess} + /> + </TabsContent> + + {/* 상신함 탭 */} + <TabsContent value="list" className="space-y-6"> + <ApprovalList + useFakeData={isTestMode} + systemId={systemId} + type="submission" + onItemClick={handleListItemClick} + /> + </TabsContent> + + {/* 결재 이력 탭 */} + <TabsContent value="history" className="space-y-6"> + <ApprovalList + useFakeData={isTestMode} + systemId={systemId} + type="history" + onItemClick={handleListItemClick} + /> + </TabsContent> + </Tabs> + + {/* 하단 정보 */} + <Card> + <CardContent className="pt-6"> + <div className="flex items-center justify-between text-sm text-gray-500"> + <div className="flex items-center gap-4"> + <div className="flex items-center gap-2"> + <Settings className="w-4 h-4" /> + <span>Knox API 결재 시스템</span> + </div> + <Separator orientation="vertical" className="h-4" /> + <div> + Next.js 15 + shadcn/ui + TypeScript + </div> + </div> + + <div className="flex items-center gap-2"> + <span>버전:</span> + <Badge variant="outline">v1.0.0</Badge> + </div> + </div> + </CardContent> + </Card> + </div> + ); +}
\ No newline at end of file diff --git a/components/knox/approval/ApprovalSubmit.tsx b/components/knox/approval/ApprovalSubmit.tsx new file mode 100644 index 00000000..3b5aa230 --- /dev/null +++ b/components/knox/approval/ApprovalSubmit.tsx @@ -0,0 +1,476 @@ +'use client' + +import { useState } from 'react'; +import { useForm } from 'react-hook-form'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { z } from 'zod'; +import { Button } from '@/components/ui/button'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; +import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'; +import { Input } from '@/components/ui/input'; +import { Textarea } from '@/components/ui/textarea'; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; +import { Switch } from '@/components/ui/switch'; +import { Badge } from '@/components/ui/badge'; +import { Separator } from '@/components/ui/separator'; +import { toast } from 'sonner'; +import { Loader2, Plus, Trash2, FileText, AlertCircle } from 'lucide-react'; + +// API 함수 및 타입 +import { submitApproval, createSubmitApprovalRequest, createApprovalLine } from '@/lib/knox-api/approval/approval'; +import type { ApprovalLine, SubmitApprovalRequest } from '@/lib/knox-api/approval/approval'; + +// Mock 데이터 +import { mockApprovalAPI, createMockApprovalLine, getRoleText } from './mocks/approval-mock'; + +const formSchema = z.object({ + subject: z.string().min(1, '제목은 필수입니다'), + contents: z.string().min(1, '내용은 필수입니다'), + contentsType: z.enum(['TEXT', 'HTML', 'MIME']), + docSecuType: z.enum(['PERSONAL', 'CONFIDENTIAL', 'CONFIDENTIAL_STRICT']), + urgYn: z.boolean(), + importantYn: z.boolean(), + notifyOption: z.enum(['0', '1', '2', '3']), + docMngSaveCode: z.enum(['0', '1']), + sbmLang: z.enum(['ko', 'ja', 'zh', 'en']), + timeZone: z.string().default('GMT+9'), + aplns: z.array(z.object({ + userId: z.string().min(1, '사용자 ID는 필수입니다'), + emailAddress: z.string().email('유효한 이메일 주소를 입력해주세요').optional(), + role: z.enum(['0', '1', '2', '3', '4', '7', '9']), + seq: z.string(), + opinion: z.string().optional() + })).min(1, '최소 1개의 결재 경로가 필요합니다') +}); + +type FormData = z.infer<typeof formSchema>; + +interface ApprovalSubmitProps { + useFakeData?: boolean; + systemId?: string; + onSubmitSuccess?: (apInfId: string) => void; +} + +export default function ApprovalSubmit({ + useFakeData = false, + systemId = 'EVCP_SYSTEM', + onSubmitSuccess +}: ApprovalSubmitProps) { + const [isSubmitting, setIsSubmitting] = useState(false); + const [submitResult, setSubmitResult] = useState<{ apInfId: string } | null>(null); + + const form = useForm<FormData>({ + resolver: zodResolver(formSchema), + defaultValues: { + subject: '', + contents: '', + contentsType: 'TEXT', + docSecuType: 'PERSONAL', + urgYn: false, + importantYn: false, + notifyOption: '0', + docMngSaveCode: '0', + sbmLang: 'ko', + timeZone: 'GMT+9', + aplns: [ + { + userId: '', + emailAddress: '', + role: '0', + seq: '1', + opinion: '' + } + ] + } + }); + + const aplns = form.watch('aplns'); + + const addApprovalLine = () => { + const newSeq = (aplns.length + 1).toString(); + form.setValue('aplns', [...aplns, { + userId: '', + emailAddress: '', + role: '1', + seq: newSeq, + opinion: '' + }]); + }; + + const removeApprovalLine = (index: number) => { + if (aplns.length > 1) { + const newAplns = aplns.filter((_, i) => i !== index); + // 순서 재정렬 + const reorderedAplns = newAplns.map((apln, i) => ({ + ...apln, + seq: (i + 1).toString() + })); + form.setValue('aplns', reorderedAplns); + } + }; + + const onSubmit = async (data: FormData) => { + setIsSubmitting(true); + setSubmitResult(null); + + try { + // 결재 경로 생성 + const approvalLines: ApprovalLine[] = await Promise.all( + data.aplns.map(async (apln) => { + if (useFakeData) { + return createMockApprovalLine({ + userId: apln.userId, + emailAddress: apln.emailAddress, + role: apln.role, + seq: apln.seq, + opinion: apln.opinion + }); + } else { + return createApprovalLine( + { userId: apln.userId, emailAddress: apln.emailAddress }, + apln.role, + apln.seq, + { opinion: apln.opinion } + ); + } + }) + ); + + // 상신 요청 생성 + const submitRequest: SubmitApprovalRequest = useFakeData + ? { + ...data, + urgYn: data.urgYn ? 'Y' : 'N', + importantYn: data.importantYn ? 'Y' : 'N', + sbmDt: new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14), + apInfId: 'test-ap-inf-id-' + Date.now(), + aplns: approvalLines + } + : await createSubmitApprovalRequest( + data.contents, + data.subject, + approvalLines, + { + contentsType: data.contentsType, + docSecuType: data.docSecuType, + urgYn: data.urgYn ? 'Y' : 'N', + importantYn: data.importantYn ? 'Y' : 'N', + notifyOption: data.notifyOption, + docMngSaveCode: data.docMngSaveCode, + sbmLang: data.sbmLang, + timeZone: data.timeZone + } + ); + + // API 호출 + const response = useFakeData + ? await mockApprovalAPI.submitApproval(submitRequest) + : await submitApproval(submitRequest, systemId); + + if (response.result === 'SUCCESS') { + setSubmitResult({ apInfId: response.data.apInfId }); + toast.success('결재가 성공적으로 상신되었습니다.'); + onSubmitSuccess?.(response.data.apInfId); + form.reset(); + } else { + toast.error('결재 상신에 실패했습니다.'); + } + } catch (error) { + console.error('결재 상신 오류:', error); + toast.error('결재 상신 중 오류가 발생했습니다.'); + } finally { + setIsSubmitting(false); + } + }; + + return ( + <Card className="w-full max-w-4xl"> + <CardHeader> + <CardTitle className="flex items-center gap-2"> + <FileText className="w-5 h-5" /> + 결재 상신 + </CardTitle> + <CardDescription> + 새로운 결재를 상신합니다. {useFakeData && '(테스트 모드)'} + </CardDescription> + </CardHeader> + + <CardContent className="space-y-6"> + {submitResult && ( + <div className="p-4 bg-green-50 border border-green-200 rounded-lg"> + <div className="flex items-center gap-2 text-green-700"> + <AlertCircle className="w-4 h-4" /> + <span className="font-medium">상신 완료</span> + </div> + <p className="text-sm text-green-600 mt-1"> + 결재 ID: {submitResult.apInfId} + </p> + </div> + )} + + <Form {...form}> + <form onSubmit={form.handleSubmit(onSubmit)} className="space-y-6"> + {/* 기본 정보 */} + <div className="space-y-4"> + <h3 className="text-lg font-semibold">기본 정보</h3> + + <FormField + control={form.control} + name="subject" + render={({ field }) => ( + <FormItem> + <FormLabel>제목 *</FormLabel> + <FormControl> + <Input placeholder="결재 제목을 입력하세요" {...field} /> + </FormControl> + <FormMessage /> + </FormItem> + )} + /> + + <FormField + control={form.control} + name="contents" + render={({ field }) => ( + <FormItem> + <FormLabel>내용 *</FormLabel> + <FormControl> + <Textarea + placeholder="결재 내용을 입력하세요" + rows={8} + {...field} + /> + </FormControl> + <FormMessage /> + </FormItem> + )} + /> + + <div className="grid grid-cols-2 gap-4"> + <FormField + control={form.control} + name="contentsType" + render={({ field }) => ( + <FormItem> + <FormLabel>내용 형식</FormLabel> + <Select onValueChange={field.onChange} defaultValue={field.value}> + <FormControl> + <SelectTrigger> + <SelectValue placeholder="내용 형식 선택" /> + </SelectTrigger> + </FormControl> + <SelectContent> + <SelectItem value="TEXT">TEXT</SelectItem> + <SelectItem value="HTML">HTML</SelectItem> + <SelectItem value="MIME">MIME</SelectItem> + </SelectContent> + </Select> + <FormMessage /> + </FormItem> + )} + /> + + <FormField + control={form.control} + name="docSecuType" + render={({ field }) => ( + <FormItem> + <FormLabel>보안 등급</FormLabel> + <Select onValueChange={field.onChange} defaultValue={field.value}> + <FormControl> + <SelectTrigger> + <SelectValue placeholder="보안 등급 선택" /> + </SelectTrigger> + </FormControl> + <SelectContent> + <SelectItem value="PERSONAL">개인</SelectItem> + <SelectItem value="CONFIDENTIAL">기밀</SelectItem> + <SelectItem value="CONFIDENTIAL_STRICT">극기밀</SelectItem> + </SelectContent> + </Select> + <FormMessage /> + </FormItem> + )} + /> + </div> + + <div className="grid grid-cols-2 gap-4"> + <FormField + control={form.control} + name="urgYn" + render={({ field }) => ( + <FormItem className="flex flex-row items-center justify-between rounded-lg border p-3"> + <div className="space-y-0.5"> + <FormLabel>긴급 여부</FormLabel> + <FormDescription>긴급 결재로 처리</FormDescription> + </div> + <FormControl> + <Switch + checked={field.value} + onCheckedChange={field.onChange} + /> + </FormControl> + </FormItem> + )} + /> + + <FormField + control={form.control} + name="importantYn" + render={({ field }) => ( + <FormItem className="flex flex-row items-center justify-between rounded-lg border p-3"> + <div className="space-y-0.5"> + <FormLabel>중요 여부</FormLabel> + <FormDescription>중요 결재로 분류</FormDescription> + </div> + <FormControl> + <Switch + checked={field.value} + onCheckedChange={field.onChange} + /> + </FormControl> + </FormItem> + )} + /> + </div> + </div> + + <Separator /> + + {/* 결재 경로 */} + <div className="space-y-4"> + <div className="flex items-center justify-between"> + <h3 className="text-lg font-semibold">결재 경로</h3> + <Button + type="button" + variant="outline" + size="sm" + onClick={addApprovalLine} + > + <Plus className="w-4 h-4 mr-2" /> + 결재자 추가 + </Button> + </div> + + <div className="space-y-3"> + {aplns.map((apln, index) => ( + <div key={index} className="flex items-center gap-3 p-3 border rounded-lg"> + <Badge variant="outline">{index + 1}</Badge> + + <div className="flex-1 grid grid-cols-4 gap-3"> + <FormField + control={form.control} + name={`aplns.${index}.userId`} + render={({ field }) => ( + <FormItem> + <FormControl> + <Input placeholder="사용자 ID" {...field} /> + </FormControl> + <FormMessage /> + </FormItem> + )} + /> + + <FormField + control={form.control} + name={`aplns.${index}.emailAddress`} + render={({ field }) => ( + <FormItem> + <FormControl> + <Input placeholder="이메일 (선택)" {...field} /> + </FormControl> + <FormMessage /> + </FormItem> + )} + /> + + <FormField + control={form.control} + name={`aplns.${index}.role`} + render={({ field }) => ( + <FormItem> + <Select onValueChange={field.onChange} defaultValue={field.value}> + <FormControl> + <SelectTrigger> + <SelectValue /> + </SelectTrigger> + </FormControl> + <SelectContent> + <SelectItem value="0">기안</SelectItem> + <SelectItem value="1">결재</SelectItem> + <SelectItem value="2">합의</SelectItem> + <SelectItem value="3">후결</SelectItem> + <SelectItem value="4">병렬합의</SelectItem> + <SelectItem value="7">병렬결재</SelectItem> + <SelectItem value="9">통보</SelectItem> + </SelectContent> + </Select> + <FormMessage /> + </FormItem> + )} + /> + + <FormField + control={form.control} + name={`aplns.${index}.opinion`} + render={({ field }) => ( + <FormItem> + <FormControl> + <Input placeholder="의견 (선택)" {...field} /> + </FormControl> + <FormMessage /> + </FormItem> + )} + /> + </div> + + <div className="flex items-center gap-2"> + <Badge variant="secondary"> + {getRoleText(apln.role)} + </Badge> + + {aplns.length > 1 && ( + <Button + type="button" + variant="ghost" + size="sm" + onClick={() => removeApprovalLine(index)} + > + <Trash2 className="w-4 h-4" /> + </Button> + )} + </div> + </div> + ))} + </div> + </div> + + <Separator /> + + {/* 제출 버튼 */} + <div className="flex justify-end space-x-3"> + <Button + type="button" + variant="outline" + onClick={() => form.reset()} + disabled={isSubmitting} + > + 초기화 + </Button> + <Button type="submit" disabled={isSubmitting}> + {isSubmitting ? ( + <> + <Loader2 className="w-4 h-4 mr-2 animate-spin" /> + 상신 중... + </> + ) : ( + '결재 상신' + )} + </Button> + </div> + </form> + </Form> + </CardContent> + </Card> + ); +}
\ No newline at end of file diff --git a/components/knox/approval/index.ts b/components/knox/approval/index.ts new file mode 100644 index 00000000..0bae08f1 --- /dev/null +++ b/components/knox/approval/index.ts @@ -0,0 +1,23 @@ +// Knox 결재 시스템 컴포넌트들 +export { default as ApprovalSubmit } from './ApprovalSubmit'; +export { default as ApprovalDetail } from './ApprovalDetail'; +export { default as ApprovalCancel } from './ApprovalCancel'; +export { default as ApprovalList } from './ApprovalList'; +export { default as ApprovalManager } from './ApprovalManager'; + +// Mock 데이터 및 유틸리티 함수들 +export * from './mocks/approval-mock'; + +// 타입 정의들 (re-export) +export type { + ApprovalLine, + SubmitApprovalRequest, + SubmitApprovalResponse, + ApprovalDetailResponse, + ApprovalContentResponse, + ApprovalStatusResponse, + CancelApprovalResponse, + SubmissionListResponse, + ApprovalHistoryResponse, + BaseResponse +} from '@/lib/knox-api/approval/approval';
\ No newline at end of file diff --git a/components/knox/approval/mocks/approval-mock.ts b/components/knox/approval/mocks/approval-mock.ts new file mode 100644 index 00000000..021eb925 --- /dev/null +++ b/components/knox/approval/mocks/approval-mock.ts @@ -0,0 +1,230 @@ +import { + ApprovalLine, + SubmitApprovalRequest, + SubmitApprovalResponse, + ApprovalDetailResponse, + ApprovalContentResponse, + ApprovalStatusResponse, + CancelApprovalResponse, + SubmissionListResponse, + ApprovalHistoryResponse +} from '@/lib/knox-api/approval/approval'; + +// Mock 데이터 생성 함수들 +export const createMockApprovalLine = (overrides?: Partial<ApprovalLine>): ApprovalLine => ({ + epId: '12345', + userId: 'user123', + emailAddress: 'user@example.com', + seq: '1', + role: '0', // 기안 + aplnStatsCode: '0', // 미결 + arbPmtYn: 'N', + contentsMdfyPmtYn: 'N', + aplnMdfyPmtYn: 'N', + opinion: '결재 요청드립니다.', + ...overrides +}); + +export const createMockSubmitApprovalRequest = (overrides?: Partial<SubmitApprovalRequest>): SubmitApprovalRequest => ({ + contents: '결재 요청 내용입니다.', + contentsType: 'TEXT', + docSecuType: 'PERSONAL', + notifyOption: '0', + urgYn: 'N', + sbmDt: '20241215120000', + timeZone: 'GMT+9', + docMngSaveCode: '0', + subject: '결재 요청 - 테스트', + sbmLang: 'ko', + apInfId: 'test-ap-inf-id-' + Date.now(), + importantYn: 'N', + aplns: [ + createMockApprovalLine({ seq: '1', role: '0' }), // 기안 + createMockApprovalLine({ seq: '2', role: '1', userId: 'approver1' }), // 결재 + createMockApprovalLine({ seq: '3', role: '1', userId: 'approver2' }), // 결재 + ], + ...overrides +}); + +export const mockSubmitApprovalResponse: SubmitApprovalResponse = { + result: 'SUCCESS', + data: { + apInfId: 'test-ap-inf-id-' + Date.now() + } +}; + +export const mockApprovalDetailResponse: ApprovalDetailResponse = { + result: 'SUCCESS', + data: { + contentsType: 'TEXT', + sbmDt: '20241215120000', + sbmLang: 'ko', + apInfId: 'test-ap-inf-id-123', + systemId: 'EVCP_SYSTEM', + notifyOption: '0', + urgYn: 'N', + docSecuType: 'PERSONAL', + status: '1', // 진행중 + timeZone: 'GMT+9', + subject: '결재 요청 - 테스트', + aplns: [ + createMockApprovalLine({ seq: '1', role: '0', aplnStatsCode: '1' }), // 기안 완료 + createMockApprovalLine({ seq: '2', role: '1', aplnStatsCode: '0', userId: 'approver1' }), // 결재 대기 + createMockApprovalLine({ seq: '3', role: '1', aplnStatsCode: '0', userId: 'approver2' }), // 결재 대기 + ], + attachments: [] + } +}; + +export const mockApprovalContentResponse: ApprovalContentResponse = { + result: 'SUCCESS', + data: { + contents: '결재 요청 내용입니다.\n\n상세한 내용은 다음과 같습니다:\n- 항목 1\n- 항목 2\n- 항목 3', + contentsType: 'TEXT', + apInfId: 'test-ap-inf-id-123' + } +}; + +export const mockApprovalStatusResponse: ApprovalStatusResponse = { + result: 'SUCCESS', + data: [ + { + apInfId: 'test-ap-inf-id-123', + docChgNum: '1', + status: '1' // 진행중 + } + ] +}; + +export const mockCancelApprovalResponse: CancelApprovalResponse = { + result: 'SUCCESS', + data: { + apInfId: 'test-ap-inf-id-123' + } +}; + +export const mockSubmissionListResponse: SubmissionListResponse = { + result: 'SUCCESS', + data: [ + { + apInfId: 'test-ap-inf-id-123', + subject: '결재 요청 - 테스트', + sbmDt: '20241215120000', + status: '1', + urgYn: 'N', + docSecuType: 'PERSONAL' + }, + { + apInfId: 'test-ap-inf-id-124', + subject: '결재 요청 - 테스트 2', + sbmDt: '20241214100000', + status: '2', + urgYn: 'Y', + docSecuType: 'CONFIDENTIAL' + } + ] +}; + +export const mockApprovalHistoryResponse: ApprovalHistoryResponse = { + result: 'SUCCESS', + data: [ + { + apInfId: 'test-ap-inf-id-123', + subject: '결재 요청 - 테스트', + sbmDt: '20241215120000', + status: '1', + actionType: 'SUBMIT', + actionDt: '20241215120000', + userId: 'submitter123' + }, + { + apInfId: 'test-ap-inf-id-124', + subject: '결재 요청 - 테스트 2', + sbmDt: '20241214100000', + status: '2', + actionType: 'APPROVE', + actionDt: '20241214150000', + userId: 'approver1' + } + ] +}; + +// Mock 함수들 +export const mockApprovalAPI = { + submitApproval: async (request: SubmitApprovalRequest): Promise<SubmitApprovalResponse> => { + // 실제 API 호출 시뮬레이션 + await new Promise(resolve => setTimeout(resolve, 1000)); + return mockSubmitApprovalResponse; + }, + + getApprovalDetail: async (apInfId: string): Promise<ApprovalDetailResponse> => { + await new Promise(resolve => setTimeout(resolve, 500)); + return mockApprovalDetailResponse; + }, + + getApprovalContent: async (apInfId: string): Promise<ApprovalContentResponse> => { + await new Promise(resolve => setTimeout(resolve, 300)); + return mockApprovalContentResponse; + }, + + getApprovalStatus: async (apInfIds: string[]): Promise<ApprovalStatusResponse> => { + await new Promise(resolve => setTimeout(resolve, 400)); + return mockApprovalStatusResponse; + }, + + cancelApproval: async (apInfId: string): Promise<CancelApprovalResponse> => { + await new Promise(resolve => setTimeout(resolve, 800)); + return mockCancelApprovalResponse; + }, + + getSubmissionList: async (): Promise<SubmissionListResponse> => { + await new Promise(resolve => setTimeout(resolve, 600)); + return mockSubmissionListResponse; + }, + + getApprovalHistory: async (): Promise<ApprovalHistoryResponse> => { + await new Promise(resolve => setTimeout(resolve, 700)); + return mockApprovalHistoryResponse; + } +}; + +// 상태 및 역할 텍스트 변환 함수들 +export const getStatusText = (status: string): string => { + const statusMap: Record<string, string> = { + '-3': '암호화실패', + '-2': '암호화중', + '-1': '예약상신', + '0': '보류', + '1': '진행중', + '2': '완결', + '3': '반려', + '4': '상신취소', + '5': '전결', + '6': '후완결' + }; + return statusMap[status] || '알 수 없음'; +}; + +export const getRoleText = (role: string): string => { + const roleMap: Record<string, string> = { + '0': '기안', + '1': '결재', + '2': '합의', + '3': '후결', + '4': '병렬합의', + '7': '병렬결재', + '9': '통보' + }; + return roleMap[role] || '알 수 없음'; +}; + +export const getApprovalStatusText = (status: string): string => { + const statusMap: Record<string, string> = { + '0': '미결', + '1': '결재', + '2': '반려', + '3': '전결', + '5': '자동결재' + }; + return statusMap[status] || '알 수 없음'; +};
\ No newline at end of file diff --git a/lib/knox-api/approval/approval-guide.html b/lib/knox-api/approval/approval-guide.html new file mode 100644 index 00000000..b1b085fb --- /dev/null +++ b/lib/knox-api/approval/approval-guide.html @@ -0,0 +1,4999 @@ +<div class="body-content"> + <div class="sub-header margin"> + <h2 data-message-id="approvals.header.subject">결재</h2> + </div> + <div class="module-subsum"> + <p><span data-message-id="approvals.header.description1">내부 임직원에 한해 결재 상신이 가능합니다.</span><br><span + data-message-id="approvals.header.description2">결재 상신 뿐만 아니라 결재상황조회 및 상신취소 등이 가능합니다.</span></p> + </div> + <div class="module-font type03"><span data-message-id="approvals.policy.subject">[정책 및 제약사항]</span></div> + <div class="module-font type04"> + <dl> + <dt><span data-message-id="approvals.policy.description1">1. 상신인 정보는 녹스포탈 임직원만 지정 가능하며, 상신자의 거점으로 연계 호출해야 + 합니다.</span></dt> + <dt><span data-message-id="approvals.policy.description2">2. 본문 사이즈는 최대 1MB 를 넘을 수 없습니다.</span></dt> + <dt><span data-message-id="approvals.policy.description3">3. 한번에 10개의 첨부파일을 포함하여 발송할 수 있으며, 전체 첨부 사이즈는 10MB + 를 넘을 수 없습니다.</span></dt> + <dt><span data-message-id="approvals.policy.description4">4. 결재경로자 설정은 최대 99명까지 지정이 가능합니다.</span></dt> + </dl> + </div> + <div class="module-font type03"><span data-message-id="subject.api.list">[API 목록]</span> <a + target="blank" class="swagger-link" id="swaggerLinkStg" + href="http://developers.samsung.net/knoxcenter/wso2/swagger-ui/fe7de99a-6e19-456c-a0fb-de0efa86e043"><span + data-message-id="subject.go.to.swagger">테스트 페이지로 이동(Swagger)</span></a><span id="swaggerLinkStg_chrome" + data-message-id="subject.go.to.swagger.chrome"><sub>*Chrome Browser만 이용 가능합니다.</sub></span></div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="170px"> + <col width="350px"> + <col width="100px"> + <col style="width:; text-align:left"> + </colgroup> + <thead> + <tr> + <th class="left">API</th> + <th class="left">URI</th> + <th>Method</th> + <th class="left">Description</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="170px; text-align:left"> + <col width="350px; text-align:left"> + <col width="100px"> + <col style="width:; text-align:left"> + </colgroup> + <tbody> + <tr> + <td class="left"><a href="#box1"><span + data-message-id="approvals.service.submit.subject">결재상신</span></a></td> + <td class="left"><span + data-message-id="approvals.service.submit.uri">/approval/api/v2.0/approvals/submit</span> + </td> + <td><span data-message-id="approvals.service.method.post">POST</span></td> + <td class="left"><span data-message-id="approvals.service.submit.description">결재를 상신한다</span> + </td> + </tr> + <tr> + <td class="left"><a href="#box2"><span + data-message-id="approvals.service.secusubmit.subject">보안결재상신</span></a></td> + <td class="left"><span + data-message-id="approvals.service.secusubmit.uri">/approval/api/v2.0/approvals/secu-submit</span> + </td> + <td><span data-message-id="approvals.service.method.post">POST</span></td> + <td class="left"><span data-message-id="approvals.service.secusubmit.description">보안(대외비/극비) 결재를 + 상신한다</span></td> + </tr> + <tr> + <td class="left"><a href="#box3"><span + data-message-id="approvals.service.detail.subject">결재상세상황조회</span></a></td> + <td class="left"><span + data-message-id="approvals.service.detail.uri">/approval/api/v2.0/approvals/{apInfId}/detail</span> + </td> + <td><span data-message-id="approvals.service.method.get">GET</span></td> + <td class="left"><span data-message-id="approvals.service.detail.description">결재문서의 정보를 상세 + 조회한다</span></td> + </tr> + <tr> + <td class="left"><a href="#box4"><span + data-message-id="approvals.service.content.subject">결재본문조회</span></a></td> + <td class="left"><span + data-message-id="approvals.service.content.uri">/approval/api/v2.0/approvals/{apInfId}/content</span> + </td> + <td><span data-message-id="approvals.service.method.get">GET</span></td> + <td class="left"><span data-message-id="approvals.service.content.description">결재문서의 본문을 + 조회한다</span></td> + </tr> + <tr> + <td class="left"><a href="#box5"><span + data-message-id="approvals.service.status.subject">결재상황조회</span></a></td> + <td class="left"><span + data-message-id="approvals.service.status.uri">/approval/api/v2.0/approvals/status</span> + </td> + <td><span data-message-id="approvals.service.method.post">POST</span></td> + <td class="left"><span data-message-id="approvals.service.status.description">결재문서의 진행 상태를 + 조회한다</span></td> + </tr> + <tr> + <td class="left"><a href="#box6"><span + data-message-id="approvals.service.apinfids.subject">결재연계ID조회</span></a></td> + <td class="left"><span + data-message-id="approvals.service.apinfids.uri">/approval/api/v2.0/approvals/apinfids</span> + </td> + <td><span data-message-id="approvals.service.method.get">GET</span></td> + <td class="left"><span data-message-id="approvals.service.apinfids.description">결재ID로 결재연계ID를 + 조회한다</span></td> + </tr> + <tr> + <td class="left"><a href="#box7"><span + data-message-id="approvals.service.submission.subject">상신함리스트조회</span></a></td> + <td class="left"><span + data-message-id="approvals.service.submission.uri">/approval/api/v2.0/approvals/submission</span> + </td> + <td><span data-message-id="approvals.service.method.get">GET</span></td> + <td class="left"><span data-message-id="approvals.service.submission.description">요청 연계시스템ID로 연계 + 상신처리된 상신자의 상신함의 정보를 조회한다</span></td> + </tr> + <tr> + <td class="left"><a href="#box8"><span + data-message-id="approvals.service.apinfidinfos.subject">연계이력조회</span></a></td> + <td class="left"><span + data-message-id="approvals.service.apinfidinfos.uri">/approval/api/v2.0/approvals/apinfidinfos</span> + </td> + <td><span data-message-id="approvals.service.method.get">GET</span></td> + <td class="left"><span data-message-id="approvals.service.apinfidinfos.description">요청 연계시스템ID에서 + 상신된 결재문서의 연계 이력을 조회한다</span></td> + </tr> + <tr> + <td class="left"><a href="#box9"><span + data-message-id="approvals.service.cancel.subject">상신취소</span></a></td> + <td class="left"><span + data-message-id="approvals.service.cancel.uri">/approval/api/v2.0/approvals/{apInfId}/cancel</span> + </td> + <td><span data-message-id="approvals.service.method.post">POST</span></td> + <td class="left"><span data-message-id="approvals.service.cancel.description">결재문서를 + 상신취소한다</span></td> + </tr> + <tr> + <td class="left"><a href="#box11"><span + data-message-id="approvals.service.ownaplnlist.subject">저장된결재경로목록조회</span></a></td> + <td class="left"><span + data-message-id="approvals.service.ownaplnlist.uri">/approval/api/v2.0/approvals/ownaplnlist</span> + </td> + <td><span data-message-id="approvals.service.method.get">GET</span></td> + <td class="left"><span data-message-id="approvals.service.ownaplnlist.description">개인별 저장된 결재경로 + 목록을 조회한다</span></td> + </tr> + <tr> + <td class="left"><a href="#box12"><span + data-message-id="approvals.service.ownaplndetail.subject">저장된결재경로상세조회</span></a> + </td> + <td class="left"><span + data-message-id="approvals.service.ownaplndetail.uri">/approval/api/v2.0/approvals/{pslAplnId}/ownaplndetail</span> + </td> + <td><span data-message-id="approvals.service.method.get">GET</span></td> + <td class="left"><span data-message-id="approvals.service.ownaplndetail.description">개인별 저장된 + 결재경로 ID로 정보를 상세 조회한다</span></td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="box1"><span data-message-id="approvals.service.submit.subject">결재상신</span></div> + <div class="module-font type02"> + <p><span data-message-id="approvals.service.submit.uri">/approval/api/v2.0/approvals/submit</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="approvals.service.submit.detail">삼성 그룹사 임직원 뿐만 아니라 외부수신인을 포함하여 결재 상신이 가능하며, 상신된 결재는 각 + 사용자의 결재함에 저장됩니다.</span></p> + </div> + <div class="module-font type02"> + <p>Request Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="approvals.service.request.systemid.properties">연계 시스템 + ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.attribute">System-ID</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.header">Header</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.sample">CXXREST0001</span></td> + <td class="left"><span data-message-id="approvals.service.request.systemid.note"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span + data-message-id="approvals.service.request.content.properties">결재본문</span></td> + <td class="left"><span + data-message-id="approvals.service.request.content.attribute">contents</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.content.sample">TEST</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.content.note"></span></td> + </tr> + <tr> + <td>3</td> + <td class="left"><span + data-message-id="approvals.service.request.contentsType.properties">본문종류</span></td> + <td class="left"><span + data-message-id="approvals.service.request.contentsType.attribute">contentsType</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.contentsType.sample">TEXT</span></td> + <td class="left"><span + data-message-id="approvals.service.request.contentsType.note">TEXT,HTML,MIME</span></td> + </tr> + <tr> + <td>4</td> + <td class="left"><span + data-message-id="approvals.service.request.docSecuType.properties">보안문서타입</span></td> + <td class="left"><span + data-message-id="approvals.service.request.docSecuType.attribute">docSecuType</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.docSecuType.sample">PERSONAL</span></td> + <td class="left"><span + data-message-id="approvals.service.request.docSecuType.note">CONFIDENTIAL, + CONFIDENTIAL_STRICT 지정 시 에러</span></td> + </tr> + <tr> + <td>5</td> + <td class="left"><span + data-message-id="approvals.service.request.notifyOption.properties">통보옵션</span></td> + <td class="left"><span + data-message-id="approvals.service.request.notifyOption.attribute">notifyOption</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.notifyOption.sample">0</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.notifyOption.note"><span + class="ellipsis">0: 통보자통보 결재경로포함 , 1: 모두통보 결재경로포함 </span><br><span + class="ellipsis">2: 통보자통보 결재경로포함안함 , 3: 모두통보 결재경로포함안함</span></span></td> + </tr> + <tr> + <td>6</td> + <td class="left"><span data-message-id="approvals.service.request.urgYn.properties">긴급여부</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.urgYn.attribute">urgYn</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.urgYn.sample">N</span></td> + <td class="left"><span data-message-id="approvals.service.request.urgYn.note"></span></td> + </tr> + <tr> + <td>7</td> + <td class="left"><span data-message-id="approvals.service.request.sbmDt.properties">상신일시</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.sbmDt.attribute">sbmDt</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.sbmDt.sample">20190524145033</span></td> + <td class="left"><span data-message-id="approvals.service.request.sbmDt.note"></span></td> + </tr> + <tr> + <td>8</td> + <td class="left"><span + data-message-id="approvals.service.request.timeZone.properties">타임존</span></td> + <td class="left"><span + data-message-id="approvals.service.request.timeZone.attribute">timeZone</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.timeZone.sample">GMT</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.timeZone.note"></span></td> + </tr> + <tr> + <td>9</td> + <td class="left"><span + data-message-id="approvals.service.request.docMngSaveCode.properties">문서관리저장코드</span> + </td> + <td class="left"><span + data-message-id="approvals.service.request.docMngSaveCode.attribute">docMngSaveCode</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.docMngSaveCode.sample">0</span></td> + <td class="left"><span data-message-id="approvals.service.request.docMngSaveCode.note"><span + class="ellipsis">0 : 문서관리저장안함 </span><br><span class="ellipsis"> 1 : + 문서관리저장함</span></span></td> + </tr> + <tr> + <td>10</td> + <td class="left"><span + data-message-id="approvals.service.request.subject.properties">결재제목</span></td> + <td class="left"><span + data-message-id="approvals.service.request.subject.attribute">subject</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.subject.sample">근태신청</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.subject.note"></span></td> + </tr> + <tr> + <td>11</td> + <td class="left"><span + data-message-id="approvals.service.request.sbmLang.properties">상신언어</span></td> + <td class="left"><span + data-message-id="approvals.service.request.sbmLang.attribute">sbmLang</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.sbmLang.sample">ko</span></td> + <td class="left"><span data-message-id="approvals.service.request.sbmLang.note">ko : korean ja : + japanese zh : chinese en : english</span></td> + </tr> + <tr> + <td>12</td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.properties">연계ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.attribute">apInfId</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.sample">TEST0000000000002120190523185902</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.apInfId.note">32자리의 고유 + 결재값</span></td> + </tr> + <tr> + <td>13</td> + <td class="left"><span + data-message-id="approvals.service.request.importantYn.properties">중요여부</span></td> + <td class="left"><span + data-message-id="approvals.service.request.importantYn.attribute">importantYn</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.n">N</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.importantYn.sample">Y</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.importantYn.note"></span></td> + </tr> + <tr> + <td>14</td> + <td class="left"><span data-message-id="approvals.service.request.aplns.properties">결재경로</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.aplns.attribute">aplns</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.jsonstring">JSON String</span> + </td> + <td></td> + <td class="left"><span data-message-id="approvals.service.request.aplns.note"><span + class="ellipsis">상신자, 결재자 1명 이상 필수 </span><br><span class="ellipsis">※결재자/합의자 없이 + 통보자만 지정된 결재경로 불가</span></span></td> + </tr> + <tr> + <td>15</td> + <td class="left"><span data-message-id="approvals.service.request.EPID.properties">EPID</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.EPID.attribute">epId</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.EPID.sample">M071015062623C9884</span></td> + <td class="left"><span data-message-id="approvals.service.request.EPID.note"><span + class="ellipsis">속성 한가지와 조합하여 사용 우선순위 </span><br><span class="ellipsis"> userId > + epId > emailAddress</span></span></td> + </tr> + <tr> + <td>16</td> + <td class="left"><span + data-message-id="approvals.service.request.userId.properties">사용자ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.userId.attribute">userId</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.userId.sample">qtp03</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.userId.note"><span + class="ellipsis">속성 한가지와 조합하여 사용 우선순위 </span><br><span class="ellipsis"> userId > + epId > emailAddress</span></span></td> + </tr> + <tr> + <td>17</td> + <td class="left"><span + data-message-id="approvals.service.request.emailAddress.properties">사용자이메일</span></td> + <td class="left"><span + data-message-id="approvals.service.request.emailAddress.attribute">emailAddress</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.emailAddress.sample">qtp03@stage.sasmung.com</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.emailAddress.note"><span + class="ellipsis">속성 한가지와 조합하여 사용 우선순위 </span><br><span class="ellipsis"> userId > + epId > emailAddress</span></span></td> + </tr> + <tr> + <td>18</td> + <td class="left"><span data-message-id="approvals.service.request.seq.properties">결재순번</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.seq.attribute">seq</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.seq.sample">0</span></td> + <td class="left"><span data-message-id="approvals.service.request.seq.note">상신자의 경우 반드시 0, + 병렬결재(합의)자의 경우 seq 일치</span></td> + </tr> + <tr> + <td>19</td> + <td class="left"><span data-message-id="approvals.service.request.role.properties">설정구분</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.role.attribute">role</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.role.sample">0</span></td> + <td class="left"><span data-message-id="approvals.service.request.role.note"><span + class="ellipsis">기안(0), 결재(1), 합의(2), 후결(3), 병렬합의(4), 병렬결재(7), 통보(9) + </span><br><span class="ellipsis"> (후결자는 최대 1명, 병렬결재 & 병렬합의자는 최소 2명 + 이상)</span></span></td> + </tr> + <tr> + <td>20</td> + <td class="left"><span + data-message-id="approvals.service.request.aplnStatsCode.properties">처리구분</span></td> + <td class="left"><span + data-message-id="approvals.service.request.aplnStatsCode.attribute">aplnStatsCode</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.aplnStatsCode.sample">0</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.aplnStatsCode.note">미결(0), + 결재(1), 반려(2), 전결(3), 자동결재(5)</span></td> + </tr> + <tr> + <td>21</td> + <td class="left"><span + data-message-id="approvals.service.request.arbPmtYn.properties">전결권한여부</span></td> + <td class="left"><span + data-message-id="approvals.service.request.arbPmtYn.attribute">arbPmtYn</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.arbPmtYn.sample">Y</span></td> + <td class="left"><span data-message-id="approvals.service.request.arbPmtYn.note"></span></td> + </tr> + <tr> + <td>22</td> + <td class="left"><span + data-message-id="approvals.service.request.contentsMdfyPmtYn.properties">본문수정권한여부</span> + </td> + <td class="left"><span + data-message-id="approvals.service.request.contentsMdfyPmtYn.attribute">contentsMdfyPmtYn</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.contentsMdfyPmtYn.sample">Y</span></td> + <td class="left"><span + data-message-id="approvals.service.request.contentsMdfyPmtYn.note"></span></td> + </tr> + <tr> + <td>23</td> + <td class="left"><span + data-message-id="approvals.service.request.aplnMdfyPmtYn.properties">경로변경권한여부</span> + </td> + <td class="left"><span + data-message-id="approvals.service.request.aplnMdfyPmtYn.attribute">aplnMdfyPmtYn</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.aplnMdfyPmtYn.sample">Y</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.aplnMdfyPmtYn.note"></span> + </td> + </tr> + <tr> + <td>24</td> + <td class="left"><span + data-message-id="approvals.service.request.opinion.properties">상신의견</span></td> + <td class="left"><span + data-message-id="approvals.service.request.opinion.attribute">opinion</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.opinion.sample">근태결재입니다.</span></td> + <td class="left"><span data-message-id="approvals.service.request.opinion.note"></span></td> + </tr> + <tr> + <td>25</td> + <td class="left"><span + data-message-id="approvals.service.request.attachments.properties">첨부파일</span></td> + <td class="left"><span + data-message-id="approvals.service.request.attachments.attribute">attachments</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.n">N</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span + data-message-id="approvals.service.request.datatype.multipart">multipart/form-data</span> + </td> + <td class="left"><span + data-message-id="approvals.service.request.attachments.sample">multipart/form-data로 변환된 + 바이너리 파일 및 파일명</span></td> + <td class="left"><span data-message-id="approvals.service.request.attachments.note"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Response Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <thead> + <tr> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="approvals.service.response.result.properties">API 호출 + 성공여부</span></td> + <td class="left"><span + data-message-id="approvals.service.response.result.attribute">result</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.response.result.sample">success</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.result.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.submit.data.properties">결재연계ID정보</span></td> + <td class="left"><span + data-message-id="approvals.service.response.submit.data.attribute">data</span></td> + <td><span data-message-id="approvals.service.request.datatype.jsonstring">JSON String</span> + </td> + <td></td> + <td class="left"><span data-message-id="approvals.service.response.submit.data.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.apInfId.properties">결재연계ID</span></td> + <td class="left"><span + data-message-id="approvals.service.response.apInfId.attribute">apInfId</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.apInfId.sample">TEST1A000A11ACa02CVQ1A0CA4CA33C1</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.apInfId.note">리턴받은 결재 아이디를 + 이용하여, 상황조회 및 상신취소가 가능합니다.</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"><span>Sample</span></div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th class="left">Request</th> + <th class="left">Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td> + <pre>/approval/approvals/api/v2.0/submit +Content-Disposition: form-data; name="approval" + { + "aplns": [ + { + "epId": "M071015062623C988403","seq": "0","role": "0","aplnStatsCode": "0", + "arbPmtYn": "Y","contentsMdfyPmtYn": "Y", "aplnMdfyPmtYn": "Y" + }, + { + "epId": "M080325053708C989824","seq": "1","role": "1","aplnStatsCode": "0", + "arbPmtYn": "Y","contentsMdfyPmtYn": "Y", "aplnMdfyPmtYn": "Y" + } + ], + "contents": "TEST", + "contentsType": "TEXT", + "docSecuType": "PERSONAL", + "notifyOption": "0", + "urgYn": "N", + "sbmDt": "20190526121212", + "subject": "Test application", + "sbmLang": "ko", + "apInfId": "TEST0000000000002120190514143359", + "docMngSaveCode": "0", + "timeZone": "GMT+9" +} +Content-Disposition: form-data; name="attachments"; filename="attach1.jpg" +Content-Disposition: form-data; name="attachments"; filename="attach2.txt" + </pre> + </td> + <td> + <pre>{ + "result": "success", + "data": { + "apInfId": "TEST0000000000002120190514143359" + } +} + </pre> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Error Code</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th class="left"><span data-message-id="common.type.message3">에러메시지</span></th> + <th class="left"><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE001.code">APE001</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE001.message">데이터가 + 필요합니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE001.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE002.code">APE002</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE002.message">입력된 데이터 형식이 + 잘못되었습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE002.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE003.code">APE003</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE003.message">입력값이 + 잘못되었습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE003.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE004.code">APE004</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE004.message">본문은 1MB를 초과할 + 수 없습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE004.measures"></span> + </td> + </tr> + <tr></tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE006.code">APE006</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE006.message">제목에는 엔터값이 + 들어갈 수 없습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE006.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE007.code">APE007</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE007.message">제목은 300자를 + 초과할 수 없습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE007.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.403">403</span></td> + <td><span data-message-id="approvals.service.errorcode.APE008.code">APE008</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE008.message">중복된 데이터가 + 있습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE008.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE009.code">APE009</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE009.message">후결자는 1명만 지정 + 가능합니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE009.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE010.code">APE010</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE010.message">결재경로는 최소 2명 + 이상입니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE010.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE011.code">APE011</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE011.message">결재경로는 최대 99명 + 이하입니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE011.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE012.code">APE012</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE012.message">상신자를 제외한 + 사용자들은 의견값을 설정할 수 없습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE012.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE013.code">APE013</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE013.message">미결 상태로 설정된 + 사용자들은 처리일시값을 설정할 수 없습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE013.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE014.code">APE014</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE014.message">상신의견값의 길이가 + 너무 깁니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE014.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE016.code">APE016</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE016.message">결재자 혹은 합의자가 + 결재경로상에 없습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE016.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE017.code">APE017</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE017.message">결재경로 내 휴직 또는 + 퇴직자가 포함되어 있습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE017.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE018.code">APE018</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE018.message">외부 사용자는 + 통보자로만 지정이 가능합니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE018.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE019.code">APE019</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE019.message">결재경로에 포함될 수 + 없는 사용자가 입력되었습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE019.measures"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="box2"><span data-message-id="approvals.service.secusubmit.subject">보안결재상신</span> + </div> + <div class="module-font type02"> + <p><span data-message-id="approvals.service.secusubmit.uri">/approval/api/v2.0/approvals/secu-submit</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="approvals.service.secusubmit.detail">보안 결재 옵션을 설정하여 대외비, 극비로 보안 결재를 상신할 수 있습니다.</span> + </p> + </div> + <div class="module-font type02"> + <p>Request Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="approvals.service.request.systemid.properties">연계 시스템 + ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.attribute">System-ID</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.header">Header</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.sample">CXXREST0001</span></td> + <td class="left"><span data-message-id="approvals.service.request.systemid.note"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span + data-message-id="approvals.service.request.content.properties">결재본문</span></td> + <td class="left"><span + data-message-id="approvals.service.request.content.attribute">contents</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.content.sample">TEST</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.content.note"></span></td> + </tr> + <tr> + <td>3</td> + <td class="left"><span + data-message-id="approvals.service.request.contentsType.properties">본문종류</span></td> + <td class="left"><span + data-message-id="approvals.service.request.contentsType.attribute">contentsType</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.contentsType.sample">TEXT</span></td> + <td class="left"><span + data-message-id="approvals.service.request.contentsType.note">TEXT,HTML,MIME</span></td> + </tr> + <tr> + <td>4</td> + <td class="left"><span + data-message-id="approvals.service.request.docSecuType.properties">보안문서타입</span></td> + <td class="left"><span + data-message-id="approvals.service.request.docSecuType.attribute">docSecuType</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.secu.docSecuType.sample">CONFIDENTIAL</span> + </td> + <td class="left"><span + data-message-id="approvals.service.request.docSecuType.note">CONFIDENTIAL, + CONFIDENTIAL_STRICT 지정 시 에러</span></td> + </tr> + <tr> + <td>5</td> + <td class="left"><span + data-message-id="approvals.service.request.notifyOption.properties">통보옵션</span></td> + <td class="left"><span + data-message-id="approvals.service.request.notifyOption.attribute">notifyOption</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.notifyOption.sample">0</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.notifyOption.note"><span + class="ellipsis">0: 통보자통보 결재경로포함 , 1: 모두통보 결재경로포함 </span><br><span + class="ellipsis">2: 통보자통보 결재경로포함안함 , 3: 모두통보 결재경로포함안함</span></span></td> + </tr> + <tr> + <td>6</td> + <td class="left"><span data-message-id="approvals.service.request.urgYn.properties">긴급여부</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.urgYn.attribute">urgYn</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.urgYn.sample">N</span></td> + <td class="left"><span data-message-id="approvals.service.request.urgYn.note"></span></td> + </tr> + <tr> + <td>7</td> + <td class="left"><span data-message-id="approvals.service.request.sbmDt.properties">상신일시</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.sbmDt.attribute">sbmDt</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.sbmDt.sample">20190524145033</span></td> + <td class="left"><span data-message-id="approvals.service.request.sbmDt.note"></span></td> + </tr> + <tr> + <td>8</td> + <td class="left"><span + data-message-id="approvals.service.request.timeZone.properties">타임존</span></td> + <td class="left"><span + data-message-id="approvals.service.request.timeZone.attribute">timeZone</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.timeZone.sample">GMT</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.timeZone.note"></span></td> + </tr> + <tr> + <td>9</td> + <td class="left"><span + data-message-id="approvals.service.request.docMngSaveCode.properties">문서관리저장코드</span> + </td> + <td class="left"><span + data-message-id="approvals.service.request.docMngSaveCode.attribute">docMngSaveCode</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.docMngSaveCode.sample">0</span></td> + <td class="left"><span data-message-id="approvals.service.request.docMngSaveCode.note"><span + class="ellipsis">0 : 문서관리저장안함 </span><br><span class="ellipsis"> 1 : + 문서관리저장함</span></span></td> + </tr> + <tr> + <td>10</td> + <td class="left"><span + data-message-id="approvals.service.request.subject.properties">결재제목</span></td> + <td class="left"><span + data-message-id="approvals.service.request.subject.attribute">subject</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.subject.sample">근태신청</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.subject.note"></span></td> + </tr> + <tr> + <td>11</td> + <td class="left"><span + data-message-id="approvals.service.request.sbmLang.properties">상신언어</span></td> + <td class="left"><span + data-message-id="approvals.service.request.sbmLang.attribute">sbmLang</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.sbmLang.sample">ko</span></td> + <td class="left"><span data-message-id="approvals.service.request.sbmLang.note">ko : korean ja : + japanese zh : chinese en : english</span></td> + </tr> + <tr> + <td>12</td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.properties">연계ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.attribute">apInfId</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.sample">TEST0000000000002120190523185902</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.apInfId.note">32자리의 고유 + 결재값</span></td> + </tr> + <tr> + <td>13</td> + <td class="left"><span + data-message-id="approvals.service.request.importantYn.properties">중요여부</span></td> + <td class="left"><span + data-message-id="approvals.service.request.importantYn.attribute">importantYn</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.n">N</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.importantYn.sample">Y</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.importantYn.note"></span></td> + </tr> + <tr> + <td>14</td> + <td class="left"><span data-message-id="approvals.service.request.aplns.properties">결재경로</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.aplns.attribute">aplns</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.jsonstring">JSON String</span> + </td> + <td></td> + <td class="left"><span data-message-id="approvals.service.request.aplns.note"><span + class="ellipsis">상신자, 결재자 1명 이상 필수 </span><br><span class="ellipsis">※결재자/합의자 없이 + 통보자만 지정된 결재경로 불가</span></span></td> + </tr> + <tr> + <td>15</td> + <td class="left"><span data-message-id="approvals.service.request.EPID.properties">EPID</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.EPID.attribute">epId</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.EPID.sample">M071015062623C9884</span></td> + <td class="left"><span data-message-id="approvals.service.request.EPID.note"><span + class="ellipsis">속성 한가지와 조합하여 사용 우선순위 </span><br><span class="ellipsis"> userId > + epId > emailAddress</span></span></td> + </tr> + <tr> + <td>16</td> + <td class="left"><span + data-message-id="approvals.service.request.userId.properties">사용자ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.userId.attribute">userId</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.userId.sample">qtp03</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.userId.note"><span + class="ellipsis">속성 한가지와 조합하여 사용 우선순위 </span><br><span class="ellipsis"> userId > + epId > emailAddress</span></span></td> + </tr> + <tr> + <td>17</td> + <td class="left"><span + data-message-id="approvals.service.request.emailAddress.properties">사용자이메일</span></td> + <td class="left"><span + data-message-id="approvals.service.request.emailAddress.attribute">emailAddress</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.emailAddress.sample">qtp03@stage.sasmung.com</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.emailAddress.note"><span + class="ellipsis">속성 한가지와 조합하여 사용 우선순위 </span><br><span class="ellipsis"> userId > + epId > emailAddress</span></span></td> + </tr> + <tr> + <td>18</td> + <td class="left"><span data-message-id="approvals.service.request.seq.properties">결재순번</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.seq.attribute">seq</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.seq.sample">0</span></td> + <td class="left"><span data-message-id="approvals.service.request.seq.note">상신자의 경우 반드시 0, + 병렬결재(합의)자의 경우 seq 일치</span></td> + </tr> + <tr> + <td>19</td> + <td class="left"><span data-message-id="approvals.service.request.role.properties">설정구분</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.role.attribute">role</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.role.sample">0</span></td> + <td class="left"><span data-message-id="approvals.service.request.role.note"><span + class="ellipsis">기안(0), 결재(1), 합의(2), 후결(3), 병렬합의(4), 병렬결재(7), 통보(9) + </span><br><span class="ellipsis"> (후결자는 최대 1명, 병렬결재 & 병렬합의자는 최소 2명 + 이상)</span></span></td> + </tr> + <tr> + <td>20</td> + <td class="left"><span + data-message-id="approvals.service.request.aplnStatsCode.properties">처리구분</span></td> + <td class="left"><span + data-message-id="approvals.service.request.aplnStatsCode.attribute">aplnStatsCode</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.aplnStatsCode.sample">0</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.aplnStatsCode.note">미결(0), + 결재(1), 반려(2), 전결(3), 자동결재(5)</span></td> + </tr> + <tr> + <td>21</td> + <td class="left"><span + data-message-id="approvals.service.request.arbPmtYn.properties">전결권한여부</span></td> + <td class="left"><span + data-message-id="approvals.service.request.arbPmtYn.attribute">arbPmtYn</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.arbPmtYn.sample">Y</span></td> + <td class="left"><span data-message-id="approvals.service.request.arbPmtYn.note"></span></td> + </tr> + <tr> + <td>22</td> + <td class="left"><span + data-message-id="approvals.service.request.contentsMdfyPmtYn.properties">본문수정권한여부</span> + </td> + <td class="left"><span + data-message-id="approvals.service.request.contentsMdfyPmtYn.attribute">contentsMdfyPmtYn</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.contentsMdfyPmtYn.sample">Y</span></td> + <td class="left"><span + data-message-id="approvals.service.request.contentsMdfyPmtYn.note"></span></td> + </tr> + <tr> + <td>23</td> + <td class="left"><span + data-message-id="approvals.service.request.aplnMdfyPmtYn.properties">경로변경권한여부</span> + </td> + <td class="left"><span + data-message-id="approvals.service.request.aplnMdfyPmtYn.attribute">aplnMdfyPmtYn</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.aplnMdfyPmtYn.sample">Y</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.aplnMdfyPmtYn.note"></span> + </td> + </tr> + <tr> + <td>24</td> + <td class="left"><span + data-message-id="approvals.service.request.opinion.properties">상신의견</span></td> + <td class="left"><span + data-message-id="approvals.service.request.opinion.attribute">opinion</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.opinion.sample">근태결재입니다.</span></td> + <td class="left"><span data-message-id="approvals.service.request.opinion.note"></span></td> + </tr> + <tr> + <td>25</td> + <td class="left"><span + data-message-id="approvals.service.request.attachments.properties">첨부파일</span></td> + <td class="left"><span + data-message-id="approvals.service.request.attachments.attribute">attachments</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.n">N</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span + data-message-id="approvals.service.request.datatype.multipart">multipart/form-data</span> + </td> + <td class="left"><span + data-message-id="approvals.service.request.attachments.sample">multipart/form-data로 변환된 + 바이너리 파일 및 파일명</span></td> + <td class="left"><span data-message-id="approvals.service.request.attachments.note"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Response Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <thead> + <tr> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="approvals.service.response.result.properties">API 호출 + 성공여부</span></td> + <td class="left"><span + data-message-id="approvals.service.response.result.attribute">result</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.response.result.sample">success</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.result.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.submit.data.properties">결재연계ID정보</span></td> + <td class="left"><span + data-message-id="approvals.service.response.submit.data.attribute">data</span></td> + <td><span data-message-id="approvals.service.request.datatype.jsonstring">JSON String</span> + </td> + <td></td> + <td class="left"><span data-message-id="approvals.service.response.submit.data.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.apInfId.properties">결재연계ID</span></td> + <td class="left"><span + data-message-id="approvals.service.response.apInfId.attribute">apInfId</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.apInfId.sample">TEST1A000A11ACa02CVQ1A0CA4CA33C1</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.apInfId.note">리턴받은 결재 아이디를 + 이용하여, 상황조회 및 상신취소가 가능합니다.</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"><span>Sample</span></div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th class="left">Request</th> + <th class="left">Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td> + <pre>/approval/v2.0/approvals/secu-submit +Content-Disposition: form-data; name="approval" + { + "aplns": [ + { + "epId": "M071015062623C988403","seq": "0","role": "0","aplnStatsCode": "0", + "arbPmtYn": "Y","contentsMdfyPmtYn": "Y", "aplnMdfyPmtYn": "Y" + }, + { + "epId": "M080325053708C989824","seq": "1","role": "1","aplnStatsCode": "0", + "arbPmtYn": "Y","contentsMdfyPmtYn": "Y", "aplnMdfyPmtYn": "Y" + } + ], + "contents": "TEST", + "contentsType": "TEXT", + "docSecuType": "CONFIDENTIAL", + "notifyOption": "0", + "urgYn": "N", + "sbmDt": "20190526121212", + "subject": "Test application", + "sbmLang": "ko", + "apInfId": "TEST0000000000002120190514143359", + "docMngSaveCode": "0", + "timeZone": "GMT+9" +} +Content-Disposition: form-data; name="attachments"; filename="attach1.jpg" +Content-Disposition: form-data; name="attachments"; filename="attach2.txt" + </pre> + </td> + <td> + <pre>{ + "result": "success", + "data": { + "apInfId": "TEST0000000000002120190514143359" + } +} + </pre> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Error Code</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th class="left"><span data-message-id="common.type.message3">에러메시지</span></th> + <th class="left"><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE001.code">APE001</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE001.message">데이터가 + 필요합니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE001.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE002.code">APE002</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE002.message">입력된 데이터 형식이 + 잘못되었습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE002.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE003.code">APE003</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE003.message">입력값이 + 잘못되었습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE003.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE004.code">APE004</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE004.message">본문은 1MB를 초과할 + 수 없습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE004.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE006.code">APE006</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE006.message">제목에는 엔터값이 + 들어갈 수 없습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE006.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE007.code">APE007</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE007.message">제목은 300자를 + 초과할 수 없습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE007.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.403">403</span></td> + <td><span data-message-id="approvals.service.errorcode.APE008.code">APE008</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE008.message">중복된 데이터가 + 있습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE008.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE009.code">APE009</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE009.message">후결자는 1명만 지정 + 가능합니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE009.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE010.code">APE010</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE010.message">결재경로는 최소 2명 + 이상입니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE010.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE011.code">APE011</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE011.message">결재경로는 최대 99명 + 이하입니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE011.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE012.code">APE012</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE012.message">상신자를 제외한 + 사용자들은 의견값을 설정할 수 없습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE012.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE013.code">APE013</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE013.message">미결 상태로 설정된 + 사용자들은 처리일시값을 설정할 수 없습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE013.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE014.code">APE014</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE014.message">상신의견값의 길이가 + 너무 깁니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE014.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE016.code">APE016</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE016.message">결재자 혹은 합의자가 + 결재경로상에 없습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE016.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE017.code">APE017</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE017.message">결재경로 내 휴직 또는 + 퇴직자가 포함되어 있습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE017.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE018.code">APE018</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE018.message">외부 사용자는 + 통보자로만 지정이 가능합니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE018.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE019.code">APE019</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE019.message">결재경로에 포함될 수 + 없는 사용자가 입력되었습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE019.measures"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="box3"><span data-message-id="approvals.service.detail.subject">결재상세상황조회</span> + </div> + <div class="module-font type02"> + <p><span data-message-id="approvals.service.detail.uri">/approval/api/v2.0/approvals/{apInfId}/detail</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="approvals.service.detail.detail">결재 연계 ID를 이용하여 결재문서의 정보(결재현황, 결재문서 상태)를 상세 조회 할 수 + 있습니다.</span></p> + </div> + <div class="module-font type02"> + <p>Request Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.properties">연계ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.attribute">apInfId</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.path">Path</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.sample">TEST0000000000002120190523185902</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.apInfId.note">32자리의 고유 + 결재값</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Response Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <thead> + <tr> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="approvals.service.response.result.properties">API 호출 + 성공여부</span></td> + <td class="left"><span + data-message-id="approvals.service.response.result.attribute">result</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.response.result.sample">success</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.result.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.detail.data.properties">결재상세정보</span></td> + <td class="left"><span + data-message-id="approvals.service.response.detail.data.attribute">data</span></td> + <td><span data-message-id="approvals.service.request.datatype.jsonstring">JSON String</span> + </td> + <td></td> + <td class="left"><span data-message-id="approvals.service.response.detail.data.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.contentsType.properties">본문종류</span></td> + <td class="left"><span + data-message-id="approvals.service.request.contentsType.attribute">contentsType</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.contentsType.sample">TEXT</span></td> + <td class="left"><span + data-message-id="approvals.service.request.contentsType.note">TEXT,HTML,MIME</span></td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.request.sbmDt.properties">상신일시</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.sbmDt.attribute">sbmDt</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.sbmDt.sample">20190524145033</span></td> + <td class="left"><span data-message-id="approvals.service.request.sbmDt.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.sbmLang.properties">상신언어</span></td> + <td class="left"><span + data-message-id="approvals.service.request.sbmLang.attribute">sbmLang</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.sbmLang.sample">ko</span></td> + <td class="left"><span data-message-id="approvals.service.request.sbmLang.note">ko : korean ja : + japanese zh : chinese en : english</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.properties">연계ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.attribute">apInfId</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.sample">TEST0000000000002120190523185902</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.apInfId.note">32자리의 고유 + 결재값</span></td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.request.systemid.properties">연계 시스템 + ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.attribute">System-ID</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.sample">CXXREST0001</span></td> + <td class="left"><span data-message-id="approvals.service.request.systemid.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.notifyOption.properties">통보옵션</span></td> + <td class="left"><span + data-message-id="approvals.service.request.notifyOption.attribute">notifyOption</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.notifyOption.sample">0</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.notifyOption.note"><span + class="ellipsis">0: 통보자통보 결재경로포함 , 1: 모두통보 결재경로포함 </span><br><span + class="ellipsis">2: 통보자통보 결재경로포함안함 , 3: 모두통보 결재경로포함안함</span></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.request.urgYn.properties">긴급여부</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.urgYn.attribute">urgYn</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.urgYn.sample">N</span></td> + <td class="left"><span data-message-id="approvals.service.request.urgYn.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.docSecuType.properties">보안문서타입</span></td> + <td class="left"><span + data-message-id="approvals.service.request.docSecuType.attribute">docSecuType</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.docSecuType.sample">PERSONAL</span></td> + <td class="left"><span + data-message-id="approvals.service.request.docSecuType.note">CONFIDENTIAL, + CONFIDENTIAL_STRICT 지정 시 에러</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.detail.status.properties">결재상태정보</span></td> + <td class="left"><span + data-message-id="approvals.service.response.detail.status.attribute">status</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.detail.status.sample">1</span></td> + <td class="left"><span + data-message-id="approvals.service.response.detail.status.note">암호화실패(-3),암호화중(-2), + 예약상신(-1),보류(0),진행중(1),완결(2),반려(3),상신취소(4),전결(5),후완결(6)</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.timeZone.properties">타임존</span></td> + <td class="left"><span + data-message-id="approvals.service.request.timeZone.attribute">timeZone</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.timeZone.sample">GMT</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.timeZone.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.subject.properties">결재제목</span></td> + <td class="left"><span + data-message-id="approvals.service.request.subject.attribute">subject</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.subject.sample">근태신청</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.subject.note"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.request.aplns.properties">결재경로</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.aplns.attribute">aplns</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.jsonlist">JSONList</span></td> + <td class="left"></td> + <td class="left"><span data-message-id="approvals.service.request.detail.aplns.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.actPrssDt.properties">처리일시</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.actPrssDt.attribute">actPrssDt</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.actPrssDt.sample">20190521015954</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.aplns.actPrssDt.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.docOpenDt.properties">개봉일시</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.docOpenDt.attribute">docOpenDt</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.docOpenDt.sample">20190521015954</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.aplns.docOpenDt.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.docArvDt.properties">도착일시</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.docArvDt.attribute">docArvDt</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.docArvDt.sample">20190521015954</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.aplns.docArvDt.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.opinion.properties">상신의견</span></td> + <td class="left"><span + data-message-id="approvals.service.request.opinion.attribute">opinion</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.opinion.sample">근태결재입니다.</span></td> + <td class="left"><span data-message-id="approvals.service.request.opinion.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.companyCode.properties">결재관계자회사코드</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.companyCode.attribute">companyCode</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.companyCode.sample">C98</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.companyCode.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.companyName.properties">결재관계자회사명</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.companyName.attribute">companyName</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.companyName.sample">SAMSUNG</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.companyName.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.subOrgCode.properties">결재관계자총괄코드</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.subOrgCode.attribute">subOrgCode</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.subOrgCode.sample">C98S01</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.subOrgCode.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.subOrgName.properties">결재관계자총괄명</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.subOrgName.attribute">subOrgName</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.subOrgName.sample">개발총괄</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.subOrgName.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.departmentCode.properties">결재관계자부서코드</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.departmentCode.attribute">departmentCode</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.departmentCode.sample">C98S0201</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.departmentCode.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.departmentName.properties">결재관계자부서명</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.departmentName.attribute">departmentName</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.departmentName.sample">개발1팀</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.departmentName.note"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.response.aplns.epId.properties">결재관계자 + epid</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.epId.attribute">epId</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.epId.sample">M071015062623C988403</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.aplns.epId.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.emailAddress.properties">결재관계자 + 메일주소</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.emailAddress.attribute">emailAddress</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.emailAddress.sample">qtp03@stage.samsung.com</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.emailAddress.note"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.response.aplns.name.properties">결재관계자 + 이름</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.name.attribute">name</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.name.sample">qtp03</span></td> + <td class="left"><span data-message-id="approvals.service.response.aplns.name.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.titleCode.properties">결재관계자 + 직급코드</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.titleCode.attribute">titleCode</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.titleCode.sample">B3P1</span></td> + <td class="left"><span data-message-id="approvals.service.response.aplns.titleCode.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.titleName.properties">결재관계자 직급명</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.titleName.attribute">titleName</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.titleName.sample">Engineer</span></td> + <td class="left"><span data-message-id="approvals.service.response.aplns.titleName.note"></span> + </td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.request.seq.properties">결재순번</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.seq.attribute">seq</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.seq.sample">0</span></td> + <td class="left"><span data-message-id="approvals.service.request.seq.note">상신자의 경우 반드시 0, + 병렬결재(합의)자의 경우 seq 일치</span></td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.request.role.properties">설정구분</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.role.attribute">role</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.role.sample">0</span></td> + <td class="left"><span data-message-id="approvals.service.request.role.note"><span + class="ellipsis">기안(0), 결재(1), 합의(2), 후결(3), 병렬합의(4), 병렬결재(7), 통보(9) + </span><br><span class="ellipsis"> (후결자는 최대 1명, 병렬결재 & 병렬합의자는 최소 2명 + 이상)</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.aplnStatsCode.properties">처리구분</span></td> + <td class="left"><span + data-message-id="approvals.service.request.aplnStatsCode.attribute">aplnStatsCode</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.aplnStatsCode.sample">0</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.aplnStatsCode.note">미결(0), + 결재(1), 반려(2), 전결(3), 자동결재(5)</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.prxAprYn.properties">대리결재자여부</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.prxAprYn.attribute">prxAprYn</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td><span data-message-id="approvals.service.response.aplns.prxAprYn.sample">N</span></td> + <td><span data-message-id="approvals.service.response.aplns.prxAprYn.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.dlgAprEpid.properties">위임결재자EPID</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.dlgAprEpid.attribute">dlgAprEpid</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.dlgAprEpid.sample">M345615062623C988000</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.dlgAprEpid.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.arbPmtYn.properties">전결권한여부</span></td> + <td class="left"><span + data-message-id="approvals.service.request.arbPmtYn.attribute">arbPmtYn</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.arbPmtYn.sample">Y</span></td> + <td class="left"><span data-message-id="approvals.service.request.arbPmtYn.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.arbActYn.properties">전결수행여부</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.arbActYn.attribute">arbActYn</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.arbActYn.sample"></span></td> + <td class="left"><span data-message-id="approvals.service.response.aplns.arbActYn.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.aplnMdfyPmtYn.properties">경로변경권한여부</span> + </td> + <td class="left"><span + data-message-id="approvals.service.request.aplnMdfyPmtYn.attribute">aplnMdfyPmtYn</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.aplnMdfyPmtYn.sample">Y</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.aplnMdfyPmtYn.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.aplnMdfyActYn.properties">경로수정수행여부</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.aplnMdfyActYn.attribute">aplnMdfyActYn</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td><span data-message-id="approvals.service.response.aplns.aplnMdfyActYn.sample"></span></td> + <td><span data-message-id="approvals.service.response.aplns.aplnMdfyActYn.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.contentsMdfyPmtYn.properties">본문수정권한여부</span> + </td> + <td class="left"><span + data-message-id="approvals.service.request.contentsMdfyPmtYn.attribute">contentsMdfyPmtYn</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.contentsMdfyPmtYn.sample">Y</span></td> + <td class="left"><span + data-message-id="approvals.service.request.contentsMdfyPmtYn.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.contenstsMdfyActYn.properties">본문수정수행여부</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.contenstsMdfyActYn.attribute">contentsMdfyActYn</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.contenstsMdfyActYn.sample"></span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.contenstsMdfyActYn.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.attachments.properties">첨부파일정보</span></td> + <td class="left"><span + data-message-id="approvals.service.response.attachments.attribute">attachments</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.jsonlist">JSONList</span></td> + <td class="left"><span data-message-id="approvals.service.response.attachments.sample"></span> + </td> + <td class="left"><span data-message-id="approvals.service.response.attachments.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.attachments.attachfileName.properties">첨부파일명</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.attachments.attachfileName.attribute">attachfileName</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.jsonstring">JSON String</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.attachments.attachfileName.sample">test.txt</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.attachments.attachfileName.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.attachments.attachfileSize.properties">첨부파일사이즈</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.attachments.attachfileSize.attribute">attachfileSize</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.attachments.attachfileSize.sample">140</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.attachments.attachfileSize.note">byte단위</span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.attachments.seq.properties">순번</span></td> + <td class="left"><span + data-message-id="approvals.service.response.attachments.seq.attribute">seq</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.attachments.seq.sample">0</span></td> + <td class="left"><span data-message-id="approvals.service.response.attachments.seq.note"></span> + </td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.response.apid.properties">결재 ID</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.apid.attribute">apId</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.apid.sample">test1e1703024e9cbdd0e79569dbb458</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.apid.note"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"><span>Sample</span></div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th class="left">Request</th> + <th class="left">Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td> + <pre> <span data-message-id="approvals.service.detail.sample.request">/approval/api/v2.0/approvals/TEST0000000000002120190514143359/detail</span> + </pre> + </td> + <td> + <pre>{ + "result": "success", + "data": { + "contentsType": "TEXT", + "sbmDt": "20231004061200", + "sbmLang": "ko", + "apInfId": "TEST0000000000002120190514143359", + "systemId": "KCC98REST00008", + "notifyOption": "1", + "urgYn": "0", + "docSecuType": "PERSONAL", + "status": "1", + "timeZone": "GMT", + "subject": "Test application", + "aplns": [ + { + "actPrssDt": "20231004061200", + "docOpenDt": null, + "docArvDt": "20231004061200", + "opinion": "", + "companyCode": "C98", + "companyName": "삼성 Intranet", + "departmentCode": "H66329", + "departmentName": "autotest", + "epId": "M071015062623C988403", + "emailAddress": "qtp03@stage.samsung.com", + "userId": null, + "name": "qtp03", + "jobPositionCode": "J2", + "jobPosition": "사원", + "subOrgCode": "C98S02", + "subOrgName": "개발총괄", + "seq": "0", + "role": "0", + "aplnStatsCode": "0", + "arbPmtYn": "Y", + "arbActYn": "N", + "rsrvSbmDt": null, + "subSeq": null, + "titleCode": "J2", + "titleName": "사원", + "dlgAprEpid": null, + "aplnMdfyPmtYn": "Y", + "prxAprYn": "N", + "contentsMdfyPmtYn": "Y", + "contentsMdfyActYn": "N", + "aplnMdfyActYn": "N" + }, + { + "actPrssDt": "", + "docOpenDt": null, + "docArvDt": "20231004061200", + "opinion": "", + "companyCode": "C60", + "companyName": "삼성SDS", + "departmentCode": "V8TESTGROUP", + "departmentName": "V8 테스트그룹", + "epId": "M071015063405C983280", + "emailAddress": "qtp06@stage.samsung.com", + "userId": null, + "name": "qtp06", + "jobPositionCode": "G0H0", + "jobPosition": "자문역", + "subOrgCode": "ASIZE01", + "subOrgName": "첨부용량", + "seq": "1", + "role": "1", + "aplnStatsCode": "0", + "arbPmtYn": "Y", + "arbActYn": "N", + "rsrvSbmDt": null, + "subSeq": null, + "titleCode": "G0H0", + "titleName": "자문역", + "dlgAprEpid": null, + "aplnMdfyPmtYn": "Y", + "prxAprYn": "N", + "contentsMdfyPmtYn": "Y", + "contentsMdfyActYn": "N", + "aplnMdfyActYn": "N" + } + ], + "attachments": [ + { + "seq": "0", + "attachfileName": "test.txt", + "attachfileSize": 23 + } + ] + } +} + </pre> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Error Code</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th class="left"><span data-message-id="common.type.message3">에러메시지</span></th> + <th class="left"><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.404">404</span></td> + <td><span data-message-id="approvals.service.errorcode.APE020.code">APE020</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE020.message">해당 연계 ID의 + 결재문서는 존재하지 않습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE020.measures"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="box4"><span data-message-id="approvals.service.content.subject">결재본문조회</span> + </div> + <div class="module-font type02"> + <p><span data-message-id="approvals.service.content.uri">/approval/api/v2.0/approvals/{apInfId}/content</span> + </p> + </div> + <div class="module-font"> + <p><span data-message-id="approvals.service.content.detail">결재 연계 ID를 이용하여 결재문서의 본문을 조회 할 수 있습니다.</span></p> + </div> + <div class="module-font type02"> + <p>Request Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.properties">연계ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.attribute">apInfId</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.path">Path</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.sample">TEST0000000000002120190523185902</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.apInfId.note">32자리의 고유 + 결재값</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Response Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <thead> + <tr> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="approvals.service.response.result.properties">API 호출 + 성공여부</span></td> + <td class="left"><span + data-message-id="approvals.service.response.result.attribute">result</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.response.result.sample">success</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.result.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.content.data.properties">결재본문정보</span></td> + <td class="left"><span + data-message-id="approvals.service.response.content.data.attribute">data</span></td> + <td><span data-message-id="approvals.service.request.datatype.jsonstring">JSON String</span> + </td> + <td></td> + <td class="left"><span data-message-id="approvals.service.response.content.data.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.contentsType.properties">본문종류</span></td> + <td class="left"><span + data-message-id="approvals.service.request.contentsType.attribute">contentsType</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.contentsType.sample">TEXT</span></td> + <td class="left"><span + data-message-id="approvals.service.request.contentsType.note">TEXT,HTML,MIME</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.content.properties">결재본문</span></td> + <td class="left"><span + data-message-id="approvals.service.request.content.attribute">contents</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.content.sample">TEST</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.content.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.apInfId.properties">결재연계ID</span></td> + <td class="left"><span + data-message-id="approvals.service.response.apInfId.attribute">apInfId</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.apInfId.sample">TEST1A000A11ACa02CVQ1A0CA4CA33C1</span> + </td> + <td class="left"></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"><span>Sample</span></div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th class="left">Request</th> + <th class="left">Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td> + <pre>/approval/api/v2.0/approvals/TEST0000000000002120190514143359/content + </pre> + </td> + <td> + <pre>{ + "result": "success", + "data": { + "contents": "test", + "contentType": "TEXT", + "apInfId": "TEST0000000000002120190521110026" + } +} + </pre> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Error Code</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th class="left"><span data-message-id="common.type.message3">에러메시지</span></th> + <th class="left"><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.404">404</span></td> + <td><span data-message-id="approvals.service.errorcode.APE020.code">APE020</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE020.message">해당 연계 ID의 + 결재문서는 존재하지 않습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE020.measures"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="box5"><span data-message-id="approvals.service.status.subject">결재상황조회</span> + </div> + <div class="module-font type02"> + <p><span data-message-id="approvals.service.status.uri">/approval/api/v2.0/approvals/status</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="approvals.service.status.detail">결재 연계 ID를 이용하여 결재문서의 상황을 조회 할 수 있습니다.(최대 + 1000건)</span></p> + </div> + <div class="module-font type02"> + <p>Request Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="approvals.service.request.systemid.properties">연계 시스템 + ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.attribute">System-ID</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.header">Header</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.sample">CXXREST0001</span></td> + <td class="left"><span data-message-id="approvals.service.request.systemid.note"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span data-message-id="approvals.service.request.apinfids.properties">연계 ID + 리스트</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apinfids.attribute">apinfids</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.jsonlist">JSONList</span></td> + <td></td> + <td class="left"><span data-message-id="approvals.service.request.apinfids.note">최대 1000개</span> + </td> + </tr> + <tr> + <td>3</td> + <td class="left"><span data-message-id="approvals.service.request.apinfid.apinfid.properties">연계 + ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apinfid.apinfid.attribute">apinfid</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.body">Body</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td></td> + <td class="left"><span data-message-id="approvals.service.request.apinfid.apinfid.note">최대 + 1000개</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Response Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <thead> + <tr> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="approvals.service.response.result.properties">API 호출 + 성공여부</span></td> + <td class="left"><span + data-message-id="approvals.service.response.result.attribute">result</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.response.result.sample">success</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.result.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.detail.data.properties">결재상세정보</span></td> + <td class="left"><span + data-message-id="approvals.service.response.detail.data.attribute">data</span></td> + <td><span data-message-id="approvals.service.request.datatype.jsonlist">JSONList</span></td> + <td></td> + <td class="left"><span data-message-id="approvals.service.response.detail.data.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.apInfId.properties">결재연계ID</span></td> + <td class="left"><span + data-message-id="approvals.service.response.apInfId.attribute">apInfId</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.apInfId.sample">TEST1A000A11ACa02CVQ1A0CA4CA33C1</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.apInfId.note">리턴받은 결재 아이디를 + 이용하여, 상황조회 및 상신취소가 가능합니다.</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.docChgNum.properties">문서변경횟수</span></td> + <td class="left"><span + data-message-id="approvals.service.response.docChgNum.attribute">docChgNum</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.response.docChgNum.sample">0</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.docChgNum.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.detail.status.properties">결재상태정보</span></td> + <td class="left"><span + data-message-id="approvals.service.response.detail.status.attribute">status</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.detail.status.sample">1</span></td> + <td class="left"><span + data-message-id="approvals.service.response.detail.status.note">암호화실패(-3),암호화중(-2), + 예약상신(-1),보류(0),진행중(1),완결(2),반려(3),상신취소(4),전결(5),후완결(6)</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"><span>Sample</span></div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th class="left">Request</th> + <th class="left">Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td> + <pre>/approval/v2.0/approvals/status + +body: +[ +{"apinfid":"TEST0000000000002120190521155428"}, +{"apinfid":"TEST0000000000002120190521155422"} +] + </pre> + </td> + <td> + <pre>{ + "result": "success", + "data": [ + { + "apInfId": "TEST0000000000002120190521155428", + "docChgNum": "0", + "status": "1" + }, + { + "apInfId": "TEST0000000000002120190521155422", + "docChgNum": "1", + "status": "2" + } + ] +} + </pre> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Error Code</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th><span data-message-id="common.type.message3">에러메시지</span></th> + <th><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE022.code">APE022</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE022.message">최대 1000개의 + 요청만 가능합니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE022.measures"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="box6"><span data-message-id="approvals.service.apinfids.subject">결재연계ID조회</span> + </div> + <div class="module-font type02"> + <p><span data-message-id="approvals.service.apinfids.uri">/approval/api/v2.0/approvals/apinfids</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="approvals.service.apinfids.detail">결재 ID를 이용하여 결재연계 ID를 조회 할 수 있습니다.</span></p> + </div> + <div class="module-font type02"> + <p>Request Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="approvals.service.request.systemid.properties">연계 시스템 + ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.attribute">System-ID</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.header">Header</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.sample">CXXREST0001</span></td> + <td class="left"><span data-message-id="approvals.service.request.systemid.note"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span data-message-id="approvals.service.request.apId.properties">결재 ID</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.apId.attribute">apId</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.query">Query</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apId.sample">test1e1703024e9cbdd0e79569dbb458</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.apId.note"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Response Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <thead> + <tr> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="approvals.service.response.result.properties">API 호출 + 성공여부</span></td> + <td class="left"><span + data-message-id="approvals.service.response.result.attribute">result</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.response.result.sample">success</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.result.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.submit.data.properties">결재연계ID정보</span></td> + <td class="left"><span + data-message-id="approvals.service.response.submit.data.attribute">data</span></td> + <td><span data-message-id="approvals.service.request.datatype.jsonstring">JSON String</span> + </td> + <td></td> + <td class="left"><span data-message-id="approvals.service.response.submit.data.note"></span> + </td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.request.apId.properties">결재 ID</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.apId.attribute">apId</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apId.sample">test1e1703024e9cbdd0e79569dbb458</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.apId.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.properties">연계ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.attribute">apInfId</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.sample">TEST0000000000002120190523185902</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.apInfId.note">32자리의 고유 + 결재값</span></td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.request.systemid.properties">연계 시스템 + ID</span></td> + <td class="left"><span + data-message-id="approvals.service.response.systemid.attribute">systemId</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.sample">CXXREST0001</span></td> + <td class="left"><span data-message-id="approvals.service.request.systemid.note"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"><span>Sample</span></div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th class="left">Request</th> + <th class="left">Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td> + <pre>/approval/api/v2.0/approvals/apinfids?apId=testd269bd3743ca8a0b4c0e7d9de5af + </pre> + </td> + <td> + <pre>{ + "result": "success", + "data": { + "apId": "test1e1703024e9cbdd0e79569dbb458", + "apInfId": "TEST0000000000002120190517133353", + "systemId": "C60REST0001" + } +} + </pre> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Error Code</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th class="left"><span data-message-id="common.type.message3">에러메시지</span></th> + <th class="left"><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE001.code">APE001</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE001.message">데이터가 + 필요합니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE001.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.404">404</span></td> + <td><span data-message-id="approvals.service.errorcode.APE021.code">APE021</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE021.message">해당 결재 ID의 + 결재문서는 존재하지 않습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE021.measures"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="box7"><span + data-message-id="approvals.service.submission.subject">상신함리스트조회</span></div> + <div class="module-font type02"> + <p><span data-message-id="approvals.service.submission.uri">/approval/api/v2.0/approvals/submission</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="approvals.service.submission.detail">요청 연계시스템ID로 연계 상신처리된 상신자의 상신함의 정보를 조회 할 수 + 있습니다.</span></p> + </div> + <div class="module-font type02"> + <p>Request Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="approvals.service.request.systemid.properties">연계 시스템 + ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.attribute">System-ID</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.header">Header</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.sample">CXXREST0001</span></td> + <td class="left"><span data-message-id="approvals.service.request.systemid.note"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span data-message-id="approvals.service.request.EPID.properties">EPID</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.EPID.attribute">epId</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.query">Query</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.EPID.sample">M071015062623C9884</span></td> + <td class="left"><span data-message-id="approvals.service.request.EPID.note"><span + class="ellipsis">속성 한가지와 조합하여 사용 우선순위 </span><br><span class="ellipsis"> userId > + epId > emailAddress</span></span></td> + </tr> + <tr> + <td>3</td> + <td class="left"><span + data-message-id="approvals.service.request.userId.properties">사용자ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.userId.attribute">userId</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.query">Query</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.userId.sample">qtp03</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.userId.note"><span + class="ellipsis">속성 한가지와 조합하여 사용 우선순위 </span><br><span class="ellipsis"> userId > + epId > emailAddress</span></span></td> + </tr> + <tr> + <td>4</td> + <td class="left"><span + data-message-id="approvals.service.request.emailAddress.properties">사용자이메일</span></td> + <td class="left"><span + data-message-id="approvals.service.request.emailAddress.attribute">emailAddress</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.query">Query</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.emailAddress.sample">qtp03@stage.sasmung.com</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.emailAddress.note"><span + class="ellipsis">속성 한가지와 조합하여 사용 우선순위 </span><br><span class="ellipsis"> userId > + epId > emailAddress</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Response Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <thead> + <tr> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="approvals.service.response.result.properties">API 호출 + 성공여부</span></td> + <td class="left"><span + data-message-id="approvals.service.response.result.attribute">result</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.response.result.sample">success</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.result.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.submission.data.properties">결재연계정보</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.submission.data.attribute">data</span></td> + <td><span data-message-id="approvals.service.request.datatype.jsonlist">JSONList</span></td> + <td class="left"><span + data-message-id="approvals.service.response.submission.data.sample"></span></td> + <td class="left"><span data-message-id="approvals.service.response.submission.data.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.subject.properties">결재제목</span></td> + <td class="left"><span + data-message-id="approvals.service.request.subject.attribute">subject</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.subject.sample">근태신청</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.subject.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.properties">연계ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.attribute">apInfId</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.sample">TEST0000000000002120190523185902</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.apInfId.note">32자리의 고유 + 결재값</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.companyCode.properties">결재관계자회사코드</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.companyCode.attribute">companyCode</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.companyCode.sample">C98</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.companyCode.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.companyName.properties">결재관계자회사명</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.companyName.attribute">companyName</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.companyName.sample">SAMSUNG</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.companyName.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.subOrgCode.properties">결재관계자총괄코드</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.subOrgCode.attribute">subOrgCode</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.subOrgCode.sample">C98S01</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.subOrgCode.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.subOrgName.properties">결재관계자총괄명</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.subOrgName.attribute">subOrgName</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.subOrgName.sample">개발총괄</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.subOrgName.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.departmentCode.properties">결재관계자부서코드</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.departmentCode.attribute">departmentCode</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.departmentCode.sample">C98S0201</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.departmentCode.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.departmentName.properties">결재관계자부서명</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.departmentName.attribute">departmentName</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.departmentName.sample">개발1팀</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.departmentName.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.titleCode.properties">결재관계자 + 직급코드</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.titleCode.attribute">titleCode</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.titleCode.sample">B3P1</span></td> + <td class="left"><span data-message-id="approvals.service.response.aplns.titleCode.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.aplns.titleName.properties">결재관계자 직급명</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.titleName.attribute">titleName</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.titleName.sample">Engineer</span></td> + <td class="left"><span data-message-id="approvals.service.response.aplns.titleName.note"></span> + </td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.request.EPID.properties">EPID</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.EPID.attribute">epId</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.EPID.sample">M071015062623C9884</span></td> + <td class="left"><span data-message-id="approvals.service.request.EPID.note"><span + class="ellipsis">속성 한가지와 조합하여 사용 우선순위 </span><br><span class="ellipsis"> userId > + epId > emailAddress</span></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.response.aplns.name.properties">결재관계자 + 이름</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.name.attribute">name</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.aplns.name.sample">qtp03</span></td> + <td class="left"></td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.request.sbmDt.properties">상신일시</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.sbmDt.attribute">sbmDt</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.sbmDt.sample">20190524145033</span></td> + <td class="left"><span data-message-id="approvals.service.request.sbmDt.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.detail.status.properties">결재상태정보</span></td> + <td class="left"><span + data-message-id="approvals.service.response.detail.status.attribute">status</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.detail.status.sample">1</span></td> + <td class="left"><span + data-message-id="approvals.service.response.detail.status.note">암호화실패(-3),암호화중(-2), + 예약상신(-1),보류(0),진행중(1),완결(2),반려(3),상신취소(4),전결(5),후완결(6)</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"><span>Sample</span></div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th class="left">Request</th> + <th class="left">Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td> + <pre> <span data-message-id="approvals.service.submission.sample.request">/approval/api/v2.0/approvals/submission?epId=M071015062623C988403</span> + </pre> + </td> + <td> + <pre>{ + "result": "success", + "data": [ + { + "subject": "Test application", + "apInfId": "TEST0000000000002120190514143359", + "compCode": "C98", + "compName": "삼성 Intranet", + "deptCode": "H66329", + "deptName": "autotest", + "jobPosition": "사원", + "jobPositionCode": "J2", + "subOrgCode": "C98S02", + "subOrgName": "개발총괄", + "epId": "M071015062623C988403", + "name": "qtp03", + "sbmDt": "20231004061200", + "status": "1", + "companyCode": "C98", + "companyName": "삼성 Intranet", + "departmentCode": "H66329", + "departmentName": "autotest", + "titleName": "사원", + "titleCode": "J2" + }, + { + "subject": "Test application", + "apInfId": "TEST0000000000002120190514143359", + "compCode": "C98", + "compName": "삼성 Intranet", + "deptCode": "H66329", + "deptName": "autotest", + "jobPosition": "사원", + "jobPositionCode": "J2", + "subOrgCode": "C98S02", + "subOrgName": "개발총괄", + "epId": "M071015062623C988403", + "name": "qtp03", + "sbmDt": "20231004061200", + "status": "1", + "companyCode": "C98", + "companyName": "삼성 Intranet", + "departmentCode": "H66329", + "departmentName": "autotest", + "titleName": "사원", + "titleCode": "J2" + } + ] +} + </pre> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Error Code</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th class="left"><span data-message-id="common.type.message3">에러메시지</span></th> + <th class="left"><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody></tbody> + <tbody> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE001.code">APE001</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE001.message">데이터가 + 필요합니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE001.measures"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="box8"><span + data-message-id="approvals.service.apinfidinfos.subject">연계이력조회</span></div> + <div class="module-font type02"> + <p><span data-message-id="approvals.service.apinfidinfos.uri">/approval/api/v2.0/approvals/apinfidinfos</span> + </p> + </div> + <div class="module-font"> + <p><span data-message-id="approvals.service.apinfidinfos.detail">요청 연계시스템ID에서 상신된 결재문서의 연계 이력을 조회 할 수 있습니다. 조회 + 기준일시 이하 조회 기간(분) 동안 호출 계정의 결재건 정보 리턴 (상신, 결재승인, 경로변경, 본문수정 등 결재건 처리 시)</span></p> + </div> + <div class="module-font type02"> + <p>Request Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="approvals.service.request.systemid.properties">연계 시스템 + ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.attribute">System-ID</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.header">Header</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.sample">CXXREST0001</span></td> + <td class="left"><span data-message-id="approvals.service.request.systemid.note"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span + data-message-id="approvals.service.request.endDate.properties">조회기준일시</span></td> + <td class="left"><span + data-message-id="approvals.service.request.endDate.attribute">endDate</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.query">Query</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.endDate.sample">201905211500</span></td> + <td class="left"><span data-message-id="approvals.service.request.endDate.note"><span + class="ellipsis">조회의 기준시간 해당 일자 이하로 조회</span><br><span class="ellipsis">yyyyMMddHHmm + 형식</span></span></td> + </tr> + <tr> + <td>3</td> + <td class="left"><span data-message-id="approvals.service.request.page.properties">페이지번호</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.page.attribute">page</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.n">N</span></td> + <td><span data-message-id="approvals.service.request.type.query">Query</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.page.sample">1</span></td> + <td class="left"><span data-message-id="approvals.service.request.page.note">paging 처리</span> + </td> + </tr> + <tr> + <td>4</td> + <td class="left"><span + data-message-id="approvals.service.request.duration.properties">조회기간</span></td> + <td class="left"><span + data-message-id="approvals.service.request.duration.attribute">duration</span></td> + <td><span data-message-id="approvals.service.request.mandatory.n">N</span></td> + <td><span data-message-id="approvals.service.request.type.query">Query</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.duration.sample">1</span></td> + <td class="left"><span data-message-id="approvals.service.request.duration.note"><span + class="ellipsis">단위 : 분 / 최소 1분 ~ 최대 60분 </span><br><span class="ellipsis">default : + 1</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Response Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <thead> + <tr> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="approvals.service.response.result.properties">API 호출 + 성공여부</span></td> + <td class="left"><span + data-message-id="approvals.service.response.result.attribute">result</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.response.result.sample">success</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.result.note"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.response.seq.properties">순번</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.seq.attribute">seq</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.response.seq.sample">1</span></td> + <td class="left"><span data-message-id="approvals.service.response.seq.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.submission.data.properties">결재연계정보</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.submission.data.attribute">data</span></td> + <td><span data-message-id="approvals.service.request.datatype.jsonlist">JSONList</span></td> + <td class="left"><span + data-message-id="approvals.service.response.submission.data.sample"></span></td> + <td class="left"><span data-message-id="approvals.service.response.submission.data.note"></span> + </td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.response.seq.properties">순번</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.seq.attribute">seq</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.response.seq.sample">1</span></td> + <td class="left"><span data-message-id="approvals.service.response.seq.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.properties">연계ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.attribute">apInfId</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.sample">TEST0000000000002120190523185902</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.apInfId.note">32자리의 고유 + 결재값</span></td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.response.totalCount.properties">전체 데이터 + 개수</span></td> + <td class="left"><span + data-message-id="approvals.service.response.totalCount.attribute">totalCount</span></td> + <td><span data-message-id="approvals.service.response.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.response.totalCount.sample">2</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.totalCount.note"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.response.totalPage.properties">전체 페이지 + 개수</span></td> + <td class="left"><span + data-message-id="approvals.service.response.totalPage.attribute">seq</span></td> + <td><span data-message-id="approvals.service.response.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.response.totalPage.sample">1</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.totalPage.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.currentPage.properties">페이지번호</span></td> + <td class="left"><span + data-message-id="approvals.service.response.currentPage.attribute">seq</span></td> + <td><span data-message-id="approvals.service.response.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.response.currentPage.sample">1</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.currentPage.note"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"><span>Sample</span></div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th class="left">Request</th> + <th class="left">Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td> + <pre>/approval/v2.0/approvals/apinfidinfos?endDate=201905211500 + </pre> + </td> + <td> + <pre>{ + "result": "success", + "data": [{ + "seq": 1, + "apInfId": "TEST0000000000002120190521155428", + "totalcount": 6, + "totalpage": 1, + "currentpage": 1 + }, + { + "seq": 2, + "apInfId": "TEST0000000000002220190521155428", + "totalcount": 6, + "totalpage": 1, + "currentpage": 1 + }, + { + "seq": 3, + "apInfId": "TEST0000000000002220190521155428", + "totalcount": 6, + "totalpage": 1, + "currentpage": 1 + }, + { + "seq": 4, + "apInfId": "TEST0000000000002120190521155759", + "totalcount": 6, + "totalpage": 1, + "currentpage": 1 + }, + { + "seq": 5, + "apInfId": "TEST0000000000002220190521155759", + "totalcount": 6, + "totalpage": 1, + "currentpage": 1 + }, + { + "seq": 6, + "apInfId": "TEST0000000000002220190521155759", + "totalcount": 6, + "totalpage": 1, + "currentpage": 1 + } + ] +} + </pre> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Error Code</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th class="left"><span data-message-id="common.type.message3">에러메시지</span></th> + <th class="left"><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE001.code">APE001</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE001.message">데이터가 + 필요합니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE001.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE002.code">APE002</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE002.message">입력된 데이터 형식이 + 잘못되었습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE002.measures"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="box9"><span data-message-id="approvals.service.cancel.subject">상신취소</span></div> + <div class="module-font type02"> + <p><span data-message-id="approvals.service.cancel.uri">/approval/api/v2.0/approvals/{apInfId}/cancel</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="approvals.service.cancel.detail">연계 ID에 해당하는 결재문서를 상신취소처리 할 수 있습니다.</span></p> + </div> + <div class="module-font type02"> + <p>Request Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.properties">연계ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.attribute">apInfId</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.path">Path</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.apInfId.sample">TEST0000000000002120190523185902</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.apInfId.note">32자리의 고유 + 결재값</span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span + data-message-id="approvals.service.request.cancelopinion.properties">상신취소의견</span></td> + <td class="left"><span + data-message-id="approvals.service.request.cancelopinion.attribute">opinion</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.query">Query</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.cancelopinion.sample">상신취소드립니다</span></td> + <td class="left"><span data-message-id="approvals.service.request.cancelopinion.note"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Response Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <thead> + <tr> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="approvals.service.response.result.properties">API 호출 + 성공여부</span></td> + <td class="left"><span + data-message-id="approvals.service.response.result.attribute">result</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.response.result.sample">success</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.result.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.submit.data.properties">결재연계ID정보</span></td> + <td class="left"><span + data-message-id="approvals.service.response.submit.data.attribute">data</span></td> + <td><span data-message-id="approvals.service.request.datatype.jsonstring">JSON String</span> + </td> + <td></td> + <td class="left"><span data-message-id="approvals.service.response.submit.data.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.apInfId.properties">결재연계ID</span></td> + <td class="left"><span + data-message-id="approvals.service.response.apInfId.attribute">apInfId</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.apInfId.sample">TEST1A000A11ACa02CVQ1A0CA4CA33C1</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.apInfId.note">리턴받은 결재 아이디를 + 이용하여, 상황조회 및 상신취소가 가능합니다.</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"><span>Sample</span></div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th class="left">Request</th> + <th class="left">Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td> + <pre>/approval/api/v2.0/approvals/TEST0000000000002120190521110026/cancel?opinion=reject + </pre> + </td> + <td> + <pre>{ + "result": "success", + "data": { + "apInfId": "TEST0000000000002120190521110026" + } +} + </pre> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Error Code</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th class="left"><span data-message-id="common.type.message3">에러메시지</span></th> + <th class="left"><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE001.code">APE001</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE001.message">데이터가 + 필요합니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE001.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE002.code">APE002</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE002.message">입력된 데이터 형식이 + 잘못되었습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE002.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.404">404</span></td> + <td><span data-message-id="approvals.service.errorcode.APE020.code">APE020</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE020.message">해당 연계 ID의 + 결재문서는 존재하지 않습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE020.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE023.code">APE023</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE023.message">해당 결재 ID의 + 결재문서는 이미 완결 혹은 상신취소처리 되었습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE023.measures"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="box11"><span + data-message-id="approvals.service.ownaplnlist.subject">저장된결재경로목록조회</span></div> + <div class="module-font type02"> + <p><span data-message-id="approvals.service.ownaplnlist.uri">/approval/api/v2.0/approvals/ownaplnlist</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="approvals.service.ownaplnlist.detail">개인별 저장된 결재경로 목록을 조회 할 수 있습니다.</span></p> + </div> + <div class="module-font type02"> + <p>Request Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="approvals.service.request.systemid.properties">연계 시스템 + ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.attribute">System-ID</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.header">Header</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.sample">CXXREST0001</span></td> + <td class="left"><span data-message-id="approvals.service.request.systemid.note"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span data-message-id="approvals.service.request.EPID.properties">EPID</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.EPID.attribute">epId</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.n">N</span></td> + <td><span data-message-id="approvals.service.request.type.query">Query</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.EPID.sample">M071015062623C9884</span></td> + <td class="left"><span data-message-id="approvals.service.request.EPID.note"><span + class="ellipsis">속성 한가지와 조합하여 사용 우선순위 </span><br><span class="ellipsis"> userId > + epId > emailAddress</span></span></td> + </tr> + <tr> + <td>3</td> + <td class="left"><span + data-message-id="approvals.service.request.userId.brity.properties">사용자ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.userId.brity.attribute">userId</span></td> + <td><span data-message-id="approvals.service.request.mandatory.n">N</span></td> + <td><span data-message-id="approvals.service.request.type.query">Query</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.userId.knox.sample">test</span></td> + <td class="left"><span data-message-id="approvals.service.request.userId.brity.note"><span + class="ellipsis">속성 한가지와 조합하여 사용 우선순위 </span><br><span class="ellipsis"> userId > + epId > emailAddress</span></span></td> + </tr> + <tr> + <td>4</td> + <td class="left"><span + data-message-id="approvals.service.request.emailAddress.brity.properties">사용자이메일</span> + </td> + <td class="left"><span + data-message-id="approvals.service.request.emailAddress.brity.attribute">emailAddress</span> + </td> + <td><span data-message-id="approvals.service.request.mandatory.n">N</span></td> + <td><span data-message-id="approvals.service.request.type.query">Query</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.emailAddress.knox.sample">test@stage.samsung.com</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.emailAddress.brity.note"><span + class="ellipsis">속성 한가지와 조합하여 사용 우선순위 </span><br><span class="ellipsis"> userId > + epId > emailAddress</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Response Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <thead> + <tr> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.pslAplnId.properties">저장된 + 결재경로ID</span></td> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.pslAplnId.attribute">pslAplnId</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.pslAplnId.sample">168cf04db4aa4e64b010f434d9088312</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.pslAplnId.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.pslAplnNm.properties">저장된 + 결재경로이름</span></td> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.pslAplnNm.attribute">pslAplnNm</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.pslAplnNm.sample">TEST</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.pslAplnNm.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.ownEpid.properties">등록자EPID</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.ownEpid.attribute">ownEpid</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.ownEpid.sample">M201026053604S204412</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.ownEpid.note"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"><span>Sample</span></div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th class="left">Request</th> + <th class="left">Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td> + <pre>/approval/api/v2.0/approvals/ownaplnlist?emailAddress=test@stage.samsung.com + </pre> + </td> + <td> + <pre>{ + "result": "success", + "data": [ + { + "pslAplnId": "168cf04db4aa4e64b010f434d9088312", + "pslAplnNm": "TEST", + "ownEpid": "M201026053604S204412" + }, + { + "pslAplnId": "876f1522d1e440288f5ad4fbda42d712", + "pslAplnNm": "TEST2", + "ownEpid": "M201026053604S204412" + } + ] +} + </pre> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Error Code</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th class="left"><span data-message-id="common.type.message3">에러메시지</span></th> + <th class="left"><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.400">400</span></td> + <td><span data-message-id="approvals.service.errorcode.APE001.code">APE001</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE001.message">데이터가 + 필요합니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE001.measures"></span> + </td> + </tr> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.404">404</span></td> + <td><span data-message-id="approvals.service.errorcode.APE030.code">APE030</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE030.message">저장된 결재경로가 + 없습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE030.measures"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="box12"><span + data-message-id="approvals.service.ownaplndetail.subject">저장된결재경로상세조회</span></div> + <div class="module-font type02"> + <p><span + data-message-id="approvals.service.ownaplndetail.uri">/approval/api/v2.0/approvals/{pslAplnId}/ownaplndetail</span> + </p> + </div> + <div class="module-font"> + <p><span data-message-id="approvals.service.ownaplndetail.detail">개인별 저장된 결재경로 목록을 조회 할 수 있습니다.</span></p> + </div> + <div class="module-font type02"> + <p>Request Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="approvals.service.request.systemid.properties">연계 시스템 + ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.attribute">System-ID</span></td> + <td><span data-message-id="approvals.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="approvals.service.request.type.header">Header</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.systemid.sample">CXXREST0001</span></td> + <td class="left"><span data-message-id="approvals.service.request.systemid.note"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span data-message-id="approvals.service.request.pslAplnId.properties">저장된 + 결재경로ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.pslAplnId.attribute">pslAplnId</span></td> + <td><span data-message-id="approvals.service.request.mandatory.n">N</span></td> + <td><span data-message-id="approvals.service.request.type.path">Path</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.pslAplnId.sample">168cf04db4aa4e64b010f434d9088312</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.pslAplnId.note"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Response Parameter</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <thead> + <tr> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="30%;"> + <col width="30%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.pslAplnId.properties">저장된 + 결재경로ID</span></td> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.pslAplnId.attribute">pslAplnId</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.pslAplnId.sample">168cf04db4aa4e64b010f434d9088312</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.pslAplnId.note"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.request.EPID.properties">EPID</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.EPID.attribute">epId</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.EPID.sample">M071015062623C9884</span></td> + <td class="left"><span data-message-id="approvals.service.request.EPID.note"><span + class="ellipsis">속성 한가지와 조합하여 사용 우선순위 </span><br><span class="ellipsis"> userId > + epId > emailAddress</span></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.response.seq.properties">순번</span> + </td> + <td class="left"><span data-message-id="approvals.service.response.seq.attribute">seq</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.response.seq.sample">1</span></td> + <td class="left"><span data-message-id="approvals.service.response.seq.note"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="approvals.service.request.role.properties">설정구분</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.role.attribute">role</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="approvals.service.request.role.sample">0</span></td> + <td class="left"><span data-message-id="approvals.service.request.role.note"><span + class="ellipsis">기안(0), 결재(1), 합의(2), 후결(3), 병렬합의(4), 병렬결재(7), 통보(9) + </span><br><span class="ellipsis"> (후결자는 최대 1명, 병렬결재 & 병렬합의자는 최소 2명 + 이상)</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.fnm.properties">국문이름</span></td> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.fnm.attribute">fnm</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.fnm.sample">test</span></td> + <td class="left"><span data-message-id="approvals.service.response.ownaplnlist.fnm.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.enFnm.properties">영문이름</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.enFnm.attribute">enFnm</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.enFnm.sample">OneTest</span> + </td> + <td class="left"><span + data-message-id="approvals.service.response.ownaplnlist.enFnm.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.emailAddress.brity.properties">사용자이메일</span> + </td> + <td class="left"><span + data-message-id="approvals.service.request.emailAddress.brity.attribute">emailAddress</span> + </td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.emailAddress.knox.sample">test@stage.samsung.com</span> + </td> + <td class="left"><span data-message-id="approvals.service.request.emailAddress.brity.note"><span + class="ellipsis">속성 한가지와 조합하여 사용 우선순위 </span><br><span class="ellipsis"> userId > + epId > emailAddress</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="approvals.service.request.userId.brity.properties">사용자ID</span></td> + <td class="left"><span + data-message-id="approvals.service.request.userId.brity.attribute">userId</span></td> + <td><span data-message-id="approvals.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="approvals.service.request.userId.knox.sample">test</span></td> + <td class="left"><span data-message-id="approvals.service.request.userId.brity.note"><span + class="ellipsis">속성 한가지와 조합하여 사용 우선순위 </span><br><span class="ellipsis"> userId > + epId > emailAddress</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"><span>Sample</span></div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th class="left">Request</th> + <th class="left">Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td> + <pre>/approval/api/v2.0/approvals/168cf04db4aa4e64b010f434d9088312/ownaplndetail + </pre> + </td> + <td> + <pre>{ + "result": "success", + "data": [ + { + "pslAplnId": "168cf04db4aa4e64b010f434d9088312", + "epId": "M201026053604S204412", + "seq": "0", + "role": "0", + "fnm": "test", + "enFnm": "OneTest", + "emailAddress": "test@stage.samsung.com", + "userId": "test" + }, + { + "pslAplnId": "168cf04db4aa4e64b010f434d9088312", + "epId": "M201026053604S204412", + "seq": "1", + "role": "1", + "fnm": "test2", + "enFnm": "TwoTest", + "emailAddress": "test2@stage.samsung.com", + "userId": "test2" + }, + { + "pslAplnId": "168cf04db4aa4e64b010f434d9088312", + "epId": "M201026053604S204412", + "seq": "2", + "role": "1", + "fnm": "test3", + "enFnm": "ThreeTest", + "emailAddress": "test3@stage.samsung.com", + "userId": "test3" + } + ] +} + </pre> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Error Code</p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th class="left"><span data-message-id="common.type.message3">에러메시지</span></th> + <th class="left"><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="approvals.service.errorcode.statuscode.404">404</span></td> + <td><span data-message-id="approvals.service.errorcode.APE030.code">APE030</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE030.message">저장된 결재경로가 + 없습니다.</span></td> + <td class="left"><span data-message-id="approvals.service.errorcode.APE030.measures"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div> +</div>
\ No newline at end of file diff --git a/lib/knox-api/approval/approval.ts b/lib/knox-api/approval/approval.ts new file mode 100644 index 00000000..6a21e113 --- /dev/null +++ b/lib/knox-api/approval/approval.ts @@ -0,0 +1,603 @@ +"use server" + +// Knox API Approval 서버 액션들 +// 가이드: lib/knox-api/approval/guide.html + +// ========== 타입 정의 ========== + +// 공통 응답 타입 +export interface BaseResponse { + result: string; +} + +// 결재 경로 타입 +export interface ApprovalLine { + epId?: string; + userId?: string; + emailAddress?: string; + seq: string; + role: string; // 기안(0), 결재(1), 합의(2), 후결(3), 병렬합의(4), 병렬결재(7), 통보(9) + aplnStatsCode: string; // 미결(0), 결재(1), 반려(2), 전결(3), 자동결재(5) + arbPmtYn: string; // 전결권한여부 + contentsMdfyPmtYn: string; // 본문수정권한여부 + aplnMdfyPmtYn: string; // 경로변경권한여부 + opinion?: string; // 상신의견 (상신자만) +} + +// 결재 상신 요청 타입 +export interface SubmitApprovalRequest { + contents: string; // 결재본문 + contentsType: string; // 본문종류 (TEXT, HTML, MIME) + docSecuType: string; // 보안문서타입 (PERSONAL, CONFIDENTIAL, CONFIDENTIAL_STRICT) + notifyOption: string; // 통보옵션 (0-3) + urgYn: string; // 긴급여부 (Y/N) + sbmDt: string; // 상신일시 (YYYYMMDDHHMMSS) + timeZone: string; // 타임존 (GMT, GMT+9 등) + docMngSaveCode: string; // 문서관리저장코드 (0: 안함, 1: 저장) + subject: string; // 결재제목 + sbmLang: string; // 상신언어 (ko, ja, zh, en) + apInfId: string; // 연계ID (32자리 고유값) + importantYn?: string; // 중요여부 (Y/N) + aplns: ApprovalLine[]; // 결재경로 + attachments?: File[]; // 첨부파일 +} + +// 결재 상신 응답 타입 +export interface SubmitApprovalResponse extends BaseResponse { + data: { + apInfId: string; + }; +} + +// 결재 상세 조회 응답 타입 +export interface ApprovalDetailResponse extends BaseResponse { + data: { + contentsType: string; + sbmDt: string; + sbmLang: string; + apInfId: string; + systemId: string; + notifyOption: string; + urgYn: string; + docSecuType: string; + status: string; // 암호화실패(-3), 암호화중(-2), 예약상신(-1), 보류(0), 진행중(1), 완결(2), 반려(3), 상신취소(4), 전결(5), 후완결(6) + timeZone: string; + subject: string; + aplns: any[]; + attachments?: any[]; + }; +} + +// 결재 본문 조회 응답 타입 +export interface ApprovalContentResponse extends BaseResponse { + data: { + contents: string; + contentsType: string; + apInfId: string; + }; +} + +// 결재 상황 조회 요청 타입 +export interface ApprovalStatusRequest { + apinfids: { apinfid: string }[]; +} + +// 결재 상황 조회 응답 타입 +export interface ApprovalStatusResponse extends BaseResponse { + data: { + apInfId: string; + docChgNum: string; + status: string; + }[]; +} + +// 상신 취소 응답 타입 +export interface CancelApprovalResponse extends BaseResponse { + data: { + apInfId: string; + }; +} + +// 개인 결재경로 목록 조회 응답 타입 +export interface OwnApprovalLineListResponse extends BaseResponse { + data: any[]; +} + +// 개인 결재경로 상세 조회 응답 타입 +export interface OwnApprovalLineDetailResponse extends BaseResponse { + data: any; +} + +// 상신함 리스트 조회 응답 타입 +export interface SubmissionListResponse extends BaseResponse { + data: any[]; +} + +// 연계 이력 조회 응답 타입 +export interface ApprovalHistoryResponse extends BaseResponse { + data: any[]; +} + +// 연계 ID 조회 응답 타입 +export interface ApprovalIdsResponse extends BaseResponse { + data: any[]; +} + +// ========== 서버 액션 함수들 ========== + +/** + * 결재 상신 + * POST /approval/api/v2.0/approvals/submit + */ +export async function submitApproval( + request: SubmitApprovalRequest, + systemId: string +): Promise<SubmitApprovalResponse> { + try { + const formData = new FormData(); + + // JSON 데이터 생성 + const approvalData = { + contents: request.contents, + contentsType: request.contentsType, + docSecuType: request.docSecuType, + notifyOption: request.notifyOption, + urgYn: request.urgYn, + sbmDt: request.sbmDt, + timeZone: request.timeZone, + docMngSaveCode: request.docMngSaveCode, + subject: request.subject, + sbmLang: request.sbmLang, + apInfId: request.apInfId, + importantYn: request.importantYn, + aplns: request.aplns + }; + + formData.append('approval', JSON.stringify(approvalData)); + + // 첨부파일 처리 + if (request.attachments) { + request.attachments.forEach((file) => { + formData.append('attachments', file); + }); + } + + const response = await fetch(`${process.env.KNOX_API_BASE_URL}/approval/api/v2.0/approvals/submit`, { + method: 'POST', + headers: { + 'System-ID': systemId, + }, + body: formData, + }); + + if (!response.ok) { + throw new Error(`결재 상신 실패: ${response.status}`); + } + + return await response.json(); + } catch (error) { + console.error('결재 상신 오류:', error); + throw error; + } +} + +/** + * 보안 결재 상신 + * POST /approval/api/v2.0/approvals/secu-submit + */ +export async function submitSecurityApproval( + request: SubmitApprovalRequest, + systemId: string +): Promise<SubmitApprovalResponse> { + try { + const formData = new FormData(); + + // JSON 데이터 생성 + const approvalData = { + contents: request.contents, + contentsType: request.contentsType, + docSecuType: request.docSecuType, // CONFIDENTIAL 또는 CONFIDENTIAL_STRICT + notifyOption: request.notifyOption, + urgYn: request.urgYn, + sbmDt: request.sbmDt, + timeZone: request.timeZone, + docMngSaveCode: request.docMngSaveCode, + subject: request.subject, + sbmLang: request.sbmLang, + apInfId: request.apInfId, + importantYn: request.importantYn, + aplns: request.aplns + }; + + formData.append('approval', JSON.stringify(approvalData)); + + // 첨부파일 처리 + if (request.attachments) { + request.attachments.forEach((file) => { + formData.append('attachments', file); + }); + } + + const response = await fetch(`${process.env.KNOX_API_BASE_URL}/approval/api/v2.0/approvals/secu-submit`, { + method: 'POST', + headers: { + 'System-ID': systemId, + }, + body: formData, + }); + + if (!response.ok) { + throw new Error(`보안 결재 상신 실패: ${response.status}`); + } + + return await response.json(); + } catch (error) { + console.error('보안 결재 상신 오류:', error); + throw error; + } +} + +/** + * 결재 상세 상황 조회 + * GET /approval/api/v2.0/approvals/{apInfId}/detail + */ +export async function getApprovalDetail( + apInfId: string, + systemId: string +): Promise<ApprovalDetailResponse> { + try { + const response = await fetch(`${process.env.KNOX_API_BASE_URL}/approval/api/v2.0/approvals/${apInfId}/detail`, { + method: 'GET', + headers: { + 'System-ID': systemId, + }, + }); + + if (!response.ok) { + throw new Error(`결재 상세 조회 실패: ${response.status}`); + } + + return await response.json(); + } catch (error) { + console.error('결재 상세 조회 오류:', error); + throw error; + } +} + +/** + * 결재 본문 조회 + * GET /approval/api/v2.0/approvals/{apInfId}/content + */ +export async function getApprovalContent( + apInfId: string, + systemId: string +): Promise<ApprovalContentResponse> { + try { + const response = await fetch(`${process.env.KNOX_API_BASE_URL}/approval/api/v2.0/approvals/${apInfId}/content`, { + method: 'GET', + headers: { + 'System-ID': systemId, + }, + }); + + if (!response.ok) { + throw new Error(`결재 본문 조회 실패: ${response.status}`); + } + + return await response.json(); + } catch (error) { + console.error('결재 본문 조회 오류:', error); + throw error; + } +} + +/** + * 결재 상황 조회 + * POST /approval/api/v2.0/approvals/status + */ +export async function getApprovalStatus( + request: ApprovalStatusRequest, + systemId: string +): Promise<ApprovalStatusResponse> { + try { + const response = await fetch(`${process.env.KNOX_API_BASE_URL}/approval/api/v2.0/approvals/status`, { + method: 'POST', + headers: { + 'System-ID': systemId, + 'Content-Type': 'application/json', + }, + body: JSON.stringify(request.apinfids), + }); + + if (!response.ok) { + throw new Error(`결재 상황 조회 실패: ${response.status}`); + } + + return await response.json(); + } catch (error) { + console.error('결재 상황 조회 오류:', error); + throw error; + } +} + +/** + * 결재 연계 ID 조회 + * GET /approval/api/v2.0/approvals/apinfids + */ +export async function getApprovalIds( + systemId: string, + apIds?: string[] +): Promise<ApprovalIdsResponse> { + try { + let url = `${process.env.KNOX_API_BASE_URL}/approval/api/v2.0/approvals/apinfids`; + + if (apIds && apIds.length > 0) { + const params = new URLSearchParams(); + apIds.forEach(id => params.append('apId', id)); + url += `?${params.toString()}`; + } + + const response = await fetch(url, { + method: 'GET', + headers: { + 'System-ID': systemId, + }, + }); + + if (!response.ok) { + throw new Error(`결재 연계 ID 조회 실패: ${response.status}`); + } + + return await response.json(); + } catch (error) { + console.error('결재 연계 ID 조회 오류:', error); + throw error; + } +} + +/** + * 상신함 리스트 조회 + * GET /approval/api/v2.0/approvals/submission + */ +export async function getSubmissionList( + systemId: string, + params?: Record<string, string> +): Promise<SubmissionListResponse> { + try { + let url = `${process.env.KNOX_API_BASE_URL}/approval/api/v2.0/approvals/submission`; + + if (params) { + const searchParams = new URLSearchParams(params); + url += `?${searchParams.toString()}`; + } + + const response = await fetch(url, { + method: 'GET', + headers: { + 'System-ID': systemId, + }, + }); + + if (!response.ok) { + throw new Error(`상신함 리스트 조회 실패: ${response.status}`); + } + + return await response.json(); + } catch (error) { + console.error('상신함 리스트 조회 오류:', error); + throw error; + } +} + +/** + * 연계 이력 조회 + * GET /approval/api/v2.0/approvals/apinfidinfos + */ +export async function getApprovalHistory( + systemId: string, + params?: Record<string, string> +): Promise<ApprovalHistoryResponse> { + try { + let url = `${process.env.KNOX_API_BASE_URL}/approval/api/v2.0/approvals/apinfidinfos`; + + if (params) { + const searchParams = new URLSearchParams(params); + url += `?${searchParams.toString()}`; + } + + const response = await fetch(url, { + method: 'GET', + headers: { + 'System-ID': systemId, + }, + }); + + if (!response.ok) { + throw new Error(`연계 이력 조회 실패: ${response.status}`); + } + + return await response.json(); + } catch (error) { + console.error('연계 이력 조회 오류:', error); + throw error; + } +} + +/** + * 상신 취소 + * POST /approval/api/v2.0/approvals/{apInfId}/cancel + */ +export async function cancelApproval( + apInfId: string, + systemId: string +): Promise<CancelApprovalResponse> { + try { + const response = await fetch(`${process.env.KNOX_API_BASE_URL}/approval/api/v2.0/approvals/${apInfId}/cancel`, { + method: 'POST', + headers: { + 'System-ID': systemId, + }, + }); + + if (!response.ok) { + throw new Error(`상신 취소 실패: ${response.status}`); + } + + return await response.json(); + } catch (error) { + console.error('상신 취소 오류:', error); + throw error; + } +} + +/** + * 저장된 결재경로 목록 조회 + * GET /approval/api/v2.0/approvals/ownaplnlist + */ +export async function getOwnApprovalLineList( + systemId: string, + params?: Record<string, string> +): Promise<OwnApprovalLineListResponse> { + try { + let url = `${process.env.KNOX_API_BASE_URL}/approval/api/v2.0/approvals/ownaplnlist`; + + if (params) { + const searchParams = new URLSearchParams(params); + url += `?${searchParams.toString()}`; + } + + const response = await fetch(url, { + method: 'GET', + headers: { + 'System-ID': systemId, + }, + }); + + if (!response.ok) { + throw new Error(`저장된 결재경로 목록 조회 실패: ${response.status}`); + } + + return await response.json(); + } catch (error) { + console.error('저장된 결재경로 목록 조회 오류:', error); + throw error; + } +} + +/** + * 저장된 결재경로 상세 조회 + * GET /approval/api/v2.0/approvals/{pslAplnId}/ownaplndetail + */ +export async function getOwnApprovalLineDetail( + pslAplnId: string, + systemId: string +): Promise<OwnApprovalLineDetailResponse> { + try { + const response = await fetch(`${process.env.KNOX_API_BASE_URL}/approval/api/v2.0/approvals/${pslAplnId}/ownaplndetail`, { + method: 'GET', + headers: { + 'System-ID': systemId, + }, + }); + + if (!response.ok) { + throw new Error(`저장된 결재경로 상세 조회 실패: ${response.status}`); + } + + return await response.json(); + } catch (error) { + console.error('저장된 결재경로 상세 조회 오류:', error); + throw error; + } +} + +// ========== 유틸리티 함수들 ========== + +/** + * 결재 상신 요청 데이터 생성 도우미 + */ +export async function createSubmitApprovalRequest( + contents: string, + subject: string, + approvalLines: ApprovalLine[], + options: Partial<SubmitApprovalRequest> = {} +): Promise<SubmitApprovalRequest> { + const now = new Date(); + const sbmDt = now.toISOString().replace(/[-:T]/g, '').slice(0, 14); + const apInfId = `${process.env.KNOX_SYSTEM_ID || 'DEFAULT'}${sbmDt}${Math.random().toString(36).substr(2, 9)}`.padEnd(32, '0'); + + return { + contents, + subject, + aplns: approvalLines, + contentsType: 'TEXT', + docSecuType: 'PERSONAL', + notifyOption: '0', + urgYn: 'N', + sbmDt, + timeZone: 'GMT+9', + docMngSaveCode: '0', + sbmLang: 'ko', + apInfId, + importantYn: 'N', + ...options + }; +} + +/** + * 결재 라인 생성 도우미 + */ +export async function createApprovalLine( + userInfo: { epId?: string; userId?: string; emailAddress?: string }, + role: string, + seq: string, + options: Partial<ApprovalLine> = {} +): Promise<ApprovalLine> { + return { + ...userInfo, + seq, + role, + aplnStatsCode: '0', + arbPmtYn: 'Y', + contentsMdfyPmtYn: 'Y', + aplnMdfyPmtYn: 'Y', + ...options + }; +} + +/** + * 결재 상태 문자열 변환 + */ +export async function getApprovalStatusText(status: string): Promise<string> { + const statusMap: Record<string, string> = { + '-3': '암호화실패', + '-2': '암호화중', + '-1': '예약상신', + '0': '보류', + '1': '진행중', + '2': '완결', + '3': '반려', + '4': '상신취소', + '5': '전결', + '6': '후완결' + }; + + return statusMap[status] || '알 수 없음'; +} + +/** + * 결재 역할 문자열 변환 + */ +export async function getApprovalRoleText(role: string): Promise<string> { + const roleMap: Record<string, string> = { + '0': '기안', + '1': '결재', + '2': '합의', + '3': '후결', + '4': '병렬합의', + '7': '병렬결재', + '9': '통보' + }; + + return roleMap[role] || '알 수 없음'; +} diff --git a/lib/knox-api/employee/employee-guide.html b/lib/knox-api/employee/employee-guide.html new file mode 100644 index 00000000..806788fe --- /dev/null +++ b/lib/knox-api/employee/employee-guide.html @@ -0,0 +1,2154 @@ +<div class="body-content"> + <div class="sub-header margin"> + <h2 data-message-id="emp.subject">임직원</h2> + </div> + <div class="module-subsum"> + <p><span data-message-id="emp.guide.description">Knox Suite을 통한 임직원 및 조직 정보 조회 기능을 제공합니다.</span></p> + </div><br> + <div class="module-font type03"><span data-message-id="emp.guide.policy01">[정책 및 제약사항]</span></div> + <div class="module-font type04"> + <dl> + <dt><span data-message-id="emp.guide.policy02">1. <b>재직, 휴직</b> 상태 임직원만 조회 가능합니다.</span></dt> + <dt><span data-message-id="emp.guide.policy03">2. 연계 신청시 요청한 <b>조회대상 회사</b>의 임직원, 조직정보만 조회 가능합니다.</span> + </dt> + <dt><span data-message-id="emp.guide.policy04">3. 연계 신청 시 <b>파견 포함</b>을 선택한 경우에만 파견된 임직원 정보까지 조회 + 가능합니다.</span></dt> + <dt><span data-message-id="emp.guide.policy05">4. <b>회사코드</b>를 이용한 조회 시, 해당 회사 정보만 조회 가능합니다.</span></dt> + <dt><span data-message-id="emp.guide.policy06">5. 조직도 조회의 경우, 조회 대상 회사에 <b>신청 회사 외 타사가 등록되어 있으면 일부 속성만</b> + 조회 가능합니다.</span></dt> + <dt><span data-message-id="emp.guide.policy07">6. 부분이름 검색 시 검색어는 <b>한국어 기준 2자, 영어 기준 4자 이상</b>이어야 + 합니다.</span></dt> + <dt><span data-message-id="emp.guide.policy08">7. 부분이름 검색 시 검색 기능 최적화를 위해 <b><sup>1)</sup>특정 영문명</b>으로는 조회할 + 수 없습니다.</span></dt> + <dt><span data-message-id="emp.guide.policy09">8. 모든 검색어에는 *, % 를 포함할 수 없습니다. 임직원 이름 검색 시 _ 도 포함할 수 + 없습니다.</span></dt> + <dt><span data-message-id="emp.guide.policy10">9. 목록으로 검색 시 목록의 값은 중복될 수 없습니다.</span></dt> + <dt><span data-message-id="emp.guide.policy11">10. 목록으로 검색 시 <b>목록의 크기는 100</b>을 넘을 수 없으며, <b>검색어의 길이는 + 100자</b>를 넘을 수 없습니다.</span></dt> + <dt><span data-message-id="emp.guide.policy12">11. 임직원 <b>검색 결과는 2,000개, 조직 검색 결과는 5,000개</b>로 제한합니다.</span> + </dt> + <dt><span data-message-id="emp.guide.policy13">12. <b>분당 호출 횟수 1,000건 이하</b>로 분산해야 합니다.</span></dt> + <dt><span data-message-id="emp.guide.policy14">13. <b>대량 호출 시 야간(22시 이후) 수행</b>을 권장합니다. (주간 수행 시 Knox + Portal과 협의 필요)</span></dt> + <dt> </dt> + <dt><span data-message-id="emp.guide.policy15"><sup>1)</sup> kim, lee, park, choi, jung, kang, cho, yoon, + jang, lim, han, shin, oh, seo, kwon, hwang, song, ahn, ryu, hong<br> nguy, youn, + young, hyun, sung, sang, jeon, dong, nguye, nguyen, jong, seun, seung, jeong, chan, yong, stre, + stres, stress, nguyễn, <br> nguyễn, chang, kyun, kyung, seon, jang, shin, yoon, + yang, song, byun, seong, kwan, hwan, byung, chun, kwang, jaeh, hyung, + hwang,<br> wang, sangh, moon, kyou, mari, kuma, kwon, yeon, andr, thi, chen, zhan, + zhang</span></dt> + </dl> + </div><br> + <div class="module-font type03"><span data-message-id="subject.api.list">[API 목록]</span> <a + target="blank" class="swagger-link" id="swaggerLinkStg" + href="http://developers.samsung.net/knoxcenter/wso2/swagger-ui/d23ef677-9952-4311-aa56-cb891791a694"><span + data-message-id="subject.go.to.swagger">테스트 페이지로 이동(Swagger)</span></a><span id="swaggerLinkStg_chrome" + data-message-id="subject.go.to.swagger.chrome"><sub>*Chrome Browser만 이용 가능합니다.</sub></span></div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="20%"> + <col width="20%"> + <col width="10%"> + <col> + </colgroup> + <thead> + <tr> + <th>API</th> + <th>URI</th> + <th>Method</th> + <th>Description</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="20%"> + <col width="20%"> + <col width="10%"> + <col> + </colgroup> + <tbody> + <tr> + <td class="left"><a href="#emp"><span data-message-id="emp.guide.api02">임직원 조회</span></a></td> + <td class="left">/employee/api/v2.0/employees</td> + <td>POST</td> + <td class="left desc"><span data-message-id="emp.guide.api03">임직원 정보를 조회한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#org"><span data-message-id="emp.guide.api04">조직도 조회</span></a></td> + <td class="left">/employee/api/v2.0/organizations</td> + <td>GET</td> + <td class="left desc"><span data-message-id="emp.guide.api05">부서 정보를 조회한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#title"><span data-message-id="emp.guide.api06">직급정보 조회</span></a> + </td> + <td class="left">/employee/api/v2.0/titles</td> + <td>GET</td> + <td class="left desc"><span data-message-id="emp.guide.api07">직급 정보를 조회한다.</span></td> + </tr> + </tbody> + </table> + </div> + </div><br><br><br> + <div class="dan-border"></div> + <div class="module-font type01" id="emp"><span data-message-id="emp.guide.empsearch">임직원 조회</span></div> + <div class="module-font type02"> + <p>Request Parameter</p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="4%;"> + <col width="10%;"> + <col width="14%;"> + <col width="9%;"> + <col width="9%;"> + <col width="8%;"> + <col width="18%;"> + <col> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th>Properties</th> + <th>Attribute</th> + <th>Mandatory</th> + <th>Parameter<br>Type</th> + <th>Data<br>Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="4%;"> + <col width="10%;"> + <col width="14%;"> + <col width="9%;"> + <col width="9%;"> + <col width="8%;"> + <col width="18%;"> + <col> + </colgroup> + <tbody> + <tr> + <td title="1">1</td> + <td class="left"><span data-message-id="emp.guide.empsearch.request01">연계 아이디</span></td> + <td class="left">System-ID</td> + <td>Y</td> + <td>Header</td> + <td>String</td> + <td class="left">C60REST0001</td> + <td class="left desc"></td> + </tr> + <tr> + <td title="2">2</td> + <td class="left"><span data-message-id="emp.guide.empsearch.request02">회사코드</span></td> + <td class="left">companyCode</td> + <td>N</td> + <td>Query</td> + <td>String</td> + <td class="left">C60</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.request.description02">3~10번 속성 + 중 1개의 속성만 사용 가능</span></td> + </tr> + <tr> + <td title="3">3</td> + <td class="left"><span data-message-id="emp.guide.empsearch.request03">임직원 이름</span></td> + <td class="left">fullName</td> + <td rowspan="8">Y</td> + <td>Query</td> + <td>String</td> + <td class="left"><span data-message-id="emp.guide.empsearch.request.sample01">김삼성</span></td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.request.description04">검색엔진 (검색 + 키워드 완전 일치 검색)</span></td> + </tr> + <tr> + <td title="4">4</td> + <td class="left"><span data-message-id="emp.guide.empsearch.request04">부서코드</span></td> + <td class="left">departmentCode</td> + <td>Query</td> + <td>String</td> + <td class="left">C60AH959</td> + <td class="left desc"></td> + </tr> + <tr> + <td title="5">5</td> + <td class="left"><span data-message-id="emp.guide.empsearch.request05">사번</span></td> + <td class="left">employeeNumber</td> + <td>Query</td> + <td>String</td> + <td class="left" title="123123">123123</td> + <td class="left desc"></td> + </tr> + <tr> + <td title="6">6</td> + <td class="left"><span data-message-id="emp.guide.empsearch.request06">이름</span></td> + <td class="left">name</td> + <td>Query</td> + <td>String</td> + <td class="left"><span data-message-id="emp.guide.empsearch.request.sample02">삼성</span></td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.request.description05">검색엔진 (검색 + 키워드 부분일치 검색)</span></td> + </tr> + <tr> + <td title="7">7</td> + <td class="left">epId</td> + <td class="left">epIds</td> + <td>Query</td> + <td>String</td> + <td class="left" title="D100118130308C600299">D100118130308C600299</td> + <td class="left desc"></td> + </tr> + <tr> + <td title="8">8</td> + <td class="left">ID</td> + <td class="left">userIds</td> + <td>Query</td> + <td>String</td> + <td class="left">knoxportal</td> + <td class="left desc"></td> + </tr> + <tr> + <td title="9">9</td> + <td class="left"><span data-message-id="emp.guide.empsearch.request07">메일주소</span></td> + <td class="left">emailAddresses</td> + <td>Query</td> + <td>String</td> + <td class="left" title="knoxportal@samsung.com">knoxportal@samsung.com</td> + <td class="left desc"></td> + </tr> + <tr> + <td title="10">10</td> + <td class="left"><span data-message-id="emp.guide.empsearch.request08">직급코드</span></td> + <td class="left">titleCode</td> + <td>Query</td> + <td>String</td> + <td class="left">B3K</td> + <td class="left desc"><span + data-message-id="emp.guide.empsearch.request.description06">compCode, page 함께 받아야 + 함</span></td> + </tr> + <tr> + <td title="11">11</td> + <td class="left"><span data-message-id="emp.guide.empsearch.request09">페이지 번호</span></td> + <td class="left">page</td> + <td>N</td> + <td>Query</td> + <td>String</td> + <td class="left" title="1">1</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.request.description08"><span + class="ellipsis">- companyCode&departmentCode /</span><br><span + class="ellipsis">companyCode&title /</span><br><span class="ellipsis"> name 인 + 경우에만 paging 적용가능</span><br><span class="ellipsis">- page 입력 시 500건씩 + 조회</span><br><span class="ellipsis">- page 미입력 시 최대 2000건 조회</span></span></td> + </tr> + <tr> + <td title="12">12</td> + <td class="left"><span data-message-id="emp.guide.empsearch.request10">검색결과 타입</span></td> + <td class="left">resultType</td> + <td>Y</td> + <td>Body</td> + <td>String</td> + <td class="left">basic<br>optional</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.request.description09"><span + class="ellipsis">- basic : 기본 속성 리턴</span><br><span class="ellipsis">- optional : + attributes 정의 속성만 리턴</span></span></td> + </tr> + <tr> + <td title="13">13</td> + <td class="left"><span data-message-id="emp.guide.empsearch.request11">조회할 임직원 속성</span></td> + <td class="left">attributes</td> + <td>N</td> + <td>Body</td> + <td>String</td> + <td class="left" title="["emailAddress","userId"]">["emailAddress","userId"] + </td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.request.description11">지정한 속성에 + 대해서만 결과 값 리턴</span><br><span + data-message-id="emp.guide.empsearch.request.description10">resultType이 optional인 경우 + 필수</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Response Parameter</p> + </div><span data-message-id="emp.guide.empsearch.request.description12">resultType 쿼리 타입에 따라 리턴 항목이 다름. <br>- basic + : 기본 속성만 리턴 (아래 * 표시된 30개 항목)<br>- optional : body에 보낸 attributes 데이터만 리턴</span> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="4%;"> + <col width="16%;"> + <col width="15%;"> + <col width="10%;"> + <col width="20%;"> + <col width="35%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th>Properties</th> + <th>Attribute</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="4%;"> + <col width="16%;"> + <col width="15%;"> + <col width="10%;"> + <col width="20%;"> + <col width="35%;"> + </colgroup> + <tbody> + <tr> + <td title="1">1</td> + <td class="left"><span data-message-id="emp.guide.empsearch.response01">API 호출 성공 여부</span></td> + <td class="left">result</td> + <td>String</td> + <td class="left">success<br>fail</td> + <td></td> + </tr> + <tr> + <td title="2">2</td> + <td class="left"><span data-message-id="emp.guide.empsearch.response02">현재 페이지</span></td> + <td class="left">currentPage</td> + <td>int</td> + <td class="left" title="1">1</td> + <td></td> + </tr> + <tr> + <td title="3">3</td> + <td class="left"><span data-message-id="emp.guide.empsearch.response03">총 결과 페이지 수</span></td> + <td class="left">totalPage</td> + <td>int</td> + <td class="left" title="3">3</td> + <td></td> + </tr> + <tr> + <td title="4">4</td> + <td class="left"><span data-message-id="emp.guide.empsearch.response04">검색된 임직원의 수</span></td> + <td class="left">totalCount</td> + <td>int</td> + <td class="left" title="30">30</td> + <td></td> + </tr> + <tr> + <td title="5">5</td> + <td class="left"><span data-message-id="emp.guide.empsearch.response05">임직원 정보</span></td> + <td class="left">employees</td> + <td>JSON String</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="6">6</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response06">계정신청상태</span></td> + <td class="left"> accountStatus</td> + <td>String</td> + <td class="left">A</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.response.description01"><span + class="ellipsis">A: 아이디 승인</span><br><span class="ellipsis">W: 아이디 + 신청</span><br><span class="ellipsis">M: 아이디 미발급</span></span></td> + </tr> + <tr> + <td title="7">7</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response07">사업장코드</span></td> + <td class="left"> busiCode</td> + <td>String</td> + <td class="left">C60B0001</td> + <td></td> + </tr> + <tr> + <td title="8">8</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response08">사업장명</span></td> + <td class="left"> busiName</td> + <td>String</td> + <td class="left"><span data-message-id="emp.guide.empsearch.response.sample01">잠실동관</span></td> + <td></td> + </tr> + <tr> + <td title="9">9</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response09">회사코드</span> *</td> + <td class="left"> companyCode</td> + <td>String</td> + <td class="left">C60</td> + <td></td> + </tr> + <tr> + <td title="10">10</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response10">회사명</span> *</td> + <td class="left"> companyName</td> + <td>String</td> + <td class="left"><span data-message-id="emp.guide.empsearch.response.sample02">삼성SDS</span></td> + <td></td> + </tr> + <tr> + <td title="11">11</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response11">국가</span></td> + <td class="left"> country</td> + <td>String</td> + <td class="left">KR</td> + <td></td> + </tr> + <tr> + <td title="12">12</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response12">기본소속구분코드</span></td> + <td class="left"> defaultCompanyCode</td> + <td>String</td> + <td class="left">O</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.response.description02"><span + class="ellipsis">O: 원소속</span><br><span class="ellipsis">S: 파견소속</span></span></td> + </tr> + <tr> + <td title="13">13</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response13">부서코드</span> *</td> + <td class="left"> departmentCode</td> + <td>String</td> + <td class="left">C60AH959</td> + <td></td> + </tr> + <tr> + <td title="14">14</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response14">부서명</span> *</td> + <td class="left"> departmentName</td> + <td>String</td> + <td class="left"><span + data-message-id="emp.guide.empsearch.response.sample03">Knox개발그룹(솔루션개발)</span></td> + <td></td> + </tr> + <tr> + <td title="15">15</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response15">담당업무</span> *</td> + <td class="left"> description</td> + <td>String</td> + <td class="left"><span data-message-id="emp.guide.empsearch.response.sample04">Knox Suite + 개발</span></td> + <td></td> + </tr> + <tr> + <td title="16">16</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response16">이메일 + 주소</span> *</td> + <td class="left"> emailAddress</td> + <td>String</td> + <td class="left" title="knoxportal@samsung.com">knoxportal@samsung.com</td> + <td></td> + </tr> + <tr> + <td title="17">17</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response17">사번</span> *</td> + <td class="left"> employeeNumber</td> + <td>String</td> + <td class="left" title="123123">123123</td> + <td></td> + </tr> + <tr> + <td title="18">18</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response18">임직원 + 상태</span> *</td> + <td class="left"> employeeStatus</td> + <td>String</td> + <td class="left">B</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.response.description03"><span + class="ellipsis">B: 재직</span><br><span class="ellipsis">V: 휴직</span></span></td> + </tr> + <tr> + <td title="19">19</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response19">임직원 + 구분</span></td> + <td class="left"> employeeType</td> + <td>String</td> + <td class="left">N</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.response.description04"><span + class="ellipsis">N:정규직 (@samsung.com)</span><br><span class="ellipsis">U:협력직 C:자회사 + T:임시직 (@partner.samsung.com)</span><br><span class="ellipsis">X:협력직 Y:자회사 Z:임시직 + (@samsung.com)</span></span></td> + </tr> + <tr> + <td title="20">20</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response20">영문 + 사업장명</span></td> + <td class="left"> enBusiName</td> + <td>String</td> + <td class="left">SDS East Campus</td> + <td></td> + </tr> + <tr> + <td title="21">21</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response21">영문 + 회사명</span> *</td> + <td class="left"> enCompanyName</td> + <td>String</td> + <td class="left">SAMSUNG SDS</td> + <td></td> + </tr> + <tr> + <td title="22">22</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response22">영문 + 부서명</span> *</td> + <td class="left"> enDepartmentName</td> + <td>String</td> + <td class="left" title="Knox Development Group">Knox Development Group</td> + <td></td> + </tr> + <tr> + <td title="23">23</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response23">영문 + 담당업무</span> *</td> + <td class="left"> enDiscription</td> + <td>String</td> + <td class="left" title="Knox Portal User Mgmt.">Knox Portal User Mgmt.</td> + <td></td> + </tr> + <tr> + <td title="24">24</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response24">영문 + 성명</span> *</td> + <td class="left"> enFullName</td> + <td>String</td> + <td class="left">Samsung Kim</td> + <td></td> + </tr> + <tr> + <td title="25">25</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response25">영문 + 이름</span> *</td> + <td class="left"> enGivenName</td> + <td>String</td> + <td class="left">Samsung</td> + <td></td> + </tr> + <tr> + <td title="26">26</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response26">영문 + 직위명</span> *</td> + <td class="left"> enGradeName</td> + <td>String</td> + <td class="left">Manager</td> + <td></td> + </tr> + <tr> + <td title="27">27</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response27">영문 + 회사주소</span></td> + <td class="left"> enOfficeAddress</td> + <td>String</td> + <td class="left" title="123, Olympic-ro 35-gil, Songpa">123, Olympic-ro 35-gil, Songpa</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.response.description05">우편번호로 + 구분되는 회사주소</span></td> + </tr> + <tr> + <td title="28">28</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response28">영문 + 지역명</span></td> + <td class="left"> enRegionName</td> + <td>String</td> + <td class="left">Jamsil</td> + <td></td> + </tr> + <tr> + <td title="29">29</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response29">영문 파견 + 사업장명</span></td> + <td class="left"> enSendBusiName</td> + <td>String</td> + <td class="left">Jamsil</td> + <td></td> + </tr> + <tr> + <td title="30">30</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response30">영문 파견 + 회사명</span></td> + <td class="left"> enSendCompanyName</td> + <td>String</td> + <td class="left">Samsung Electronics</td> + <td></td> + </tr> + <tr> + <td title="31">31</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response31">영문 파견 + 부서명</span></td> + <td class="left"> enSendDepartmentName</td> + <td>String</td> + <td class="left">IT Service</td> + <td></td> + </tr> + <tr> + <td title="32">32</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response32">영문 파견 + 직위명</span></td> + <td class="left"> enSendGradeName</td> + <td>String</td> + <td class="left">Lab Leader</td> + <td></td> + </tr> + <tr> + <td title="33">33</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response33">영문 파견 + 지역명</span></td> + <td class="left"> enSendRegionName</td> + <td>String</td> + <td class="left">Suwon</td> + <td></td> + </tr> + <tr> + <td title="34">34</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response34">영문 파견 + 총괄명</span></td> + <td class="left"> enSendSubOrgName</td> + <td>String</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="35">35</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response35">영문 파견 + 직급명</span></td> + <td class="left"> enSendTitleName</td> + <td>String</td> + <td class="left">E5</td> + <td></td> + </tr> + <tr> + <td title="36">36</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response36">영문 + 성</span> *</td> + <td class="left"> enSirName</td> + <td>String</td> + <td class="left">Kim</td> + <td></td> + </tr> + <tr> + <td title="37">37</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response37">영문 + 총괄명</span></td> + <td class="left"> enSubOrgName</td> + <td>String</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="38">38</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response38">영문 + 직급명</span> *</td> + <td class="left"> enTitleName</td> + <td>String</td> + <td class="left">Senior Engineer</td> + <td></td> + </tr> + <tr> + <td title="39">39</td> + <td class="left"> epId *</td> + <td class="left"> epId</td> + <td>String</td> + <td class="left" title="D100118130308C600299">D100118130308C600299</td> + <td></td> + </tr> + <tr> + <td title="40">40</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response39">임원여부</span></td> + <td class="left"> executiveYn</td> + <td>String</td> + <td class="left">N</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.response.description06"><span + class="ellipsis">Y: 임원</span><br><span class="ellipsis">N: 직원</span></span></td> + </tr> + <tr> + <td title="41">41</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response40">외부 + 메일주소</span></td> + <td class="left"> externalEmailAddress</td> + <td>String</td> + <td class="left">knoxportal@gmail.com</td> + <td></td> + </tr> + <tr> + <td title="42">42</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response41">성명</span> *</td> + <td class="left"> fullName</td> + <td>String</td> + <td class="left"><span data-message-id="emp.guide.empsearch.request.sample01">김삼성</span></td> + <td></td> + </tr> + <tr> + <td title="43">43</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response42">이름</span> *</td> + <td class="left"> givenName</td> + <td>String</td> + <td class="left"><span data-message-id="emp.guide.empsearch.request.sample02">삼성</span></td> + <td></td> + </tr> + <tr> + <td title="44">44</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response43">직위명</span> *</td> + <td class="left"> gradeName</td> + <td>String</td> + <td class="left"><span data-message-id="emp.guide.empsearch.response.sample07">책임</span></td> + <td></td> + </tr> + <tr> + <td title="45">45</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response44">직위직급 + 표시코드</span> *</td> + <td class="left"> gradeTitleIndiCode</td> + <td>String</td> + <td class="left">B</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.response.description07"><span + class="ellipsis">G: 직위</span><br><span class="ellipsis">T: 직급</span><br><span + class="ellipsis">B: 직위/직급 모두</span></span></td> + </tr> + <tr> + <td title="46">46</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response45">내부 + 부서코드</span></td> + <td class="left"> inDepartmentCode</td> + <td>String</td> + <td class="left">RE_KO41</td> + <td></td> + </tr> + <tr> + <td title="47">47</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response46">내부 + 부서명</span></td> + <td class="left"> inDepartmentName</td> + <td>String</td> + <td class="left">Samsung Research</td> + <td></td> + </tr> + <tr> + <td title="48">48</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response47">직무명</span> *</td> + <td class="left"> jobName</td> + <td>String</td> + <td class="left">AEB</td> + <td></td> + </tr> + <tr> + <td title="49">49</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response48">직무코드</span></td> + <td class="left"> jobCode</td> + <td>String</td> + <td class="left">SystemS/W</td> + <td></td> + </tr> + <tr> + <td title="50">50</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response49">현채인 + 여부</span></td> + <td class="left"> localStaffYn</td> + <td>String</td> + <td class="left">N</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.response.description08"><span + class="ellipsis">Y: 현채인</span><br><span class="ellipsis">N: 현채인 아님</span></span> + </td> + </tr> + <tr> + <td title="51">51</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response50">핸드폰</span></td> + <td class="left"> mobile</td> + <td>String</td> + <td class="left">+82-10-1111-2222</td> + <td></td> + </tr> + <tr> + <td title="52">52</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response51">닉네임</span></td> + <td class="left"> nickName</td> + <td>String</td> + <td class="left">nick</td> + <td></td> + </tr> + <tr> + <td title="53">53</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response52">근무지 + 주소</span></td> + <td class="left"> officeAddress</td> + <td>String</td> + <td class="left"><span data-message-id="emp.guide.empsearch.response.sample05">송파구 올림픽로35길 + 123</span></td> + <td></td> + </tr> + <tr> + <td title="54">54</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response53">근무지 상세 + 주소</span></td> + <td class="left"> officeDetailAddress</td> + <td>String</td> + <td class="left"><span data-message-id="emp.guide.empsearch.response.sample06">동관 19층</span> + </td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.response.description09">상세 + 회사주소</span></td> + </tr> + <tr> + <td title="55">55</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response54">근무지 + 팩스번호</span></td> + <td class="left"> officeFaxNumber</td> + <td>String</td> + <td class="left">+82-2-2255-1999</td> + <td></td> + </tr> + <tr> + <td title="56">56</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response55">근무지 + 우편번호</span></td> + <td class="left"> officeZipCode</td> + <td>String</td> + <td class="left">138-240</td> + <td></td> + </tr> + <tr> + <td title="57">57</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response56">근무지 + 전화번호</span></td> + <td class="left"> officeTelNumber</td> + <td>String</td> + <td class="left">82-70-9999-9999</td> + <td></td> + </tr> + <tr> + <td title="58">58</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response57">선호언어</span></td> + <td class="left"> preferredLanguage</td> + <td>String</td> + <td class="left">ko</td> + <td></td> + </tr> + <tr> + <td title="59">59</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response58">실명 + 여부</span> *</td> + <td class="left"> realNameYn</td> + <td>String</td> + <td class="left">R</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.response.description10"><span + class="ellipsis">R:실명</span><br><span class="ellipsis">V:가명</span></span></td> + </tr> + <tr> + <td title="60">60</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response59">지역코드</span></td> + <td class="left"> regionCode</td> + <td>String</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="61">61</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response60">지역명</span></td> + <td class="left"> regionName</td> + <td>String</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="62">62</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response61">보안등급</span> *</td> + <td class="left"> securityLevel</td> + <td>String</td> + <td class="left" title="5">5</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.response.description11"><span + class="ellipsis">1:회장단(회장,부회장,비서실장)</span><br><span + class="ellipsis">2:사장단(사장,부사장,전무)</span><br><span + class="ellipsis">3:임원진(상무,이사,고문,감사)</span><br><span + class="ellipsis">4:간부(부,차,과장)</span><br><span + class="ellipsis">5:사원(대리,사원)</span><br><span class="ellipsis">9:협력사 + 임직원</span></span></td> + </tr> + <tr> + <td title="63">63</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response62">파견 + 사업장코드</span></td> + <td class="left"> sendBusiCde</td> + <td>String</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="64">64</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response63">파견 + 회사코드</span></td> + <td class="left"> sendCompanyCode</td> + <td>String</td> + <td class="left">C10</td> + <td></td> + </tr> + <tr> + <td title="65">65</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response64">파견 + 회사명</span></td> + <td class="left"> sendCompanyName</td> + <td>String</td> + <td class="left"><span data-message-id="emp.guide.empsearch.response.sample09">삼성전자</span></td> + <td></td> + </tr> + <tr> + <td title="66">66</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response65">파견 + 부서코드</span></td> + <td class="left"> sendDepartmentCode</td> + <td>String</td> + <td class="left" title="C10CB04CB040060">C10CB04CB040060</td> + <td></td> + </tr> + <tr> + <td title="67">67</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response66">파견 + 부서명</span></td> + <td class="left"> sendDepartmentName</td> + <td>String</td> + <td class="left">IT Services</td> + <td></td> + </tr> + <tr> + <td title="68">68</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response67">파견 + 직위명</span></td> + <td class="left"> sendGradeName</td> + <td>String</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="69">69</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response68">파견 + 직위직급 표시코드</span></td> + <td class="left"> sendGradeTitleIndiCode</td> + <td>String</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="70">70</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response69">파견 + 지역코드</span></td> + <td class="left"> sendRegionCode</td> + <td>String</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="71">71</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response70">파견 + 보안등급</span></td> + <td class="left"> sendSecurityLevel</td> + <td>String</td> + <td class="left" title="5">5</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.response.description11"><span + class="ellipsis">1:회장단(회장,부회장,비서실장)</span><br><span + class="ellipsis">2:사장단(사장,부사장,전무)</span><br><span + class="ellipsis">3:임원진(상무,이사,고문,감사)</span><br><span + class="ellipsis">4:간부(부,차,과장)</span><br><span + class="ellipsis">5:사원(대리,사원)</span><br><span class="ellipsis">9:협력사 + 임직원</span></span></td> + </tr> + <tr> + <td title="72">72</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response71">파견 + 총괄코드</span></td> + <td class="left"> sendSubOrgCode</td> + <td>String</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="73">73</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response72">파견 + 총괄명</span></td> + <td class="left"> sendSubOrgName</td> + <td>String</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="74">74</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response73">파견 + 직급명</span></td> + <td class="left"> sendTitleName</td> + <td>String</td> + <td class="left"><span data-message-id="emp.guide.empsearch.response.sample07">책임</span></td> + <td></td> + </tr> + <tr> + <td title="75">75</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response74">파견 + 직급코드</span></td> + <td class="left"> sendTitleCode</td> + <td>String</td> + <td class="left">E5</td> + <td></td> + </tr> + <tr> + <td title="76">76</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response75">파견 직급 + 정렬 순서</span></td> + <td class="left"> sendTitleSortOrder</td> + <td>String</td> + <td class="left" title="309">309</td> + <td></td> + </tr> + <tr> + <td title="77">77</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response76">거점</span> *</td> + <td class="left"> serverLocation</td> + <td>String</td> + <td class="left">KR</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.response.description12"><span + class="ellipsis">KR: 한국</span><br><span class="ellipsis">GB: 구주</span><br><span + class="ellipsis">US: 미주</span></span></td> + </tr> + <tr> + <td title="78">78</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response77">성</span> *</td> + <td class="left"> sirName</td> + <td>String</td> + <td class="left"><span data-message-id="emp.guide.empsearch.response.sample08">김</span></td> + <td></td> + </tr> + <tr> + <td title="79">79</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response78">총괄코드</span></td> + <td class="left"> subOrgCode</td> + <td>String</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="80">80</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response79">총괄명</span></td> + <td class="left"> subOrgName</td> + <td>String</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="81">81</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response80">직급명</span> *</td> + <td class="left"> titleName</td> + <td>String</td> + <td class="left"><span data-message-id="emp.guide.empsearch.response.sample07">책임</span></td> + <td></td> + </tr> + <tr> + <td title="82">82</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response81">직급코드</span> *</td> + <td class="left"> titleCode</td> + <td>String</td> + <td class="left">B2K</td> + <td></td> + </tr> + <tr> + <td title="83">83</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response82">직급정렬순서</span> *</td> + <td class="left"> titleSortOrder</td> + <td>String</td> + <td class="left" title="54">54</td> + <td></td> + </tr> + <tr> + <td title="84">84</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response83">고유코드</span></td> + <td class="left"> openCode</td> + <td>String</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="85">85</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response84">로그인 + 아이디</span> *</td> + <td class="left"> userId</td> + <td>String</td> + <td class="left">knoxportal</td> + <td></td> + </tr> + <tr> + <td title="86">86</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response85">인터넷 + 전화번호</span></td> + <td class="left"> voipNumber</td> + <td>String</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="87">87</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response86">퇴직/휴직일</span></td> + <td class="left"> withdrawDate</td> + <td>String</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="88">88</td> + <td class="left"> <span data-message-id="emp.guide.empsearch.response87">ID + 유효기간</span></td> + <td class="left"> epIdExpiryDate</td> + <td>String</td> + <td class="left" title="20201231">20201231</td> + <td></td> + </tr> + <tr> + <td title="89">89</td> + <td class="left"> <span + data-message-id="emp.guide.empsearch.response88">타임존</span></td> + <td class="left"> timeZone</td> + <td>String</td> + <td class="left" title="Asia/Seoul">Asia/Seoul</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.response.description13">이름으로 검색 + 시에는 제공하지 않음</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Sample</p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="40%;"> + <col width="60%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="40%;"> + <col width="60%;"> + </colgroup> + <tbody> + <tr> + <td> + <pre><span data-message-id="emp.guide.empsearch.response.sample10"><span class="ellipsis">(1)</span><br><span class="ellipsis">/employees?departmentCode=C60AH959</span><br><span class="ellipsis">{"resultType" :"basic"}</span><br><span class="ellipsis"></span><br><span class="ellipsis"></span><br><span class="ellipsis">(2)</span><br><span class="ellipsis">/employees?companyCode=C60&userIds=es.jen.cho,ye.chang</span><br><span class="ellipsis">{"resultType" :"optional",</span><br><span class="ellipsis"> "attributes":["emailAddress","userId"]</span><br><span class="ellipsis">}</span></span> + </pre> + </td> + <td> + <pre><span data-message-id="emp.guide.empsearch.response.sample11"><span class="ellipsis">(1)</span><br><span class="ellipsis">* 기본 값으로 설정된 attributes값만 리턴</span><br><span class="ellipsis">{"result":"success",</span><br><span class="ellipsis"> "currentPage":1,</span><br><span class="ellipsis"> "totalPage":2,</span><br><span class="ellipsis"> "totalCount":612,</span><br><span class="ellipsis"> "employees":[</span><br><span class="ellipsis"> {"fullname":"조은성",</span><br><span class="ellipsis"> "departmentname":"개발그룹(SC_인트라넷)",</span><br><span class="ellipsis"> "departmentcode":"C60AH959",...},</span><br><span class="ellipsis"> {"fullName":"김민정","departmentname".....}]</span><br><span class="ellipsis">}</span><br><span class="ellipsis"></span><br><span class="ellipsis"></span><br><span class="ellipsis"></span></span> +<span data-message-id="emp.guide.empsearch.response.sample12"><span class="ellipsis">(2)</span><br><span class="ellipsis">* body에 설정된 attributes값만 리턴</span><br><span class="ellipsis">{"result":"success",</span><br><span class="ellipsis"> "currentPage":1,</span><br><span class="ellipsis"> "totalPage":1,</span><br><span class="ellipsis"> "totalCount":2,</span><br><span class="ellipsis"> "employees":[{"emailAddress":"es.jen.cho@stage.samsung.com","userId":"es.jen.cho"},</span><br><span class="ellipsis"> {"emailAddress":"ye.chang@stage.samsung.com","userId":"ye.chang"}]</span><br><span class="ellipsis">}</span></span> + </pre> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Error Code</p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="emp.guide.empsearch.error00">HTTP응답코드</span></th> + <th><span data-message-id="emp.guide.empsearch.error01">에러코드</span></th> + <th><span data-message-id="emp.guide.empsearch.error02">에러메시지</span></th> + <th><span data-message-id="emp.guide.empsearch.error03">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td>400</td> + <td>EM0001</td> + <td class="left desc">Search request with more than 100 list can not be proceeded.</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.error04">조회건수 100건 초과하여 에러 발생. + Parameter 추가하여 조회 건수 축소</span></td> + </tr> + <tr> + <td>400</td> + <td>EM0004</td> + <td class="left desc">Please insert the search keyword.</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.error05">Parameter 누락 확인</span> + </td> + </tr> + <tr> + <td>400</td> + <td>EM0005</td> + <td class="left desc">Search keyword length is not valid.</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.error06">Parameter 길이 확인</span> + </td> + </tr> + <tr> + <td>400</td> + <td>EM0006</td> + <td class="left desc">Search keyword should be no longer than 100 characters.</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.error07">Parameter 길이 100자 이하로 + 작성</span></td> + </tr> + <tr> + <td>400</td> + <td>EM0007</td> + <td class="left desc">Search keyword can not include the caracter.</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.error08">Parameter에 *, % 이 포함되어 + 있는지 확인</span></td> + </tr> + <tr> + <td>500</td> + <td>EM0010</td> + <td class="left desc">EPWebservice.{} Abnormal.</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.error09">Parameter 누락 또는 잘못된 + 형식인지 확인</span></td> + </tr> + <tr> + <td>400</td> + <td>EM0014</td> + <td class="left desc">Please enter {} as required.</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.error11">{} 필수값 누락</span></td> + </tr> + <tr> + <td>400</td> + <td>EM0015</td> + <td class="left desc">Please enter {} according to the specified format.</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.error12">잘못된 형식으로 인한 오류</span> + </td> + </tr> + <tr> + <td>400</td> + <td>EM0016</td> + <td class="left desc">Only one of {} can be selected.</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.error13">{} 중 한 개만 선택하여 검색 + 가능</span></td> + </tr> + <tr> + <td>400</td> + <td>EM0017</td> + <td class="left desc">For the requested search conditions, paging is not possible.</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.error14">페이징 지원 불가</span></td> + </tr> + <tr> + <td>400</td> + <td>EM0018</td> + <td class="left desc">Please remove the {} keyword from the requested search conditions and try + again.</td> + <td class="left desc"><span data-message-id="emp.guide.empsearch.error15">요청한 검색조건 중, {} 조건 제거 후 + 다시 시도 바랍니다.</span></td> + </tr> + </tbody> + </table> + </div> + </div><br><br><br> + <div class="dan-border"></div> + <div class="module-font type01" id="org"><span data-message-id="emp.guide.orgsearch">조직도 조회</span></div> + <div class="module-font type02"> + <p>Request Parameter</p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="4%;"> + <col width="10%;"> + <col width="15%;"> + <col width="9%;"> + <col width="9%;"> + <col width="9%;"> + <col width="15%;"> + <col> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th>Properties</th> + <th>Attribute</th> + <th>Mandatory</th> + <th>Parameter<br>Type</th> + <th>Data<br>Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="4%;"> + <col width="10%;"> + <col width="15%;"> + <col width="9%;"> + <col width="9%;"> + <col width="9%;"> + <col width="15%;"> + <col> + </colgroup> + <tbody> + <tr> + <td title="1">1</td> + <td><span data-message-id="emp.guide.orgsearch.request01">연계 아이디</span></td> + <td>System-ID</td> + <td>Y</td> + <td>Header</td> + <td>String</td> + <td>C60REST0001</td> + <td class="left desc"></td> + </tr> + <tr> + <td title="2">2</td> + <td><span data-message-id="emp.guide.orgsearch.request02">회사코드</span></td> + <td>companyCode</td> + <td>Y</td> + <td>Query</td> + <td>String</td> + <td>C60</td> + <td class="left desc"><span data-message-id="emp.guide.orgsearch.request.description01"><span + class="ellipsis">2번 항목 단독 검색 또는</span><br><span class="ellipsis">3~5번 항목 중 하나와 결합하여 + 검색</span></span></td> + </tr> + <tr> + <td title="3">3</td> + <td><span data-message-id="emp.guide.orgsearch.request03">상위부서코드</span></td> + <td>uprDepartmentCode</td> + <td rowspan="3">N</td> + <td>Query</td> + <td>String</td> + <td>C60AI572</td> + <td class="left desc"><span + data-message-id="emp.guide.orgsearch.request.description03">companyCode 쿼리와 함께 + 사용</span><br><span data-message-id="emp.guide.orgsearch.request.description02"><span + class="ellipsis">(3~5번 중</span><br><span class="ellipsis">한 가지만 선택 가능)</span></span> + </td> + </tr> + <tr> + <td title="4">4</td> + <td><span data-message-id="emp.guide.orgsearch.request04">부서코드</span></td> + <td>departmentCode</td> + <td>Query</td> + <td>String</td> + <td>C60AH959</td> + <td class="left desc"><span + data-message-id="emp.guide.orgsearch.request.description03">companyCode 쿼리와 함께 사용</span> + </td> + </tr> + <tr> + <td title="5">5</td> + <td><span data-message-id="emp.guide.orgsearch.request05">부서명</span></td> + <td>departmentName</td> + <td>Query</td> + <td>String</td> + <td title="123123">123123</td> + <td class="left desc"><span + data-message-id="emp.guide.orgsearch.request.description03">companyCode 쿼리와 함께 사용</span> + </td> + </tr> + <tr> + <td title="6">6</td> + <td><span data-message-id="emp.guide.orgsearch.request06">페이지 번호</span></td> + <td>page</td> + <td>N</td> + <td>Query</td> + <td>String</td> + <td title="1">1</td> + <td class="left desc"><span data-message-id="emp.guide.orgsearch.request.description05"><span + class="ellipsis">companyCode로만 조회하는 경우에만</span><br><span class="ellipsis">paging + 적용가능</span><br><span class="ellipsis">page 입력 시 500건씩 조회</span><br><span + class="ellipsis">page 입력하지 않을 경우 최대 2,000건 조회</span></span><br><span + data-message-id="emp.guide.orgsearch.request.description04"><span + class="ellipsis">(companyCode로만</span><br><span class="ellipsis">검색 시 + 필수)</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Response Parameter</p> + </div><span data-message-id="emp.guide.orgsearch.response.description01">- 조회대상 회사의 조직정보만 리턴<br>- 조회대상 회사에 신청 회사 외 + 타사 등록 시 일부 속성(아래 * 표시한 11개 항목)만 조회 가능</span> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="4%;"> + <col width="16%;"> + <col width="15%;"> + <col width="10%;"> + <col width="15%;"> + <col width="25%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th>Properties</th> + <th>Attribute</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="4%;"> + <col width="16%;"> + <col width="15%;"> + <col width="10%;"> + <col width="15%;"> + <col width="25%;"> + </colgroup> + <tbody> + <tr> + <td title="1">1</td> + <td class="left"><span data-message-id="emp.guide.orgsearch.response01">API 호출 성공 여부</span></td> + <td class="left">result</td> + <td>String</td> + <td class="left">success<br>fail</td> + <td></td> + </tr> + <tr> + <td title="2">2</td> + <td class="left"><span data-message-id="emp.guide.orgsearch.response02">현재 페이지</span></td> + <td class="left">currentPage</td> + <td>int</td> + <td class="left" title="1">1</td> + <td></td> + </tr> + <tr> + <td title="3">3</td> + <td class="left"><span data-message-id="emp.guide.orgsearch.response03">총 결과 페이지 수</span></td> + <td class="left">totalPage</td> + <td>int</td> + <td class="left" title="3">3</td> + <td></td> + </tr> + <tr> + <td title="4">4</td> + <td class="left"><span data-message-id="emp.guide.orgsearch.response04">검색된 조직정보의 수</span></td> + <td class="left">totalCount</td> + <td>int</td> + <td class="left" title="30">30</td> + <td></td> + </tr> + <tr> + <td title="5">5</td> + <td class="left"><span data-message-id="emp.guide.orgsearch.response05">조직 정보 리스트</span></td> + <td class="left" title="organizations">organizations</td> + <td>JSON String</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="6">6</td> + <td class="left"> <span + data-message-id="emp.guide.orgsearch.response06">회사코드</span> *</td> + <td class="left"> companyCode</td> + <td>string</td> + <td class="left">C60</td> + <td></td> + </tr> + <tr> + <td title="7">7</td> + <td class="left"> <span + data-message-id="emp.guide.orgsearch.response07">회사명</span> *</td> + <td class="left"> companyName</td> + <td>string</td> + <td class="left"><span data-message-id="emp.guide.orgsearch.response.sample01">삼성SDS</span></td> + <td></td> + </tr> + <tr> + <td title="8">8</td> + <td class="left"> <span + data-message-id="emp.guide.orgsearch.response08">부서코드</span> *</td> + <td class="left"> departmentCode</td> + <td>string</td> + <td class="left">C60AH959</td> + <td></td> + </tr> + <tr> + <td title="9">9</td> + <td class="left"> <span + data-message-id="emp.guide.orgsearch.response09">부서레벨</span></td> + <td class="left"> departmentLevel</td> + <td>string</td> + <td class="left" title="3">3</td> + <td></td> + </tr> + <tr> + <td title="10">10</td> + <td class="left"> <span + data-message-id="emp.guide.orgsearch.response10">부서명</span> *</td> + <td class="left"> departmentName</td> + <td>string</td> + <td class="left"><span + data-message-id="emp.guide.orgsearch.response.sample02">Knox개발그룹(솔루션개발)</span></td> + <td></td> + </tr> + <tr> + <td title="11">11</td> + <td class="left"> <span data-message-id="emp.guide.orgsearch.response11">부서간 + 순위</span></td> + <td class="left"> departmentOrder</td> + <td>string</td> + <td class="left" title="2">2</td> + <td></td> + </tr> + <tr> + <td title="12">12</td> + <td class="left"> <span data-message-id="emp.guide.orgsearch.response12">영문 + 회사명</span> *</td> + <td class="left"> enCompanyName</td> + <td>string</td> + <td class="left">SAMSUNG SDS</td> + <td></td> + </tr> + <tr> + <td title="13">13</td> + <td class="left"> <span data-message-id="emp.guide.orgsearch.response13">영문 + 부서명</span> *</td> + <td class="left"> enDepartmentName</td> + <td>string</td> + <td class="left" title="Knox Development Group">Knox Development Group</td> + <td></td> + </tr> + <tr> + <td title="14">14</td> + <td class="left"> <span data-message-id="emp.guide.orgsearch.response14">영문 부서장 + 직급</span></td> + <td class="left"> enManagerTitle</td> + <td>string</td> + <td class="left" title="Principal Engineer/Group Leader">Principal Engineer/Group Leader</td> + <td></td> + </tr> + <tr> + <td title="15">15</td> + <td class="left"> <span data-message-id="emp.guide.orgsearch.response15">영문 + 총괄명</span> *</td> + <td class="left"> enSubOrgCode</td> + <td>string</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="16">16</td> + <td class="left"> <span data-message-id="emp.guide.orgsearch.response16">내부부서 + 코드</span> *</td> + <td class="left"> inDepartmentCode</td> + <td>string</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="17">17</td> + <td class="left"> <span data-message-id="emp.guide.orgsearch.response17">하위 + 부서존재 유무</span></td> + <td class="left"> lowDepartmentYn</td> + <td>string</td> + <td class="left">T</td> + <td class="left desc"><span data-message-id="emp.guide.orgsearch.response.description02"><span + class="ellipsis">T: 존재함</span><br><span class="ellipsis">F: 존재하지 않음</span></span> + </td> + </tr> + <tr> + <td title="18">18</td> + <td class="left"> <span data-message-id="emp.guide.orgsearch.response18">부서장 + 아이디</span></td> + <td class="left"> managerId</td> + <td>string</td> + <td class="left">kch.jung</td> + <td></td> + </tr> + <tr> + <td title="19">19</td> + <td class="left"> <span data-message-id="emp.guide.orgsearch.response19">부서장 + 성명</span></td> + <td class="left"> managerName</td> + <td>string</td> + <td class="left"><span data-message-id="emp.guide.orgsearch.response.sample03">정기철</span></td> + <td></td> + </tr> + <tr> + <td title="20">20</td> + <td class="left"> <span data-message-id="emp.guide.orgsearch.response20">부서장 + 직급</span></td> + <td class="left"> managerTitle</td> + <td>string</td> + <td class="left"><span data-message-id="emp.guide.orgsearch.response.sample04">Principal + Engineer/그룹장(Sr. SCP)</span></td> + <td></td> + </tr> + <tr> + <td title="21">21</td> + <td class="left"> <span + data-message-id="emp.guide.orgsearch.response21">표현언어</span> *</td> + <td class="left"> preferredLanguage</td> + <td>string</td> + <td class="left">ko</td> + <td></td> + </tr> + <tr> + <td title="22">22</td> + <td class="left"> <span + data-message-id="emp.guide.orgsearch.response22">총괄코드</span> *</td> + <td class="left"> subOrgCode</td> + <td>string</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="23">23</td> + <td class="left"> <span + data-message-id="emp.guide.orgsearch.response23">총괄명</span> *</td> + <td class="left"> subOrgName</td> + <td>string</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="24">24</td> + <td class="left"> <span data-message-id="emp.guide.orgsearch.response24">상위 + 부서코드</span></td> + <td class="left"> uprDepartmentCode</td> + <td>string</td> + <td class="left">C60AJ336</td> + <td></td> + </tr> + <tr> + <td title="25">25</td> + <td class="left"> <span data-message-id="emp.guide.orgsearch.response25">영문 상위 + 부서명</span></td> + <td class="left"> enUprDepartmentName</td> + <td>string</td> + <td class="left">Solution Development Team</td> + <td></td> + </tr> + <tr> + <td title="26">26</td> + <td class="left"> <span data-message-id="emp.guide.orgsearch.response26">상위 + 부서명</span></td> + <td class="left"> uprDepartmentName</td> + <td>string</td> + <td class="left"><span data-message-id="emp.guide.orgsearch.response.sample05">솔루션개발팀</span> + </td> + <td></td> + </tr> + <tr> + <td title="27">27</td> + <td class="left"> <span data-message-id="emp.guide.orgsearch.response27">부서 숨김 + 여부</span></td> + <td class="left"> hiddenDepartmentYn</td> + <td>string</td> + <td class="left">F</td> + <td class="left desc"><span data-message-id="emp.guide.orgsearch.response.description03"><span + class="ellipsis">T: 비노출</span><br><span class="ellipsis">F: 노출</span></span></td> + </tr> + <tr> + <td title="28">28</td> + <td class="left"> <span + data-message-id="emp.guide.orgsearch.response28">법인코드</span></td> + <td class="left"> corpCode</td> + <td>string</td> + <td class="left"><span data-message-id="emp.guide.orgsearch.response.sample08">A001</span></td> + <td></td> + </tr> + <tr> + <td title="29">29</td> + <td class="left"> <span + data-message-id="emp.guide.orgsearch.response29">법인명</span></td> + <td class="left"> corpName</td> + <td>string</td> + <td class="left"><span data-message-id="emp.guide.orgsearch.response.sample09">영국법인</span></td> + <td></td> + </tr> + <tr> + <td title="30">30</td> + <td class="left"> <span + data-message-id="emp.guide.orgsearch.response30">영문법인명</span></td> + <td class="left"> enCorpName</td> + <td>string</td> + <td class="left"><span data-message-id="emp.guide.orgsearch.response.sample10">UK CORP</span> + </td> + <td></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Sample</p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td> + <pre><span data-message-id="emp.guide.orgsearch.response.sample06">/organizations?companyCode=C60&departmentCode=C60AH959</span> + </pre> + </td> + <td> + <pre><span data-message-id="emp.guide.orgsearch.response.sample07"><span class="ellipsis">{</span><br><span class="ellipsis"> "currentPage":"1",</span><br><span class="ellipsis"> "totalPage":"1",</span><br><span class="ellipsis"> "totalCount":"1",</span><br><span class="ellipsis"> "organizations":[{"companyCode":"C60",</span><br><span class="ellipsis"> "departmentname":"knox개발그룹",</span><br><span class="ellipsis"> "enDepartmentName":"Knox Development Group ",</span><br><span class="ellipsis"> ...}]</span><br><span class="ellipsis">}</span></span> + </pre> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Error Code</p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="emp.guide.empsearch.error00">HTTP응답코드</span></th> + <th><span data-message-id="emp.guide.orgsearch.error01">에러코드</span></th> + <th><span data-message-id="emp.guide.orgsearch.error02">에러메시지</span></th> + <th><span data-message-id="emp.guide.orgsearch.error03">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td>400</td> + <td>ORG0003</td> + <td class="left desc">Please insert the search keyword.</td> + <td class="left desc"><span data-message-id="emp.guide.orgsearch.error04">Parameter 확인</span> + </td> + </tr> + <tr> + <td>400</td> + <td>ORG0004</td> + <td class="left desc">Search keyword must be larger than 4 bytes.</td> + <td class="left desc"><span data-message-id="emp.guide.orgsearch.error05">Parameter 길이 4자 이상으로 + 작성</span></td> + </tr> + <tr> + <td>400</td> + <td>ORG0005</td> + <td class="left desc">Search keyword should be no longer than 100 characters.</td> + <td class="left desc"><span data-message-id="emp.guide.orgsearch.error06">Parameter 길이 100자 이내로 + 작성</span></td> + </tr> + <tr> + <td>400</td> + <td>ORG0006</td> + <td class="left desc">Search keyword can not include the caracter.</td> + <td class="left desc"><span data-message-id="emp.guide.orgsearch.error07">Parameter에 *, % 이 포함되어 + 있는지 확인</span></td> + </tr> + <tr> + <td>500</td> + <td>ORG0010</td> + <td class="left desc">ORGWebservice. {} Abnormal.</td> + <td class="left desc"><span data-message-id="emp.guide.orgsearch.error08">Parameter 누락 또는 잘못된 + 형식인지 확인</span></td> + </tr> + <tr> + <td>400</td> + <td>ORG0011</td> + <td class="left desc">Please enter {} as required.</td> + <td class="left desc"><span data-message-id="emp.guide.orgsearch.error09">{} 필수값 누락</span></td> + </tr> + <tr> + <td>400</td> + <td>ORG0012</td> + <td class="left desc">Please enter {} according to the specified format.</td> + <td class="left desc"><span data-message-id="emp.guide.orgsearch.error10">잘못된 형식으로 인한 오류</span> + </td> + </tr> + <tr> + <td>400</td> + <td>ORG0013</td> + <td class="left desc">Only one of {} can be selected.</td> + <td class="left desc"><span data-message-id="emp.guide.orgsearch.error11">{} 중 한 개만 선택하여 검색 + 가능</span></td> + </tr> + <tr> + <td>400</td> + <td>ORG0014</td> + <td class="left desc">For the requested search conditions, paging is not possible.</td> + <td class="left desc"><span data-message-id="emp.guide.orgsearch.error12">페이징 지원 불가</span></td> + </tr> + </tbody> + </table> + </div> + </div><br><br><br> + <div class="dan-border"></div> + <div class="module-font type01" id="title"><span data-message-id="emp.guide.titlesearch">직급정보 조회</span></div> + <div class="module-font type02"> + <p>Request Parameter</p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="4%;"> + <col width="13%;"> + <col width="16%;"> + <col width="12%;"> + <col width="10%;"> + <col width="10%;"> + <col width="15%;"> + <col width="20%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th>Properties</th> + <th>Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="4%;"> + <col width="13%;"> + <col width="16%;"> + <col width="12%;"> + <col width="10%;"> + <col width="10%;"> + <col width="15%;"> + <col width="20%;"> + </colgroup> + <tbody> + <tr> + <td title="1">1</td> + <td class="left"><span data-message-id="emp.guide.titlesearch.request01">연계 아이디</span></td> + <td class="left">System-ID</td> + <td>Y</td> + <td>Header</td> + <td>String</td> + <td class="left">C60REST0001</td> + <td></td> + </tr> + <tr> + <td title="2">2</td> + <td class="left"><span data-message-id="emp.guide.titlesearch.request02">회사코드</span></td> + <td class="left">companyCode</td> + <td>Y</td> + <td>Query</td> + <td>String</td> + <td class="left">C60</td> + <td></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Response Parameter</p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="4%;"> + <col width="18%;"> + <col width="10%;"> + <col width="10%;"> + <col width="18%;"> + <col width="25%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th>Properties</th> + <th>Attribute</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="4%;"> + <col width="18%;"> + <col width="10%;"> + <col width="10%;"> + <col width="18%;"> + <col width="25%;"> + </colgroup> + <tbody> + <tr> + <td title="1">1</td> + <td class="left"><span data-message-id="emp.guide.titlesearch.response01">API 호출 성공 여부</span> + </td> + <td class="left">result</td> + <td>String</td> + <td class="left">success<br>fail</td> + <td></td> + </tr> + <tr> + <td title="2">2</td> + <td class="left"><span data-message-id="emp.guide.titlesearch.response02">직급정보 배열</span></td> + <td class="left">titles</td> + <td>JSON String</td> + <td class="left"></td> + <td></td> + </tr> + <tr> + <td title="3">3</td> + <td class="left"> <span + data-message-id="emp.guide.titlesearch.response03">회사코드</span></td> + <td class="left"> companyCode</td> + <td>String</td> + <td class="left">C60</td> + <td></td> + </tr> + <tr> + <td title="4">4</td> + <td class="left"> <span + data-message-id="emp.guide.titlesearch.response04">직급코드</span></td> + <td class="left"> titleCode</td> + <td>String</td> + <td class="left">B3K</td> + <td></td> + </tr> + <tr> + <td title="5">5</td> + <td class="left"> <span + data-message-id="emp.guide.titlesearch.response05">직급명</span></td> + <td class="left"> titleName</td> + <td>String</td> + <td class="left"><span data-message-id="emp.guide.titlesearch.response.sample01">책임</span></td> + <td></td> + </tr> + <tr> + <td title="6">6</td> + <td class="left"> <span + data-message-id="emp.guide.titlesearch.response06">영문직급명</span></td> + <td class="left"> enTitleName</td> + <td>String</td> + <td class="left">Senior Engineer</td> + <td></td> + </tr> + <tr> + <td title="7">7</td> + <td class="left"> <span data-message-id="emp.guide.titlesearch.response07">직급정렬 + 순서</span></td> + <td class="left"> sortOrder</td> + <td>String</td> + <td class="left" title="1">1</td> + <td></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Sample</p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="40%;"> + <col width="60%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="40%;"> + <col width="60%;"> + </colgroup> + <tbody> + <tr> + <td> + <pre><span data-message-id="emp.guide.titlesearch.response.sample02">/titles?companyCode=C60</span> + </pre> + </td> + <td> + <pre><span data-message-id="emp.guide.titlesearch.response.sample03"><span class="ellipsis">{</span><br><span class="ellipsis"> "result":"success",</span><br><span class="ellipsis"> "titles":[{"companyCode":"C60",</span><br><span class="ellipsis"> "titleCode":"J8",</span><br><span class="ellipsis"> "titleName":"사장",</span><br><span class="ellipsis"> "enTitleName":"CEO",</span><br><span class="ellipsis"> "sortOrder":"1"},</span><br><span class="ellipsis"> {"companyCode":"C60",</span><br><span class="ellipsis"> "titleCode":"J7",</span><br><span class="ellipsis"> "titleName":"상무",</span><br><span class="ellipsis"> "enTitleName":"상무",</span><br><span class="ellipsis"> "sortOrder":"2"},</span><br><span class="ellipsis"> ...]</span><br><span class="ellipsis">}</span></span> + </pre> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Error Code</p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="emp.guide.empsearch.error00">HTTP응답코드</span></th> + <th><span data-message-id="emp.guide.orgsearch.error01">에러코드</span></th> + <th><span data-message-id="emp.guide.orgsearch.error02">에러메시지</span></th> + <th><span data-message-id="emp.guide.orgsearch.error03">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td>400</td> + <td>ORG0003</td> + <td class="left desc">Please insert the search keyword.</td> + <td class="left desc"><span data-message-id="emp.guide.orgsearch.error04">Parameter 확인</span> + </td> + </tr> + <tr> + <td>400</td> + <td>ORG0005</td> + <td class="left desc">Search keyword should be no longer than 100 characters.</td> + <td class="left desc"><span data-message-id="emp.guide.orgsearch.error06">Parameter 길이 100자 이내로 + 작성</span></td> + </tr> + <tr> + <td>400</td> + <td>ORG0006</td> + <td class="left desc">Search keyword can not include the caracter.</td> + <td class="left desc"><span data-message-id="emp.guide.orgsearch.error07">Parameter에 *, % 이 포함되어 + 있는지 확인</span></td> + </tr> + <tr> + <td>500</td> + <td>ORG0010</td> + <td class="left desc">ORGWebservice. {} Abnormal.</td> + <td class="left desc"><span data-message-id="emp.guide.orgsearch.error08">Parameter 누락 또는 잘못된 + 형식인지 확인</span></td> + </tr> + </tbody> + </table> + </div> + </div> +</div>
\ No newline at end of file diff --git a/lib/knox-api/employee/employee.ts b/lib/knox-api/employee/employee.ts new file mode 100644 index 00000000..885b5a3f --- /dev/null +++ b/lib/knox-api/employee/employee.ts @@ -0,0 +1,435 @@ +"use server" + +// Knox API 임직원 관련 서버 액션들 + +// 기본 설정 타입 +interface KnoxConfig { + baseUrl: string; + systemId: string; +} + +// 공통 응답 타입 +interface BaseResponse { + result: "success" | "fail"; +} + +// 임직원 조회 관련 타입 +interface EmployeeSearchParams { + companyCode?: string; + fullName?: string; + departmentCode?: string; + employeeNumber?: string; + name?: string; + epIds?: string; + userIds?: string; + emailAddresses?: string; + titleCode?: string; + page?: string; + resultType: "basic" | "optional"; + attributes?: string[]; +} + +interface Employee { + accountStatus?: string; + busiCode?: string; + busiName?: string; + companyCode: string; + companyName: string; + country?: string; + defaultCompanyCode?: string; + departmentCode: string; + departmentName: string; + description?: string; + emailAddress?: string; + employeeNumber?: string; + employeeStatus?: string; + employeeType?: string; + enBusiName?: string; + enCompanyName?: string; + enDepartmentName?: string; + enDiscription?: string; + enFullName?: string; + enGivenName?: string; + enGradeName?: string; + enOfficeAddress?: string; + enRegionName?: string; + enSendBusiName?: string; + enSendCompanyName?: string; + enSendDepartmentName?: string; + enSendGradeName?: string; + enSendRegionName?: string; + enSendSubOrgName?: string; + enSendTitleName?: string; + enSirName?: string; + enSubOrgName?: string; + enTitleName?: string; + epId: string; + executiveYn?: string; + externalEmailAddress?: string; + fullName: string; + givenName?: string; + gradeName?: string; + gradeTitleIndiCode?: string; + inDepartmentCode?: string; + inDepartmentName?: string; + jobName?: string; + jobCode?: string; + localStaffYn?: string; + mobile?: string; + nickName?: string; + officeAddress?: string; + officeDetailAddress?: string; + officeFaxNumber?: string; + officeZipCode?: string; + officeTelNumber?: string; + preferredLanguage?: string; + realNameYn?: string; + regionCode?: string; + regionName?: string; + securityLevel?: string; + sendBusiCde?: string; + sendCompanyCode?: string; + sendCompanyName?: string; + sendDepartmentCode?: string; + sendDepartmentName?: string; + sendGradeName?: string; + sendGradeTitleIndiCode?: string; + sendRegionCode?: string; + sendSecurityLevel?: string; + sendSubOrgCode?: string; + sendSubOrgName?: string; + sendTitleName?: string; + sendTitleCode?: string; + sendTitleSortOrder?: string; + serverLocation?: string; + sirName?: string; + subOrgCode?: string; + subOrgName?: string; + titleName?: string; + titleCode?: string; + titleSortOrder?: string; + openCode?: string; + userId?: string; + voipNumber?: string; + withdrawDate?: string; + epIdExpiryDate?: string; + timeZone?: string; +} + +interface EmployeeResponse extends BaseResponse { + currentPage: number; + totalPage: number; + totalCount: number; + employees: Employee[]; +} + +// 조직도 조회 관련 타입 +interface OrganizationSearchParams { + companyCode: string; + uprDepartmentCode?: string; + departmentCode?: string; + departmentName?: string; + page?: string; +} + +interface Organization { + companyCode: string; + companyName: string; + departmentCode: string; + departmentLevel?: string; + departmentName: string; + departmentOrder?: string; + enCompanyName?: string; + enDepartmentName?: string; + enManagerTitle?: string; + enSubOrgCode?: string; + inDepartmentCode?: string; + lowDepartmentYn?: string; + managerId?: string; + managerName?: string; + managerTitle?: string; + preferredLanguage?: string; + subOrgCode?: string; + subOrgName?: string; + uprDepartmentCode?: string; + enUprDepartmentName?: string; + uprDepartmentName?: string; + hiddenDepartmentYn?: string; + corpCode?: string; + corpName?: string; + enCorpName?: string; +} + +interface OrganizationResponse extends BaseResponse { + currentPage: number; + totalPage: number; + totalCount: number; + organizations: Organization[]; +} + +// 직급정보 조회 관련 타입 +interface TitleSearchParams { + companyCode: string; +} + +interface Title { + companyCode: string; + titleCode: string; + titleName: string; + enTitleName: string; + sortOrder: string; +} + +interface TitleResponse extends BaseResponse { + titles: Title[]; +} + +// 설정 가져오기 (환경변수 또는 설정에서) +const getKnoxConfig = (): KnoxConfig => { + return { + baseUrl: process.env.KNOX_API_BASE_URL || "https://api.knox.samsung.com", + systemId: process.env.KNOX_SYSTEM_ID || "C60REST0001" + }; +}; + +// 공통 헤더 생성 +const createHeaders = (systemId: string): Record<string, string> => { + return { + "Content-Type": "application/json", + "System-ID": systemId + }; +}; + +/** + * 임직원 조회 API + * POST /employee/api/v2.0/employees + */ +export async function searchEmployees(params: EmployeeSearchParams): Promise<EmployeeResponse> { + const config = getKnoxConfig(); + + try { + // URL 파라미터 구성 + const searchParams = new URLSearchParams(); + + if (params.companyCode) searchParams.append("companyCode", params.companyCode); + if (params.fullName) searchParams.append("fullName", params.fullName); + if (params.departmentCode) searchParams.append("departmentCode", params.departmentCode); + if (params.employeeNumber) searchParams.append("employeeNumber", params.employeeNumber); + if (params.name) searchParams.append("name", params.name); + if (params.epIds) searchParams.append("epIds", params.epIds); + if (params.userIds) searchParams.append("userIds", params.userIds); + if (params.emailAddresses) searchParams.append("emailAddresses", params.emailAddresses); + if (params.titleCode) searchParams.append("titleCode", params.titleCode); + if (params.page) searchParams.append("page", params.page); + + // Body 데이터 구성 + const body = { + resultType: params.resultType, + ...(params.attributes && { attributes: params.attributes }) + }; + + const response = await fetch( + `${config.baseUrl}/employee/api/v2.0/employees?${searchParams.toString()}`, + { + method: "POST", + headers: createHeaders(config.systemId), + body: JSON.stringify(body) + } + ); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const data = await response.json(); + return data as EmployeeResponse; + } catch (error) { + console.error("임직원 조회 오류:", error); + throw error; + } +} + +/** + * 조직도 조회 API + * GET /employee/api/v2.0/organizations + */ +export async function searchOrganizations(params: OrganizationSearchParams): Promise<OrganizationResponse> { + const config = getKnoxConfig(); + + try { + // URL 파라미터 구성 + const searchParams = new URLSearchParams(); + searchParams.append("companyCode", params.companyCode); + + if (params.uprDepartmentCode) searchParams.append("uprDepartmentCode", params.uprDepartmentCode); + if (params.departmentCode) searchParams.append("departmentCode", params.departmentCode); + if (params.departmentName) searchParams.append("departmentName", params.departmentName); + if (params.page) searchParams.append("page", params.page); + + const response = await fetch( + `${config.baseUrl}/employee/api/v2.0/organizations?${searchParams.toString()}`, + { + method: "GET", + headers: createHeaders(config.systemId) + } + ); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const data = await response.json(); + return data as OrganizationResponse; + } catch (error) { + console.error("조직도 조회 오류:", error); + throw error; + } +} + +/** + * 직급정보 조회 API + * GET /employee/api/v2.0/titles + */ +export async function searchTitles(params: TitleSearchParams): Promise<TitleResponse> { + const config = getKnoxConfig(); + + try { + // URL 파라미터 구성 + const searchParams = new URLSearchParams(); + searchParams.append("companyCode", params.companyCode); + + const response = await fetch( + `${config.baseUrl}/employee/api/v2.0/titles?${searchParams.toString()}`, + { + method: "GET", + headers: createHeaders(config.systemId) + } + ); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const data = await response.json(); + return data as TitleResponse; + } catch (error) { + console.error("직급정보 조회 오류:", error); + throw error; + } +} + +/** + * 편의 함수들 + */ + +/** + * 사번으로 임직원 조회 + */ +export async function getEmployeeByNumber(employeeNumber: string, companyCode?: string): Promise<Employee | null> { + try { + const response = await searchEmployees({ + employeeNumber, + companyCode, + resultType: "basic" + }); + + if (response.result === "success" && response.employees.length > 0) { + return response.employees[0]; + } + return null; + } catch (error) { + console.error("사번으로 임직원 조회 오류:", error); + return null; + } +} + +/** + * 이메일로 임직원 조회 + */ +export async function getEmployeeByEmail(emailAddress: string, companyCode?: string): Promise<Employee | null> { + try { + const response = await searchEmployees({ + emailAddresses: emailAddress, + companyCode, + resultType: "basic" + }); + + if (response.result === "success" && response.employees.length > 0) { + return response.employees[0]; + } + return null; + } catch (error) { + console.error("이메일로 임직원 조회 오류:", error); + return null; + } +} + +/** + * 부서 코드로 임직원 목록 조회 + */ +export async function getEmployeesByDepartment(departmentCode: string, page?: string): Promise<Employee[]> { + try { + const response = await searchEmployees({ + departmentCode, + page, + resultType: "basic" + }); + + if (response.result === "success") { + return response.employees; + } + return []; + } catch (error) { + console.error("부서별 임직원 조회 오류:", error); + return []; + } +} + +/** + * 회사의 모든 부서 조회 + */ +export async function getDepartmentsByCompany(companyCode: string): Promise<Organization[]> { + try { + const response = await searchOrganizations({ + companyCode + }); + + if (response.result === "success") { + return response.organizations; + } + return []; + } catch (error) { + console.error("회사별 부서 조회 오류:", error); + return []; + } +} + +/** + * 회사의 모든 직급 조회 + */ +export async function getTitlesByCompany(companyCode: string): Promise<Title[]> { + try { + const response = await searchTitles({ companyCode }); + + if (response.result === "success") { + return response.titles; + } + return []; + } catch (error) { + console.error("회사별 직급 조회 오류:", error); + return []; + } +} + +// 타입 export +export type { + EmployeeSearchParams, + Employee, + EmployeeResponse, + OrganizationSearchParams, + Organization, + OrganizationResponse, + TitleSearchParams, + Title, + TitleResponse +}; diff --git a/lib/knox-api/index.ts b/lib/knox-api/index.ts new file mode 100644 index 00000000..e1ef3d51 --- /dev/null +++ b/lib/knox-api/index.ts @@ -0,0 +1,6 @@ +export * from './approval/approval'; +export * from './employee/employee'; +export * from './mail/knox-mail'; +export * from './messenger/messenger'; +export * from './realtime-notification/realtime-notification'; + diff --git a/lib/knox-api/mail/knox-mail.ts b/lib/knox-api/mail/knox-mail.ts new file mode 100644 index 00000000..48ba6c16 --- /dev/null +++ b/lib/knox-api/mail/knox-mail.ts @@ -0,0 +1,312 @@ +'use server'; + +// Knox Mail API TypeScript Library for Next.js Server Actions +// Based on Knox Mail API Guide v2.0 + +export interface KnoxMailConfig { + baseUrl: string; + systemId: string; + userId: string; +} + +// 공통 타입 정의 +export interface KnoxMailResponse<T = unknown> { + result: 'success' | 'error'; + mailId?: string; + data?: T; + error?: { + code: string; + message: string; + }; +} + +// 발신인 정보 +export interface Sender { + emailAddress: string; +} + +// 수신인 정보 +export interface Recipient { + emailAddress: string; + recipientType: 'TO' | 'CC' | 'BCC'; +} + +// 일반 메일 발신 요청 +export interface SendMailRequest { + subject: string; + contents: string; + contentType: 'TEXT' | 'HTML' | 'MIME'; + docSecuType: 'PERSONAL' | 'OFFICIAL'; + sender: Sender; + recipients: Recipient[]; + attachments?: File[]; + reservedTime?: string; // yyyy-MM-dd HH:mm 형식 +} + +// 대외비 메일 DRM 옵션 +export interface DrmOption { + validDays: string; + useCount: string; + canView: string; + canPrint: string; + notifyExternalUser: string; + notifyInternalUser: string; +} + +// 대외비 메일 발신 요청 +export interface SendSecuMailRequest extends Omit<SendMailRequest, 'docSecuType'> { + docSecuType: 'CONFIDENTIAL' | 'CONFIDENTIAL_STRICT'; + drmOption: DrmOption; +} + +// 메일 발신 취소 요청 +export interface CancelMailRequest { + recipients: string[]; +} + +// 메일 별 수신상태 조회 요청 +export interface DeliveryStatusCountRequest { + mailIds: string[]; +} + +// 수신상태 카운트 응답 +export interface DeliveryStatusCount { + mailId: string; + totalStatusCount: number; + sendingCount: number; + openCount: number; + unopenCount: number; + etcCount: number; + sendCancelCount: number; + sendCancelReqCount: number; + sendBlockCount: number; + sendFailCount: number; + drmProcessCount: number; + drmFailCount: number; + reserveCount: number; + reserveCancelCount: number; + unknownCount: number; +} + +// 수신인 별 수신상태 응답 +export interface RecipientDeliveryStatus { + name: string; + position: string; + enName: string; + enPosition: string; + company: string; + department: string; + enDepartment: string; + email: string; + userID: string; + recipientType: 'TO' | 'CC' | 'BCC'; + updateTime: { + month: number; + year: number; + dayOfMonth: number; + hourOfDay: number; + minute: number; + second: number; + }; + status: string; + needOpenNotify: boolean; + isDLAddr: boolean; +} + +// 내부 유틸리티 함수들 +function getHeaders(systemId: string): Record<string, string> { + return { + 'System-ID': systemId, + 'Content-Type': 'application/json', + }; +} + +async function makeRequest<T>( + config: KnoxMailConfig, + endpoint: string, + method: 'GET' | 'POST', + data?: unknown, + isMultipart = false +): Promise<KnoxMailResponse<T>> { + const url = `${config.baseUrl}${endpoint}?userId=${config.userId}`; + + const headers = getHeaders(config.systemId); + if (isMultipart) { + delete headers['Content-Type']; // multipart/form-data는 브라우저가 자동으로 설정 + } + + try { + const response = await fetch(url, { + method, + headers, + body: data ? (isMultipart ? data as FormData : JSON.stringify(data)) : undefined, + }); + + if (!response.ok) { + const errorData = await response.json().catch(() => ({})); + return { + result: 'error', + error: { + code: response.status.toString(), + message: errorData.message || response.statusText, + }, + }; + } + + const result = await response.json(); + return { + result: 'success', + ...result, + }; + } catch (error) { + return { + result: 'error', + error: { + code: 'NETWORK_ERROR', + message: error instanceof Error ? error.message : 'Unknown error', + }, + }; + } +} + +function createFormData(mailData: Record<string, unknown>, attachments?: File[]): FormData { + const formData = new FormData(); + + // 메일 데이터를 JSON으로 추가 + formData.append('mail', JSON.stringify(mailData)); + + // 첨부파일이 있으면 추가 + if (attachments && attachments.length > 0) { + attachments.forEach(file => { + formData.append('attachments', file); + }); + } + + return formData; +} + +// Next.js 서버 액션 함수들 + +/** + * 일반 메일 발신 서버 액션 + * @param config Knox Mail API 설정 + * @param request 메일 발신 요청 데이터 + * @returns 발신 결과 (mailId 포함) + */ +export async function sendMail( + config: KnoxMailConfig, + request: SendMailRequest +): Promise<KnoxMailResponse<{ mailId: string }>> { + const { attachments, ...mailData } = request; + + if (attachments && attachments.length > 0) { + const formData = createFormData(mailData, attachments); + return makeRequest<{ mailId: string }>(config, '/mail/api/v2.0/mails/send', 'POST', formData, true); + } else { + return makeRequest<{ mailId: string }>(config, '/mail/api/v2.0/mails/send', 'POST', mailData); + } +} + +/** + * 대외비 메일 발신 서버 액션 + * @param config Knox Mail API 설정 + * @param request 대외비 메일 발신 요청 데이터 + * @returns 발신 결과 (mailId 포함) + */ +export async function sendSecuMail( + config: KnoxMailConfig, + request: SendSecuMailRequest +): Promise<KnoxMailResponse<{ mailId: string }>> { + const { attachments, ...mailData } = request; + + if (attachments && attachments.length > 0) { + const formData = createFormData(mailData, attachments); + return makeRequest<{ mailId: string }>(config, '/mail/api/v2.0/mails/secu-send', 'POST', formData, true); + } else { + return makeRequest<{ mailId: string }>(config, '/mail/api/v2.0/mails/secu-send', 'POST', mailData); + } +} + +/** + * 메일 발신 취소 서버 액션 + * @param config Knox Mail API 설정 + * @param mailId 취소할 메일 ID + * @param request 취소 요청 데이터 (수신인 목록) + * @returns 취소 결과 + */ +export async function cancelMail( + config: KnoxMailConfig, + mailId: string, + request: CancelMailRequest +): Promise<KnoxMailResponse> { + return makeRequest(config, `/mail/api/v2.0/mails/${mailId}/cancel`, 'POST', request); +} + +/** + * 메일 별 수신상태 조회 서버 액션 + * @param config Knox Mail API 설정 + * @param request 조회할 메일 ID 목록 + * @returns 메일별 수신상태 카운트 목록 + */ +export async function getDeliveryStatusCount( + config: KnoxMailConfig, + request: DeliveryStatusCountRequest +): Promise<KnoxMailResponse<DeliveryStatusCount[]>> { + return makeRequest<DeliveryStatusCount[]>(config, '/mail/api/v2.0/mails/deliverystatus/count', 'POST', request); +} + +/** + * 수신인 별 수신상태 조회 서버 액션 + * @param config Knox Mail API 설정 + * @param mailId 조회할 메일 ID + * @returns 수신인별 수신상태 목록 + */ +export async function getRecipientDeliveryStatus( + config: KnoxMailConfig, + mailId: string +): Promise<KnoxMailResponse<RecipientDeliveryStatus[]>> { + return makeRequest<RecipientDeliveryStatus[]>(config, `/mail/api/v2.0/mails/${mailId}/deliverystatus`, 'GET'); +} + +// 편의 함수들 +export async function createKnoxMailConfig( + baseUrl: string, + systemId: string, + userId: string +): Promise<KnoxMailConfig> { + return { + baseUrl, + systemId, + userId, + }; +} + +// 에러 코드 상수 +export const KNOX_MAIL_ERROR_CODES = { + ML1001: '필수값 중 입력되지 않은 값이 있습니다.', + ML1002: '사용자 정보가 존재하지 않습니다.', + ML1003: '요청하신 데이터가 존재하지 않습니다.', + ML1101: '본문 (content) 값이 입력되지 않았습니다.', + ML1102: '첨부 파일 처리 중 에러가 발생했습니다.', + ML1104: '일반 메일 발신 중 docSecuType 값이 유효하지 않습니다.', + ML1107: '대외비/극비 보안 옵션 값이 유효하지 않습니다.', + ML1108: '대외비/극비 메일 contentType 값이 유효하지 않습니다.', + ML1109: '대외비/극비 메일 docSecuType 값이 유효하지 않습니다.', + ML1110: '극비 메일일 경우에는 내부 수신인에게만 메일 발신이 가능합니다.', + ML1111: '대외비/극비 메일에서 허용되지 않는 첨부 파일의 확장자가 있습니다.', + ML1112: '메일 제목 크기가 300 bytes를 초과하였습니다.', + ML1114: '메일 발신 API에서 허용되는 content 크기를 초과하였습니다.', + ML1115: '일반 메일 contentType 값이 유효하지 않습니다.', + ML1117: '메일 발신 API에서 발신가능한 최대 수신인을 초과하였습니다.', + ML1118: '수신자의 수신 타입이 잘못 설정되었습니다.', + CO400: '잘못된 요청입니다.', +} as const; + +// 타입 가드 함수들 +export function isKnoxMailError(response: KnoxMailResponse): response is KnoxMailResponse & { error: { code: string; message: string } } { + return response.result === 'error' && !!response.error; +} + +export function isKnoxMailSuccess<T>(response: KnoxMailResponse<T>): response is KnoxMailResponse<T> & { result: 'success' } { + return response.result === 'success'; +} diff --git a/lib/knox-api/mail/mail-guide.html b/lib/knox-api/mail/mail-guide.html new file mode 100644 index 00000000..5e38d3a7 --- /dev/null +++ b/lib/knox-api/mail/mail-guide.html @@ -0,0 +1,2114 @@ +<div class="body-content"> + <div class="sub-header margin"> + <h2 data-message-id="mail.intro.subject">메일</h2> + </div> + <div class="module-subsum"> + <p><span data-message-id="mail.header.description1">메일 연계 API 이용을 위한 상세 개발 가이드입니다.</span><br><span + data-message-id="mail.header.description2">메일 API는 메일 발신, 발신 취소, 상태 조회 세 가지 유형으로 나누어져 있습니다.</span></p> + </div> + <div class="module-font type03" data-message-id="mail.policy.subject">[정책 및 제약사항]</div> + <div class="module-font type04"> + <dl> + <dt><span data-message-id="mail.policy.description1">1. 발신인 정보는 녹스포탈 임직원만 지정 가능하며, 발신자의 거점으로 연계 호출해야 + 합니다.</span></dt> + <dt><span data-message-id="mail.policy.description2">2. 본문 사이즈는 최대 1MB 를 넘을 수 없습니다.</span></dt> + <dt><span data-message-id="mail.policy.description3">3. 한번에 10개의 첨부파일을 포함하여 발송할 수 있으며, 전체 첨부 사이즈는 10MB 를 넘을 + 수 없습니다.</span></dt> + <dt><span data-message-id="mail.policy.description4">4. 수신인은 최대 200명까지 지정이 가능합니다.</span></dt> + </dl> + </div> + <div class="module-font type03"><span data-message-id="subject.api.list">[API 목록]</span> <a + target="blank" class="swagger-link" id="swaggerLinkStg" + href="http://developers.samsung.net/knoxcenter/wso2/swagger-ui/b7bdb049-3f3c-4c03-a638-05c3c56e4ba4"><span + data-message-id="subject.go.to.swagger">테스트 페이지로 이동(Swagger)</span></a><span id="swaggerLinkStg_chrome" + data-message-id="subject.go.to.swagger.chrome"><sub>*Chrome Browser만 이용 가능합니다.</sub></span></div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="200px"> + <col width="350px"> + <col width="100px"> + <col> + </colgroup> + <thead> + <tr> + <th>API</th> + <th>URI</th> + <th>Method</th> + <th>Description</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="200px"> + <col width="350px"> + <col width="100px"> + <col> + </colgroup> + <tbody> + <tr> + <td class="left"><a href="#mailapi01"><span data-message-id="mail.service.send.subject">일반 메일 + 발신</span></a></td> + <td class="left"><span + data-message-id="mail.service.send.uri">/mail/api/v2.0/mails/send?userId=Knox아이디</span> + </td> + <td><span data-message-id="mail.service.method.post">POST</span></td> + <td class="left desc"><span data-message-id="mail.service.send.description">Knox 메일을 + 발신한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#mailapi02"><span data-message-id="mail.service.secu.send.subject">대외비 + 메일 발신</span></a></td> + <td class="left"><span + data-message-id="mail.service.secu.send.uri">/mail/api/v2.0/mails/secu-send?userId=Knox아이디</span> + </td> + <td><span data-message-id="mail.service.method.post">POST</span></td> + <td class="left desc"><span data-message-id="mail.service.secu.send.description">Knox 대외비 메일을 + 발신한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#mailapi03"><span data-message-id="mail.service.cancel.subject">메일 발신 + 취소</span></a></td> + <td class="left"><span + data-message-id="mail.service.cancel.uri">/mail/api/v2.0/mails/{mailId}/cancel?userId=Knox아이디</span> + </td> + <td><span data-message-id="mail.service.method.post">POST</span></td> + <td class="left desc"><span data-message-id="mail.service.cancel.description">Knox 내부로 발신한 메일을 + 발신 취소한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#mailapi04"><span + data-message-id="mail.service.deliverystatus.count.subject">메일 별 수신상태 조회</span></a> + </td> + <td class="left"><span + data-message-id="mail.service.deliverystatus.count.uri">/mail/api/v2.0/mails/deliverystatus/count?userId=Knox아이디</span> + </td> + <td><span data-message-id="mail.service.method.post">POST</span></td> + <td class="left desc"><span data-message-id="mail.service.deliverystatus.count.description">해당하는 + 메일에 대해서 전체 수신 상태를 조회한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#mailapi05"><span + data-message-id="mail.service.deliverystatus.subject">수신인 별 수신상태 조회</span></a></td> + <td class="left"><span + data-message-id="mail.service.deliverystatus.uri">/mail/api/v2.0/mails/{mailId}/deliverystatus?userId=Knox아이디</span> + </td> + <td><span data-message-id="mail.service.method.get">GET</span></td> + <td class="left desc"><span data-message-id="mail.service.deliverystatus.description">해당하는 메일에 + 대해서 수신인 별 수신 상태를 조회한다.</span></td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="mailapi01"><span data-message-id="mail.service.send.subject">일반 메일 발신</span> + </div> + <div class="module-font type02"> + <p><span data-message-id="mail.service.send.uri">/mail/api/v2.0/mails/send?userId=Knox아이디</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="mail.service.send.detail1">삼성 그룹사 임직원 뿐만 아니라 외부수신인을 포함하여 메일 발신이 가능하며, 발신된 메일을 발신함에 + 저장됩니다.</span></p> + <p><span data-message-id="mail.service.send.detail2">주 1. 발신자의 메일>환경설정> 발신메일저장옵션에 따라 다를 수 있습니다.</span></p> + <p><span data-message-id="mail.service.send.detail3">주 2. Multipart/form-data 구성시 아래 Sample Request 와 같이 각 파트를 + 구분하여 form-data 의 name 값을 ‘mail’ , ‘attachments’ 로 호출해야 합니다.</span></p> + </div> + <div class="module-font type02"> + <p><span>Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="10%;"> + <col width="5%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="15%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="10%;"> + <col width="5%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="15%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="mail.service.request.properties.systemid">연계 시스템 + 아이디</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.systemid">System-ID</span></td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.header">Header</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.systemid">C60LD0001</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.systemid"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span data-message-id="mail.service.request.properties.userid">유저 아이디</span> + </td> + <td class="left"><span data-message-id="mail.service.request.attribute.userid">userId</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.query">Query</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.userid">knoxportal</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.userid"></span></td> + </tr> + <tr> + <td>3</td> + <td class="left"><span data-message-id="mail.service.request.properties.subject">메일 제목</span> + </td> + <td class="left"><span data-message-id="mail.service.request.attribute.subject">subject</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.subject">메일 제목입니다.</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.subject"></span></td> + </tr> + <tr> + <td>4</td> + <td class="left"><span data-message-id="mail.service.request.properties.docSecuType">문서 + 타입</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.docSecuType">docSecuType</span></td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.docSecuType">PERSONAL</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.docSecuType"><span + class="ellipsis">1) PERSONAL : 개인</span><br><span class="ellipsis">2) OFFICIAL : + 공문</span></span></td> + </tr> + <tr> + <td>5</td> + <td class="left"><span data-message-id="mail.service.request.properties.contents">메일 본문</span> + </td> + <td class="left"><span data-message-id="mail.service.request.attribute.contents">contents</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.contents">안녕하세요, 테스트 + 메일입니다.</span></td> + <td class="left"><span data-message-id="mail.service.request.note.contents"></span></td> + </tr> + <tr> + <td>6</td> + <td class="left"><span data-message-id="mail.service.request.properties.contentType">컨텐츠 + 타입</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.contentType">contentType</span></td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.contentType">TEXT</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.contentType"><span + class="ellipsis">1) TEXT : 텍스트</span><br><span class="ellipsis">2) MIME : + 마임</span><br><span class="ellipsis">3) HTML : HTML</span></span></td> + </tr> + <tr> + <td>7</td> + <td class="left"><span data-message-id="mail.service.request.properties.sender">발신인</span></td> + <td class="left"><span data-message-id="mail.service.request.attribute.sender">sender</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.jsonObject">JSON Object</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.sender"></span></td> + <td class="left"><span data-message-id="mail.service.request.note.sender"></span></td> + </tr> + <tr> + <td>8</td> + <td class="left"><span data-message-id="mail.service.request.properties.senderAddress">발신인 + 이메일</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.senderAddress">emailAddress</span></td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="mail.service.request.sample.senderAddress">knoxportal@samsung.com</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.senderAddress"><span + class="ellipsis">1) 운영 환경 : knoxportal@samsung.com</span><br><span + class="ellipsis">2) 스테이지 환경 : knoxportal@stage.samsung.com</span></span></td> + </tr> + <tr> + <td>9</td> + <td class="left"><span data-message-id="mail.service.request.properties.recipients">수신인</span> + </td> + <td class="left"><span + data-message-id="mail.service.request.attribute.recipients">recipients</span></td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.jsonList">JSON List</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.recipients"></span></td> + <td class="left"><span data-message-id="mail.service.request.note.recipients"></span></td> + </tr> + <tr> + <td>10</td> + <td class="left"><span data-message-id="mail.service.request.properties.recipientsAddress">수신인 + 이메일</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.recipientsAddress">emailAddress</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="mail.service.request.sample.recipientsAddress">knoxportal@samsung.com</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.recipientsAddress"><span + class="ellipsis">1) 운영 환경 : knoxportal@samsung.com</span><br><span + class="ellipsis">2) 스테이지 환경 : knoxportal@stage.samsung.com</span></span></td> + </tr> + <tr> + <td>11</td> + <td class="left"><span data-message-id="mail.service.request.properties.recipientType">수신 + 타입</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.recipientType">recipientType</span></td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.recipientType">TO</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.recipientType"><span + class="ellipsis">1) 수신 : TO</span><br><span class="ellipsis">2) 참조 : + CC</span><br><span class="ellipsis">3) 비밀참조 : BCC</span></span></td> + </tr> + <tr> + <td>12</td> + <td class="left"><span data-message-id="mail.service.request.properties.attachments">첨부 + 파일</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.attachments">attachments</span></td> + <td><span data-message-id="mail.service.request.mandatory.n">N</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span + data-message-id="mail.service.request.datatype.multipart.form.data">multipart/form-data</span> + </td> + <td class="left"><span + data-message-id="mail.service.request.sample.attachments">multipart/form-data로 변환된 바이너리 + 파일 및 파일명</span></td> + <td class="left"><span data-message-id="mail.service.request.note.attachments"></span></td> + </tr> + <tr> + <td>13</td> + <td class="left"><span data-message-id="mail.service.request.properties.reservedTime">예약 + 발신</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.reservedTime">reservedTime</span></td> + <td><span data-message-id="mail.service.request.mandatory.n">N</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.reservedTime"><span + class="ellipsis">yyyy-MM-dd HH:mm</span><br><span class="ellipsis">ex)"2023-10-25 + 15:00"</span></span></td> + <td class="left"><span data-message-id="mail.service.request.note.reservedTime">10분 단위 설정</span> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Response Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <thead> + <tr> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.result">API 호출 성공 + 여부</span></td> + <td class="left"><span data-message-id="mail.service.response.attribute.result">result</span> + </td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.result">success</span></td> + <td class="left"><span data-message-id="mail.service.response.note.result"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.mailid">메일 아이디</span> + </td> + <td class="left"><span data-message-id="mail.service.response.attribute.mailid">mailId</span> + </td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="mail.service.response.sample.mailid">20190409043651epcms1s110a09b3ca1b6c8d754ee1c28a182d8d5</span> + </td> + <td class="left"><span data-message-id="mail.service.response.note.mailid"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="mail.service.sample.send.request"><span + class="ellipsis">/mail/api/v2.0/mails/send?userId=knoxportal</span><br><span + class="ellipsis">body :</span><br><span class="ellipsis"></span><br><span + class="ellipsis">Content-Disposition: form-data; name="mail"</span><br><span + class="ellipsis">{</span><br><span class="ellipsis"> "subject" : + "EMAIL SUBJECT (이메일 제목)",</span><br><span + class="ellipsis"> "contents" : "EMAIL BODY (이메일 + 본문)",</span><br><span class="ellipsis"> "contentType" : + "TEXT",</span><br><span class="ellipsis"> "docSecuType" : + "PERSONAL",</span><br><span class="ellipsis"> "sender" + :</span><br><span + class="ellipsis"> {</span><br><span + class="ellipsis"> "emailAddress" + : "knoxportal@samsung.com"</span><br><span + class="ellipsis"> },</span><br><span + class="ellipsis"> "recipients" :</span><br><span + class="ellipsis"> [</span><br><span + class="ellipsis"> {</span><br><span + class="ellipsis"> "emailAddress" + : "knoxportal@samsung.com",</span><br><span + class="ellipsis"> "recipientType" + : "TO"</span><br><span + class="ellipsis"> }</span><br><span + class="ellipsis"> ]</span><br><span + class="ellipsis">}</span><br><span class="ellipsis">Content-Disposition: form-data; + name="attachments"; filename="db변경.JPG"</span><br><span + class="ellipsis">Content-Type: image/jpeg</span><br><span + class="ellipsis">Content-Disposition: form-data; name="attachments"; filename="2 - + 복사본 (2).jpg"</span><br><span class="ellipsis">Content-Type: + image/jpeg</span><br><span class="ellipsis"></span></span></td> + <td class="left"><span data-message-id="mail.service.sample.send.response"><span + class="ellipsis">{</span><br><span class="ellipsis"> "mailId": + "20190531015540hdp_101d2782e07bbad98034606076da1e299b05",</span><br><span + class="ellipsis"> "result": "success"</span><br><span + class="ellipsis">}</span><br><span class="ellipsis"></span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type01"><span>Error Code</span></div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th><span data-message-id="common.type.message3">에러메시지</span></th> + <th><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span>400</span></td> + <td><span>ML1001</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1001">필수값 중 입력되지 않은 값이 있습니다.</span> + </td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1001">모든 필수값이 + 입력되었는지 확인이 필요합니다. 또, 에러 메시지에 null인 parameter 명이 리턴된다면, 해당 값을 우선적으로 확인해야 합니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1002</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1002">사용자 정보가 존재하지 않습니다.</span></td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1002">호출 시 입력하는 + URI 상의 Knox Id, 혹은 메일 발신자 knox 이메일 addresss가 정상적인지 확인이 필요합니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1104</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1104">일반 메일 발신 중 docSecuType 값이 유효하지 + 않습니다.</span></td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1104">일반 메일의 + docSecuType은 PERSONAL(개인), OFFICIAL(공문) 두 값만 허용됩니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1112</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1112">메일 제목 크기가 300 bytes를 + 초과하였습니다.</span></td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1112">제목의 사이즈 확인이 + 필요합니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1114</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1114">메일 발신 API에서 허용되는 content 크기를 + 초과하였습니다.</span></td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1114">발신 API에서 본문 + 사이즈는 최대 1mb까지 입력이 가능합니다. 해당 크기를 초과하는 내용에 대해서는 가급적 첨부 파일 등을 이용 부탁드립니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1115</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1115">일반 메일 contentType 값이 유효하지 + 않습니다</span></td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1115">일반 메일의 + contentType 값은 HTML, MIME, TEXT 세 개의 값만 허용됩니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1117</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1117">메일 발신 API에서 발신가능한 최대 수신인을 + 초과하였습니다.</span></td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1117">입력 가능한 최대 + 수신인 수는 100명입니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1118</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1118">수신자의 수신 타입이 잘못 설정되었습니다.</span> + </td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1118">수신 타입은 + TO(수신), CC(참조), BCC(비밀참조) 세 개의 값만 허용됩니다.</span></td> + </tr> + <tr> + <td><span>403</span></td> + <td><span>ML1102</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1102">첨부 파일 처리 중 에러가 발생했습니다.</span> + </td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1102">첨부 파일의 + Multipart/form-data 형식 확인이 필요합니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>CO400</span></td> + <td><span data-message-id="mail.service.errorcode.message.CO400">잘못된 요청입니다.</span></td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.CO400">요청 파라미터를 + 확인해주세요. 특히 userId, docSecuType 이 누락되었는지 확인해주세요.</span></td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="mailapi02"><span data-message-id="mail.service.secu.send.subject">대외비 메일 + 발신</span></div> + <div class="module-font type02"> + <p><span data-message-id="mail.service.secu.send.uri">/mail/api/v2.0/mails/secu-send?userId=Knox아이디</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="mail.service.secu.send.detail1">대외비, 극비로 설정하여 보안 메일을 발송할 수 있습니다.</span><br><span + data-message-id="mail.service.secu.send.detail2">보안 메일 옵션을 설정할 수 있습니다.</span></p> + </div> + <div class="module-font type02"> + <p><span>Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="mail.service.request.properties.systemid">연계 시스템 + 아이디</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.systemid">System-ID</span></td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.header">Header</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.systemid">C60LD0001</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.systemid"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span data-message-id="mail.service.request.properties.userid">유저 아이디</span> + </td> + <td class="left"><span data-message-id="mail.service.request.attribute.userid">userId</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.query">Query</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.userid">knoxportal</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.userid"></span></td> + </tr> + <tr> + <td>3</td> + <td class="left"><span data-message-id="mail.service.request.properties.subject">메일 제목</span> + </td> + <td class="left"><span data-message-id="mail.service.request.attribute.subject">subject</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.subject">메일 제목입니다.</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.subject"></span></td> + </tr> + <tr> + <td>4</td> + <td class="left"><span data-message-id="mail.service.request.properties.docSecuType">문서 + 타입</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.docSecuType">docSecuType</span></td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.docSecuType">PERSONAL</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.docSecuType"><span + class="ellipsis">1) PERSONAL : 개인</span><br><span class="ellipsis">2) OFFICIAL : + 공문</span></span></td> + </tr> + <tr> + <td>5</td> + <td class="left"><span data-message-id="mail.service.request.properties.contents">메일 본문</span> + </td> + <td class="left"><span data-message-id="mail.service.request.attribute.contents">contents</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.contents">안녕하세요, 테스트 + 메일입니다.</span></td> + <td class="left"><span data-message-id="mail.service.request.note.contents"></span></td> + </tr> + <tr> + <td>6</td> + <td class="left"><span data-message-id="mail.service.request.properties.contentType">컨텐츠 + 타입</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.contentType">contentType</span></td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="mail.service.secu.request.sample.contentType">TEXT</span></td> + <td class="left"><span data-message-id="mail.service.request.note.contentType"><span + class="ellipsis">1) TEXT : 텍스트</span><br><span class="ellipsis">2) MIME : + 마임</span><br><span class="ellipsis">3) HTML : HTML</span></span></td> + </tr> + <tr> + <td>7</td> + <td class="left"><span data-message-id="mail.service.request.properties.sender">발신인</span></td> + <td class="left"><span data-message-id="mail.service.request.attribute.sender">sender</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.jsonObject">JSON Object</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.sender"></span></td> + <td class="left"><span data-message-id="mail.service.request.note.sender"></span></td> + </tr> + <tr> + <td>8</td> + <td class="left"><span data-message-id="mail.service.request.properties.senderAddress">발신인 + 이메일</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.senderAddress">emailAddress</span></td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="mail.service.request.sample.senderAddress">knoxportal@samsung.com</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.senderAddress"><span + class="ellipsis">1) 운영 환경 : knoxportal@samsung.com</span><br><span + class="ellipsis">2) 스테이지 환경 : knoxportal@stage.samsung.com</span></span></td> + </tr> + <tr> + <td>9</td> + <td class="left"><span data-message-id="mail.service.request.properties.recipients">수신인</span> + </td> + <td class="left"><span + data-message-id="mail.service.request.attribute.recipients">recipients</span></td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.jsonList">JSON List</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.recipients"></span></td> + <td class="left"><span data-message-id="mail.service.request.note.recipients"></span></td> + </tr> + <tr> + <td>10</td> + <td class="left"><span data-message-id="mail.service.request.properties.recipientsAddress">수신인 + 이메일</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.recipientsAddress">emailAddress</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="mail.service.request.sample.recipientsAddress">knoxportal@samsung.com</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.recipientsAddress"><span + class="ellipsis">1) 운영 환경 : knoxportal@samsung.com</span><br><span + class="ellipsis">2) 스테이지 환경 : knoxportal@stage.samsung.com</span></span></td> + </tr> + <tr> + <td>11</td> + <td class="left"><span data-message-id="mail.service.request.properties.recipientType">수신 + 타입</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.recipientType">recipientType</span></td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.recipientType">TO</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.recipientType"><span + class="ellipsis">1) 수신 : TO</span><br><span class="ellipsis">2) 참조 : + CC</span><br><span class="ellipsis">3) 비밀참조 : BCC</span></span></td> + </tr> + <tr> + <td>12</td> + <td class="left"><span data-message-id="mail.service.request.properties.attachments">첨부 + 파일</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.attachments">attachments</span></td> + <td><span data-message-id="mail.service.request.mandatory.n">N</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span + data-message-id="mail.service.request.datatype.multipart.form.data">multipart/form-data</span> + </td> + <td class="left"><span + data-message-id="mail.service.request.sample.attachments">multipart/form-data로 변환된 바이너리 + 파일 및 파일명</span></td> + <td class="left"><span data-message-id="mail.service.request.note.attachments"></span></td> + </tr> + <tr> + <td>13</td> + <td class="left"><span data-message-id="mail.service.request.properties.drmoption">대외비 옵션</span> + </td> + <td class="left"><span + data-message-id="mail.service.request.attribute.drmoption">drmOption</span></td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.datatype.jsonObject">JSON Object</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.drmoption"></span></td> + <td class="left"><span data-message-id="mail.service.request.note.drmoption"></span></td> + </tr> + <tr> + <td>14</td> + <td class="left"><span data-message-id="mail.service.request.properties.validDays">대외비 메일 조회 가능 + 일 수</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.validDays">validDays</span></td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.validDays">3</span></td> + <td class="left"><span data-message-id="mail.service.request.note.validDays"></span></td> + </tr> + <tr> + <td>15</td> + <td class="left"><span data-message-id="mail.service.request.properties.useCount">대외비 개봉 가능 + 횟수</span></td> + <td class="left"><span data-message-id="mail.service.request.attribute.useCount">useCount</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.useCount">3</span></td> + <td class="left"><span data-message-id="mail.service.request.note.useCount"></span></td> + </tr> + <tr> + <td>16</td> + <td class="left"><span data-message-id="mail.service.request.properties.canView">대외비 수신인 조회 가능 + 여부</span></td> + <td class="left"><span data-message-id="mail.service.request.attribute.canView">canView</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.canView">0</span></td> + <td class="left"><span data-message-id="mail.service.request.note.canView"></span></td> + </tr> + <tr> + <td>17</td> + <td class="left"><span data-message-id="mail.service.request.properties.canPrint">대외비 인쇄 가능 + 여부</span></td> + <td class="left"><span data-message-id="mail.service.request.attribute.canPrint">canPrint</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.canPrint">0</span></td> + <td class="left"><span data-message-id="mail.service.request.note.canPrint"></span></td> + </tr> + <tr> + <td>18</td> + <td class="left"><span data-message-id="mail.service.request.properties.notifyExternalUser">대외비 + 외부 수신인의 개봉 알림 여부</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.notifyExternalUser">notifyExternalUser</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.notifyExternalUser">0</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.notifyExternalUser"></span> + </td> + </tr> + <tr> + <td>19</td> + <td class="left"><span data-message-id="mail.service.request.properties.notifyInternalUser">대외비 + 내부 수신인의 개봉 알림 여부</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.notifyInternalUser">notifyInternalUser</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.notifyInternalUser">0</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.notifyInternalUser"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Response Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <thead> + <tr> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.result">API 호출 성공 + 여부</span></td> + <td class="left"><span data-message-id="mail.service.response.attribute.result">result</span> + </td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.result">success</span></td> + <td class="left"><span data-message-id="mail.service.response.note.result"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.attribute.mailid">mailId</span> + </td> + <td class="left"><span data-message-id="mail.service.response.properties.mailid">메일 아이디</span> + </td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="mail.service.response.sample.mailid">20190409043651epcms1s110a09b3ca1b6c8d754ee1c28a182d8d5</span> + </td> + <td class="left"><span data-message-id="mail.service.response.note.mailid"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="mail.service.sample.secu.send.request"><span + class="ellipsis">/mail/api/v2.0/mails/send?userId=knoxportal</span><br><span + class="ellipsis">body :</span><br><span class="ellipsis"></span><br><span + class="ellipsis">Content-Disposition: form-data; name="mail"</span><br><span + class="ellipsis">{</span><br><span class="ellipsis"> "subject" : + "EMAIL SUBJECT (이메일 제목)",</span><br><span + class="ellipsis"> "contents" : "EMAIL BODY (이메일 + 본문)",</span><br><span class="ellipsis"> "contentType" : + "TEXT",</span><br><span class="ellipsis"> "docSecuType" : + "PERSONAL",</span><br><span class="ellipsis"> "sender" + :</span><br><span + class="ellipsis"> {</span><br><span + class="ellipsis"> "emailAddress" + : "knoxportal@samsung.com"</span><br><span + class="ellipsis"> },</span><br><span + class="ellipsis"> "recipients" :</span><br><span + class="ellipsis"> [</span><br><span + class="ellipsis"> {</span><br><span + class="ellipsis"> "emailAddress" + : "knoxportal@samsung.com",</span><br><span + class="ellipsis"> "recipientType" + : "TO"</span><br><span + class="ellipsis"> }</span><br><span + class="ellipsis"> ],</span><br><span + class="ellipsis"> "drmOption" :</span><br><span + class="ellipsis"> {</span><br><span + class="ellipsis"> "validDays":"3",</span><br><span + class="ellipsis"> "useCount":"3",</span><br><span + class="ellipsis"> "canView":"0",</span><br><span + class="ellipsis"> "canPrint":"0",</span><br><span + class="ellipsis"> "notifyExternalUser":"0",</span><br><span + class="ellipsis"> "notifyInternalUser":"0"</span><br><span + class="ellipsis"> }</span><br><span + class="ellipsis">}</span><br><span class="ellipsis">Content-Disposition: form-data; + name="attachments"; filename="db변경.JPG"</span><br><span + class="ellipsis">Content-Type: image/jpeg</span><br><span + class="ellipsis">Content-Disposition: form-data; name="attachments"; filename="2 - + 복사본 (2).jpg"</span><br><span class="ellipsis">Content-Type: + image/jpeg</span><br><span class="ellipsis"></span></span></td> + <td class="left"><span data-message-id="mail.service.sample.send.response"><span + class="ellipsis">{</span><br><span class="ellipsis"> "mailId": + "20190531015540hdp_101d2782e07bbad98034606076da1e299b05",</span><br><span + class="ellipsis"> "result": "success"</span><br><span + class="ellipsis">}</span><br><span class="ellipsis"></span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type01"><span>Error Code</span></div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th><span data-message-id="common.type.message3">에러메시지</span></th> + <th><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span>400</span></td> + <td><span>ML1001</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1001">필수값 중 입력되지 않은 값이 있습니다.</span> + </td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1001">모든 필수값이 + 입력되었는지 확인이 필요합니다. 또, 에러 메시지에 null인 parameter 명이 리턴된다면, 해당 값을 우선적으로 확인해야 합니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1002</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1002">사용자 정보가 존재하지 않습니다.</span></td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1002">호출 시 입력하는 + URI 상의 Knox Id, 혹은 메일 발신자 knox 이메일 addresss가 정상적인지 확인이 필요합니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1101</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1101">본문 (content) 값이 입력되지 + 않았습니다.</span></td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1101">메일 발신 관련 + API에서 본문 (content) 값이 정상적으로 입력되었는지 확인이 필요합니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1107</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1107">대외비/극비 보안 옵션 값이 유효하지 않습니다. 옵션 + 값을 확인해주세요.</span></td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1107">대외비/극비의 보안 + 옵션 설정 유효 값을 가이드를 통해 확인 후 입력이 필요합니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1108</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1108">대외비/극비 메일 contentType 값이 유효하지 + 않습니다.</span></td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1108">대외비/극비 메일에서 + contentType은 HTML과 TEXT 타입만 허용됩니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1109</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1109">대외비/극비 메일 docSecuType 값이 유효하지 + 않습니다.</span></td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1109">대외비/극비 메일의 + docSecuType은 CONFIDENTIAL(대외비), CONFIDENTIAL_STRICT(극비) 두 값만 허용됩니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1110</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1110">극비 메일일 경우에는 내부 수신인에게만 메일 발신이 + 가능합니다.</span></td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1110">외부 수신인 혹은 + 유효하지 않은 Knox 이메일 계정이 수신인에 포함되지 않았는지 확인이 필요합니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1111</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1111">대외비/극비 메일에서 허용되지 않는 첨부 파일의 + 확장자가 있습니다.</span></td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1111">txt, doc, + ppt, xls, pdf, jpg, jpeg, gif, bmp, docx, pptx, xlsx, mht, gul 확장자만 허용됩니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1112</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1112">메일 제목 크기가 300 bytes를 + 초과하였습니다.</span></td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1112">제목의 사이즈 확인이 + 필요합니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1114</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1114">메일 발신 API에서 허용되는 content 크기를 + 초과하였습니다.</span></td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1114">발신 API에서 본문 + 사이즈는 최대 1mb까지 입력이 가능합니다. 해당 크기를 초과하는 내용에 대해서는 가급적 첨부 파일 등을 이용 부탁드립니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1117</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1117">메일 발신 API에서 발신가능한 최대 수신인을 + 초과하였습니다.</span></td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1117">입력 가능한 최대 + 수신인 수는 100명입니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1118</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1118">수신자의 수신 타입이 잘못 설정되었습니다.</span> + </td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1118">수신 타입은 + TO(수신), CC(참조), BCC(비밀참조) 세 개의 값만 허용됩니다.</span></td> + </tr> + <tr> + <td><span>403</span></td> + <td><span>ML1102</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1102">첨부 파일 처리 중 에러가 발생했습니다.</span> + </td> + <td class="left desc"><span data-message-id="mail.service.errorcode.measures.ML1102">첨부 파일의 + Multipart/form-data 형식 확인이 필요합니다.</span></td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="mailapi03"><span data-message-id="mail.service.cancel.subject">메일 발신 취소</span> + </div> + <div class="module-font type02"> + <p><span data-message-id="mail.service.cancel.uri">/mail/api/v2.0/mails/{mailId}/cancel?userId=Knox아이디</span> + </p> + </div> + <div class="module-font"> + <p><span data-message-id="mail.service.cancel.detail1">Knox 사용자가 발신한 메일을, 수신자의 수신 메일함에서 삭제하는 + 기능입니다.</span><br><span data-message-id="mail.service.cancel.detail2">(주) Knox 외부로 보낸 메일에 대해서는 발신 취소가 + 불가능합니다.</span></p> + </div> + <div class="module-font type02"> + <p><span>Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="mail.service.request.properties.systemid">연계 시스템 + 아이디</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.systemid">System-ID</span></td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.header">Header</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.systemid">C60LD0001</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.systemid"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span data-message-id="mail.service.request.properties.mailid">메일 아이디</span> + </td> + <td class="left"><span data-message-id="mail.service.request.attribute.mailid">{mailId}</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.path">Path</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="mail.service.request.sample.mailid">20190623111845epcms1v2dd0e6bfd951d8f03bd75cd90afacdf8a</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.mailid"><span + class="ellipsis">발신된 모든 메일은 메일아이디라는 고유값을 가지며, 메일 발신이 성공하면 메일아이디를 전달받습니다. + </span><br><span class="ellipsis">전달받은 메일아이디를 활용하여 발신취소 또는 수신상황 조회를 할 수 + 있습니다.</span></span></td> + </tr> + <tr> + <td>3</td> + <td class="left"><span data-message-id="mail.service.request.properties.userid">유저 아이디</span> + </td> + <td class="left"><span data-message-id="mail.service.request.attribute.userid">userId</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.query">Query</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.userid">knoxportal</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.userid"></span></td> + </tr> + <tr> + <td>4</td> + <td class="left"><span data-message-id="mail.service.request.properties.recipients">수신인</span> + </td> + <td class="left"><span + data-message-id="mail.service.request.attribute.recipients">recipients</span></td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.recipients"></span></td> + <td class="left"><span data-message-id="mail.service.request.note.recipients"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Response Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <thead> + <tr> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.result">API 호출 성공 + 여부</span></td> + <td class="left"><span data-message-id="mail.service.response.attribute.result">result</span> + </td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.result">success</span></td> + <td class="left"><span data-message-id="mail.service.response.note.result"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="mail.service.sample.cancel.request"><span + class="ellipsis">/mail/api/v2.0/mails/20190623111845epcms1v2dd0e6bfd951d8f03bd75cd90afacdf8a/cancel?userId=knoxportal</span><br><span + class="ellipsis">Content-Type : application/json;</span><br><span + class="ellipsis">body :</span><br><span class="ellipsis">{</span><br><span + class="ellipsis"> "recipients" : + ["sample.id@samsung.com","knoxportal@samsung.com"]</span><br><span + class="ellipsis">}</span><br><span class="ellipsis"></span></span></td> + <td class="left"><span data-message-id="mail.service.sample.cancel.response"><span + class="ellipsis">{</span><br><span class="ellipsis"> "result": + "success"</span><br><span class="ellipsis">}</span><br><span + class="ellipsis"></span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type01"><span>Error Code</span></div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th><span data-message-id="common.type.message3">에러메시지</span></th> + <th><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span>400</span></td> + <td><span>ML1001</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1001">필수값 중 입력되지 않은 값이 있습니다.</span> + </td> + <td><span data-message-id="mail.service.errorcode.measures.ML1001">모든 필수값이 입력되었는지 확인이 필요합니다. 또, + 에러 메시지에 null인 parameter 명이 리턴된다면, 해당 값을 우선적으로 확인해야 합니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1002</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1002">사용자 정보가 존재하지 않습니다.</span></td> + <td><span data-message-id="mail.service.errorcode.measures.ML1002">호출 시 입력하는 URI 상의 Knox Id, 혹은 + 메일 발신자 knox 이메일 addresss가 정상적인지 확인이 필요합니다.</span></td> + </tr> + <tr> + <td><span>404</span></td> + <td><span>ML1003</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1003">요청하신 데이터가 존재하지 않습니다.</span> + </td> + <td><span data-message-id="mail.service.errorcode.measures.ML1003">호출 시 입력한 MailId에 해당되는 메일 데이터가 + 존재하지 않습니다. 발신취소 및 상태조회 하고자 하는 발신자/수신자 정보 확인이 필요합니다.</span></td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="mailapi04"><span data-message-id="mail.service.deliverystatus.count.subject">메일 + 별 수신상태 조회</span></div> + <div class="module-font type02"> + <p><span + data-message-id="mail.service.deliverystatus.count.uri">/mail/api/v2.0/mails/deliverystatus/count?userId=Knox아이디</span> + </p> + </div> + <div class="module-font"> + <p><span data-message-id="mail.service.deliverystatus.count.detail1">전달받은 메일 ID 리스트에 대해서, 각각의 전체적인 수신상태를 조회할 수 + 있습니다.</span></p> + </div> + <div class="module-font type02"> + <p><span>Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="26%;"> + <col width="4%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="26%;"> + <col width="4%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="mail.service.request.properties.systemid">연계 시스템 + 아이디</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.systemid">System-ID</span></td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.header">Header</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.systemid">C60LD0001</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.systemid"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span data-message-id="mail.service.request.properties.userid">유저 아이디</span> + </td> + <td class="left"><span data-message-id="mail.service.request.attribute.userid">userId</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.query">Query</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.userid">knoxportal</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.userid"></span></td> + </tr> + <tr> + <td>3</td> + <td class="left"><span data-message-id="mail.service.request.properties.mailids">메일 아이디 + 리스트</span></td> + <td class="left"><span data-message-id="mail.service.request.attribute.mailids">mailIds</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.body">Body</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="mail.service.request.sample.mailids">20190623111845epcms1v2dd0e6bfd951d8f03bd75cd90afacdf8a</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.mailids"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Response Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="25%;"> + <col width="20%;"> + <col width="35%;"> + <col width="5%;"> + </colgroup> + <thead> + <tr> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="25%;"> + <col width="20%;"> + <col width="35%;"> + <col width="5%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.mailid">메일 아이디</span> + </td> + <td class="left"><span data-message-id="mail.service.response.attribute.mailid">mailId</span> + </td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="mail.service.response.sample.mailid">20190409043651epcms1s110a09b3ca1b6c8d754ee1c28a182d8d5</span> + </td> + <td class="left"><span data-message-id="mail.service.response.note.mailid"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.totalStatusCount">전체 + 카운트</span></td> + <td class="left"><span + data-message-id="mail.service.response.attribute.totalStatusCount">totalStatusCount</span> + </td> + <td><span data-message-id="mail.service.request.datatype.int">int</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.totalStatusCount">8</span> + </td> + <td class="left"><span data-message-id="mail.service.response.note.totalStatusCount"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="mail.service.response.properties.sendingCount">배달중</span></td> + <td class="left"><span + data-message-id="mail.service.response.attribute.sendingCount">sendingCount</span></td> + <td><span data-message-id="mail.service.request.datatype.int">int</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.sendingCount">0</span></td> + <td class="left"><span data-message-id="mail.service.response.note.sendingCount"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.openCount">개봉</span> + </td> + <td class="left"><span + data-message-id="mail.service.response.attribute.openCount">openCount</span></td> + <td><span data-message-id="mail.service.request.datatype.int">int</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.openCount">1</span></td> + <td class="left"><span data-message-id="mail.service.response.note.openCount"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.unopenCount">미개봉</span> + </td> + <td class="left"><span + data-message-id="mail.service.response.attribute.unopenCount">unopenCount</span></td> + <td><span data-message-id="mail.service.request.datatype.int">int</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.unopenCount">7</span></td> + <td class="left"><span data-message-id="mail.service.response.note.unopenCount"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.etcCount">기타</span> + </td> + <td class="left"><span + data-message-id="mail.service.response.attribute.etcCount">etcCount</span></td> + <td><span data-message-id="mail.service.request.datatype.int">int</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.etcCount">0</span></td> + <td class="left"><span data-message-id="mail.service.response.note.etcCount"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="mail.service.response.properties.sendCancelCount">발신취소</span></td> + <td class="left"><span + data-message-id="mail.service.response.attribute.sendCancelCount">sendCancelCount</span> + </td> + <td><span data-message-id="mail.service.request.datatype.int">int</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.sendCancelCount">0</span> + </td> + <td class="left"><span data-message-id="mail.service.response.note.sendCancelCount"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="mail.service.response.properties.sendCancelReqCount">발신취소 요청중</span> + </td> + <td class="left"><span + data-message-id="mail.service.response.attribute.sendCancelReqCount">sendCancelReqCount</span> + </td> + <td><span data-message-id="mail.service.request.datatype.int">int</span></td> + <td class="left"><span + data-message-id="mail.service.response.sample.sendCancelReqCount">0</span></td> + <td class="left"><span data-message-id="mail.service.response.note.sendCancelReqCount"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="mail.service.response.properties.sendBlockCount">발신차단</span></td> + <td class="left"><span + data-message-id="mail.service.response.attribute.sendBlockCount">sendBlockCount</span> + </td> + <td><span data-message-id="mail.service.request.datatype.int">int</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.sendBlockCount">0</span> + </td> + <td class="left"><span data-message-id="mail.service.response.note.sendBlockCount"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="mail.service.response.properties.sendFailCount">발신실패</span></td> + <td class="left"><span + data-message-id="mail.service.response.attribute.sendFailCount">sendFailCount</span> + </td> + <td><span data-message-id="mail.service.request.datatype.int">int</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.sendFailCount">0</span> + </td> + <td class="left"><span data-message-id="mail.service.response.note.sendFailCount"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.drmProcessCount">대외비 + 변환중</span></td> + <td class="left"><span + data-message-id="mail.service.response.attribute.drmProcessCount">drmProcessCount</span> + </td> + <td><span data-message-id="mail.service.request.datatype.int">int</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.drmProcessCount">0</span> + </td> + <td class="left"><span data-message-id="mail.service.response.note.drmProcessCount"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.drmFailCount">대외비 변환 + 실패</span></td> + <td class="left"><span + data-message-id="mail.service.response.attribute.drmFailCount">drmFailCount</span></td> + <td><span data-message-id="mail.service.request.datatype.int">int</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.drmFailCount">0</span></td> + <td class="left"><span data-message-id="mail.service.response.note.drmFailCount"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.reserveCount">예약</span> + </td> + <td class="left"><span + data-message-id="mail.service.response.attribute.reserveCount">reserveCount</span></td> + <td><span data-message-id="mail.service.request.datatype.int">int</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.reserveCount">0</span></td> + <td class="left"><span data-message-id="mail.service.response.note.reserveCount"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.reserveCancelCount">예약 + 취소</span></td> + <td class="left"><span + data-message-id="mail.service.response.attribute.reserveCancelCount">reserveCancelCount</span> + </td> + <td><span data-message-id="mail.service.request.datatype.int">int</span></td> + <td class="left"><span + data-message-id="mail.service.response.sample.reserveCancelCount">0</span></td> + <td class="left"><span data-message-id="mail.service.response.note.reserveCancelCount"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="mail.service.response.properties.unknownCount">알수없음</span></td> + <td class="left"><span + data-message-id="mail.service.response.attribute.unknownCount">unknownCount</span></td> + <td><span data-message-id="mail.service.request.datatype.int">int</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.unknownCount">0</span></td> + <td class="left"><span data-message-id="mail.service.response.note.unknownCount"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type01"><span>Error Code</span></div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th><span data-message-id="common.type.message3">에러메시지</span></th> + <th><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span>400</span></td> + <td><span>ML1001</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1001">필수값 중 입력되지 않은 값이 있습니다.</span> + </td> + <td><span data-message-id="mail.service.errorcode.measures.ML1001">모든 필수값이 입력되었는지 확인이 필요합니다. 또, + 에러 메시지에 null인 parameter 명이 리턴된다면, 해당 값을 우선적으로 확인해야 합니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1002</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1002">사용자 정보가 존재하지 않습니다.</span></td> + <td><span data-message-id="mail.service.errorcode.measures.ML1002">호출 시 입력하는 URI 상의 Knox Id, 혹은 + 메일 발신자 knox 이메일 addresss가 정상적인지 확인이 필요합니다.</span></td> + </tr> + <tr> + <td><span>404</span></td> + <td><span>ML1003</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1003">요청하신 데이터가 존재하지 않습니다.</span> + </td> + <td><span data-message-id="mail.service.errorcode.measures.ML1003">호출 시 입력한 MailId에 해당되는 메일 데이터가 + 존재하지 않습니다. 발신취소 및 상태조회 하고자 하는 발신자/수신자 정보 확인이 필요합니다.</span></td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="mailapi05"><span data-message-id="mail.service.deliverystatus.subject">수신인 별 + 수신상태 조회</span></div> + <div class="module-font type02"> + <p><span + data-message-id="mail.service.deliverystatus.uri">/mail/api/v2.0/mails/{mailId}/deliverystatus?userId=Knox아이디</span> + </p> + </div> + <div class="module-font"> + <p><span data-message-id="mail.service.deliverystatus.detail1">전달받은 메일 ID에 대해서, 해당 메일의 수신인 별 수신 상태를 조회할 수 + 있습니다.</span></p> + </div> + <div class="module-font type02"> + <p><span>Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="2%;"> + <col width="10%;"> + <col width="8%;"> + <col width="4%;"> + <col width="8%;"> + <col width="8%;"> + <col width="25%;"> + <col width="25%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="2%;"> + <col width="10%;"> + <col width="8%;"> + <col width="4%;"> + <col width="8%;"> + <col width="8%;"> + <col width="25%;"> + <col width="25%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="mail.service.request.properties.systemid">연계 시스템 + 아이디</span></td> + <td class="left"><span + data-message-id="mail.service.request.attribute.systemid">System-ID</span></td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.header">Header</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.systemid">C60LD0001</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.systemid"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span data-message-id="mail.service.request.properties.mailid">메일 아이디</span> + </td> + <td class="left"><span data-message-id="mail.service.request.attribute.mailid">{mailId}</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.path">Path</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="mail.service.request.sample.mailid">20190623111845epcms1v2dd0e6bfd951d8f03bd75cd90afacdf8a</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.mailid"><span + class="ellipsis">발신된 모든 메일은 메일아이디라는 고유값을 가지며, 메일 발신이 성공하면 메일아이디를 전달받습니다. + </span><br><span class="ellipsis">전달받은 메일아이디를 활용하여 발신취소 또는 수신상황 조회를 할 수 + 있습니다.</span></span></td> + </tr> + <tr> + <td>3</td> + <td class="left"><span data-message-id="mail.service.request.properties.userid">유저 아이디</span> + </td> + <td class="left"><span data-message-id="mail.service.request.attribute.userid">userId</span> + </td> + <td><span data-message-id="mail.service.request.mandatory.y">Y</span></td> + <td><span data-message-id="mail.service.request.type.query">Query</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.request.sample.userid">knoxportal</span> + </td> + <td class="left"><span data-message-id="mail.service.request.note.userid"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Response Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="25%;"> + <col width="15%;"> + <col width="20%;"> + <col width="35%;"> + <col width="5%;"> + </colgroup> + <thead> + <tr> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="25%;"> + <col width="15%;"> + <col width="20%;"> + <col width="35%;"> + <col width="5%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.name">이름</span></td> + <td class="left"><span data-message-id="mail.service.response.attribute.name">name</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.name">KnoxPortal</span> + </td> + <td class="left"><span data-message-id="mail.service.response.note.name"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.position">직급</span> + </td> + <td class="left"><span + data-message-id="mail.service.response.attribute.position">position</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.position">Senior + Engineer</span></td> + <td class="left"><span data-message-id="mail.service.response.note.position"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.enName">영문 성명</span> + </td> + <td class="left"><span data-message-id="mail.service.response.attribute.enName">enName</span> + </td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.enName">KnoxPortal + ServiceDesk</span></td> + <td class="left"><span data-message-id="mail.service.response.note.enName"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.enPosition">영문 + 직급</span></td> + <td class="left"><span + data-message-id="mail.service.response.attribute.enPosition">enPosition</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.enPosition">Senior + Engineer</span></td> + <td class="left"><span data-message-id="mail.service.response.note.enPosition"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.company">회사명</span> + </td> + <td class="left"><span data-message-id="mail.service.response.attribute.company">company</span> + </td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.company">삼성SDS</span></td> + <td class="left"><span data-message-id="mail.service.response.note.company"></span></td> + </tr> + </tbody> + <tbody> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.department">부서명</span> + </td> + <td class="left"><span + data-message-id="mail.service.response.attribute.department">department</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.department">사업그룹(Knox + Portal)</span></td> + <td class="left"><span data-message-id="mail.service.response.note.department"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.enDepartment">영문 + 부서명</span></td> + <td class="left"><span + data-message-id="mail.service.response.attribute.enDepartment">enDepartment</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.enDepartment">Business + Group</span></td> + <td class="left"><span data-message-id="mail.service.response.note.enDepartment"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.email">이메일 주소</span> + </td> + <td class="left"><span data-message-id="mail.service.response.attribute.email">email</span></td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="mail.service.response.sample.email">knoxportal@samsung.com</span></td> + <td class="left"><span data-message-id="mail.service.response.note.email"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.userID">유저 ID</span> + </td> + <td class="left"><span data-message-id="mail.service.response.attribute.userID">userID</span> + </td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.userID">knoxportal</span> + </td> + <td class="left"><span data-message-id="mail.service.response.note.userID"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="mail.service.response.properties.recipientType">수신타입</span></td> + <td class="left"><span + data-message-id="mail.service.response.attribute.recipientType">recipientType</span> + </td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.recipientType">TO</span> + </td> + <td class="left"><span data-message-id="mail.service.response.note.recipientType"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.updateTime">수신상태가 업데이트된 + 시간</span></td> + <td class="left"><span + data-message-id="mail.service.response.attribute.updateTime">updateTime</span></td> + <td><span data-message-id="mail.service.request.datatype.calendar">Calendar</span></td> + <td class="left"><span + data-message-id="mail.service.response.sample.updateTime">{"month":6,"year":2019,"dayOfMonth":7,"hourOfDay":5,"minute":48,"second":16}</span> + </td> + <td class="left"><span data-message-id="mail.service.response.note.updateTime"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.status">개봉상태</span> + </td> + <td class="left"><span data-message-id="mail.service.response.attribute.status">status</span> + </td> + <td><span data-message-id="mail.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.status">UNOPEN</span></td> + <td class="left"><span data-message-id="mail.service.response.note.status"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.needOpenNotify">수신자가 메일 + 개봉시 발신자에게 알림 여부</span></td> + <td class="left"><span + data-message-id="mail.service.response.attribute.needOpenNotify">needOpenNotify</span> + </td> + <td><span data-message-id="mail.service.request.datatype.boolean">boolean</span></td> + <td class="left"><span + data-message-id="mail.service.response.sample.needOpenNotify">false</span></td> + <td class="left"><span data-message-id="mail.service.response.note.needOpenNotify"></span></td> + </tr> + <tr> + <td class="left"><span data-message-id="mail.service.response.properties.isDLAddr">DL 메일주소 + 여부값</span></td> + <td class="left"><span + data-message-id="mail.service.response.attribute.isDLAddr">isDLAddr</span></td> + <td><span data-message-id="mail.service.request.datatype.boolean">boolean</span></td> + <td class="left"><span data-message-id="mail.service.response.sample.isDLAddr">false</span></td> + <td class="left"><span data-message-id="mail.service.response.note.isDLAddr"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type01"><span>Error Code</span></div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th><span data-message-id="common.type.message3">에러메시지</span></th> + <th><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span>400</span></td> + <td><span>ML1001</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1001">필수값 중 입력되지 않은 값이 있습니다.</span> + </td> + <td><span data-message-id="mail.service.errorcode.measures.ML1001">모든 필수값이 입력되었는지 확인이 필요합니다. 또, + 에러 메시지에 null인 parameter 명이 리턴된다면, 해당 값을 우선적으로 확인해야 합니다.</span></td> + </tr> + <tr> + <td><span>400</span></td> + <td><span>ML1002</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1002">사용자 정보가 존재하지 않습니다.</span></td> + <td><span data-message-id="mail.service.errorcode.measures.ML1002">호출 시 입력하는 URI 상의 Knox Id, 혹은 + 메일 발신자 knox 이메일 addresss가 정상적인지 확인이 필요합니다.</span></td> + </tr> + <tr> + <td><span>404</span></td> + <td><span>ML1003</span></td> + <td><span data-message-id="mail.service.errorcode.message.ML1003">요청하신 데이터가 존재하지 않습니다.</span> + </td> + <td><span data-message-id="mail.service.errorcode.measures.ML1003">호출 시 입력한 MailId에 해당되는 메일 데이터가 + 존재하지 않습니다. 발신취소 및 상태조회 하고자 하는 발신자/수신자 정보 확인이 필요합니다.</span></td> + </tr> + </tbody> + </table> + </div> + </div> +</div>
\ No newline at end of file diff --git a/lib/knox-api/messenger/messenger-guide.html b/lib/knox-api/messenger/messenger-guide.html new file mode 100644 index 00000000..d91167ea --- /dev/null +++ b/lib/knox-api/messenger/messenger-guide.html @@ -0,0 +1,9422 @@ +<div class="body-content"> + <div class="sub-header margin"> + <h2 data-message-id="messenger.intro.subject" title="메신저 + ">메신저</h2> + </div> + <div class="module-subsum"> + <p><span data-message-id="messenger.guide.description">사전에 생성하신 Knox Portal 비실명계정을 발신자로 하여 Knox Messenger 내에서 + 대화방을 생성하고 메시지를 발신할 수 있습니다.<br> 발신계정을 챗봇 타입으로 생성하시고 수신API 구축하시면 메시지를 수신하실 수도 있습니다..</span></p> + </div><br> + <div class="module-font type03"><span data-message-id="messenger.policy.subject">[정책 및 제약사항]</span></div> + <div class="module-font type04"> + <dl> + <dt><span data-message-id="messenger.policy.description1">1. 토큰 발급부터 메시지 발송까지 필수 작업 순서는 아래와 같습니다.</span> + </dt> + <dt> <span data-message-id="messenger.policy.description1-1">1) 메신저 API 신청을 통해 Access Token을 + 획득합니다.</span></dt> + <dt> <span data-message-id="messenger.policy.description1-2">2) 디바이스 등록 API 수행 (GET + /messenger/contact/api/v1.0/device/o1/reg)을 통해 Devide ID를 획득합니다.</span></dt> + <dt> <span data-message-id="messenger.policy.description1-3">3) 암호화 키 조회 API 수행 (GET + /messenger/msgctx/api/v1.0/key/getkeys)을 통해 key value를 획득합니다.</span></dt> + <dt> <span data-message-id="messenger.policy.description1-4">4) 위의 1),2),3) 에서 획득한 파라미터를 사용하여 대화방 생성 + API(/messenger/message/api/v1.0/message/createChatroomRequest), 메시지 발신 + API(/messenger/message/api/v1.0/message/chatRequest) 호출합니다.</span></dt> + <dt><span data-message-id="messenger.policy.description2">2. 메신저 API는 다음과 같은 연속호출 제한조건이 있으니 반드시 준수하여 주시기 + 바랍니다.</span></dt> + <dt> <span data-message-id="messenger.policy.description2-1">- ShortTerm 정책: 1초당 50건 초과 시 해당 계정으로의 요청이 + 1초 간 차단</span></dt> + <dt> <span data-message-id="messenger.policy.description2-2">- LongTerm 정책: 15분당 20,000건 초과 시 해당 계정으로의 + 요청이 12시간 동안 차단</span></dt> + <dt><span data-message-id="messenger.policy.description3">3. 1회 발송 가능한 최대 메시지 길이는 유형별로 상이합니다.</span></dt> + <dt> <span data-message-id="messenger.policy.description3-1">- 0 (Text type) : 3300 자</span></dt> + <dt> <span data-message-id="messenger.policy.description3-2">- 1 (Media type), 8 (Ncustom type) : + 40,000 byte</span></dt> + <dt><span data-message-id="messenger.policy.description4">4. 전송가능 파일 확장자는 아래와 같습니다.</span></dt> + <dt> <span data-message-id="messenger.policy.description4-1">- IMAGE : jpg,jpeg,png,gif</span></dt> + <dt> <span data-message-id="messenger.policy.description4-2">- VIDEO : + mp4,3gp,mov,flv,wmv,mkv,mpg,avi,3g2,m4v,ts,webm</span></dt> + <dt> <span data-message-id="messenger.policy.description4-3">- AUDIO : + mp3,aac,m4a,amr,3ga,wma,imy,mid,mpeg,flac,ogg,wav</span></dt> + <dt> <span data-message-id="messenger.policy.description4-4">- FILE : + pdf,gul,hwp,ppt,pptx,doc,docx,rtf,xls,xlsx,txt,snb,scc,spd,zip,ics</span></dt> + </dl> + </div><br> + <div class="module-font type03"><span data-message-id="subject.api.list">[API 목록]</span></div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="200px"> + <col width="450px"> + <col width="80px"> + <col> + </colgroup> + <thead> + <tr> + <th class="left">API</th> + <th class="left">URI</th> + <th>Method</th> + <th class="left">Description</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="200px"> + <col width="450px"> + <col width="80px"> + <col> + </colgroup> + <tbody> + <tr> + <td class="left"><a href="#msg1"><span data-message-id="messenger.apilist.CO1.name">메신저 연락처 + 추가</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.CO1.path">/messenger/contact/api/v1.0/contact/o1/user</span> + </td> + <td>POST</td> + <td class="left"><span data-message-id="messenger.apilist.CO1.description">메신저 연락처에 친구를 + 등록한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#msg2"><span data-message-id="messenger.apilist.CO2.name">메신저 연락처 + 삭제</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.CO2.path">/messenger/contact/api/v1.0/contact/o1/user/delete</span> + </td> + <td>POST</td> + <td class="left"><span data-message-id="messenger.apilist.CO2.description">메신저 연락처에 친구를 + 삭제한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#msg3"><span data-message-id="messenger.apilist.CO3.name">메신저 연락처 리스트 + 조회</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.CO3.path">/messenger/contact/api/v1.0/contact/o1/list</span> + </td> + <td>GET</td> + <td class="left"><span data-message-id="messenger.apilist.CO3.description">메신저 연락처 등록된 리스트를 + 조회한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#msg4"><span data-message-id="messenger.apilist.CO4.name">메신저 User ID + 검색</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.CO4.path">/messenger/contact/api/v1.0/profile/o1/search/loginid</span> + </td> + <td>POST</td> + <td class="left"><span data-message-id="messenger.apilist.CO4.description">Knox Portal ID로 메신저 + 내부 User ID를 검색한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#msg5"><span data-message-id="messenger.apilist.CO5.name">메신저 Device + 등록</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.CO5.path">/messenger/contact/api/v1.0/device/o1/reg</span> + </td> + <td>GET</td> + <td class="left"><span data-message-id="messenger.apilist.CO5.description">연계시스템 발신계정에 대한 메신저 + Device를 등록한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#msg6"><span data-message-id="messenger.apilist.CO6.name">메신저 Device + 해지</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.CO6.path">/messenger/contact/api/v1.0/device/o1/delete</span> + </td> + <td>POST</td> + <td class="left"><span data-message-id="messenger.apilist.CO6.description">연계시스템 발신계정에 대한 메신저 + Device를 해지한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#msg7"><span data-message-id="messenger.apilist.CO7.name">메신저 Device + 사용정보 조회</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.CO7.path">/messenger/contact/api/v1.0/device/o1/use/info</span> + </td> + <td>POST</td> + <td class="left"><span data-message-id="messenger.apilist.CO7.description">본인 또는 타인의 메신저 Device별 + 사용정보를 조회한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#msg8"><span data-message-id="messenger.apilist.FI1.name">파일서버 암호화 Key + 조회</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.FI1.path">/messenger/file/api/v1.0/file/v1/getCurrentTime</span> + </td> + <td>GET</td> + <td class="left"><span data-message-id="messenger.apilist.FI1.description">파일 업로드/다운로드 API 사용을 + 위한 암호화 Key를 조회한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#msg9"><span data-message-id="messenger.apilist.FI2.name">파일 + 업로드</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.FI2.path">/messenger/file/api/v1.0/file/v1s/file/{filename}</span> + </td> + <td>PUT</td> + <td class="left"><span data-message-id="messenger.apilist.FI2.description">첨부파일을 업로드한다.</span> + </td> + </tr> + <tr> + <td class="left"><a href="#msg10"><span data-message-id="messenger.apilist.FI3.name">파일 + 다운로드</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.FI3.path">/messenger/file/api/v1.0/file/v1s/file/{file_id}</span> + </td> + <td>GET</td> + <td class="left"><span data-message-id="messenger.apilist.FI3.description">첨부파일을 다운로드한다.</span> + </td> + </tr> + <tr> + <td class="left"><a href="#msg11"><span data-message-id="messenger.apilist.MC1.name">메시지서버 암호화 + Key 조회</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.MC1.path">/messenger/msgctx/api/v1.0/key/getkeys</span> + </td> + <td>GET</td> + <td class="left"><span data-message-id="messenger.apilist.MC1.description">메시지서버의 Body 암호화용 Key를 + 조회한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#msg12"><span data-message-id="messenger.apilist.MC2.name">대화방 참여자정보 + 조회</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.MC2.path">/messenger/msgctx/api/v1.0/chat/activemember</span> + </td> + <td>GET</td> + <td class="left"><span data-message-id="messenger.apilist.MC2.description">특정 대화방의 참여자수와 User + ID를 조회한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#msg13"><span data-message-id="messenger.apilist.MS1.name">대화방 + 생성</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.MS1.path">/messenger/message/api/v1.0/message/createChatroomRequest</span> + </td> + <td>POST</td> + <td class="left"><span data-message-id="messenger.apilist.MS1.description">신규 대화방을 생성한다.</span> + </td> + </tr> + <tr> + <td class="left"><a href="#msg14"><span data-message-id="messenger.apilist.MS2.name">메시지 + 발신</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.MS2.path">/messenger/message/api/v1.0/message/chatRequest</span> + </td> + <td>POST</td> + <td class="left"><span data-message-id="messenger.apilist.MS2.description">대화방에 메시지를 + 발신한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#msg15"><span data-message-id="messenger.apilist.MS3.name">대화상대 + 초대</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.MS3.path">/messenger/message/api/v1.0/message/inviteRequest</span> + </td> + <td>POST</td> + <td class="left"><span data-message-id="messenger.apilist.MS3.description">대화방에 대화상대를 + 초대한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#msg16"><span data-message-id="messenger.apilist.MS4.name">대화상대 + 내보내기</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.MS4.path">/messenger/message/api/v1.0/message/removeMemberRequest</span> + </td> + <td>POST</td> + <td class="left"><span data-message-id="messenger.apilist.MS4.description">대화방에서 대화상대를 + 내보낸다.</span></td> + </tr> + <tr> + <td class="left"><a href="#msg17"><span data-message-id="messenger.apilist.MS5.name">대화방 + 삭제</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.MS5.path">/messenger/message/api/v1.0/message/destroyChatroomRequest</span> + </td> + <td>POST</td> + <td class="left"><span data-message-id="messenger.apilist.MS5.description">대화방을 삭제한다.</span> + </td> + </tr> + <tr> + <td class="left"><a href="#msg18"><span data-message-id="messenger.apilist.MS6.name">메시지 + 발신취소</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.MS6.path">/messenger/message/api/v1.0/message/recallMessageRequest</span> + </td> + <td>POST</td> + <td class="left"><span data-message-id="messenger.apilist.MS6.description">발신된 메시지를 + 발신취소한다.</span></td> + </tr> + <tr> + <td class="left"><a href="#msg19"><span data-message-id="messenger.apilist.MS7.name">대화방명 + 변경</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.MS7.path">/messenger/message/api/v1.0/message/changeChatroomMetaRequest</span> + </td> + <td>POST</td> + <td class="left"><span data-message-id="messenger.apilist.MS7.description">대화방 이름을 변경한다. (방장만 + 가능)</span></td> + </tr> + <tr> + <td class="left"><a href="#msg20"><span data-message-id="messenger.apilist.MS8.name">방장 + 변경</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.MS8.path">/messenger/message/api/v1.0/message/changeOwnerRequest</span> + </td> + <td>POST</td> + <td class="left"><span data-message-id="messenger.apilist.MS8.description">대화방의 방장을 변경한다. (방장만 + 가능)</span></td> + </tr> + <tr> + <td class="left"><a href="#msg21"><span data-message-id="messenger.apilist.MS9.name">대화방 + 나가기</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.MS9.path">/messenger/message/api/v1.0/message/endChatRequest</span> + </td> + <td>POST</td> + <td class="left"><span data-message-id="messenger.apilist.MS9.description">대화방을 나간다.</span></td> + </tr> + <tr> + <td class="left"><a href="#msg22"><span data-message-id="messenger.apilist.MS10.name">메시지 읽음 + Count 조회</span></a></td> + <td class="left"><span + data-message-id="messenger.apilist.MS10.path">/messenger/message/api/v1.0/message/messageReadCountRequest</span> + </td> + <td>POST</td> + <td class="left"><span data-message-id="messenger.apilist.MS10.description">발신된 메시지의 읽음 Count를 + 조회한다.</span></td> + </tr> + </tbody> + </table> + </div> + </div><br><br><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg1"><span data-message-id="messenger.contact.add.user.subject">Add user</span> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.contact.add.user.uri">/messenger/contact/api/v1.0/contact/o1/user</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.contact.add.user.detail1">연락처에 친구 추가. 자통법 대상자는 친구 추가 불가 및 blocklist로 결과 + 반환.</span></p> + </div> + <div class="module-font type02"> + <p><span>Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th>Properties</th> + <th>Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="messenger.service.request.token.properties">Access + token</span></td> + <td class="left"><span + data-message-id="messenger.service.request.token.attribute">Authorization</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="messenger.service.request.token.sample">Bearer + fc55e83b7dea72ebe8f4f0dee2a2c4</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.token.note"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span data-message-id="messenger.service.request.devicetype.properties">Device + Type</span></td> + <td class="left"><span + data-message-id="messenger.service.request.devicetype.attribute">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.devicetype.sample">relation</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.devicetype.note"></span> + </td> + </tr> + <tr> + <td>3</td> + <td class="left"><span data-message-id="messenger.service.request.deviceid.properties">Device + ID</span></td> + <td class="left"><span + data-message-id="messenger.service.request.deviceid.attribute">x-device-id</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="messenger.service.request.deviceid.sample">1234</span> + </td> + <td class="left desc"><span data-message-id="messenger.service.request.deviceid.note"></span> + </td> + </tr> + <tr> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.properties">Content Type</span> + </td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.attribute">Content-Type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.sample">application/json</span> + </td> + <td class="left desc"><span data-message-id="messenger.service.request.contenttype.note"></span> + </td> + </tr> + <tr> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.request.accept.properties">Accept</span></td> + <td class="left"><span + data-message-id="messenger.service.request.accept.attribute">Accept</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.accept.sample">application/json</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.accept.note"></span></td> + </tr> + <tr> + <td>6</td> + <td class="left"><span + data-message-id="messenger.contact.add.user.request.contactList.properties">연락처에 등록할 + contactList</span></td> + <td class="left"><span + data-message-id="messenger.contact.add.user.request.contactList.attribute">contactList</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.datatype.list">List</span></td> + <td class="left"><span + data-message-id="messenger.contact.add.user.request.contactList.sample.data"></span> + </td> + <td class="left desc"><span + data-message-id="messenger.contact.add.user.request.contactList.note"></span></td> + </tr> + <tr> + <td>7</td> + <td class="left"><span + data-message-id="messenger.contact.add.user.request.userID.properties">연락처에 등록할 + userID</span></td> + <td class="left"><span + data-message-id="messenger.contact.add.user.request.userID.attribute">contactList.userID</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.contact.add.user.request.userID.sample.data">1010101010101</span> + </td> + <td class="left desc"><span + data-message-id="messenger.contact.add.user.request.userID.note"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Response Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <thead> + <tr> + <th>Properties</th> + <th>Attribute</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.contact.add.user.response.contactList.properties">연락처에 등록된 + userID 리스트</span></td> + <td class="left"><span + data-message-id="messenger.contact.add.user.response.contactList.attribute">contactList</span> + </td> + <td><span + data-message-id="messenger.contact.add.user.response.contactList.data.type">List</span> + </td> + <td class="left"><span + data-message-id="messenger.contact.add.user.response.contactList.sample.data"></span> + </td> + <td class="left desc"><span + data-message-id="messenger.contact.add.user.response.contactList.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.contact.add.user.response.contactList.userID.properties">연락처에 + 등록된 userID</span></td> + <td class="left"><span + data-message-id="messenger.contact.add.user.response.contactList.userID.attribute">userID</span> + </td> + <td><span + data-message-id="messenger.contact.add.user.response.contactList.userID.data.type">Long</span> + </td> + <td class="left"><span + data-message-id="messenger.contact.add.user.response.contactList.userID.sample.data">1010101010103</span> + </td> + <td class="left desc"><span + data-message-id="messenger.contact.add.user.response.contactList.userID.note"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td style="text-align: left;"><span + data-message-id="messenger.contact.add.user.request.sample"><span + class="ellipsis"></span><br><span class="ellipsis">POST + /messenger/contact/api/v1.0/contact/o1/user HTTP/1.1</span><br><span + class="ellipsis">Host : yyy.xxxxxx.com</span><br><span + class="ellipsis"></span><br><span class="ellipsis">{</span><br><span + class="ellipsis"> “contactList” : [</span><br><span + class="ellipsis"> { “userID” : + 10101010101 },</span><br><span + class="ellipsis"> { “userID” : + 10101010102 }</span><br><span + class="ellipsis"> ]</span><br><span + class="ellipsis">}</span></span></td> + <td style="text-align: left;"><span + data-message-id="messenger.contact.add.user.response.sample"><span + class="ellipsis"></span><br><span class="ellipsis">{</span><br><span + class="ellipsis"> “contactList” : [</span><br><span + class="ellipsis"> { “userID” : + 10101010101 }</span><br><span + class="ellipsis"> ], “blockedUserIDList” + : [</span><br><span + class="ellipsis"> { “userID” : + 10101010102 }</span><br><span + class="ellipsis"> ]</span><br><span + class="ellipsis">}</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type01"><span>Error Code</span></div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th><span data-message-id="common.type.message3">에러메시지</span></th> + <th><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc100002.httpcode">400</span> + </td> + <td><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc100002.statuscode">CFC-100002</span> + </td> + <td class="left desc"><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc100002.message">Group + is not exist</span></td> + <td class="left desc"><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc100002.measures"></span> + </td> + </tr> + <tr> + <td><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc200001.httpcode">400</span> + </td> + <td><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc200001.statuscode">CFC-200001</span> + </td> + <td class="left desc"><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc200001.message">Contact + is already added</span></td> + <td class="left desc"><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc200001.measures"></span> + </td> + </tr> + <tr> + <td><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc200003.httpcode">400</span> + </td> + <td><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc200003.statuscode">CFC-200003</span> + </td> + <td class="left desc"><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc200003.message">parameter + userID is invalid userID</span></td> + <td class="left desc"><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc200003.measures"></span> + </td> + </tr> + <tr> + <td><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc200004.httpcode">400</span> + </td> + <td><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc200004.statuscode">CFC-200004</span> + </td> + <td class="left desc"><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc200004.message">Blocked + Group Relation</span></td> + <td class="left desc"><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc200004.measures"></span> + </td> + </tr> + <tr> + <td><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc200005.httpcode">400</span> + </td> + <td><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc200005.statuscode">CFC-200005</span> + </td> + <td class="left desc"><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc200005.message">Exceeded + max contact member limit</span></td> + <td class="left desc"><span + data-message-id="messenger.contact.add.user.response.errorcode.cfc200005.measures"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg2"><span data-message-id="messenger.contact.delete.user.subject">Delete + user</span></div> + <div class="module-font type02"> + <p><span + data-message-id="messenger.contact.delete.user.uri">/messenger/contact/api/v1.0/contact/o1/user/delete</span> + </p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.contact.delete.user.detail1">연락처에서 친구를 삭제.</span></p> + </div> + <div class="module-font type02"> + <p><span>Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th>Properties</th> + <th>Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="messenger.service.request.token.properties">Access + token</span></td> + <td class="left"><span + data-message-id="messenger.service.request.token.attribute">Authorization</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="messenger.service.request.token.sample">Bearer + fc55e83b7dea72ebe8f4f0dee2a2c4</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.token.note"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span data-message-id="messenger.service.request.devicetype.properties">Device + Type</span></td> + <td class="left"><span + data-message-id="messenger.service.request.devicetype.attribute">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.devicetype.sample">relation</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.devicetype.note"></span> + </td> + </tr> + <tr> + <td>3</td> + <td class="left"><span data-message-id="messenger.service.request.deviceid.properties">Device + ID</span></td> + <td class="left"><span + data-message-id="messenger.service.request.deviceid.attribute">x-device-id</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="messenger.service.request.deviceid.sample">1234</span> + </td> + <td class="left desc"><span data-message-id="messenger.service.request.deviceid.note"></span> + </td> + </tr> + <tr> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.properties">Content Type</span> + </td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.attribute">Content-Type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.sample">application/json</span> + </td> + <td class="left desc"><span data-message-id="messenger.service.request.contenttype.note"></span> + </td> + </tr> + <tr> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.request.accept.properties">Accept</span></td> + <td class="left"><span + data-message-id="messenger.service.request.accept.attribute">Accept</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.accept.sample">application/json</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.accept.note"></span></td> + </tr> + <tr> + <td>6</td> + <td class="left"><span + data-message-id="messenger.contact.delete.user.request.contactList.properties">연락처에서 제거할 + contactList</span></td> + <td class="left"><span + data-message-id="messenger.contact.delete.user.request.contactList.attribute">contactList</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.datatype.list">List</span></td> + <td class="left"><span + data-message-id="messenger.contact.delete.user.request.contactList.sample.data"></span> + </td> + <td class="left desc"><span + data-message-id="messenger.contact.delete.user.request.contactList.note"></span></td> + </tr> + <tr> + <td>7</td> + <td class="left"><span + data-message-id="messenger.contact.delete.user.request.userID.properties">연락처에서 제거할 + userID</span></td> + <td class="left"><span + data-message-id="messenger.contact.delete.user.request.userID.attribute">contactList.userID</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.contact.delete.user.request.userID.sample.data">1010101010101</span> + </td> + <td class="left desc"><span + data-message-id="messenger.contact.delete.user.request.userID.note"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Response Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <thead> + <tr> + <th>Properties</th> + <th>Attribute</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <tbody> + <tr> + <td>-</td> + <td>-</td> + <td>-</td> + <td>-</td> + <td>-</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td style="text-align: left;"><span + data-message-id="messenger.contact.delete.user.request.sample"><span + class="ellipsis"></span><br><span class="ellipsis">POST + /messenger/contact/api/v1.0/contact/o1/user/delete HTTP/1.1</span><br><span + class="ellipsis">Host : yyy.xxxxxx.com</span><br><span + class="ellipsis"></span><br><span class="ellipsis">{</span><br><span + class="ellipsis"> “contactList” : [</span><br><span + class="ellipsis"> { “userID” : + 10101010101 },</span><br><span + class="ellipsis"> { “userID” : + 10101010102 }</span><br><span + class="ellipsis"> ]</span><br><span + class="ellipsis">}</span></span></td> + <td>-</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type01"><span>Error Code</span></div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th><span data-message-id="common.type.message3">에러메시지</span></th> + <th><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span + data-message-id="messenger.contact.delete.user.response.errorcode.cfc100002.httpcode">400</span> + </td> + <td><span + data-message-id="messenger.contact.delete.user.response.errorcode.cfc100002.statuscode">CFC-100002</span> + </td> + <td class="left desc"><span + data-message-id="messenger.contact.delete.user.response.errorcode.cfc100002.message">Group + is not exist</span></td> + <td class="left desc"><span + data-message-id="messenger.contact.delete.user.response.errorcode.cfc100002.measures"></span> + </td> + </tr> + <tr> + <td><span + data-message-id="messenger.contact.delete.user.response.errorcode.cfc200002.httpcode">400</span> + </td> + <td><span + data-message-id="messenger.contact.delete.user.response.errorcode.cfc200002.statuscode">CFC-200002</span> + </td> + <td class="left desc"><span + data-message-id="messenger.contact.delete.user.response.errorcode.cfc200002.message">parameter + userid is not exist in contactlist</span></td> + <td class="left desc"><span + data-message-id="messenger.contact.delete.user.response.errorcode.cfc200002.measures"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font h4" id="msg3"><span data-message-id="messenger.service.contactmanage.read.subject">Contact + list</span></div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.contactmanage.read.uri">GET + /messenger/contact/api/v1.0/contact/o1/list</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.contactmanage.read.description">등록된 연락처 목록을 조회횐다.</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.request.subject">Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th>Properties</th> + <th>Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="messenger.service.request.token.properties">Access + token</span></td> + <td class="left"><span + data-message-id="messenger.service.request.token.attribute">Authorization</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="messenger.service.request.token.sample">Bearer + fc55e83b7dea72ebe8f4f0dee2a2c4</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.token.note"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span data-message-id="messenger.service.request.devicetype.properties">Device + Type</span></td> + <td class="left"><span + data-message-id="messenger.service.request.devicetype.attribute">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.devicetype.sample">relation</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.devicetype.note"></span> + </td> + </tr> + <tr> + <td>3</td> + <td class="left"><span data-message-id="messenger.service.request.deviceid.properties">Device + ID</span></td> + <td class="left"><span + data-message-id="messenger.service.request.deviceid.attribute">x-device-id</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="messenger.service.request.deviceid.sample">1234</span> + </td> + <td class="left desc"><span data-message-id="messenger.service.request.deviceid.note"></span> + </td> + </tr> + <tr> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.properties">Content Type</span> + </td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.attribute">Content-Type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.sample">application/json</span> + </td> + <td class="left desc"><span data-message-id="messenger.service.request.contenttype.note"></span> + </td> + </tr> + <tr> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.request.accept.properties">Accept</span></td> + <td class="left"><span + data-message-id="messenger.service.request.accept.attribute">Accept</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.accept.sample">application/json</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.accept.note"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.response.subject">Response Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="30%;"> + <col width="35%;"> + </colgroup> + <thead> + <tr> + <th>Properties</th> + <th>Attribute</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="30%;"> + <col width="35%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.contactmanage.read.response.synctime.properties">동기화시간</span> + </td> + <td class="left"><span + data-message-id="messenger.service.contactmanage.read.response.synctime.attribute">syncTime</span> + </td> + <td><span + data-message-id="messenger.service.contactmanage.read.response.synctime.datatype">long</span> + </td> + <td class="left"><span + data-message-id="messenger.service.contactmanage.read.response.synctime.sample">1480489063661</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.contactmanage.read.response.synctime.note">Returns + sync time which will be used at next API call.</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.contactmanage.read.response.contactList.properties">연락처 + 목록</span></td> + <td class="left"><span + data-message-id="messenger.service.contactmanage.read.response.contactList.attribute">contactList</span> + </td> + <td><span + data-message-id="messenger.service.contactmanage.read.response.contactList.datatype">List</span> + </td> + <td class="left"><span + data-message-id="messenger.service.contactmanage.read.response.contactList.sample"><span + class="ellipsis">[</span><br><span class="ellipsis">{"userID": + 753912291915206657},</span><br><span class="ellipsis">{"userID": + 753912292411707393},</span><br><span class="ellipsis">{"userID": + 753912844722900993},</span><br><span class="ellipsis">{"userID": + 753913660166377473}</span><br><span class="ellipsis">]</span></span></td> + <td class="left desc"><span + data-message-id="messenger.service.contactmanage.read.response.contactList.note">Returns + contact list</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.contactmanage.read.response.userId.properties">사용자ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.contactmanage.read.response.userId.attribute">contactList:userID</span> + </td> + <td><span + data-message-id="messenger.service.contactmanage.read.response.userId.datatype">long</span> + </td> + <td class="left"><span + data-message-id="messenger.service.contactmanage.read.response.userId.sample">753912291915206657</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.contactmanage.read.response.userId.note">Returns + userID of contact.</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.sample.subject">Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td style="text-align: left;"><span + data-message-id="messenger.service.contactmanage.read.sample.request">/messenger/contact/api/v1.0/contact/o1/list</span> + </td> + <td style="text-align: left;"><span + data-message-id="messenger.service.contactmanage.read.sample.response"><span + class="ellipsis">{</span><br><span class="ellipsis">"syncTime": + 1480489063661",</span><br><span class="ellipsis">"contactList": [</span><br><span + class="ellipsis">{"userID": 753912291915206657},</span><br><span + class="ellipsis">{"userID": 753912292411707393},</span><br><span + class="ellipsis">{"userID": 753912844722900993},</span><br><span + class="ellipsis">{"userID": 753913660166377473}</span><br><span + class="ellipsis">]</span><br><span class="ellipsis">}</span></span></td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font h4" id="msg4"><span data-message-id="messenger.service.search.loginidlist.subject">Login ID + List Search</span></div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.search.loginidlist.uri">POST + /messenger/contact/api/v1.0/profile/o1/search/loginid</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.search.loginidlist.description">SingleID (Knox Portal ID)를 이용한 사용자 + 검색</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.request.subject">Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th>Properties</th> + <th>Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="messenger.service.request.token.properties">Access + token</span></td> + <td class="left"><span + data-message-id="messenger.service.request.token.attribute">Authorization</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="messenger.service.request.token.sample">Bearer + fc55e83b7dea72ebe8f4f0dee2a2c4</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.token.note"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span data-message-id="messenger.service.request.devicetype.properties">Device + Type</span></td> + <td class="left"><span + data-message-id="messenger.service.request.devicetype.attribute">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.devicetype.sample">relation</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.devicetype.note"></span> + </td> + </tr> + <tr> + <td>3</td> + <td class="left"><span data-message-id="messenger.service.request.deviceid.properties">Device + ID</span></td> + <td class="left"><span + data-message-id="messenger.service.request.deviceid.attribute">x-device-id</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="messenger.service.request.deviceid.sample">1234</span> + </td> + <td class="left desc"><span data-message-id="messenger.service.request.deviceid.note"></span> + </td> + </tr> + <tr> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.properties">Content Type</span> + </td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.attribute">Content-Type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.sample">application/json</span> + </td> + <td class="left desc"><span data-message-id="messenger.service.request.contenttype.note"></span> + </td> + </tr> + <tr> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.request.accept.properties">Accept</span></td> + <td class="left"><span + data-message-id="messenger.service.request.accept.attribute">Accept</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.accept.sample">application/json</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.accept.note"></span></td> + </tr> + <tr> + <td>6</td> + <td class="left"><span + data-message-id="messenger.service.search.loginidlist.request.singleidlist.properties">검색할 + 사용자 리스트</span></td> + <td class="left"><span + data-message-id="messenger.service.search.loginidlist.request.singleidlist.attribute">singleIdList</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.datatype.list">List</span></td> + <td class="left"><span + data-message-id="messenger.service.search.loginidlist.request.singleidlist.sample"><span + class="ellipsis">[</span><br><span class="ellipsis">{"singleId" : + "test1.kim"},</span><br><span class="ellipsis">{"singleId" : + "test2.lee"},</span><br><span class="ellipsis">{"singleId" : + "test3.park"}</span><br><span class="ellipsis">]</span></span></td> + <td class="left desc"><span + data-message-id="messenger.service.search.loginidlist.request.singleidlist.note">검색할 사용자 + 리스트</span></td> + </tr> + <tr> + <td>7</td> + <td class="left"><span + data-message-id="messenger.service.search.loginidlist.request.singleid.properties">검색할 + 사용자의 Knox Portal ID</span></td> + <td class="left"><span + data-message-id="messenger.service.search.loginidlist.request.singleid.attribute">singleIdList:singleId</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.search.loginidlist.request.singleid.sample">test1.kim</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.search.loginidlist.request.singleid.note">검색할 사용자의 + Knox Portal ID</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.response.subject">Response Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="30%;"> + <col width="35%;"> + </colgroup> + <thead> + <tr> + <th>Properties</th> + <th>Attribute</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="30%;"> + <col width="35%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.search.loginidlist.response.userSearchResult.properties">사용자조회결과</span> + </td> + <td class="left"><span + data-message-id="messenger.service.search.loginidlist.response.userSearchResult.attribute">userSearchResult</span> + </td> + <td><span + data-message-id="messenger.service.search.loginidlist.response.userSearchResult.datatype">Object</span> + </td> + <td class="left"><span + data-message-id="messenger.service.search.loginidlist.response.userSearchResult.sample"></span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.search.loginidlist.response.userSearchResult.note">Returns + profile search result.</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.search.loginidlist.response.searchResultList.properties">조회결과목록</span> + </td> + <td class="left"><span + data-message-id="messenger.service.search.loginidlist.response.searchResultList.attribute">searchResultList</span> + </td> + <td><span + data-message-id="messenger.service.search.loginidlist.response.searchResultList.datatype">List</span> + </td> + <td class="left"><span + data-message-id="messenger.service.search.loginidlist.response.searchResultList.sample"></span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.search.loginidlist.response.searchResultList.note">Returns + users userID</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.search.loginidlist.response.userID.properties">사용자ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.search.loginidlist.response.userID.attribute">userID</span> + </td> + <td><span + data-message-id="messenger.service.search.loginidlist.response.userID.datatype">long</span> + </td> + <td class="left"><span + data-message-id="messenger.service.search.loginidlist.response.userID.sample">753913659651002369</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.search.loginidlist.response.userID.note">Returns + users userID.</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.search.loginidlist.response.singleID.properties">싱글ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.search.loginidlist.response.singleID.attribute">singleID</span> + </td> + <td><span + data-message-id="messenger.service.search.loginidlist.response.singleID.datatype">String</span> + </td> + <td class="left"><span + data-message-id="messenger.service.search.loginidlist.response.singleID.sample">test1.kim</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.search.loginidlist.response.singleID.note">Returns + users Knox Suite ID</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.sample.subject">Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td style="text-align: left;"><span + data-message-id="messenger.service.search.loginidlist.sample.request"><span + class="ellipsis">POST /messenger/contact/api/v1.0/profile/o1/search/loginid HTTP/1.1 + </span><br><span class="ellipsis">{</span><br><span class="ellipsis">"singleIdList" : + [</span><br><span class="ellipsis">{"singleId" : "test1.kim"},</span><br><span + class="ellipsis">{"singleId" : "test2.lee"},</span><br><span + class="ellipsis">{"singleId" : "test3.park"}</span><br><span + class="ellipsis">]</span><br><span class="ellipsis">}</span></span></td> + <td style="text-align: left;"><span + data-message-id="messenger.service.search.loginidlist.sample.response"><span + class="ellipsis">{</span><br><span class="ellipsis">"userSearchResult": + {</span><br><span class="ellipsis">"searchResultList": [</span><br><span + class="ellipsis">{</span><br><span class="ellipsis">"userID": + 753913659651002369,</span><br><span class="ellipsis">"singleID": + "test1.kim"</span><br><span class="ellipsis">}</span><br><span + class="ellipsis">{</span><br><span class="ellipsis">"userID": + 753913660166377473,</span><br><span class="ellipsis">"singleID": + "test3.park"</span><br><span class="ellipsis">}</span><br><span + class="ellipsis">],</span><br><span class="ellipsis">"hasMore": + false</span><br><span class="ellipsis"></span><br><span + class="ellipsis">}</span><br><span class="ellipsis">}</span></span></td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font h4" id="msg5"><span data-message-id="messenger.service.deviceregistration.subject">Device + registration</span></div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.deviceregistration.uri">GET + /messenger/contact/api/v1.0/device/o1/reg</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.deviceregistration.description">사용 기기를 등록 및 Knox Messenger 기기 인증에 + 사용될 x-device-id값 제공.</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.request.subject">Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th>Properties</th> + <th>Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="messenger.service.request.token.properties">Access + token</span></td> + <td class="left"><span + data-message-id="messenger.service.request.token.attribute">Authorization</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="messenger.service.request.token.sample">Bearer + fc55e83b7dea72ebe8f4f0dee2a2c4</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.token.note"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span data-message-id="messenger.service.request.devicetype.properties">Device + Type</span></td> + <td class="left"><span + data-message-id="messenger.service.request.devicetype.attribute">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.devicetype.sample">relation</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.devicetype.note"></span> + </td> + </tr> + <tr> + <td>3</td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.properties">Content Type</span> + </td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.attribute">Content-Type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.sample">application/json</span> + </td> + <td class="left desc"><span data-message-id="messenger.service.request.contenttype.note"></span> + </td> + </tr> + <tr> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.request.accept.properties">Accept</span></td> + <td class="left"><span + data-message-id="messenger.service.request.accept.attribute">Accept</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.accept.sample">application/json</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.accept.note"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.response.subject">Response Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="30%;"> + <col width="35%;"> + </colgroup> + <thead> + <tr> + <th>Properties</th> + <th>Attribute</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="30%;"> + <col width="35%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.deviceregistration.response.deviceServerID.properties">디바이스서버ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.deviceregistration.response.deviceServerID.attribute">deviceServerID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.deviceregistration.response.deviceServerID.datatype">long</span> + </td> + <td class="left"><span + data-message-id="messenger.service.deviceregistration.response.deviceServerID.sample">22222</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.deviceregistration.response.deviceServerID.note">등록된 + deviceID.</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.deviceregistration.response.userID.properties">등록된 + 기기의 사용자ID</span></td> + <td class="left"><span + data-message-id="messenger.service.deviceregistration.response.userID.attribute">userID</span> + </td> + <td><span + data-message-id="messenger.service.deviceregistration.response.userID.datatype">long</span> + </td> + <td class="left"><span + data-message-id="messenger.service.deviceregistration.response.userID.sample">110101010</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.deviceregistration.response.userID.note">Returns + users userID.</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.sample.subject">Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td style="text-align: left;"><span + data-message-id="messenger.service.deviceregistration.sample.request">GET + /messenger/contact/api/v1.0/device/o1/reg HTTP/1.1</span></td> + <td style="text-align: left;"><span + data-message-id="messenger.service.deviceregistration.sample.response"><span + class="ellipsis">{</span><br><span class="ellipsis">“deviceServerID” : + 22222,</span><br><span class="ellipsis">“userID” : 110101010</span><br><span + class="ellipsis">}</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type01"><span data-message-id="messenger.service.errorcode.subject">Error Code</span></div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th><span data-message-id="common.type.message3">에러메시지</span></th> + <th><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span + data-message-id="messenger.service.deviceregistration.errorcode.statuscode.403">403</span> + </td> + <td><span + data-message-id="messenger.service.deviceregistration.errorcode.CFC-900003.code">CFC-900003</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.deviceregistration.errorcode.CFC-900003.message">device + type is not invalid</span></td> + <td class="left desc"><span + data-message-id="messenger.service.deviceregistration.errorcode.CFC-900003.measures"></span> + </td> + </tr> + <tr> + <td><span + data-message-id="messenger.service.deviceregistration.errorcode.statuscode.403">403</span> + </td> + <td><span + data-message-id="messenger.service.deviceregistration.errorcode.CFC-900008.code">CFC-900008</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.deviceregistration.errorcode.CFC-900008.message">exceeded + device reg limit</span></td> + <td class="left desc"><span + data-message-id="messenger.service.deviceregistration.errorcode.CFC-900008.measures"></span> + </td> + </tr> + <tr> + <td><span + data-message-id="messenger.service.deviceregistration.errorcode.statuscode.403">403</span> + </td> + <td><span + data-message-id="messenger.service.deviceregistration.errorcode.CFC-900009.code">CFC-900009</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.deviceregistration.errorcode.CFC-900009.message">exceeded + device model length limit</span></td> + <td class="left desc"><span + data-message-id="messenger.service.deviceregistration.errorcode.CFC-900009.measures"></span> + </td> + </tr> + <tr> + <td><span + data-message-id="messenger.service.deviceregistration.errorcode.statuscode.403">403</span> + </td> + <td><span + data-message-id="messenger.service.deviceregistration.errorcode.CFC-900010.code">CFC-900010</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.deviceregistration.errorcode.CFC-900010.message">Device + reg is not allowed</span></td> + <td class="left desc"><span + data-message-id="messenger.service.deviceregistration.errorcode.CFC-900010.measures"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg6"><span data-message-id="messenger.device.deregistration.subject">Device + deregistration</span></div> + <div class="module-font type02"> + <p><span + data-message-id="messenger.device.deregistration.uri">/messenger/contact/api/v1.0/device/o1/delete</span> + </p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.device.deregistration.detail1">등록된 기기를 해지. 접속 중인 기기를 해지할 경우 미인증 단말로 + 인식.</span></p> + </div> + <div class="module-font type02"> + <p><span>Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th>Properties</th> + <th>Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="messenger.service.request.token.properties">Access + token</span></td> + <td class="left"><span + data-message-id="messenger.service.request.token.attribute">Authorization</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="messenger.service.request.token.sample">Bearer + fc55e83b7dea72ebe8f4f0dee2a2c4</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.token.note"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span data-message-id="messenger.service.request.devicetype.properties">Device + Type</span></td> + <td class="left"><span + data-message-id="messenger.service.request.devicetype.attribute">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.devicetype.sample">relation</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.devicetype.note"></span> + </td> + </tr> + <tr> + <td>3</td> + <td class="left"><span data-message-id="messenger.service.request.deviceid.properties">Device + ID</span></td> + <td class="left"><span + data-message-id="messenger.service.request.deviceid.attribute">x-device-id</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="messenger.service.request.deviceid.sample">1234</span> + </td> + <td class="left desc"><span data-message-id="messenger.service.request.deviceid.note"></span> + </td> + </tr> + <tr> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.properties">Content Type</span> + </td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.attribute">Content-Type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.sample">application/json</span> + </td> + <td class="left desc"><span data-message-id="messenger.service.request.contenttype.note"></span> + </td> + </tr> + <tr> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.request.accept.properties">Accept</span></td> + <td class="left"><span + data-message-id="messenger.service.request.accept.attribute">Accept</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.accept.sample">application/json</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.accept.note"></span></td> + </tr> + <tr> + <td>6</td> + <td class="left"><span + data-message-id="messenger.device.deregistration.request.properties.systemid">등록 해지된 + deviceID.</span></td> + <td class="left"><span + data-message-id="messenger.device.deregistration.request.attribute.systemid">deviceServerID</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.device.deregistration.request.sample.systemid">10101010101</span> + </td> + <td class="left desc"><span data-message-id="mail.service.request.note.systemid"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Response Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <thead> + <tr> + <th>Properties</th> + <th>Attribute</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="messenger.device.deregistration.response01">API 호출 성공 + 여부</span></td> + <td class="left"><span + data-message-id="messenger.device.deregistration.attribute.result">result</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="messenger.device.deregistration.sample.result">success, + fail</span></td> + <td class="left desc"><span + data-message-id="messenger.device.deregistration.note.result"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td style="text-align: left;"><span + data-message-id="messenger.device.deregistration.sample.request"><span + class="ellipsis">{</span><br><span class="ellipsis">POST + /messenger/contact/api/v1.0/device/o1/delete HTTP/1.1</span><br><span + class="ellipsis">Host : yyy.xxxxxx.com</span><br><span + class="ellipsis"></span><br><span class="ellipsis">{</span><br><span + class="ellipsis">“deviceList” : [</span><br><span + class="ellipsis"> { “deviceServerID” : 10101010101 + },</span><br><span class="ellipsis"> { “deviceServerID” : + 10101010102 }</span><br><span class="ellipsis">]</span><br><span + class="ellipsis">}}</span></span></td> + <td style="text-align: left;">-</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type01"><span>Error Code</span></div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th><span data-message-id="common.type.message3">에러메시지</span></th> + <th><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span>400</span></td> + <td><span>CFC-900006</span></td> + <td class="left desc"><span + data-message-id="messenger.device.deregistration.errorcode.messeage.cfc9000006">parameter + deviceID is not registered</span></td> + <td class="left desc"><span + data-message-id="messenger.device.deregistration.errorcode.measures.cfc9000006">parameter + deviceID is not registered</span></td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg7"><span data-message-id="messenger.device.deviceuseinfo.subject">Device use + Info</span></div> + <div class="module-font type02"> + <p><span + data-message-id="messenger.device.deviceuseinfo.uri">/messenger/contact/api/v1.0/device/o1/use/info</span> + </p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.device.deviceuseinfo.detail1">본인 및 타인의 기기별 마지막 사용시간 조회.(Open API 기기 + 제외)</span></p> + <p><span data-message-id="messenger.device.deviceuseinfo.detail2">singleIdList는 최대 600개까지 입력 가능함.</span></p> + </div> + <div class="module-font type02"> + <p><span>Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th>Properties</th> + <th>Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span data-message-id="messenger.service.request.token.properties">Access + token</span></td> + <td class="left"><span + data-message-id="messenger.service.request.token.attribute">Authorization</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="messenger.service.request.token.sample">Bearer + fc55e83b7dea72ebe8f4f0dee2a2c4</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.token.note"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span data-message-id="messenger.service.request.devicetype.properties">Device + Type</span></td> + <td class="left"><span + data-message-id="messenger.service.request.devicetype.attribute">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.devicetype.sample">relation</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.devicetype.note"></span> + </td> + </tr> + <tr> + <td>3</td> + <td class="left"><span data-message-id="messenger.service.request.deviceid.properties">Device + ID</span></td> + <td class="left"><span + data-message-id="messenger.service.request.deviceid.attribute">x-device-id</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span data-message-id="messenger.service.request.deviceid.sample">1234</span> + </td> + <td class="left desc"><span data-message-id="messenger.service.request.deviceid.note"></span> + </td> + </tr> + <tr> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.properties">Content Type</span> + </td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.attribute">Content-Type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.contenttype.sample">application/json</span> + </td> + <td class="left desc"><span data-message-id="messenger.service.request.contenttype.note"></span> + </td> + </tr> + <tr> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.request.accept.properties">Accept</span></td> + <td class="left"><span + data-message-id="messenger.service.request.accept.attribute">Accept</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.request.accept.sample">application/json</span></td> + <td class="left desc"><span data-message-id="messenger.service.request.accept.note"></span></td> + </tr> + <tr> + <td>6</td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.request.properties01.systemid">조회할 사용자 + 리스트.</span></td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.request.attribute01.systemid">singleIdList</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.datatype.list">List</span></td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.request.sample01.systemid">[]</span> + </td> + <td class="left desc"><span data-message-id="messenger.service.request.note.systemid"></span> + </td> + </tr> + <tr> + <td>7</td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.request.properties02.systemid">조회할 사용자의 + Knox Suite ID</span></td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.request.attribute02.systemid">singleIdList.singleId</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.request.sample02.systemid">[]</span> + </td> + <td class="left desc"><span data-message-id="messenger.service.request.note.systemid"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Response Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <thead> + <tr> + <th>Properties</th> + <th>Attribute</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="messenger.device.deviceuseinfo.response01">API 호출 성공 + 여부</span></td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.attribute01.result">result</span></td> + <td><span data-message-id="messenger.device.deviceuseinfo.request.datatype.string">String</span> + </td> + <td class="left"><span data-message-id="messenger.device.deviceuseinfo.sample01.result">success, + fail</span></td> + <td class="left desc"><span data-message-id="messenger.device.deviceuseinfo.note.result"></span> + </td> + </tr> + <tr> + <td class="left"><span data-message-id="messenger.device.deviceuseinfo.response02">사용자별 검색 + 결과</span></td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.attribute02.result">userDeviceList</span> + </td> + <td><span data-message-id="messenger.device.deviceuseinfo.request.datatype.string">String</span> + </td> + <td class="left"><span data-message-id="messenger.device.deviceuseinfo.sample02.result">[ + ]</span></td> + <td class="left desc"><span data-message-id="messenger.device.deviceuseinfo.note.result"></span> + </td> + </tr> + <tr> + <td class="left"><span data-message-id="messenger.device.deviceuseinfo.response03">사용자의 + userID</span></td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.attribute03.result">userID</span></td> + <td><span data-message-id="messenger.device.deviceuseinfo.request.datatype.long">Long</span> + </td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.sample03.result">10101010101</span></td> + <td class="left desc"><span data-message-id="messenger.device.deviceuseinfo.note.result"></span> + </td> + </tr> + <tr> + <td class="left"><span data-message-id="messenger.device.deviceuseinfo.response04">사용자의 Knox + Suite ID</span></td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.attribute04.result">singleID</span></td> + <td><span data-message-id="messenger.device.deviceuseinfo.request.datatype.string">String</span> + </td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.sample04.result">test1.kim</span></td> + <td class="left desc"><span data-message-id="messenger.device.deviceuseinfo.note.result"></span> + </td> + </tr> + <tr> + <td class="left"><span data-message-id="messenger.device.deviceuseinfo.response05">사용자의 + deviceList</span></td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.attribute05.result">deviceList</span> + </td> + <td><span data-message-id="messenger.device.deviceuseinfo.request.datatype.list">List</span> + </td> + <td class="left"><span data-message-id="messenger.device.deviceuseinfo.sample05.result">[ + ]</span></td> + <td class="left desc"><span data-message-id="messenger.device.deviceuseinfo.note.result"></span> + </td> + </tr> + <tr> + <td class="left"><span data-message-id="messenger.device.deviceuseinfo.response06">사용자의 + deviceID</span></td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.attribute06.result">deviceServerID</span> + </td> + <td><span data-message-id="messenger.device.deviceuseinfo.request.datatype.long">Long</span> + </td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.sample06.result">20490</span></td> + <td class="left desc"><span data-message-id="messenger.device.deviceuseinfo.note.result"></span> + </td> + </tr> + <tr> + <td class="left"><span data-message-id="messenger.device.deviceuseinfo.response07">마지막 + 접속시간</span></td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.attribute07.result">conn_date</span> + </td> + <td><span data-message-id="messenger.device.deviceuseinfo.request.datatype.string">String</span> + </td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.sample07.result">2016-06-22 PM + 04:22:46</span></td> + <td class="left desc"><span data-message-id="messenger.device.deviceuseinfo.note.result"></span> + </td> + </tr> + <tr> + <td class="left"><span data-message-id="messenger.device.deviceuseinfo.response08">OS + Type</span></td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.attribute08.result">deviceOsType</span> + </td> + <td><span data-message-id="messenger.device.deviceuseinfo.request.datatype.string">String</span> + </td> + <td class="left"><span data-message-id="messenger.device.deviceuseinfo.sample08.result">Windows, + Android,iOS</span></td> + <td class="left desc"><span data-message-id="messenger.device.deviceuseinfo.note.result"></span> + </td> + </tr> + <tr> + <td class="left"><span data-message-id="messenger.device.deviceuseinfo.response09">Device + Type</span></td> + <td class="left"><span + data-message-id="messenger.device.deviceuseinfo.attribute09.result">deviceType</span> + </td> + <td><span data-message-id="messenger.device.deviceuseinfo.request.datatype.string">String</span> + </td> + <td class="left"><span data-message-id="messenger.device.deviceuseinfo.sample09.result">pc, + mobile</span></td> + <td class="left desc"><span data-message-id="messenger.device.deviceuseinfo.note.result"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td style="text-align: left;"><span + data-message-id="messenger.device.deviceuseinfo.sample.request"><span + class="ellipsis">{</span><br><span class="ellipsis">POST + /messenger/contact/api/v1.0/device/o1/use/info HTTP/1.1</span><br><span + class="ellipsis"></span><br><span class="ellipsis">{</span><br><span + class="ellipsis"> "singleIdList" : [</span><br><span + class="ellipsis"> {"singleId" : + "test1.kim"},</span><br><span + class="ellipsis"> {"singleId" : + "test2.lee"},</span><br><span + class="ellipsis"> {"singleId" : + "test3.park"}</span><br><span class="ellipsis"> + ]</span><br><span class="ellipsis">}</span><br><span class="ellipsis">Host : + yyy.xxxxxx.com}}</span></span></td> + <td style="text-align: left;"><span + data-message-id="messenger.device.deviceuseinfo.sample.response"><span + class="ellipsis">{</span><br><span class="ellipsis">{</span><br><span + class="ellipsis"> "userDeviceList": [</span><br><span + class="ellipsis"> {</span><br><span + class="ellipsis"> "userID": + 761258979308365297,</span><br><span + class="ellipsis"> "singleID": + "test1.kim",</span><br><span + class="ellipsis"> "deviceList": + [</span><br><span class="ellipsis"> + {</span><br><span + class="ellipsis"> + "deviceServerID": 1000003610,</span><br><span + class="ellipsis"> + "conn_date": "2016-06-22 PM 04:22:46",</span><br><span + class="ellipsis"> + "deviceType": "pc",</span><br><span + class="ellipsis"> + “deviceOsType”: “Windows”</span><br><span + class="ellipsis"> }</span><br><span + class="ellipsis"> ]</span><br><span + class="ellipsis"> },</span><br><span + class="ellipsis"> {</span><br><span + class="ellipsis"> "userID": + 755053073097855041,</span><br><span class="ellipsis"> + "singleID": "test2.lee",</span><br><span class="ellipsis"> + "deviceList": [</span><br><span class="ellipsis"> + {</span><br><span class="ellipsis"> + "deviceServerID": 20490,</span><br><span + class="ellipsis"> "deviceType": + "mobile",</span><br><span class="ellipsis">“deviceOsType”: “Android”</span><br><span + class="ellipsis"> },</span><br><span class="ellipsis"> + {</span><br><span class="ellipsis"> + "deviceServerID": 1000006058,</span><br><span class="ellipsis"> + "deviceType": "mobile"</span><br><span + class="ellipsis">“deviceOsType”: “iOS”</span><br><span class="ellipsis"> + }</span><br><span class="ellipsis"> + ]</span><br><span class="ellipsis"> + },</span><br><span class="ellipsis"> {</span><br><span + class="ellipsis"> "userID": + 755053029387931649,</span><br><span class="ellipsis"> + "singleID": "test3.park",</span><br><span class="ellipsis"> + "deviceList": []</span><br><span class="ellipsis"> }</span><br><span + class="ellipsis"> ]</span><br><span class="ellipsis">}</span><br><span + class="ellipsis">}</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type01"><span>Error Code</span></div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th><span data-message-id="common.type.message3">에러메시지</span></th> + <th><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td></td> + <td></td> + <td></td> + <td></td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg8"><span data-message-id="messenger.service.file.servertime.subject">FILE + SERVER TIME(KEY)</span></div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.file.servertime.uri">GET + /messenger/file/api/v1.0/file/v1/getCurrentTime</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.file.servertime.detail">Secure API 호출 시 사용되는 x-request-time에 대입할 서버 + 측 현재 시간(UTC) 및 암호화 키를 반환한다.</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.request.subject">Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th>Properties</th> + <th>Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.accept">Accept</span></td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.accept">Accept</span></td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.servertime.request.n1.sampledata">application/json</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.servertime.request.n1.note">application/json</span> + </td> + </tr> + <tr> + <td>2</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.authorization">Access + token</span></td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.authorization">Authorization</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.servertime.request.n2.sampledata">Bearer + ce1d72e2a6c96cc09db7c837b1e44fc1</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.servertime.request.n2.note">[평문] Access + Token.</span></td> + </tr> + <tr> + <td>3</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.xaccesstoken">Access + token</span></td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.xaccesstoken">x-access-token</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.servertime.request.n3.sampledata">ce1d72e2a6c96cc09db7c837b1e44fc1</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.servertime.request.n3.note">[평문] Access + Token - Authorization과 동일한 값이나 Bearer는 제외</span></td> + </tr> + <tr> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.xdeviceid">Device ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.xdeviceid">x-device-id</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.servertime.request.n4.sampledata">131314850</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.servertime.request.n4.note">[평문] Device + registration API를 통해 얻은 deviceServerID를 사용</span></td> + </tr> + <tr> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.xdevicetype">Device + Type</span></td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.xdevicetype">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.servertime.request.n5.sampledata">relation</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.servertime.request.n5.note">[평문] Device type을 + 사용. - Valid Values: [relation]</span></td> + </tr> + <tr> + <td>6</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.word">키문자열(파일명)</span></td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.word">word</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.path">Path</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.servertime.request.n6.sampledata">r1234562312121.gif</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.servertime.request.n6.note"><span + class="ellipsis">[평문] 파일명을 이용해서 암호화 키 문자열로 사용</span><br><span class="ellipsis">- + Upload : [file name] Download : [fileid]</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.response.subject">Response Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <thead> + <tr> + <th>Properties</th> + <th>Attribute</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.file.response.properties.servertime">서버시간</span></td> + <td class="left"><span + data-message-id="messenger.service.file.response.attribute.servertime">serverTime</span> + </td> + <td><span data-message-id="messenger.service.file.response.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.servertime.response.n1.sampledata">1487298788653</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.servertime.response.n1.note">서버측 현재 + 시간(UTC)</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.file.response.properties.word">암호키값</span></td> + <td class="left"><span + data-message-id="messenger.service.file.response.attribute.word">word</span></td> + <td><span data-message-id="messenger.service.file.response.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.servertime.response.n2.sampledata">!2#4%6&8(0gif.gif1@3$5^7*9)!2#4%</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.servertime.response.n2.note">암호키값</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.sample.subject">Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="messenger.service.file.servertime.sample.request">GET + /messenger/file/api/v1.0/file/v1/getCurrentTime HTTP/1.1 Host : File + Server Authorization: Bearer f5fe27195fb2523cee1758c162a9f60 x-access-token: + f5fe27195fb2523cee1758c162a9f60 x-device-id: 131314850 x-device-type: + relation [Upload] GET + /messenger/file/api/v1.0/file/v1/getCurrentTime?word=r1234562312121.gif + HTTP/1.1 Host : File Server Authorization: Bearer + f5fe27195fb2523cee1758c162a9f60 x-access-token: + f5fe27195fb2523cee1758c162a9f60 x-device-id: 131314850 x-device-type: + relation [Download] GET + /messenger/file/api/v1.0/file/v1/getCurrentTime?word=70wT1NHM0y0TF HTTP/1.1 Host : + File Server Authorization: Bearer + f5fe27195fb2523cee1758c162a9f60 x-access-token: + f5fe27195fb2523cee1758c162a9f60 x-device-id: 131314850 x-device-type: + relation</span></td> + <td class="left"><span + data-message-id="messenger.service.file.servertime.sample.response">[success] HTTP/1.1 + 200 OK Content-Type: application/json Server: File + Server { "serverTime": "1487298788653", "word": + "!2#4%6&8(0gif.gif1@3$5^7*9)!2#4%" } [error] HTTP/1.1 400 Bad + Request Content-Type: application/json Content-Length: 97 Server: File + Server Connection: close { "svrTime": "2016-02-11 + 12:34:03.997", "errorCode": "CFI-10001", "errorMessage": " x-device-id is + mandatory" }</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.errorcode.subject">Error Code</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="20%;"> + <col width="20%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th><span data-message-id="common.type.message3">에러메시지</span></th> + <th><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="20%;"> + <col width="20%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <tbody> + <tr> + <td>200</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.200">Success</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>204</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.msg.204">No + Content</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>301</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.msg.301">Moved + Permanently</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>302</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.302">Found</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>307</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.msg.307">Temporary + redirect</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.10001">CFI-10001</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.400.10001">{argument} is + mandatory</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.10002">CFI-10002</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.400.10002">{argument} is + invalid</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.999999">BLUE-999999</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.400.999999">Device is not + registered</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.444401">BLUE-444401</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.400.444401">Email address is not + verified</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>401</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.401">Unauthorized</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>403</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.403">Forbidden</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>500</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.msg.500">Internal + Server Error</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg9"><span data-message-id="messenger.service.file.secureupload.subject">SECURE + UPLOAD FILE</span></div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.file.secureupload.uri">PUT + /messenger/file/api/v1.0/file/v1s/file/{filename}</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.file.secureupload.detail">파일 서버에 파일이 업로드 되고 해당 파일을 다운로드 받을 수 있는 URL을 + 반환한다.</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.request.subject">Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th>Properties</th> + <th>Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.accept">Accept</span></td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.accept">Accept</span></td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.secureupload.request.n1.sampledata">application/json</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.secureupload.request.n1.note">응답에 허용되는 특정 미디어 + 유형을 지정. - Default: application/json - Valid Values: [application/json, + application/xml]</span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.contenttype">Content-Type</span> + </td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.contenttype">Content-Type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.secureupload.request.n2.sampledata">binary/octet-stream</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.secureupload.request.n2.note">Content-Type - + Default: binary/octet-stream - Valid Values: MIME types</span></td> + </tr> + <tr> + <td>3</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.contentlenth">Content-Length</span> + </td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.contentlenth">Content-Length</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.secureupload.request.n3.sampledata">32121</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.secureupload.request.n3.note">업로드 할 파일의 크기 + (bytes) Valid Values: decimal number</span></td> + </tr> + <tr> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.authorization">Access + token</span></td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.authorization">Authorization</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.secureupload.request.n4.sampledata">Bearer + ce1d72e2a6c96cc09db7c837b1e44fc1</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.secureupload.request.n4.note">[평문] Access + Token</span></td> + </tr> + <tr> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.xaccesstoken">Access + token</span></td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.xaccesstoken">x-access-token</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.secureupload.request.n5.sampledata">BublCtBL1kiiUfArCc1ECFChhKGKrdc5liIrsFEuc1kh2pgPShAar9x81edAn1zd</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.secureupload.request.n5.note">[암호화] Access + Token을 aes256으로 암호화 해야함 - Token type (“Bearer”)를 제외한 Token Value만 Encrypt 처리</span> + </td> + </tr> + <tr> + <td>6</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.xdeviceid">Device ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.xdeviceid">x-device-id</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.secureupload.request.n6.sampledata">wsXERf15w7AZy9m0xJVg+g==</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.secureupload.request.n6.note">[암호화] Device + registration API를 통해 얻은 deviceServerID를 AES256으로 암호화해서 사용</span></td> + </tr> + <tr> + <td>7</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.xdevicetype">Device + Type</span></td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.xdevicetype">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.secureupload.request.n7.sampledata">9JtF6T25SvaSnkgmbkIZsA==</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.secureupload.request.n7.note">[암호화] Device type을 + AES256으로 암호화해서 사용. - Valid Values: [relation]</span></td> + </tr> + <tr> + <td>8</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.xrequesttime">Server + Time</span></td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.xrequesttime">x-request-time</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.secureupload.request.n8.sampledata">JVdr5iiTe6ogMBoGnwkhOg==</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.secureupload.request.n8.note">[암호화] File Server + Time(key) API를 통해 얻은 serverTime을 AES256으로 암호화해서 사용</span></td> + </tr> + <tr> + <td>9</td> + <td class="left"><span data-message-id="messenger.service.file.request.properties.filename">File + Name</span></td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.filename">filename</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.secureupload.request.n9.sampledata">r1500944966271.jpg</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.secureupload.request.n9.note">[평문] 업로드 시 파일이름은 + 반드시 다음의 Rule을 준수해서 지정. - Rule : “r” + TimeStamp + Extension</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.response.subject">Response Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <thead> + <tr> + <th>Properties</th> + <th>Attribute</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.file.response.properties.downloadurl">다운로드 경로</span> + </td> + <td class="left"><span + data-message-id="messenger.service.file.response.attribute.downloadurl">download_url</span> + </td> + <td><span data-message-id="messenger.service.file.response.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.secureupload.response.n1.sampledata">https://yyy.xxxxxx.com/file/v1s/file/70wT1NHM0y0TF</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.secureupload.response.n1.note">파일 다운로드 경로</span> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.sample.subject">Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="messenger.service.file.secureupload.sample.request">PUT + /messenger/file/api/v1.0/file/v1s/file/ r1500944966271.jpg HTTP/1.1 Host : File + Server Content-Length: 11434 Authorization: Bearer + f5fe27195fb2523cee1758c162a9f60 x-access-token: + BublCtBL1kiiUfArCc1ECFChhKGKrdc5liIrsFEuc1kh2pgPShAar9x81edAn1zd x-device-id: + wsXERf15w7AZy9m0xJVg+g== x-device-type: + 9JtF6T25SvaSnkgmbkIZsA== x-request-time: JVdr5iiTe6ogMBoGnwkhOg== [11434 + bytes of object data]</span></td> + <td class="left"><span + data-message-id="messenger.service.file.secureupload.sample.response">[success] HTTP/1.1 + 200 OK Content-Type: application/json Server: File + Server { "download_url": + "https://yyy.xxxxxx.com/file/v1s/file/70wT1NHM0y0TF" } [error] HTTP/1.1 + 400 Bad Request Content-Type: application/json Content-Length: 98 Server: + File Server Connection: close { "svrTime": "2015-02-11 + 12:32:30.234", "errorCode": "CFI-10002", "errorMessage": "filename is + invalid" }</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.errorcode.subject">Error Code</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="20%;"> + <col width="20%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th><span data-message-id="common.type.message3">에러메시지</span></th> + <th><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="20%;"> + <col width="20%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <tbody> + <tr> + <td>200</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.200">Success</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>204</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.msg.204">No + Content</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>301</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.msg.301">Moved + Permanently</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>302</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.302">Found</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>307</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.msg.307">Temporary + redirect</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.10001">CFI-10001</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.400.10001">{argument} is + mandatory</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.10002">CFI-10002</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.400.10002">{argument} is + invalid</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.10003">CFI-10003</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.400.10003">File size is + overflow</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.10004">CFI-10004</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.400.10004">File size is + empty</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.10005">CFI-10005</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.400.10005">File format is + error</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.10006">CFI-10006</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.400.10006">File format is not + supported</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.10011">CFI-10011</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.400.10011">Infected File</span> + </td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.10013">CFI-10013</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.msg.400.10013">No + permission to upload a file</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.999999">BLUE-999999</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.400.999999">Device is not + registered</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.444401">BLUE-444401</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.400.444401">Email address is not + verified</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>401</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.401">Unauthorized</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>403</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.403">Forbidden</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>500</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.msg.500">Internal + Server Error</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg10"><span + data-message-id="messenger.service.file.securedownload.subject">SECURE DOWNLOAD FILE</span></div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.file.securedownload.uri">GET + /messenger/file/api/v1.0/file/v1s/file/{file_id}</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.file.securedownload.detail">파일 서버에서 파일을 다운로드 한다. 만약 파일을 다운로드 하려면, + 당신의 application은 반드시 302 code responses를 취급해야 한다.</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.request.subject">Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th>Properties</th> + <th>Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="10%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.authorization">Access + token</span></td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.authorization">Authorization</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.securedownload.request.n1.sampledata">Bearer + ce1d72e2a6c96cc09db7c837b1e44fc1</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.securedownload.request.n1.note">[평문] Access + Token</span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.xaccesstoken">Access + token</span></td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.xaccesstoken">x-access-token</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.securedownload.request.n2.sampledata">BublCtBL1kiiUfArCc1ECFChhKGKrdc5liIrsFEuc1kh2pgPShAar9x81edAn1zd</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.securedownload.request.n2.note">[암호화] Access + Token을 aes256으로 암호화 해야함 - Token type (“Bearer”)를 제외한 Token Value만 Encrypt 처리</span> + </td> + </tr> + <tr> + <td>3</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.xdeviceid">Device ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.xdeviceid">x-device-id</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.securedownload.request.n3.sampledata">wsXERf15w7AZy9m0xJVg+g==</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.securedownload.request.n3.note">[암호화] 기기 등록을 통해 + 얻은 deviceServerID를 aes256으로 암호화 해야함.</span></td> + </tr> + <tr> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.xdevicetype">Device + Type</span></td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.xdevicetype">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.securedownload.request.n4.sampledata">9JtF6T25SvaSnkgmbkIZsA==</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.securedownload.request.n4.note">[암호화] 기기 타입을 + aes256으로 암호화 해야함. - Valid Values: [relation]</span></td> + </tr> + <tr> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.xrequesttime">Server + Time</span></td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.xrequesttime">x-request-time</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.securedownload.request.n5.sampledata">JVdr5iiTe6ogMBoGnwkhOg==</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.securedownload.request.n5.note">[암호화] 파일 서버에서 받은 + 서버시간을 AES256 Encrypt 처리하여 지정</span></td> + </tr> + <tr> + <td>6</td> + <td class="left"><span + data-message-id="messenger.service.file.request.properties.fileid">파일ID</span></td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.fileid">file_id</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.type.path">Path</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.securedownload.request.n6.sampledata">70wT1NHM0y0TF</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.securedownload.request.n6.note">[암호화] Secure + Upload File API를 통해 얻은 download_url의 맨 뒤 file ID값을 AES256으로 암호화해서 사용</span></td> + </tr> + <tr> + <td>7</td> + <td class="left"><span data-message-id="messenger.service.file.request.properties.thumb">썸네일 + 크기</span></td> + <td class="left"><span + data-message-id="messenger.service.file.request.attribute.thumb">thumb</span></td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span + data-message-id="messenger.service.file.request.parametertype.parameter">Parameter</span> + </td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.file.securedownload.request.n7.sampledata">160x160</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.securedownload.request.n7.note">다운로드 할 썸네일의 사이즈 + 지정. - Valid Values: [160x160]</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.response.subject">Response Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <thead> + <tr> + <th>Properties</th> + <th>Attribute</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.file.securedownload.response.n1.properties">(데이터)</span> + </td> + <td class="left"><span + data-message-id="messenger.service.file.securedownload.response.n1.attribute">(payload)</span> + </td> + <td><span data-message-id="messenger.service.file.response.datatype.binary">Binary</span></td> + <td class="left"><span + data-message-id="messenger.service.file.securedownload.response.n1.sampledata"></span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.file.securedownload.response.n1.note">파일 바이너리 + 데이터</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.sample.subject">Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.file.securedownload.sample.request">GET + /messenger/file/api/v1.0/file/v1s/file/70wT1NHM0y0TF?thumb=160x160 HTTP/1.1 Host : + File Server Authorization: Bearer + f5fe27195fb2523cee1758c162a9f60 x-access-token: + BublCtBL1kiiUfArCc1ECFChhKGKrdc5liIrsFEuc1kh2pgPShAar9x81edAn1zd x-device-id: + wsXERf15w7AZy9m0xJVg+g== x-device-type: + 9JtF6T25SvaSnkgmbkIZsA== x-request-time: JVdr5iiTe6ogMBoGnwkhOg==</span></td> + <td class="left"><span + data-message-id="messenger.service.file.securedownload.sample.response">[success] HTTP/1.1 + 200 OK Content-Length: 434234 Content-Type: image/jpeg Connection: + close Server: File Server [434234 bytes of object + data] [error] HTTP/1.1 400 Bad Request Content-Type: + application/json Content-Length: 97 Server: File Server Connection: + close {"svrTime": "2015-02-11 12:34:03.997","errorCode": "CFI-10002", + "errorMessage": "file_id is invalid"}</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.errorcode.subject">Error Code</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="20%;"> + <col width="20%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th><span data-message-id="common.type.message3">에러메시지</span></th> + <th><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="20%;"> + <col width="20%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <tbody> + <tr> + <td>200</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.200">Success</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>204</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.msg.204">No + Content</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>301</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.msg.301">Moved + Permanently</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>302</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.302">Found</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>307</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.msg.307">Temporary + redirect</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.10001">CFI-10001</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.400.10001">{argument} is + mandatory</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.10002">CFI-10002</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.400.10002">{argument} is + invalid</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.10007">CFI-10007</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.400.10007">File has expired</span> + </td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.10012">CFI-10012</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.msg.400.10012">V7 + Empsearch API error</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.999999">BLUE-999999</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.400.999999">Device is not + registered</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.file.errorcode.code.444401">BLUE-444401</span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.400.444401">Email address is not + verified</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>401</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.401">Unauthorized</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>403</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.file.errorcode.msg.403">Forbidden</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + <tr> + <td>500</td> + <td><span data-message-id="messenger.service.file.errorcode.empty"></span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.msg.500">Internal + Server Error</span></td> + <td class="left desc"><span data-message-id="messenger.service.file.errorcode.empty"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg11"><span data-message-id="messenger.mc.get.key.subject">Get Keys</span> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.mc.get.key.uri">/messenger/msgctx/api/v1.0/key/getkeys</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.mc.get.key.detail1">Device의 channel auth Key and device key를 조회한다.</span> + </p> + </div> + <div class="module-font type02"> + <p><span>Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th>Properties</th> + <th>Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span + data-message-id="messenger.mc.get.key.request.authorization.properties">Access + token</span></td> + <td class="left"><span + data-message-id="messenger.mc.get.key.request.authorization.attribute">Authorization</span> + </td> + <td><span data-message-id="messenger.mc.get.key.request.authorization.mandatory">y</span></td> + <td><span + data-message-id="messenger.mc.get.key.request.authorization.parameter.type">Header</span> + </td> + <td><span data-message-id="messenger.mc.get.key.request.authorization.data.type">String</span> + </td> + <td class="left"><span + data-message-id="messenger.mc.get.key.request.authorization.sample.data">Bearer + fc55e83b7dea72ebe8f4f0dee2a2c4</span></td> + <td class="left desc"><span + data-message-id="messenger.mc.get.key.request.authorization.note"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span data-message-id="messenger.mc.get.key.request.deviceid.properties">Device + ID</span></td> + <td class="left"><span + data-message-id="messenger.mc.get.key.request.deviceid.attribute">x-device-id</span> + </td> + <td><span data-message-id="messenger.mc.get.key.request.deviceid.mandatory">y</span></td> + <td><span data-message-id="messenger.mc.get.key.request.deviceid.parameter.type">Header</span> + </td> + <td><span data-message-id="messenger.mc.get.key.request.deviceid.data.type">Long</span></td> + <td class="left"><span + data-message-id="messenger.mc.get.key.request.deviceid.sample.data">1234</span></td> + <td class="left desc"><span data-message-id="messenger.mc.get.key.request.deviceid.note"></span> + </td> + </tr> + <tr> + <td>3</td> + <td class="left"><span + data-message-id="messenger.mc.get.key.request.contenttype.properties">Content + Type</span></td> + <td class="left"><span + data-message-id="messenger.mc.get.key.request.contenttype.attribute">Content-Type</span> + </td> + <td><span data-message-id="messenger.mc.get.key.request.contenttype.mandatory">n</span></td> + <td><span + data-message-id="messenger.mc.get.key.request.contenttype.parameter.type">Header</span> + </td> + <td><span data-message-id="messenger.mc.get.key.request.contenttype.data.type">String</span> + </td> + <td class="left"><span + data-message-id="messenger.mc.get.key.request.contenttype.sample.data">application/json</span> + </td> + <td class="left desc"><span + data-message-id="messenger.mc.get.key.request.contenttype.note"></span></td> + </tr> + <tr> + <td>4</td> + <td class="left"><span + data-message-id="messenger.mc.get.key.request.accept.properties">Accept</span></td> + <td class="left"><span + data-message-id="messenger.mc.get.key.request.accept.attribute">Accept</span></td> + <td><span data-message-id="messenger.mc.get.key.request.accept.mandatory">n</span></td> + <td><span data-message-id="messenger.mc.get.key.request.accept.parameter.type">Header</span> + </td> + <td><span data-message-id="messenger.mc.get.key.request.accept.data.type">String</span></td> + <td class="left"><span + data-message-id="messenger.mc.get.key.request.accept.sample.data">application/json</span> + </td> + <td class="left desc"><span data-message-id="messenger.mc.get.key.request.accept.note"></span> + </td> + </tr> + <tr> + <td>5</td> + <td class="left"><span + data-message-id="messenger.mc.get.key.request.devicetype.properties">Device Type</span> + </td> + <td class="left"><span + data-message-id="messenger.mc.get.key.request.devicetype.attribute">x-device-type</span> + </td> + <td><span data-message-id="messenger.mc.get.key.request.devicetype.mandatory">n</span></td> + <td><span data-message-id="messenger.mc.get.key.request.devicetype.parameter.type">Header</span> + </td> + <td><span data-message-id="messenger.mc.get.key.request.devicetype.data.type">String</span></td> + <td class="left"><span + data-message-id="messenger.mc.get.key.request.devicetype.sample.data">mobile</span></td> + <td class="left desc"><span + data-message-id="messenger.mc.get.key.request.devicetype.note">mobile or pc or + relation</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Response Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <thead> + <tr> + <th>Properties</th> + <th>Attribute</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="messenger.mc.get.key.response.key.properties">Device의 + Message key</span></td> + <td class="left"><span data-message-id="messenger.mc.get.key.response.key.attribute">key</span> + </td> + <td><span data-message-id="messenger.mc.get.key.response.key.data.type">String</span></td> + <td class="left"><span + data-message-id="messenger.mc.get.key.response.key.sample.data">4cc5d9fa5d44819357618b8a8d8c21326df20fa95cd5fd6da0f9cdd030d1a9b7c31df7eb7080b9c3b62ee0348eb1d86b</span> + </td> + <td class="left desc"><span data-message-id="messenger.mc.get.key.response.key.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.mc.get.key.response.expiredkey.properties">Device의 Expired + message key</span></td> + <td class="left"><span + data-message-id="messenger.mc.get.key.response.expiredkey.attribute">expiredkey</span> + </td> + <td><span data-message-id="messenger.mc.get.key.response.expiredkey.data.type">String</span> + </td> + <td class="left"><span + data-message-id="messenger.mc.get.key.response.expiredkey.sample.data">4cc5d9fa5d44819357618b8a8d8c21326df20fa95cd5fd6da0f9cdd030d1a9b7c31df7eb7080b9c3b62ee0348eb1d86b</span> + </td> + <td class="left desc"><span + data-message-id="messenger.mc.get.key.response.expiredkey.note">optional</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.mc.get.key.response.channelauthkey.properties">Channel Auth + key</span></td> + <td class="left"><span + data-message-id="messenger.mc.get.key.response.channelauthkey.attribute">channelauthkey</span> + </td> + <td><span data-message-id="messenger.mc.get.key.response.channelauthkey.data.type">String</span> + </td> + <td class="left"><span + data-message-id="messenger.mc.get.key.response.channelauthkey.sample.data">537461636b5472616365456c656d656e745b5d20656c656d73203d2065782e67696e742066696e616c4c656e203d2070</span> + </td> + <td class="left desc"><span + data-message-id="messenger.mc.get.key.response.channelauthkey.note"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.mc.get.key.response.keyexpirationtimestamp.properties">Message + key의 expiring Timestamp 값</span></td> + <td class="left"><span + data-message-id="messenger.mc.get.key.response.keyexpirationtimestamp.attribute">keyexpirationtimestamp</span> + </td> + <td><span + data-message-id="messenger.mc.get.key.response.keyexpirationtimestamp.data.type">Long</span> + </td> + <td class="left"><span + data-message-id="messenger.mc.get.key.response.keyexpirationtimestamp.sample.data">1718094662042</span> + </td> + <td class="left desc"><span + data-message-id="messenger.mc.get.key.response.keyexpirationtimestamp.note"></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td style="text-align: left;"><span data-message-id="messenger.mc.get.key.request.sample"><span + class="ellipsis">GET /messenger/msgctx/api/v1.0/key/getkeys </span><br><span + class="ellipsis">HTTP/1.1</span><br><span class="ellipsis">Host : + yyy.xxxxxx.com</span><br><span class="ellipsis">Content-type: + application/json</span><br><span class="ellipsis">Accept: + application/json</span><br><span class="ellipsis">x-device-type : + mobile</span><br><span class="ellipsis">x-device-id : 1234</span><br><span + class="ellipsis">Authorization : Bearer fc55e83b7dea72ebe8f4f0dee2a2c4</span></span> + </td> + <td style="text-align: left;"><span data-message-id="messenger.mc.get.key.response.sample"><span + class="ellipsis">HTTP/1.1 200 OK</span><br><span class="ellipsis">{</span><br><span + class="ellipsis"> “key” : + “4cc5d9fa5d44819357618b8a8d8c21326df20fa95cd5fd6da0f9cdd030d1a9b7c31df7eb7080b9c3b62ee0348eb1d86b”,</span><br><span + class="ellipsis"> “channelauthkey” : + “537461636b5472616365456c656d656e745b5d20656c656d73203d2065782e67696e742066696e616c4c656e203d2070”</span><br><span + class="ellipsis">}</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type01"><span>Error Code</span></div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th><span data-message-id="common.type.message3">에러메시지</span></th> + <th><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span + data-message-id="messenger.mc.get.key.response.errorcode.blue999999.httpcode">400</span> + </td> + <td><span + data-message-id="messenger.mc.get.key.response.errorcode.blue999999.statuscode">BLUE-999999</span> + </td> + <td class="left desc"><span + data-message-id="messenger.mc.get.key.response.errorcode.blue999999.message">Not exist + deviceId</span></td> + <td class="left desc"><span + data-message-id="messenger.mc.get.key.response.errorcode.blue999999.measures"></span> + </td> + </tr> + <tr> + <td><span + data-message-id="messenger.mc.get.key.response.errorcode.bmc300150.httpcode">400</span> + </td> + <td><span + data-message-id="messenger.mc.get.key.response.errorcode.bmc300150.statuscode">BMC-300150</span> + </td> + <td class="left desc"><span + data-message-id="messenger.mc.get.key.response.errorcode.bmc300150.message">Not Exist + Channel Auth Key.</span></td> + <td class="left desc"><span + data-message-id="messenger.mc.get.key.response.errorcode.bmc300150.measures"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg12"><span data-message-id="messenger.mc.chat.activemember.subject">Chat + Active Member</span></div> + <div class="module-font type02"> + <p><span + data-message-id="messenger.mc.chat.activemember.uri">/messenger/msgctx/api/v1.0/chat/activemember</span> + </p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.mc.chat.activemember.detail1">채팅방의 참여자 수와 User ID를 조회한다.</span></p> + </div> + <div class="module-font type02"> + <p><span>Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th>Properties</th> + <th>Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="10%;"> + <col width="8%;"> + <col width="12%;"> + <col width="10%;"> + <col width="21%;"> + <col width="9%;"> + </colgroup> + <tbody> + <tr> + <td>1</td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.request.authorization.properties">Access + token</span></td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.request.authorization.attribute">Authorization</span> + </td> + <td><span + data-message-id="messenger.mc.chat.activemember.request.authorization.mandatory">y</span> + </td> + <td><span + data-message-id="messenger.mc.chat.activemember.request.authorization.parameter.type">Header</span> + </td> + <td><span + data-message-id="messenger.mc.chat.activemember.request.authorization.data.type">String</span> + </td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.request.authorization.sample.data">Bearer + fc55e83b7dea72ebe8f4f0dee2a2c4</span></td> + <td class="left desc"><span + data-message-id="messenger.mc.chat.activemember.request.authorization.note"></span></td> + </tr> + <tr> + <td>2</td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.request.deviceid.properties">Device + ID</span></td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.request.deviceid.attribute">x-device-id</span> + </td> + <td><span data-message-id="messenger.mc.chat.activemember.request.deviceid.mandatory">y</span> + </td> + <td><span + data-message-id="messenger.mc.chat.activemember.request.deviceid.parameter.type">Header</span> + </td> + <td><span + data-message-id="messenger.mc.chat.activemember.request.deviceid.data.type">Long</span> + </td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.request.deviceid.sample.data">1234</span> + </td> + <td class="left desc"><span + data-message-id="messenger.mc.chat.activemember.request.deviceid.note"></span></td> + </tr> + <tr> + <td>3</td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.request.contenttype.properties">Content + Type</span></td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.request.contenttype.attribute">Content-Type</span> + </td> + <td><span + data-message-id="messenger.mc.chat.activemember.request.contenttype.mandatory">n</span> + </td> + <td><span + data-message-id="messenger.mc.chat.activemember.request.contenttype.parameter.type">Header</span> + </td> + <td><span + data-message-id="messenger.mc.chat.activemember.request.contenttype.data.type">String</span> + </td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.request.contenttype.sample.data">application/json</span> + </td> + <td class="left desc"><span + data-message-id="messenger.mc.chat.activemember.request.contenttype.note"></span></td> + </tr> + <tr> + <td>4</td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.request.accept.properties">Accept</span> + </td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.request.accept.attribute">Accept</span> + </td> + <td><span data-message-id="messenger.mc.chat.activemember.request.accept.mandatory">n</span> + </td> + <td><span + data-message-id="messenger.mc.chat.activemember.request.accept.parameter.type">Header</span> + </td> + <td><span + data-message-id="messenger.mc.chat.activemember.request.accept.data.type">String</span> + </td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.request.accept.sample.data">application/json</span> + </td> + <td class="left desc"><span + data-message-id="messenger.mc.chat.activemember.request.accept.note"></span></td> + </tr> + <tr> + <td>5</td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.request.devicetype.properties">Device + Type</span></td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.request.devicetype.attribute">x-device-type</span> + </td> + <td><span data-message-id="messenger.mc.chat.activemember.request.devicetype.mandatory">n</span> + </td> + <td><span + data-message-id="messenger.mc.chat.activemember.request.devicetype.parameter.type">Header</span> + </td> + <td><span + data-message-id="messenger.mc.chat.activemember.request.devicetype.data.type">String</span> + </td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.request.devicetype.sample.data">mobile</span> + </td> + <td class="left desc"><span + data-message-id="messenger.mc.chat.activemember.request.devicetype.note">mobile or pc or + relation</span></td> + </tr> + <tr> + <td>6</td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.request.chatroomid.properties">Chatroom + Id</span></td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.request.chatroomid.attribute">chatroomid</span> + </td> + <td><span data-message-id="messenger.mc.chat.activemember.request.chatroomid.mandatory">y</span> + </td> + <td><span + data-message-id="messenger.mc.chat.activemember.request.chatroomid.parameter.type">Query</span> + </td> + <td><span + data-message-id="messenger.mc.chat.activemember.request.chatroomid.data.type">Long</span> + </td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.request.chatroomid.sample.data">332321144605</span> + </td> + <td class="left desc"><span + data-message-id="messenger.mc.chat.activemember.request.chatroomid.note">max 19 number + string</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Response Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <thead> + <tr> + <th>Properties</th> + <th>Attribute</th> + <th>Data Type</th> + <th>Sample Data</th> + <th>Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="10%;"> + <col width="10%;"> + <col width="55%;"> + <col width="10%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.response.activemembercount.properties">현재 + 대화방에 참여중인 멤버의 수</span></td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.response.activemembercount.attribute">activemembercount</span> + </td> + <td><span + data-message-id="messenger.mc.chat.activemember.response.activemembercount.data.type">Integer</span> + </td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.response.activemembercount.sample.data">10</span> + </td> + <td class="left desc"><span + data-message-id="messenger.mc.chat.activemember.response.activemembercount.note"></span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.response.activememberlist.properties">현재 + 대화방에 참여중인 멤버의 User ID List.</span></td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.response.activememberlist.attribute">activememberlist</span> + </td> + <td><span + data-message-id="messenger.mc.chat.activemember.response.activememberlist.data.type">Long</span> + </td> + <td class="left"><span + data-message-id="messenger.mc.chat.activemember.response.activememberlist.sample.data"></span> + </td> + <td class="left desc"><span + data-message-id="messenger.mc.chat.activemember.response.activememberlist.note">List</span> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span>Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td style="text-align: left;"><span + data-message-id="messenger.mc.chat.activemember.request.sample"><span + class="ellipsis">GET + /messenger/msgctx/api/v1.0/chat/activemember?chatroomid=1221232323 </span><br><span + class="ellipsis">HTTP/1.1</span><br><span class="ellipsis">Host : + yyy.xxxxxx.com</span><br><span class="ellipsis">Content-type: + application/json</span><br><span class="ellipsis">Accept: + application/json</span><br><span class="ellipsis">x-device-type : + mobile</span><br><span class="ellipsis">x-device-id : 1234</span><br><span + class="ellipsis">Authorization : Bearer fc55e83b7dea72ebe8f4f0dee2a2c4</span></span> + </td> + <td style="text-align: left;"><span + data-message-id="messenger.mc.chat.activemember.response.sample"><span + class="ellipsis">HTTP/1.1 200 OK</span><br><span class="ellipsis">{</span><br><span + class="ellipsis"> “activemembercount”:5,</span><br><span + class="ellipsis"> “activememberlist” : [</span><br><span + class="ellipsis"> 753913371694206977,</span><br><span + class="ellipsis"> 753915435136061441,</span><br><span + class="ellipsis"> 753915446684553217,</span><br><span + class="ellipsis"> 753916848394735617,</span><br><span + class="ellipsis"> 753916967328419841</span><br><span + class="ellipsis"> ]</span><br><span + class="ellipsis">}</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type01"><span>Error Code</span></div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th><span data-message-id="common.type.message3">에러메시지</span></th> + <th><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td><span + data-message-id="messenger.mc.chat.activemember.response.errorcode.blue999999.httpcode">400</span> + </td> + <td><span + data-message-id="messenger.mc.chat.activemember.response.errorcode.blue999999.statuscode">BLUE-999999</span> + </td> + <td class="left desc"><span + data-message-id="messenger.mc.chat.activemember.response.errorcode.blue999999.message">Not + exist deviceId</span></td> + <td class="left desc"><span + data-message-id="messenger.mc.chat.activemember.response.errorcode.blue999999.measures"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msgcom01"><span data-message-id="messenger.service.message.common.subject">메시지 + API 공통 포맷</span></div> + <div class="module-font"> + <p><span data-message-id="messenger.service.message.common.main.content1">아래 목록의 API들은 메시지군의 API들로써 공통적인 포맷을 + 갖는다. (payload data 암호화, 공통 error 코드)<br> - 대화방 생성<br> - 메시지 발신<br> - 대화상대 초대<br> - 대화상대 내보내기<br> - 대화방 + 삭제<br> - 메시지 발신취소<br> - 대화방명 변경<br> - 방장 변경<br> - 대화방 나가기<br> - 메시지 읽음 Count 조회</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.message.common.sub1.title">payload data 암호화</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.message.common.sub1.content1">API호출에 사용되는 Request Payload data와 + Response Payload data는 암호된 값을 사용한다.<br>각 API 기능별로 Payload 내에 적재된 RequestBody와 ResponseBody내용을 전송단에서 + Aes256암호화 > Base64암호화를 거쳐 데이터를 보내며, 수신단에서 Base64복호화 > Aes256복호화를 거쳐 암호화를 해제함으로써 데이터 추출할 수 + 있다.<br>기능별 API 명세에서는 각 API별로, 암호화가 해제된 평문 기준의 RequestBody, ResponseBody 명세에 대한 설명이 기재되어 있다.</span></p> + <p></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.message.common.sub1.content2">연계 시스템측에서 사용하게 되는 RequestBody 암호화 및 + ResponseBody 복호화에 대한 예시는 아래와 같다.</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.message.common.sub1.content3.title">[RequestBody + 암호화 예시]</span></th> + <th><span data-message-id="messenger.service.message.common.sub1.content4.title">[ResponseBody + 복호화 예시]</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="messenger.service.message.common.sub1.content3"><span + class="ellipsis">적용전 (RequestBody평문): {"requestId": 1578016699286727, "chatroomId": + 99343295704997888}</span><br><span class="ellipsis">암호화 1단계: AES256 + 인코딩</span><br><span class="ellipsis">암호화 2단계: BASE64 인코딩</span><br><span + class="ellipsis">적용후 (RequestBody암호문): + IN/WslquK+4b3I+I3lJF1UyiYksAhZRncHL5axCGpJur9U/LabuKIIo7OKEQe1JOSaCb3szhWphL2Ufhj86dcClTXz5b+AVYDq6LRbd4zBQ=</span></span> + </td> + <td class="left"><span data-message-id="messenger.service.message.common.sub1.content4"><span + class="ellipsis">적용전 (ResponseBody-암호문): + 7Q9FCL95U+5FIFGcZbG9Y6wvpod95dfH+pxDZVb3HnJzz/U+nZAG3tQ+NPOUprKaMZ3rTEPbYsMr89KIWEdpog== + </span><br><span class="ellipsis">복호화 1단계: AES256 디코딩</span><br><span + class="ellipsis">복호화 2단계: AES256 디코딩</span><br><span class="ellipsis">적용후 + (ResponseBody-평문): { "code": 3003, "msg": "All receivers are invalid." + }</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.message.common.sub1.content5">※ 예시에 사용된 메시지 키 값은 아래와 같으며, 실사용시 메시지 + 키값을 "메시지서버 암호화 Key 조회" api로 조회하여 사용하여야 한다.(메시지 key값은 단말별로 부여됨)<br> - 예시에 사용된 메시지 key: + "b6d06ce799b97b58aa606e393c6a18ee1f6008726b59072036207ccafe6443b9b3c546f665fdae562a7d8d35f4bca16e"</span> + </p> + <p></p> + <p><span data-message-id="messenger.service.message.common.sub1.content6">※ 암복호화 모듈 구현은 샘플 코드를 참고 바람.</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.message.common.error.title">메시지 공통 Error Code</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="45%;"> + <col width="25%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.errorcode.httpresp">HTTP응답코드</span></th> + <th><span data-message-id="messenger.service.errorcode.errorcode">에러코드</span></th> + <th><span data-message-id="messenger.service.errorcode.errormsg">에러메시지</span></th> + <th><span data-message-id="messenger.service.errorcode.guide">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="45%;"> + <col width="25%;"> + </colgroup> + <tbody> + <tr> + <td>200</td> + <td><span data-message-id="messenger.service.message.errorcode.1000">1000</span></td> + <td class="left"><span + data-message-id="messenger.service.message.errorcode.msg.n1">Success</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>200</td> + <td><span data-message-id="messenger.service.message.errorcode.1001">1001</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.msg.n2">Detected + some invalid receivers. (Success partial)</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>204</td> + <td><span data-message-id="messenger.service.message.errorcode.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.msg.n3">No + Content</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.message.errorcode.2001">2001</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.msg.n4">Wrong + token</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.message.errorcode.2002">2002</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.msg.n5">Not + registered requester.</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.message.errorcode.3003">3003</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.msg.n6">Invalid + receiver.</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.message.errorcode.3004">3004</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.msg.n7">Receiver is + not enabled.</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.message.errorcode.3005">3005</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.msg.n8">Exceeded + chatroom count limit.</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.message.errorcode.3009">3009</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.msg.n9">Membership + violation detected.</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.message.errorcode.3106">3106</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.msg.n10">All + receivers are invalid.</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.message.errorcode.4001">4001</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.msg.n11">Wrong + parameter value.</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.message.errorcode.4003">4003</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.msg.n12"><span + class="ellipsis">Wrong body! (Fail decrypt about message body.)</span><br><span + class="ellipsis">해당 에러 발생 시 6.1 GET Keys API를 수행하여 최신 Key value를 response 받아서 + RequestBody 암호화를 수행할 것을 권장함.</span></span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.message.errorcode.6001">6001</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.msg.n13">General DAO + error</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.message.errorcode.7001">7001</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.msg.n14">Not bounded + device.</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.message.errorcode.9000">9000</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.msg.n15">Internal + server error.</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.message.errorcode.9001">9001</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.msg.n16">Exceeded + session count limit.</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.message.errorcode.9002">9002</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.msg.n17">Short Term + DDoS detected.</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>400</td> + <td><span data-message-id="messenger.service.message.errorcode.9003">9003</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.msg.n18"><span + class="ellipsis">Long Term DDoS detected.</span><br><span class="ellipsis">(정책 시간 동안 + api 사용 금지 ex. 12시간)</span></span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>401</td> + <td><span data-message-id="messenger.service.message.errorcode.empty"></span></td> + <td class="left"><span + data-message-id="messenger.service.message.errorcode.msg.n19">Unauthorized</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>403</td> + <td><span data-message-id="messenger.service.message.errorcode.empty"></span></td> + <td class="left"><span + data-message-id="messenger.service.message.errorcode.msg.n20">Forbidden</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + <tr> + <td>500</td> + <td><span data-message-id="messenger.service.message.errorcode.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.msg.n21">Internal + Server Error</span></td> + <td class="left"><span data-message-id="messenger.service.message.errorcode.guide.empty"></span> + </td> + </tr> + </tbody> + </table> + </div> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg13"><span data-message-id="messenger.service.createchatroom.subject">대화방 + 생성</span></div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.createchatroom.uri">POST + /messenger/message/api/v1.0/message/createChatroomRequest</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.createchatroom.description">신규 대화방을 생성한다.</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.request.subject">Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.request.parametertype">Parameter Type</span></th> + <th><span data-message-id="messenger.service.request.no">No.</span></th> + <th><span data-message-id="messenger.service.request.properties">Properties</span></th> + <th><span data-message-id="messenger.service.request.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.request.mandatory">Mandatory</span></th> + <th><span data-message-id="messenger.service.request.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.request.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.request.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td>1</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.accept">응답 허용 + 타입</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.accept">Accept</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.accept.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.accept.appjson"><span + class="ellipsis">Default: application/json</span><br><span class="ellipsis">Valid + Values: [application/json, application/xml]</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>2</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.content">첨부데이터타입</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.content">Content-Type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.contype.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.contype.appjson"><span + class="ellipsis">Payload의 content type 명시</span><br><span class="ellipsis">ex) + application/json</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>3</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.author">인증토큰</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.author">Authorization</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.authtoken">"Bearer + f5fe27195fb2523cee1758c162a9f60"</span></td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.authtoken">[평문] Access Token (발급 + 받은 Access Token)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdid">단말ID</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdid">x-device-id</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvcid">"104032854"</span></td> + <td class="left desc"><span data-message-id="messenger.service.message.request.note.dvcid">[평문] + 연계시스템용으로 등록한 단말 ID ("메신저 Device 등록" 부분 참조)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdtp">단말종류</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdtp">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvctp.rel">"relation"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.dvctp.rel"><span + class="ellipsis">[평문] 단말 타입, “relation” 으로 고정</span><br><span class="ellipsis">※ + relation: 외부연계 시스템</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.request.Payload">Payload</span></td> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.encbody">"/6Fz+KIhVzmyhiBpMrLNJp+0saSg7b7XlZp3tlXrnRLVaCHDD4XqV9dGVh6hmri7hR3dJdTps1qO3gDH1XccTj3Qmy3X4MsMBFP8AW3uIGk7QdlBp0wMi8FBrHExUR/h"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.encbody"><span + class="ellipsis">[암호화] Payload 데이터</span><br><span class="ellipsis">※ 평문 + 상태(json문자열)의 BODY항목을 2단계 암호화를 거친 암호화된 문자열 값.</span><br><span class="ellipsis">1단계: + Aes256암호화 (암호화키는 "메시지서버 암호화 Key 조회" 부분 참조)</span><br><span class="ellipsis">2단계: + Base64암호화</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(1)</td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.request.table.property.n7">요청ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.request.table.attribute.n7">BODY:requestId</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.request.table.sample.n7">1302575819285</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.createchatroom.request.table.note.n7">Packet별로 + Unique한 Id Milliseconds 형식 (ex. 1302575819285 )</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(2)</td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.request.table.property.n8">대화방유형</span> + </td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.request.table.attribute.n8">BODY:chatType</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.integer">Integer</span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.request.table.sample.n8">2</span></td> + <td class="left desc"><span + data-message-id="messenger.service.createchatroom.request.table.note.n8"><span + class="ellipsis">Chat Type, 대화방 유형</span><br><span class="ellipsis">“단방향(공지type)” + 외부연계 사용 시 2,5만 사용</span><br><span class="ellipsis"></span><br><span + class="ellipsis">0: (SINGLE) – 1:1 대화</span><br><span class="ellipsis">1: (GROUP) – + Group 대화</span><br><span class="ellipsis">2: (BROADCAST GROUP) Group + 공지방(2인이상)</span><br><span class="ellipsis">5: (BROADCAST SINGLE) 1:1 + 공지방</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(3)</td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.request.table.property.n9">참여자목록</span> + </td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.request.table.attribute.n9">BODY:receivers</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.listlong">List<long></long></span> + </td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.request.table.sample.n9">[753917009235808257,753916848517419009]</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.createchatroom.request.table.note.n9">채팅 참여자들의 User + Id를 리스트 형태로 작성</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(4)</td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.request.table.property.n10">대화방이름</span> + </td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.request.table.attribute.n10">BODY:chatroomTitle</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.request.table.sample.n10">"dev server + team"</span></td> + <td class="left desc"><span + data-message-id="messenger.service.createchatroom.request.table.note.n10">최대 길이 128 자 + (utf8mb4)</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.response.subject.enc">Response Parameter [Encrypted]</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.response.properties">Properties</span></th> + <th><span data-message-id="messenger.service.response.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.response.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.response.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.response.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.property.n1">요청ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.attribute.n1">requestId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.sample.n1">15783867572942564</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.createchatroom.response.table.note.n1"><span + class="ellipsis">Packet별로 Unique한 Id (Milliseconds 형식)</span><br><span + class="ellipsis">※ 요청시 사용한 requestId 값과 동일</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.property.n2">대화방ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.attribute.n2">chatroomId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.sample.n2">99536308621824000</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.createchatroom.response.table.note.n2">생성된 대화방 + Id</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.property.n3">결과</span> + </td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.attribute.n3">result</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.empty"></span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.sample.n3"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.createchatroom.response.table.note.n3">결과</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.property.n4">결과:코드</span> + </td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.attribute.n4">result:code</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.integer">Integer</span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.sample.n4">1000</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.createchatroom.response.table.note.n4">결과 코드</span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.property.n5">결과:(에러)내용</span> + </td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.attribute.n5">result:msg</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.sample.n5">"Detected + some invalid receivers."</span></td> + <td class="left desc"><span + data-message-id="messenger.service.createchatroom.response.table.note.n5">결과 내용</span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.property.n6">결과:참여불가상세</span> + </td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.attribute.n6">result:wrongReceiverDetail</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.empty"></span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.sample.n6"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.createchatroom.response.table.note.n6"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.property.n7">결과:참여불가상세:잘못된 + 사용자 목록</span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.attribute.n7">result: + wrongReceiverDetail: invalidReceivers</span></td> + <td><span data-message-id="messenger.service.response.datatype.listlong">List<long></long> + </span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.sample.n7">[897548937598437953, + 89754354568789456]</span></td> + <td class="left desc"><span + data-message-id="messenger.service.createchatroom.response.table.note.n7"><span + class="ellipsis">잘못된 유저정보로 대화방에 입장할 수 없는 사용자</span><br><span class="ellipsis">* 결과 + 코드 1001/3003 리턴</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.property.n8">결과:참여불가상세:정책상 + 불허된 목록</span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.attribute.n8">result: + wrongReceiverDetail: organizationViolated</span></td> + <td><span data-message-id="messenger.service.response.datatype.listlong">List<long></long> + </span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.sample.n8">[897548937598437953, + 89754354568789456]</span></td> + <td class="left desc"><span + data-message-id="messenger.service.createchatroom.response.table.note.n8"><span + class="ellipsis">정책상 대화할 수 없는 사용자 (회사가 다르면 대화가 불가함)</span><br><span + class="ellipsis">* 결과 코드 1001/3003 리턴</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.property.n9">결과:참여불가상세:단말 + 미등록자 목록</span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.attribute.n9">result: + wrongReceiverDetail: disabledReceivers</span></td> + <td><span data-message-id="messenger.service.response.datatype.listlong">List<long></long> + </span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.sample.n9">[897548937598437953, + 89754354568789456]</span></td> + <td class="left desc"><span + data-message-id="messenger.service.createchatroom.response.table.note.n9"><span + class="ellipsis">등록된 단말이 없어서 대화에 참여할 수 없는 사용자</span><br><span class="ellipsis">* 결과 + 코드 1001/3003 리턴</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.property.n10">결과:참여불가상세:자통법상 + 차단된 목록</span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.attribute.n10">result: + wrongReceiverDetail: blockedGroup</span></td> + <td><span data-message-id="messenger.service.response.datatype.listlong">List<long></long> + </span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.sample.n10">[897548937598437953, + 89754354568789456]</span></td> + <td class="left desc"><span + data-message-id="messenger.service.createchatroom.response.table.note.n10"><span + class="ellipsis">자본시장통합법에 의거 대화를 할 수 없는 관계의 사용자</span><br><span class="ellipsis">* + 결과 코드 1001/3003 리턴</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.property.n11">대화방 + 생성시간</span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.attribute.n11">createTimeMillis</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.createchatroom.response.table.sample.n11">1578386757248</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.createchatroom.response.table.note.n11">대화방 + 생성시간</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.sample.subject">Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.sample.request">Request</span></th> + <th><span data-message-id="messenger.service.sample.response">Response</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="messenger.service.createchatroom.sample.table.n1"><span + class="ellipsis">POST /messenger/message/api/v1.0/message/createChatroomRequest + HTTP/1.1</span><br><span class="ellipsis"></span><br><span class="ellipsis">headers: + {"Accept": "application/json", "Authorization": "Bearer + ed114dc382ca16d5b43154fe5832a7", "Content-Type": "application/json", "x-device-id": + "1000145874", "Content-Length": "172"}</span><br><span + class="ellipsis"></span><br><span class="ellipsis">body(암호화전): {"chatType": 2, + "requestId": 1578016699286727, + "receivers":[753917009235808257,753916848517419009]}</span></span></td> + <td class="left"><span data-message-id="messenger.service.createchatroom.sample.table.n2"><span + class="ellipsis">HTTP/1.1 200 OK</span><br><span class="ellipsis">Content-Type: + application/json</span><br><span class="ellipsis">Server: Message + Server</span><br><span class="ellipsis"></span><br><span + class="ellipsis">{"requestId": 1578016699286727, "chatroomId": 99343295704997888, + "result": {"code": 1000, "wrongReceiverDetail": {}}, createTimeMillis": + 1578016699269}</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.errorcode.subject">Error Code</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.message.errorcode.detail">"메시지 API 공통 포맷" 부분 참조 (에러코드 부분)</span></p> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg14"><span data-message-id="messenger.service.messagesend.subject">메시지 + 발신</span></div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.messagesend.uri">POST + /messenger/message/api/v1.0/message/chatRequest</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.messagesend.description">메시지를 발송한다.</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.request.subject">Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.request.parametertype">Parameter Type</span></th> + <th><span data-message-id="messenger.service.request.no">No.</span></th> + <th><span data-message-id="messenger.service.request.properties">Properties</span></th> + <th><span data-message-id="messenger.service.request.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.request.mandatory">Mandatory</span></th> + <th><span data-message-id="messenger.service.request.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.request.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.request.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td>1</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.accept">응답 허용 + 타입</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.accept">Accept</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.accept.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.accept.appjson"><span + class="ellipsis">Default: application/json</span><br><span class="ellipsis">Valid + Values: [application/json, application/xml]</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>2</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.content">첨부데이터타입</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.content">Content-Type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.contype.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.contype.appjson"><span + class="ellipsis">Payload의 content type 명시</span><br><span class="ellipsis">ex) + application/json</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>3</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.author">인증토큰</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.author">Authorization</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.authtoken">"Bearer + f5fe27195fb2523cee1758c162a9f60"</span></td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.authtoken">[평문] Access Token (발급 + 받은 Access Token)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdid">단말ID</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdid">x-device-id</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvcid">"104032854"</span></td> + <td class="left desc"><span data-message-id="messenger.service.message.request.note.dvcid">[평문] + 연계시스템용으로 등록한 단말 ID ("메신저 Device 등록" 부분 참조)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdtp">단말종류</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdtp">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvctp.rel">"relation"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.dvctp.rel"><span + class="ellipsis">[평문] 단말 타입, “relation” 으로 고정</span><br><span class="ellipsis">※ + relation: 외부연계 시스템</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.request.Payload">Payload</span></td> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.encbody">"/6Fz+KIhVzmyhiBpMrLNJp+0saSg7b7XlZp3tlXrnRLVaCHDD4XqV9dGVh6hmri7hR3dJdTps1qO3gDH1XccTj3Qmy3X4MsMBFP8AW3uIGk7QdlBp0wMi8FBrHExUR/h"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.encbody"><span + class="ellipsis">[암호화] Payload 데이터</span><br><span class="ellipsis">※ 평문 + 상태(json문자열)의 BODY항목을 2단계 암호화를 거친 암호화된 문자열 값.</span><br><span class="ellipsis">1단계: + Aes256암호화 (암호화키는 "메시지서버 암호화 Key 조회" 부분 참조)</span><br><span class="ellipsis">2단계: + Base64암호화</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(1)</td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.property.n1">요청ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.attribute.n1">BODY: + requestId</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span data-message-id="messenger.service.messagesend.request.table.sample.n1"># + {"requestId": 15784605065976949, "chatroomId": 99343295704997888, "chatMessageParams": + [{"msgId": 15784605065976949, "msgType": 0, "chatMsg": "blah~ blah~", "msgTtl": + 7200}]}</span></td> + <td class="left desc"><span + data-message-id="messenger.service.messagesend.request.table.note.n1">Packet별로 Unique한 + Id Milliseconds 형식 (ex. 1302575819285 )</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(2)</td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.property.n2">대화방ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.attribute.n2">BODY: + chatroomId</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.sample.n2">99343295704997888</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.messagesend.request.table.note.n2">대화방 ID</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(3)</td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.property.n3"></span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.attribute.n3">BODY: + chatMessageParams</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td>List<chatmessageparam></chatmessageparam> + </td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.sample.n3"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.messagesend.request.table.note.n3">최대 10개</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(3-1)</td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.property.n4"></span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.attribute.n4">BODY: + chatMessageParam: msgId</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.sample.n4">1578409921352</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.messagesend.request.table.note.n4">메시지별 Unique한 ID, + Milliseconds 형식 (ex. 1302575819285 )</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(3-2)</td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.property.n5"></span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.attribute.n5">BODY: + chatMessageParam: msgType</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.integer">Integer</span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.sample.n5">0</span></td> + <td class="left desc"><span + data-message-id="messenger.service.messagesend.request.table.note.n5"><span + class="ellipsis">Msg Type, 메시지 유형</span><br><span class="ellipsis"></span><br><span + class="ellipsis">0: (TEXT) ? Common text message</span><br><span class="ellipsis">1: + (MEDIA) ? MultiMedia message (file, video)</span><br><span class="ellipsis">7: (RTF) + - Excel message</span><br><span class="ellipsis">8: (NCUSTOM) - Message with json + format</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(3-3)</td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.property.n6"></span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.attribute.n6">BODY: + chatMessageParam: chatMsg</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.sample.n6">"Hello + world!"</span></td> + <td class="left desc"><span + data-message-id="messenger.service.messagesend.request.table.note.n6">메시지 내용 (최대 + 3,300자)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(3-4)</td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.property.n7"></span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.attribute.n7">BODY: + chatMessageParam: msgTtl</span></td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span data-message-id="messenger.service.request.datatype.integer">Integer</span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.request.table.sample.n7">7200</span></td> + <td class="left desc"><span + data-message-id="messenger.service.messagesend.request.table.note.n7"><span + class="ellipsis">메시지 서버 저장 기간 (Min : 3600 sec / Max : according to company policy / + Default : 259200 sec)</span><br><span class="ellipsis">* If an unacceptable value is + entered, the default value</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.messagesend.request.table.sample.n1"># {"requestId": + 15784605065976949, "chatroomId": 99343295704997888, "chatMessageParams": [{"msgId": 15784605065976949, + "msgType": 0, "chatMsg": "blah~ blah~", "msgTtl": 7200}]}</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.response.subject.enc">Response Parameter [Encrypted]</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.response.properties">Properties</span></th> + <th><span data-message-id="messenger.service.response.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.response.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.response.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.response.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.property.n1">요청ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.attribute.n1">requestId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.sample.n1">15783867572942564</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.messagesend.response.table.note.n1"><span + class="ellipsis">Packet별로 Unique한 Id (Milliseconds 형식)</span><br><span + class="ellipsis">※ 요청시 사용한 requestId 값과 동일</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.property.n2">대화방ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.attribute.n2">chatroomId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.sample.n2">99536308621824000</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.messagesend.response.table.note.n2">생성된 대화방 Id</span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.property.n3">결과</span> + </td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.attribute.n3">result</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.empty"></span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.sample.n3"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.messagesend.response.table.note.n3"><span + class="ellipsis">Result</span><br><span class="ellipsis">* If Nth message in 10 is + failed, It is cause of failure for the message.</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.property.n4">결과: 코드</span> + </td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.attribute.n4">result: + code</span></td> + <td><span data-message-id="messenger.service.response.datatype.integer">Integer</span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.sample.n4">1000</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.messagesend.response.table.note.n4">Result + code</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.property.n5">결과: + (에러)내용</span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.attribute.n5">result: + msg</span></td> + <td><span data-message-id="messenger.service.response.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.sample.n5"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.messagesend.response.table.note.n5">Result + message</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.property.n6">결과: + 메시지처리상세</span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.attribute.n6">result: + processedMessageEntries</span></td> + <td>List<processedmessageentrie></processedmessageentrie> + </td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.sample.n6"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.messagesend.response.table.note.n6"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.property.n7">결과: 메시지처리상세: + 메시지ID</span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.attribute.n7">result: + processedMessageEntrie: msgId</span></td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.sample.n7"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.messagesend.response.table.note.n7">전달된 메시지 ID</span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.property.n8">결과: 메시지처리상세: + 전달시간</span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.attribute.n8">result: + processedMessageEntrie: sentTime</span></td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.sample.n8">1578449866003</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.messagesend.response.table.note.n8"><span + class="ellipsis">전달시간 (서버 기준)</span><br><span class="ellipsis">* If it is failed to + sending message, returns 0</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.property.n9">결과: + 참여불가상세</span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.attribute.n9">result: + wrongReceiverDetail</span></td> + <td><span data-message-id="messenger.service.response.datatype.empty"></span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.sample.n9"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.messagesend.response.table.note.n9"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.property.n10">결과: 참여불가상세: + 잘못된 사용자 목록</span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.attribute.n10">result: + wrongReceiverDetail: invalidReceivers</span></td> + <td><span data-message-id="messenger.service.response.datatype.listlong">List<long></long> + </span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.sample.n10">[897548937598437953, + 89754354568789456]</span></td> + <td class="left desc"><span + data-message-id="messenger.service.messagesend.response.table.note.n10"><span + class="ellipsis">잘못된 유저 정보로 메시지를 전달할 수 없는 사용자</span><br><span class="ellipsis">* It + is available for ResultCode 1001/3003</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.property.n11">결과: 참여불가상세: + 단말 미등록자 목록</span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.attribute.n11">result: + wrongReceiverDetail: disabledReceivers</span></td> + <td><span data-message-id="messenger.service.response.datatype.listlong">List<long></long> + </span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.response.table.sample.n11">[897548937598437953, + 89754354568789456]</span></td> + <td class="left desc"><span + data-message-id="messenger.service.messagesend.response.table.note.n11"><span + class="ellipsis">등록된 단말이 없어서 메시지를 전달할 수 없는 사용자</span><br><span class="ellipsis">* It + is available for ResultCode 1001/1003</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.sample.subject">Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.sample.request">Request</span></th> + <th><span data-message-id="messenger.service.sample.response">Response</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.messagesend.sample.table.request.n1"><span + class="ellipsis">POST /messenger/message/api/v1.0/message/chatRequest + HTTP/1.1</span><br><span class="ellipsis">headers: {"Accept": "application/json", + "Authorization": "Bearer ed114dc382ca16d5b43154fe5832a7", "Content-Type": + "application/json", "x-device-id": "1000145874", "Content-Length": + "172"}</span><br><span class="ellipsis"></span><br><span + class="ellipsis">body(암호화전): {"requestId": 15784605065976949, "chatroomId": + 99343295704997888, "chatMessageParams": [{"msgId": 15784605065976949, "msgType": 0, + "chatMsg": "blah~ blah~", "msgTtl": 7200}]}</span></span></td> + <td class="left"><span + data-message-id="messenger.service.messagesend.sample.table.response.n1"><span + class="ellipsis">HTTP/1.1 200 OK</span><br><span class="ellipsis">Content-Type: + application/json</span><br><span class="ellipsis">Server: Message + Server</span><br><span class="ellipsis"></span><br><span + class="ellipsis">{"requestId":15784605065976949,"chatroomId":99343295704997888,"result":{"code":1000,"wrongReceiverDetail":{}},"processedMessageEntries":[{"msgId":15784605065976949,"sentTime":1578460506612}]}</span></span> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.errorcode.subject">Error Code</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.message.errorcode.detail">"메시지 API 공통 포맷" 부분 참조 (에러코드 부분)</span></p> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg15"><span data-message-id="messenger.service.inviterequest.subject">대화상대 + 초대</span></div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.inviterequest.uri">POST + /messenger/message/api/v1.0/message/inviteRequest</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.inviterequest.description">대화 상대를 초대한다.</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.request.subject">Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.request.parametertype">Parameter Type</span></th> + <th><span data-message-id="messenger.service.request.no">No.</span></th> + <th><span data-message-id="messenger.service.request.properties">Properties</span></th> + <th><span data-message-id="messenger.service.request.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.request.mandatory">Mandatory</span></th> + <th><span data-message-id="messenger.service.request.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.request.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.request.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td>1</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.accept">응답 허용 + 타입</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.accept">Accept</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.accept.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.accept.appjson"><span + class="ellipsis">Default: application/json</span><br><span class="ellipsis">Valid + Values: [application/json, application/xml]</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>2</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.content">첨부데이터타입</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.content">Content-Type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.contype.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.contype.appjson"><span + class="ellipsis">Payload의 content type 명시</span><br><span class="ellipsis">ex) + application/json</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>3</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.author">인증토큰</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.author">Authorization</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.authtoken">"Bearer + f5fe27195fb2523cee1758c162a9f60"</span></td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.authtoken">[평문] Access Token (발급 + 받은 Access Token)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdid">단말ID</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdid">x-device-id</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvcid">"104032854"</span></td> + <td class="left desc"><span data-message-id="messenger.service.message.request.note.dvcid">[평문] + 연계시스템용으로 등록한 단말 ID ("메신저 Device 등록" 부분 참조)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdtp">단말종류</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdtp">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvctp.rel">"relation"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.dvctp.rel"><span + class="ellipsis">[평문] 단말 타입, “relation” 으로 고정</span><br><span class="ellipsis">※ + relation: 외부연계 시스템</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.request.Payload">Payload</span></td> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.encbody">"/6Fz+KIhVzmyhiBpMrLNJp+0saSg7b7XlZp3tlXrnRLVaCHDD4XqV9dGVh6hmri7hR3dJdTps1qO3gDH1XccTj3Qmy3X4MsMBFP8AW3uIGk7QdlBp0wMi8FBrHExUR/h"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.encbody"><span + class="ellipsis">[암호화] Payload 데이터</span><br><span class="ellipsis">※ 평문 + 상태(json문자열)의 BODY항목을 2단계 암호화를 거친 암호화된 문자열 값.</span><br><span class="ellipsis">1단계: + Aes256암호화 (암호화키는 "메시지서버 암호화 Key 조회" 부분 참조)</span><br><span class="ellipsis">2단계: + Base64암호화</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(1)</td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.request.table.property.n7">요청ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.request.table.attribute.n7">BODY: + requestId</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.request.table.sample.n7">1302575819285</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.inviterequest.request.table.note.n7">Packet별로 Unique한 + Id Milliseconds 형식 (ex. 1302575819285 )</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(2)</td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.request.table.property.n8">대화방ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.request.table.attribute.n8">BODY: + chatroomId</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.request.table.sample.n8">99343295704997888</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.inviterequest.request.table.note.n8">대화방 ID</span> + </td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(3)</td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.request.table.property.n9">초대자목록</span> + </td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.request.table.attribute.n9">BODY: + invitingMembers</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.listlong">List<long></long></span> + </td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.request.table.sample.n9">[773887412433063937, + 74124330639377655]</span></td> + <td class="left desc"><span + data-message-id="messenger.service.inviterequest.request.table.note.n9">초대 대상자 User + Id</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.inviterequest.request.commant.n1"># {"requestId": 15784506666772442, + "chatroomId": 99343295704997888, "invitingMembers": [773887412433063937]}</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.response.subject.enc">Response Parameter [Encrypted]</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.response.properties">Properties</span></th> + <th><span data-message-id="messenger.service.response.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.response.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.response.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.response.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.property.n1">요청ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.attribute.n1">requestId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.sample.n1">15783867572942564</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.inviterequest.response.table.note.n1"><span + class="ellipsis">Packet별로 Unique한 Id (Milliseconds 형식)</span><br><span + class="ellipsis">※ 요청시 사용한 requestId 값과 동일</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.property.n2">대화방ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.attribute.n2">chatroomId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.sample.n2">99536308621824000</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.inviterequest.response.table.note.n2">생성된 대화방 + Id</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.property.n3">초대받은시간</span> + </td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.attribute.n3">sentTime</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.sample.n3">1578450666592</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.inviterequest.response.table.note.n3">서버로부터 초대받은 + 시간</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.property.n4">결과</span> + </td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.attribute.n4">result</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.empty"></span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.sample.n4"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.inviterequest.response.table.note.n4"><span + class="ellipsis">Result</span><br><span class="ellipsis">* If Nth message in 10 is + failed, It is cause of failure for the message.</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.property.n5">결과: + 코드</span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.attribute.n5">result: + code</span></td> + <td><span data-message-id="messenger.service.response.datatype.integer">Integer</span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.sample.n5">1000</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.inviterequest.response.table.note.n5">Result + code</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.property.n6">결과: + (에러)내용</span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.attribute.n6">result: + msg</span></td> + <td><span data-message-id="messenger.service.response.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.sample.n6"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.inviterequest.response.table.note.n6">Result + message</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.property.n7">결과: + 참여불가상세</span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.attribute.n7">result: + wrongReceiverDetail</span></td> + <td><span data-message-id="messenger.service.response.datatype.empty"></span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.sample.n7"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.inviterequest.response.table.note.n7"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.property.n8">결과: 참여불가상세: + 잘못된 사용자 목록</span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.attribute.n8">result: + wrongReceiverDetail: invalidReceivers</span></td> + <td><span data-message-id="messenger.service.response.datatype.listlong">List<long></long> + </span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.sample.n8">[897548937598437953, + 89754354568789456]</span></td> + <td class="left desc"><span + data-message-id="messenger.service.inviterequest.response.table.note.n8"><span + class="ellipsis">잘못된 유저 정보로 메시지를 전달할 수 없는 사용자</span><br><span class="ellipsis">* It + is available for ResultCode 1001/3003</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.property.n9">결과: 참여불가상세: + 정책상 불허된 목록</span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.attribute.n9">result: + wrongReceiverDetail: organizationViolated</span></td> + <td><span data-message-id="messenger.service.response.datatype.listlong">List<long></long> + </span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.sample.n9">[897548937598437953, + 89754354568789456]</span></td> + <td class="left desc"><span + data-message-id="messenger.service.inviterequest.response.table.note.n9"><span + class="ellipsis">정책상 대화할 수 없는 사용자 (회사가 다르면 대화가 불가함)</span><br><span + class="ellipsis">* It is available for ResultCode 1001/3003</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.property.n10">결과: + 참여불가상세: 단말 미등록자 목록</span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.attribute.n10">result: + wrongReceiverDetail: disabledReceivers</span></td> + <td><span data-message-id="messenger.service.response.datatype.listlong">List<long></long> + </span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.sample.n10">[897548937598437953, + 89754354568789456]</span></td> + <td class="left desc"><span + data-message-id="messenger.service.inviterequest.response.table.note.n10"><span + class="ellipsis">등록된 단말이 없어서 메시지를 전달할 수 없는 사용자</span><br><span class="ellipsis"> * + It is available for ResultCode 1001/1003</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.property.n11">결과: + 참여불가상세: 이미 참여한 목록</span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.attribute.n11">result: + wrongReceiverDetail: existing</span></td> + <td><span data-message-id="messenger.service.response.datatype.listlong">List<long></long> + </span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.sample.n11">[897548937598437953, + 89754354568789456]</span></td> + <td class="left desc"><span + data-message-id="messenger.service.inviterequest.response.table.note.n11"><span + class="ellipsis">이미 대화방에 참여중인 사용자</span><br><span class="ellipsis">* It is available + for ResultCode 1001/3003</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.property.n12">결과: + 참여불가상세: 인원제한으로 누락된 목록</span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.attribute.n12">result: + wrongReceiverDetail: interruptedReceivers</span></td> + <td><span data-message-id="messenger.service.response.datatype.listlong">List<long></long> + </span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.sample.n12">[897548937598437953, + 89754354568789456]</span></td> + <td class="left desc"><span + data-message-id="messenger.service.inviterequest.response.table.note.n12"><span + class="ellipsis">대화방의 멤버가 최대 인원을 넘어서 초대할 수 없는 사용자</span><br><span class="ellipsis">* + It is available for ResultCode 1001/3003</span><br><span + class="ellipsis"></span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.property.n13">결과: + 참여불가상세: 자통법상 차단된 목록</span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.attribute.n13">result: + wrongReceiverDetail: blockedGroup</span></td> + <td><span data-message-id="messenger.service.response.datatype.listlong">List<long></long> + </span></td> + <td class="left"><span + data-message-id="messenger.service.inviterequest.response.table.sample.n13">[897548937598437953, + 89754354568789456]</span></td> + <td class="left desc"><span + data-message-id="messenger.service.inviterequest.response.table.note.n13"><span + class="ellipsis">자본시장통합법에 의거 대화를 할 수 없는 관계의 사용자</span><br><span class="ellipsis"> * + It is available for ResultCode 1001/3003</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.inviterequest.response.commant.n1"># + {"requestId":15784506666772442,"chatroomId":99343295704997888,"result":{"code":1000,"wrongReceiverDetail":{}},"sentTime":1578450666592}</span> + </p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.sample.subject">Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.sample.request">Request</span></th> + <th><span data-message-id="messenger.service.sample.response">Response</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="messenger.service.inviterequest.sample.request"><span + class="ellipsis">POST /messenger/message/api/v1.0/message/inviteRequest + HTTP/1.1</span><br><span class="ellipsis">headers: {"Accept": "application/json", + "Authorization": "Bearer ed114dc382ca16d5b43154fe5832a7", "Content-Type": + "application/json", "x-device-id": "1000145874", "Content-Length": + "172"}</span><br><span class="ellipsis">body(��ȣȭ��): {"requestId": + 15784506666772442, "chatroomId": 99343295704997888, "invitingMembers": + [773887412433063937]}</span></span></td> + <td class="left"><span data-message-id="messenger.service.inviterequest.sample.response"><span + class="ellipsis">HTTP/1.1 200 OK</span><br><span class="ellipsis">Content-Type: + application/json</span><br><span class="ellipsis">Server: Message + Server</span><br><span + class="ellipsis">{"requestId":15784506666772442,"chatroomId":99343295704997888,"result":{"code":1000,"wrongReceiverDetail":{}},"sentTime":1578450666592}</span></span> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.errorcode.subject">Error Code</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.message.errorcode.detail">"메시지 API 공통 포맷" 부분 참조 (에러코드 부분)</span></p> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg16"><span data-message-id="messenger.service.removemember.subject">대화상대 + 내보내기</span></div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.removemember.uri">POST + /messenger/message/api/v1.0/message/removeMemberRequest</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.removemember.description">대화 상대를 방출한다.</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.request.subject">Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.request.parametertype">Parameter Type</span></th> + <th><span data-message-id="messenger.service.request.no">No.</span></th> + <th><span data-message-id="messenger.service.request.properties">Properties</span></th> + <th><span data-message-id="messenger.service.request.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.request.mandatory">Mandatory</span></th> + <th><span data-message-id="messenger.service.request.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.request.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.request.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td>1</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.accept">응답 허용 + 타입</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.accept">Accept</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.accept.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.accept.appjson"><span + class="ellipsis">Default: application/json</span><br><span class="ellipsis">Valid + Values: [application/json, application/xml]</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>2</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.content">첨부데이터타입</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.content">Content-Type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.contype.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.contype.appjson"><span + class="ellipsis">Payload의 content type 명시</span><br><span class="ellipsis">ex) + application/json</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>3</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.author">인증토큰</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.author">Authorization</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.authtoken">"Bearer + f5fe27195fb2523cee1758c162a9f60"</span></td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.authtoken">[평문] Access Token (발급 + 받은 Access Token)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdid">단말ID</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdid">x-device-id</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvcid">"104032854"</span></td> + <td class="left desc"><span data-message-id="messenger.service.message.request.note.dvcid">[평문] + 연계시스템용으로 등록한 단말 ID ("메신저 Device 등록" 부분 참조)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdtp">단말종류</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdtp">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvctp.rel">"relation"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.dvctp.rel"><span + class="ellipsis">[평문] 단말 타입, “relation” 으로 고정</span><br><span class="ellipsis">※ + relation: 외부연계 시스템</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.request.Payload">Payload</span></td> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.encbody">"/6Fz+KIhVzmyhiBpMrLNJp+0saSg7b7XlZp3tlXrnRLVaCHDD4XqV9dGVh6hmri7hR3dJdTps1qO3gDH1XccTj3Qmy3X4MsMBFP8AW3uIGk7QdlBp0wMi8FBrHExUR/h"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.encbody"><span + class="ellipsis">[암호화] Payload 데이터</span><br><span class="ellipsis">※ 평문 + 상태(json문자열)의 BODY항목을 2단계 암호화를 거친 암호화된 문자열 값.</span><br><span class="ellipsis">1단계: + Aes256암호화 (암호화키는 "메시지서버 암호화 Key 조회" 부분 참조)</span><br><span class="ellipsis">2단계: + Base64암호화</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(1)</td> + <td class="left"><span + data-message-id="messenger.service.removemember.request.table.property.n7">요청ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.removemember.request.table.attribute.n7">BODY:requestId</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.removemember.request.table.sample.n7">1302575819285</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.removemember.request.table.note.n7">Packet별로 Unique한 + Id Milliseconds 형식 (ex. 1302575819285 )</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(2)</td> + <td class="left"><span + data-message-id="messenger.service.removemember.request.table.property.n8">대화방ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.removemember.request.table.attribute.n8">BODY:chatroomId</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.removemember.request.table.sample.n8">99343295704997888</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.removemember.request.table.note.n8">대화방 ID</span> + </td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(3)</td> + <td class="left"><span + data-message-id="messenger.service.removemember.request.table.property.n9">방출자 목록</span> + </td> + <td class="left"><span + data-message-id="messenger.service.removemember.request.table.attribute.n9">BODY:removingMembers</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.listlong">List<long></long></span> + </td> + <td class="left"><span + data-message-id="messenger.service.removemember.request.table.sample.n9">[753917009235808257,753916848517419009]</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.removemember.request.table.note.n9">방출할 대상자 User Id를 + 리스트 형태로 작성</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.response.subject.enc">Response Parameter [Encrypted]</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.response.properties">Properties</span></th> + <th><span data-message-id="messenger.service.response.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.response.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.response.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.response.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.property.n1">요청ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.attribute.n1">requestId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.sample.n1">15783867572942564</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.removemember.response.table.note.n1"><span + class="ellipsis">Packet별로 Unique한 Id (Milliseconds 형식)</span><br><span + class="ellipsis">※ 요청시 사용한 requestId 값과 동일</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.property.n2">대화방ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.attribute.n2">chatroomId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.sample.n2">99536308621824000</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.removemember.response.table.note.n2">생성된 대화방 + Id</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.property.n3">요청시간</span> + </td> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.attribute.n3 ></span></td> <!--.3--> <td><span data-message-id=" + messenger.service.response.datatype.long"=""> <!--.3--> + <td><span data-message-id="]</tr"></span></td></span></td> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.sample.n3">1578450666592</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.removemember.response.table.note.n3">서버로 요청받은 + 시간</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.property.n4">결과</span> + </td> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.attribute.n4">result</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.empty"></span></td> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.sample.n4"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.removemember.response.table.note.n4">결과</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.property.n5">결과:코드</span> + </td> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.attribute.n5">result:code</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.integer">Integer</span></td> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.sample.n5">1000</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.removemember.response.table.note.n5">결과 코드</span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.property.n6">결과:(에러)내용</span> + </td> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.attribute.n6">result:msg</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.sample.n6"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.removemember.response.table.note.n6">결과 내용</span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.property.n7">결과:비정상수신자상세</span> + </td> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.attribute.n7">result:wrongReceiverDetail</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.empty"></span></td> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.sample.n7"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.removemember.response.table.note.n7"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.property.n8">결과:비정상수신자상세:미참여</span> + </td> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.attribute.n8">result: + wrongReceiverDetail:notExisting</span></td> + <td><span data-message-id="messenger.service.response.datatype.listlong">List<long></long> + </span></td> + <td class="left"><span + data-message-id="messenger.service.removemember.response.table.sample.n8">[897548937598437953, + 89754354568789456]</span></td> + <td class="left desc"><span + data-message-id="messenger.service.removemember.response.table.note.n8"><span + class="ellipsis">내보내기 대상자 중 대화방 멤버가 아닌 사용자</span><br><span class="ellipsis">* 결과 코드 + 1001/3003 리턴</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.sample.subject">Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.sample.request">Request</span></th> + <th><span data-message-id="messenger.service.sample.response">Response</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="messenger.service.removemember.sample.table.n1"><span + class="ellipsis">POST /messenger/message/api/v1.0/message/removeMemberRequest + HTTP/1.1</span><br><span class="ellipsis"></span><br><span class="ellipsis">headers: + {"Accept": "application/json", "Authorization": "Bearer + ed114dc382ca16d5b43154fe5832a7", "Content-Type": "application/json", "x-device-id": + "1000145874", "Content-Length": "172"}</span><br><span + class="ellipsis"></span><br><span class="ellipsis">body(암호화전): {"requestId": + 15784562811364493, "chatroomId": 99343295704997888, "removingMembers": + [773887412433063937]}</span></span></td> + <td class="left"><span data-message-id="messenger.service.removemember.sample.table.n2"><span + class="ellipsis">HTTP/1.1 200 OK</span><br><span class="ellipsis">Content-Type: + application/json</span><br><span class="ellipsis">Server: Message + Server</span><br><span class="ellipsis"></span><br><span + class="ellipsis">{"requestId":15784562811364493,"chatroomId":99343295704997888,"result":{"code":1000},"sentTime":1578456281137}</span></span> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.errorcode.subject">Error Code</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.message.errorcode.detail">"메시지 API 공통 포맷" 부분 참조 (에러코드 부분)</span></p> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg17"><span data-message-id="messenger.service.destroychatroom.subject">대화방 + 삭제</span></div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.destroychatroom.uri">POST + /messenger/message/api/v1.0/message/destroyChatroomRequest</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.destroychatroom.description">대화방을 삭제한다.</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.request.subject">Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.request.parametertype">Parameter Type</span></th> + <th><span data-message-id="messenger.service.request.no">No.</span></th> + <th><span data-message-id="messenger.service.request.properties">Properties</span></th> + <th><span data-message-id="messenger.service.request.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.request.mandatory">Mandatory</span></th> + <th><span data-message-id="messenger.service.request.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.request.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.request.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td>1</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.accept">응답 허용 + 타입</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.accept">Accept</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.accept.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.accept.appjson"><span + class="ellipsis">Default: application/json</span><br><span class="ellipsis">Valid + Values: [application/json, application/xml]</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>2</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.content">첨부데이터타입</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.content">Content-Type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.contype.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.contype.appjson"><span + class="ellipsis">Payload의 content type 명시</span><br><span class="ellipsis">ex) + application/json</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>3</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.author">인증토큰</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.author">Authorization</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.authtoken">"Bearer + f5fe27195fb2523cee1758c162a9f60"</span></td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.authtoken">[평문] Access Token (발급 + 받은 Access Token)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdid">단말ID</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdid">x-device-id</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvcid">"104032854"</span></td> + <td class="left desc"><span data-message-id="messenger.service.message.request.note.dvcid">[평문] + 연계시스템용으로 등록한 단말 ID ("메신저 Device 등록" 부분 참조)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdtp">단말종류</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdtp">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvctp.rel">"relation"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.dvctp.rel"><span + class="ellipsis">[평문] 단말 타입, “relation” 으로 고정</span><br><span class="ellipsis">※ + relation: 외부연계 시스템</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.request.Payload">Payload</span></td> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.encbody">"/6Fz+KIhVzmyhiBpMrLNJp+0saSg7b7XlZp3tlXrnRLVaCHDD4XqV9dGVh6hmri7hR3dJdTps1qO3gDH1XccTj3Qmy3X4MsMBFP8AW3uIGk7QdlBp0wMi8FBrHExUR/h"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.encbody"><span + class="ellipsis">[암호화] Payload 데이터</span><br><span class="ellipsis">※ 평문 + 상태(json문자열)의 BODY항목을 2단계 암호화를 거친 암호화된 문자열 값.</span><br><span class="ellipsis">1단계: + Aes256암호화 (암호화키는 "메시지서버 암호화 Key 조회" 부분 참조)</span><br><span class="ellipsis">2단계: + Base64암호화</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(1)</td> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.request.table.property.n7">요청ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.request.table.attribute.n7">BODY:requestId</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.request.table.sample.n7">1302575819285</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.destroychatroom.request.table.note.n7">Packet별로 + Unique한 Id Milliseconds 형식 (ex. 1302575819285 )</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(2)</td> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.request.table.property.n8">대화방ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.request.table.attribute.n8">BODY:chatroomId</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.request.table.sample.n8">99343295704997888</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.destroychatroom.request.table.note.n8">대화방 ID</span> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.response.subject.enc">Response Parameter [Encrypted]</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.response.properties">Properties</span></th> + <th><span data-message-id="messenger.service.response.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.response.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.response.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.response.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.response.table.property.n1">요청ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.response.table.attribute.n1">requestId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.response.table.sample.n1">15783867572942564</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.destroychatroom.response.table.note.n1"><span + class="ellipsis">Packet별로 Unique한 Id (Milliseconds 형식)</span><br><span + class="ellipsis">※ 요청시 사용한 requestId 값과 동일</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.response.table.property.n2">대화방ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.response.table.attribute.n2">chatroomId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.response.table.sample.n2">99536308621824000</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.destroychatroom.response.table.note.n2">생성된 대화방 + Id</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.response.table.property.n3">결과</span> + </td> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.response.table.attribute.n3">result</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.empty"></span></td> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.response.table.sample.n3"></span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.destroychatroom.response.table.note.n3">결과</span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.response.table.property.n4">결과:코드</span> + </td> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.response.table.attribute.n4">result:code</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.integer">Integer</span></td> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.response.table.sample.n4">1000</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.destroychatroom.response.table.note.n4">결과 코드</span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.response.table.property.n5">결과:(에러)내용</span> + </td> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.response.table.attribute.n5">result:msg</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.destroychatroom.response.table.sample.n5"></span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.destroychatroom.response.table.note.n5">결과 내용</span> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.sample.subject">Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.sample.request">Request</span></th> + <th><span data-message-id="messenger.service.sample.response">Response</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="messenger.service.destroychatroom.sample.table.n1"><span + class="ellipsis">POST /messenger/message/api/v1.0/message/destroyChatroomRequest + HTTP/1.1</span><br><span class="ellipsis"></span><br><span class="ellipsis">headers: + {"Accept": "application/json", "Authorization": "Bearer + ed114dc382ca16d5b43154fe5832a7", "Content-Type": "application/json", "x-device-id": + "1000145874", "Content-Length": "172"}</span><br><span + class="ellipsis"></span><br><span class="ellipsis">body(암호화전){"requestId": + 15784562811364493, "chatroomId": 99343295704997888}</span></span></td> + <td class="left"><span data-message-id="messenger.service.destroychatroom.sample.table.n2"><span + class="ellipsis">HTTP/1.1 200 OK Content-Type: application/json Server: Message + Server</span><br><span + class="ellipsis">{"requestId":15784562811364493,"chatroomId":99343295704997888,"result":{"code":1000}}</span></span> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.errorcode.subject">Error Code</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.message.errorcode.detail">"메시지 API 공통 포맷" 부분 참조 (에러코드 부분)</span></p> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg18"><span data-message-id="messenger.service.recallmessage.subject">메시지 + 발신취소</span></div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.recallmessage.uri">POST + /messenger/message/api/v1.0/message/recallMessageRequest</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.recallmessage.description">발송된 메시지를 취소한다.</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.request.subject">Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.request.parametertype">Parameter Type</span></th> + <th><span data-message-id="messenger.service.request.no">No.</span></th> + <th><span data-message-id="messenger.service.request.properties">Properties</span></th> + <th><span data-message-id="messenger.service.request.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.request.mandatory">Mandatory</span></th> + <th><span data-message-id="messenger.service.request.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.request.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.request.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td>1</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.accept">응답 허용 + 타입</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.accept">Accept</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.accept.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.accept.appjson"><span + class="ellipsis">Default: application/json</span><br><span class="ellipsis">Valid + Values: [application/json, application/xml]</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>2</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.content">첨부데이터타입</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.content">Content-Type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.contype.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.contype.appjson"><span + class="ellipsis">Payload의 content type 명시</span><br><span class="ellipsis">ex) + application/json</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>3</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.author">인증토큰</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.author">Authorization</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.authtoken">"Bearer + f5fe27195fb2523cee1758c162a9f60"</span></td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.authtoken">[평문] Access Token (발급 + 받은 Access Token)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdid">단말ID</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdid">x-device-id</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvcid">"104032854"</span></td> + <td class="left desc"><span data-message-id="messenger.service.message.request.note.dvcid">[평문] + 연계시스템용으로 등록한 단말 ID ("메신저 Device 등록" 부분 참조)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdtp">단말종류</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdtp">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvctp.rel">"relation"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.dvctp.rel"><span + class="ellipsis">[평문] 단말 타입, “relation” 으로 고정</span><br><span class="ellipsis">※ + relation: 외부연계 시스템</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.request.Payload">Payload</span></td> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.encbody">"/6Fz+KIhVzmyhiBpMrLNJp+0saSg7b7XlZp3tlXrnRLVaCHDD4XqV9dGVh6hmri7hR3dJdTps1qO3gDH1XccTj3Qmy3X4MsMBFP8AW3uIGk7QdlBp0wMi8FBrHExUR/h"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.encbody"><span + class="ellipsis">[암호화] Payload 데이터</span><br><span class="ellipsis">※ 평문 + 상태(json문자열)의 BODY항목을 2단계 암호화를 거친 암호화된 문자열 값.</span><br><span class="ellipsis">1단계: + Aes256암호화 (암호화키는 "메시지서버 암호화 Key 조회" 부분 참조)</span><br><span class="ellipsis">2단계: + Base64암호화</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(1)</td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.request.table.property.n7">요청ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.request.table.attribute.n7">BODY:requestId</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.request.table.sample.n7">1302575819285</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.recallmessage.request.table.note.n7">Packet별로 Unique한 + Id Milliseconds 형식 (ex. 1302575819285 )</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(2)</td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.request.table.property.n8">대화방ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.request.table.attribute.n8">BODY:chatroomId</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.request.table.sample.n8">99343295704997888</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.recallmessage.request.table.note.n8">대화방 ID</span> + </td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(3)</td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.request.table.property.n9">메시지ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.request.table.attribute.n9">BODY:msgId</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.request.table.sample.n9">15784605065976949</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.recallmessage.request.table.note.n9">발신 취소 대상 메시지 + ID</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(4)</td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.request.table.property.n10">원본메시지 + 발송시간</span></td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.request.table.attribute.n10">BODY:sentTime</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.request.table.sample.n10">1578460506612</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.recallmessage.request.table.note.n10">원본 메시지 발송시간 + (메시지 발송 ChatReply 의 sentTime)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(5)</td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.request.table.property.n11">미디어정보</span> + </td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.request.table.attribute.n11">BODY:mediaInfo</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.request.table.sample.n11">"http:// + sqaproxy.samsung.net/file/v1/file/esK93SYcoqeE8ETvJgUdeg"</span></td> + <td class="left desc"><span + data-message-id="messenger.service.recallmessage.request.table.note.n11">발신취소 대상 메시지가 + MEDIA 타입인 경우 삭제 대상 파일의 "download url"</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.response.subject.enc">Response Parameter [Encrypted]</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.response.properties">Properties</span></th> + <th><span data-message-id="messenger.service.response.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.response.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.response.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.response.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.recallmessage.response.table.property.n1">요청ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.response.table.attribute.n1">requestId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.response.table.sample.n1">15783867572942564</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.recallmessage.response.table.note.n1"><span + class="ellipsis">Packet별로 Unique한 Id (Milliseconds 형식)</span><br><span + class="ellipsis">※ 요청시 사용한 requestId 값과 동일</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.recallmessage.response.table.property.n2">대화방ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.response.table.attribute.n2">chatroomId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.response.table.sample.n2">99536308621824000</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.recallmessage.response.table.note.n2">생성된 대화방 + Id</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.recallmessage.response.table.property.n3">결과</span> + </td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.response.table.attribute.n3">result</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.empty"></span></td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.response.table.sample.n3"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.recallmessage.response.table.note.n3">결과</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.recallmessage.response.table.property.n4">결과:코드</span> + </td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.response.table.attribute.n4">result:code</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.integer">Integer</span></td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.response.table.sample.n4">1000</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.recallmessage.response.table.note.n4">결과 코드</span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.recallmessage.response.table.property.n5">결과:(에러)내용</span> + </td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.response.table.attribute.n5">result:msg</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.recallmessage.response.table.sample.n5"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.recallmessage.response.table.note.n5">결과 내용</span> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.sample.subject">Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.sample.request">Request</span></th> + <th><span data-message-id="messenger.service.sample.response">Response</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="messenger.service.recallmessage.sample.table.n1"><span + class="ellipsis">POST /messenger/message/api/v1.0/message/recallMessageRequest + HTTP/1.1</span><br><span class="ellipsis"></span><br><span class="ellipsis">headers: + {"Accept": "application/json", "Authorization": "Bearer + ed114dc382ca16d5b43154fe5832a7", "Content-Type": "application/json", "x-device-id": + "1000145874", "Content-Length": "172"}</span><br><span + class="ellipsis"></span><br><span class="ellipsis">body(암호화전): {"requestId": + 15784610001948974, "chatroomId": 99343295704997888, "msgId": 15784605065976949, + "sentTime": 1578460506612}</span></span></td> + <td class="left"><span data-message-id="messenger.service.recallmessage.sample.table.n2"><span + class="ellipsis">HTTP/1.1 200 OK</span><br><span class="ellipsis">Content-Type: + application/json</span><br><span class="ellipsis">Server: Message + Server</span><br><span class="ellipsis"></span><br><span + class="ellipsis">{"requestId":15784610001948974,"chatroomId":99343295704997888,"result":{"code":1000}}</span></span> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.errorcode.subject">Error Code</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.message.errorcode.detail">"메시지 API 공통 포맷" 부분 참조 (에러코드 부분)</span></p> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg19"><span + data-message-id="messenger.service.changechatroomtitle.subject">대화방명 변경</span></div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.changechatroomtitle.uri">POST + /messenger/message/api/v1.0/message/changeChatroomMetaRequest</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.changechatroomtitle.description">대화방의 Meta 정보를 변경한다. (대화방명 변경만 + 가능)</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.request.subject">Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.request.parametertype">Parameter Type</span></th> + <th><span data-message-id="messenger.service.request.no">No.</span></th> + <th><span data-message-id="messenger.service.request.properties">Properties</span></th> + <th><span data-message-id="messenger.service.request.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.request.mandatory">Mandatory</span></th> + <th><span data-message-id="messenger.service.request.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.request.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.request.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td>1</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.accept">응답 허용 + 타입</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.accept">Accept</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.accept.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.accept.appjson"><span + class="ellipsis">Default: application/json</span><br><span class="ellipsis">Valid + Values: [application/json, application/xml]</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>2</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.content">첨부데이터타입</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.content">Content-Type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.contype.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.contype.appjson"><span + class="ellipsis">Payload의 content type 명시</span><br><span class="ellipsis">ex) + application/json</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>3</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.author">인증토큰</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.author">Authorization</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.authtoken">"Bearer + f5fe27195fb2523cee1758c162a9f60"</span></td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.authtoken">[평문] Access Token (발급 + 받은 Access Token)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdid">단말ID</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdid">x-device-id</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvcid">"104032854"</span></td> + <td class="left desc"><span data-message-id="messenger.service.message.request.note.dvcid">[평문] + 연계시스템용으로 등록한 단말 ID ("메신저 Device 등록" 부분 참조)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdtp">단말종류</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdtp">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvctp.rel">"relation"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.dvctp.rel"><span + class="ellipsis">[평문] 단말 타입, “relation” 으로 고정</span><br><span class="ellipsis">※ + relation: 외부연계 시스템</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.request.Payload">Payload</span></td> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.encbody">"/6Fz+KIhVzmyhiBpMrLNJp+0saSg7b7XlZp3tlXrnRLVaCHDD4XqV9dGVh6hmri7hR3dJdTps1qO3gDH1XccTj3Qmy3X4MsMBFP8AW3uIGk7QdlBp0wMi8FBrHExUR/h"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.encbody"><span + class="ellipsis">[암호화] Payload 데이터</span><br><span class="ellipsis">※ 평문 + 상태(json문자열)의 BODY항목을 2단계 암호화를 거친 암호화된 문자열 값.</span><br><span class="ellipsis">1단계: + Aes256암호화 (암호화키는 "메시지서버 암호화 Key 조회" 부분 참조)</span><br><span class="ellipsis">2단계: + Base64암호화</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(1)</td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.request.table.property.n1">요청ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.request.table.attribute.n1">BODY: + requestId</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.request.table.sample.n1">1302575819285</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.changechatroomtitle.request.table.note.n1">Packet별로 + Unique한 Id Milliseconds 형식 (ex. 1302575819285 )</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(2)</td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.request.table.property.n2">대화방ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.request.table.attribute.n2">BODY: + chatroomId</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.request.table.sample.n2">99343295704997888</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.changechatroomtitle.request.table.note.n2">대화방 + ID</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(3)</td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.request.table.property.n3">대화방 + 이름</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.request.table.attribute.n3">BODY: + title</span></td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.request.table.sample.n3">"dev + server team"</span></td> + <td class="left desc"><span + data-message-id="messenger.service.changechatroomtitle.request.table.note.n3">변경하고자 하는 + 대화방명</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.changechatroomtitle.request.sample"># {"requestId": + 15784610001948974, "chatroomId": 99343295704997888, "title": "메시지 테스트방1"}</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.response.subject.enc">Response Parameter [Encrypted]</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.response.properties">Properties</span></th> + <th><span data-message-id="messenger.service.response.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.response.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.response.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.response.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.response.table.property.n1">요청ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.response.table.attribute.n1">requestId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.response.table.sample.n1">15783867572942564</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.changechatroomtitle.response.table.note.n1"><span + class="ellipsis">Packet별로 Unique한 Id (Milliseconds 형식)</span><br><span + class="ellipsis">※ 요청시 사용한 requestId 값과 동일</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.response.table.property.n2">대화방ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.response.table.attribute.n2">chatroomId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.response.table.sample.n2">99536308621824000</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.changechatroomtitle.response.table.note.n2">생성된 대화방 + Id</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.response.table.property.n3">결과</span> + </td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.response.table.attribute.n3">result</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.empty"></span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.response.table.sample.n3"></span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.changechatroomtitle.response.table.note.n3">Result</span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.response.table.property.n4">결과: + 코드</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.response.table.attribute.n4">result: + code</span></td> + <td><span data-message-id="messenger.service.response.datatype.integer">Integer</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.response.table.sample.n4">1000</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.changechatroomtitle.response.table.note.n4">Result + code</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.response.table.property.n5">결과: + (에러)내용</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.response.table.attribute.n5">result: + msg</span></td> + <td><span data-message-id="messenger.service.response.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.response.table.sample.n5"></span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.changechatroomtitle.response.table.note.n5">Result + message</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.response.table.property.n6">대화방 + 변경시간</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.response.table.attribute.n6">changeTimeMillis</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.response.table.sample.n6">1578386757248</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.changechatroomtitle.response.table.note.n6">대화방 + 속성(이름)이 변경된 시간</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.changechatroomtitle.response.sample"># {"requestId": + 15784610001948974, "chatroomId": 99343295704997888, "result": {"code": 1000}, changeTimeMillis": + 1578016699269}</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.sample.subject">Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.sample.request">Request</span></th> + <th><span data-message-id="messenger.service.sample.response">Response</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.sample.table.request.n1"><span + class="ellipsis">POST /messenger/message/api/v1.0/message/changeChatroomMetaRequest + HTTP/1.1</span><br><span class="ellipsis">headers: {"Accept": "application/json", + "Authorization": "Bearer ed114dc382ca16d5b43154fe5832a7", "Content-Type": + "application/json", "x-device-id": "1000145874", "Content-Length": + "172"}</span><br><span class="ellipsis"></span><br><span + class="ellipsis">body(암호화전): {"requestId": 15784610001948974, "chatroomId": + 99343295704997888, "title": "메시지 테스트방1"}</span></span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomtitle.sample.table.response.n1"><span + class="ellipsis">HTTP/1.1 200 OK</span><br><span class="ellipsis">Content-Type: + application/json</span><br><span class="ellipsis">Server: Message + Server</span><br><span class="ellipsis"></span><br><span + class="ellipsis">{"requestId": 15784610001948974, "chatroomId": 99343295704997888, + "result": {"code": 1000}, changeTimeMillis": 1578016699269}</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.errorcode.subject">Error Code</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.message.errorcode.detail">"메시지 API 공통 포맷" 부분 참조 (에러코드 부분)</span></p> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg20"><span data-message-id="messenger.service.changechatroomowner.subject">방장 + 변경</span></div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.changechatroomowner.uri">POST + /messenger/message/api/v1.0/message/changeOwnerRequest</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.changechatroomowner.description">대화방의 방장을 변경한다. (ChatType이 0: (1:1 + 대화방), 1: (Group 대화방)에서만 지원됨)</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.request.subject">Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.request.parametertype">Parameter Type</span></th> + <th><span data-message-id="messenger.service.request.no">No.</span></th> + <th><span data-message-id="messenger.service.request.properties">Properties</span></th> + <th><span data-message-id="messenger.service.request.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.request.mandatory">Mandatory</span></th> + <th><span data-message-id="messenger.service.request.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.request.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.request.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td>1</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.accept">응답 허용 + 타입</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.accept">Accept</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.accept.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.accept.appjson"><span + class="ellipsis">Default: application/json</span><br><span class="ellipsis">Valid + Values: [application/json, application/xml]</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>2</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.content">첨부데이터타입</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.content">Content-Type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.contype.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.contype.appjson"><span + class="ellipsis">Payload의 content type 명시</span><br><span class="ellipsis">ex) + application/json</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>3</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.author">인증토큰</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.author">Authorization</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.authtoken">"Bearer + f5fe27195fb2523cee1758c162a9f60"</span></td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.authtoken">[평문] Access Token (발급 + 받은 Access Token)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdid">단말ID</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdid">x-device-id</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvcid">"104032854"</span></td> + <td class="left desc"><span data-message-id="messenger.service.message.request.note.dvcid">[평문] + 연계시스템용으로 등록한 단말 ID ("메신저 Device 등록" 부분 참조)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdtp">단말종류</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdtp">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvctp.rel">"relation"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.dvctp.rel"><span + class="ellipsis">[평문] 단말 타입, “relation” 으로 고정</span><br><span class="ellipsis">※ + relation: 외부연계 시스템</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.request.Payload">Payload</span></td> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.encbody">"/6Fz+KIhVzmyhiBpMrLNJp+0saSg7b7XlZp3tlXrnRLVaCHDD4XqV9dGVh6hmri7hR3dJdTps1qO3gDH1XccTj3Qmy3X4MsMBFP8AW3uIGk7QdlBp0wMi8FBrHExUR/h"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.encbody"><span + class="ellipsis">[암호화] Payload 데이터</span><br><span class="ellipsis">※ 평문 + 상태(json문자열)의 BODY항목을 2단계 암호화를 거친 암호화된 문자열 값.</span><br><span class="ellipsis">1단계: + Aes256암호화 (암호화키는 "메시지서버 암호화 Key 조회" 부분 참조)</span><br><span class="ellipsis">2단계: + Base64암호화</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(1)</td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.request.table.property.n1">요청ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.request.table.attribute.n1">BODY: + requestId</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.request.table.sample.n1"># + {"requestId": 15784610001948974, "chatroomId": 99343295704997888, "newOwner": + 753917009235808257}</span></td> + <td class="left desc"><span + data-message-id="messenger.service.changechatroomowner.request.table.note.n1">Packet별로 + Unique한 Id Milliseconds 형식 (ex. 1302575819285 )</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(2)</td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.request.table.property.n2">대화방ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.request.table.attribute.n2">BODY: + chatroomId</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.request.table.sample.n2">99343295704997888</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.changechatroomowner.request.table.note.n2">대화방 + ID</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(3)</td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.request.table.property.n3">새방장ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.request.table.attribute.n3 ></span></td> <!--.5--> <td><span data-message-id=" + messenger.service.request.mandatory.n"=""> <!--.5--> + <td><span data-message-id="]</tr"></span></td></span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.request.table.sample.n3">753917009235808257</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.changechatroomowner.request.table.note.n3">새로운 + 방장ID</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.changechatroomowner.request.table.sample.n1"># {"requestId": + 15784610001948974, "chatroomId": 99343295704997888, "newOwner": 753917009235808257}</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.response.subject.enc">Response Parameter [Encrypted]</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.response.properties">Properties</span></th> + <th><span data-message-id="messenger.service.response.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.response.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.response.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.response.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.response.table.property.n1">요청ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.response.table.attribute.n1">requestId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.response.table.sample.n1">15783867572942564</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.changechatroomowner.response.table.note.n1"><span + class="ellipsis">Packet별로 Unique한 Id (Milliseconds 형식)</span><br><span + class="ellipsis">※ 요청시 사용한 requestId 값과 동일</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.response.table.property.n2">대화방ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.response.table.attribute.n2">chatroomId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.response.table.sample.n2">99536308621824000</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.changechatroomowner.response.table.note.n2">생성된 대화방 + Id</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.response.table.property.n3">결과</span> + </td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.response.table.attribute.n3">result</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.empty"></span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.response.table.sample.n3"></span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.changechatroomowner.response.table.note.n3">Result</span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.response.table.property.n4">결과: + 코드</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.response.table.attribute.n4">result: + code</span></td> + <td><span data-message-id="messenger.service.response.datatype.integer">Integer</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.response.table.sample.n4">1000</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.changechatroomowner.response.table.note.n4">Result + code</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.response.table.property.n5">결과: + (에러)내용</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.response.table.attribute.n5">result: + msg</span></td> + <td><span data-message-id="messenger.service.response.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.response.table.sample.n5"></span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.changechatroomowner.response.table.note.n5">Result + message</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.response.table.property.n6">요청시간</span> + </td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.response.table.attribute.n6">sentTime</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.response.table.sample.n6">1578386757248</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.changechatroomowner.response.table.note.n6">서버에서 해당 + Request를 받은 시간</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.changechatroomowner.response.sample">{"requestId": + 15784610001948974, "chatroomId": 99343295704997888, newOwner": 753917009235808257}</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.sample.subject">Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.sample.request">Request</span></th> + <th><span data-message-id="messenger.service.sample.response">Response</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.sample.table.request.n1"><span + class="ellipsis">POST /messenger/message/api/v1.0/message/changeOwnerRequest + HTTP/1.1</span><br><span class="ellipsis">headers: {"Accept": "application/json", + "Authorization": "Bearer ed114dc382ca16d5b43154fe5832a7", "Content-Type": + "application/json", "x-device-id": "1000145874", "Content-Length": + "172"}</span><br><span class="ellipsis"></span><br><span + class="ellipsis">body(암호화전): {"requestId": 15784610001948974, "chatroomId": + 99343295704997888, "newOwner": 753917009235808257}</span></span></td> + <td class="left"><span + data-message-id="messenger.service.changechatroomowner.sample.table.response.n1"><span + class="ellipsis">HTTP/1.1 200 OK</span><br><span class="ellipsis">Content-Type: + application/json</span><br><span class="ellipsis">Server: Message + Server</span><br><span class="ellipsis"></span><br><span + class="ellipsis">{"requestId": 15784610001948974, "chatroomId": 99343295704997888, + "result": {"code": 1000}, newOwner": 753917009235808257}</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.errorcode.subject">Error Code</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.message.errorcode.detail">"메시지 API 공통 포맷" 부분 참조 (에러코드 부분)</span></p> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg21"><span data-message-id="messenger.service.endchat.subject">대화방 나가기</span> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.endchat.uri">POST + /messenger/message/api/v1.0/message/endChatRequest</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.endchat.description">대화방에서 퇴장한다.</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.request.subject">Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.request.parametertype">Parameter Type</span></th> + <th><span data-message-id="messenger.service.request.no">No.</span></th> + <th><span data-message-id="messenger.service.request.properties">Properties</span></th> + <th><span data-message-id="messenger.service.request.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.request.mandatory">Mandatory</span></th> + <th><span data-message-id="messenger.service.request.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.request.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.request.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td>1</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.accept">응답 허용 + 타입</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.accept">Accept</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.accept.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.accept.appjson"><span + class="ellipsis">Default: application/json</span><br><span class="ellipsis">Valid + Values: [application/json, application/xml]</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>2</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.content">첨부데이터타입</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.content">Content-Type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.contype.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.contype.appjson"><span + class="ellipsis">Payload의 content type 명시</span><br><span class="ellipsis">ex) + application/json</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>3</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.author">인증토큰</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.author">Authorization</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.authtoken">"Bearer + f5fe27195fb2523cee1758c162a9f60"</span></td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.authtoken">[평문] Access Token (발급 + 받은 Access Token)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdid">단말ID</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdid">x-device-id</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvcid">"104032854"</span></td> + <td class="left desc"><span data-message-id="messenger.service.message.request.note.dvcid">[평문] + 연계시스템용으로 등록한 단말 ID ("메신저 Device 등록" 부분 참조)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdtp">단말종류</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdtp">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvctp.rel">"relation"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.dvctp.rel"><span + class="ellipsis">[평문] 단말 타입, “relation” 으로 고정</span><br><span class="ellipsis">※ + relation: 외부연계 시스템</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.request.Payload">Payload</span></td> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.encbody">"/6Fz+KIhVzmyhiBpMrLNJp+0saSg7b7XlZp3tlXrnRLVaCHDD4XqV9dGVh6hmri7hR3dJdTps1qO3gDH1XccTj3Qmy3X4MsMBFP8AW3uIGk7QdlBp0wMi8FBrHExUR/h"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.encbody"><span + class="ellipsis">[암호화] Payload 데이터</span><br><span class="ellipsis">※ 평문 + 상태(json문자열)의 BODY항목을 2단계 암호화를 거친 암호화된 문자열 값.</span><br><span class="ellipsis">1단계: + Aes256암호화 (암호화키는 "메시지서버 암호화 Key 조회" 부분 참조)</span><br><span class="ellipsis">2단계: + Base64암호화</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(1)</td> + <td class="left"><span + data-message-id="messenger.service.endchat.request.table.property.n7">요청ID</span></td> + <td class="left"><span + data-message-id="messenger.service.endchat.request.table.attribute.n7">BODY:requestId</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.endchat.request.table.sample.n7">1302575819285</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.endchat.request.table.note.n7">Packet별로 Unique한 Id + Milliseconds 형식 (ex. 1302575819285 )</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(2)</td> + <td class="left"><span + data-message-id="messenger.service.endchat.request.table.property.n8"></span></td> + <td class="left"><span + data-message-id="messenger.service.endchat.request.table.attribute.n8">BODY:endChatEntries</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td>List<endchatentry></endchatentry> + </td> + <td class="left"><span + data-message-id="messenger.service.endchat.request.table.sample.n8"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.endchat.request.table.note.n8"></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(2-1)</td> + <td class="left"><span data-message-id="messenger.service.endchat.request.table.property.n9">퇴장할 + 대화방 ID</span></td> + <td class="left"><span + data-message-id="messenger.service.endchat.request.table.attribute.n9">BODY:endChatEntriy:chatroomId</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.endchat.request.table.sample.n9">99343295704997888</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.endchat.request.table.note.n9">퇴장할 대화방 ID</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.response.subject.enc">Response Parameter [Encrypted]</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.response.properties">Properties</span></th> + <th><span data-message-id="messenger.service.response.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.response.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.response.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.response.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.endchat.response.table.property.n1">요청ID</span></td> + <td class="left"><span + data-message-id="messenger.service.endchat.response.table.attribute.n1">requestId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.endchat.response.table.sample.n1">15783867572942564</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.endchat.response.table.note.n1"><span + class="ellipsis">Packet별로 Unique한 Id (Milliseconds 형식)</span><br><span + class="ellipsis">※ 요청시 사용한 requestId 값과 동일</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.endchat.response.table.property.n2">결과</span></td> + <td class="left"><span + data-message-id="messenger.service.endchat.response.table.attribute.n2">result</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.empty"></span></td> + <td class="left"><span + data-message-id="messenger.service.endchat.response.table.sample.n2"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.endchat.response.table.note.n2">결과</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.endchat.response.table.property.n3">결과:코드</span></td> + <td class="left"><span + data-message-id="messenger.service.endchat.response.table.attribute.n3">result:code</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.integer">Integer</span></td> + <td class="left"><span + data-message-id="messenger.service.endchat.response.table.sample.n3">1000</span></td> + <td class="left desc"><span + data-message-id="messenger.service.endchat.response.table.note.n3">결과 코드</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.endchat.response.table.property.n4">결과:(에러)내용</span> + </td> + <td class="left"><span + data-message-id="messenger.service.endchat.response.table.attribute.n4">result:msg</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.endchat.response.table.sample.n4"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.endchat.response.table.note.n4">결과 내용</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.sample.subject">Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.sample.request">Request</span></th> + <th><span data-message-id="messenger.service.sample.response">Response</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="messenger.service.endchat.sample.table.n1"><span + class="ellipsis">POST /messenger/message/api/v1.0/message/endChatRequest + HTTP/1.1</span><br><span class="ellipsis"></span><br><span class="ellipsis">headers: + {"Accept": "application/json", "Authorization": "Bearer + ed114dc382ca16d5b43154fe5832a7", "Content-Type": "application/json", "x-device-id": + "1000145874", "Content-Length": "172"}</span><br><span + class="ellipsis"></span><br><span class="ellipsis">body(암호화전): {"requestId": + 15784610001948974, "endChatEntries":[{"chatroomId": + 99343295704997888}]}</span></span></td> + <td class="left"><span data-message-id="messenger.service.endchat.sample.table.n2"><span + class="ellipsis">HTTP/1.1 200 OK</span><br><span class="ellipsis">Content-Type: + application/json</span><br><span class="ellipsis">Server: Message + Server</span><br><span class="ellipsis"></span><br><span + class="ellipsis">{"requestId": 15784610001948974, "result": {"code": + 1000}}</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.errorcode.subject">Error Code</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.message.errorcode.detail">"메시지 API 공통 포맷" 부분 참조 (에러코드 부분)</span></p> + </div><br> + <div class="dan-border"></div> + <div class="module-font type01" id="msg22"><span data-message-id="messenger.service.msgreadcount.subject">메시지 읽음 + Count 조회</span></div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.msgreadcount.uri">POST + /messenger/message/api/v1.0/message/messageReadCountRequest</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.msgreadcount.description">발신 메시지를 읽은 사용자의 수를 조회한다.</span></p> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.request.subject">Request Parameter</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.request.parametertype">Parameter Type</span></th> + <th><span data-message-id="messenger.service.request.no">No.</span></th> + <th><span data-message-id="messenger.service.request.properties">Properties</span></th> + <th><span data-message-id="messenger.service.request.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.request.mandatory">Mandatory</span></th> + <th><span data-message-id="messenger.service.request.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.request.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.request.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="3%;"> + <col width="15%;"> + <col width="15%;"> + <col width="7%;"> + <col width="8%;"> + <col width="16%;"> + <col width="26%;"> + </colgroup> + <tbody> + <tr> + <td><span data-message-id="messenger.service.request.type.header">Header</span></td> + <td>1</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.accept">응답 허용 + 타입</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.accept">Accept</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.accept.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.accept.appjson"><span + class="ellipsis">Default: application/json</span><br><span class="ellipsis">Valid + Values: [application/json, application/xml]</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>2</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.content">첨부데이터타입</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.content">Content-Type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.contype.appjson">"application/json"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.contype.appjson"><span + class="ellipsis">Payload의 content type 명시</span><br><span class="ellipsis">ex) + application/json</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>3</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.author">인증토큰</span> + </td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.author">Authorization</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.authtoken">"Bearer + f5fe27195fb2523cee1758c162a9f60"</span></td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.authtoken">[평문] Access Token (발급 + 받은 Access Token)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>4</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdid">단말ID</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdid">x-device-id</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvcid">"104032854"</span></td> + <td class="left desc"><span data-message-id="messenger.service.message.request.note.dvcid">[평문] + 연계시스템용으로 등록한 단말 ID ("메신저 Device 등록" 부분 참조)</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>5</td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.property.xdtp">단말종류</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.table.attribute.xdtp">x-device-type</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.dvctp.rel">"relation"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.dvctp.rel"><span + class="ellipsis">[평문] 단말 타입, “relation” 으로 고정</span><br><span class="ellipsis">※ + relation: 외부연계 시스템</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.request.Payload">Payload</span></td> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.data.empty"></span></td> + <td class="left"><span data-message-id="messenger.service.request.type.body">Body</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.message.request.sample.encbody">"/6Fz+KIhVzmyhiBpMrLNJp+0saSg7b7XlZp3tlXrnRLVaCHDD4XqV9dGVh6hmri7hR3dJdTps1qO3gDH1XccTj3Qmy3X4MsMBFP8AW3uIGk7QdlBp0wMi8FBrHExUR/h"</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.message.request.note.encbody"><span + class="ellipsis">[암호화] Payload 데이터</span><br><span class="ellipsis">※ 평문 + 상태(json문자열)의 BODY항목을 2단계 암호화를 거친 암호화된 문자열 값.</span><br><span class="ellipsis">1단계: + Aes256암호화 (암호화키는 "메시지서버 암호화 Key 조회" 부분 참조)</span><br><span class="ellipsis">2단계: + Base64암호화</span></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(1)</td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.request.table.property.n7">요청ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.request.table.attribute.n7">BODY:requestId</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.request.table.sample.n7">1302575819285</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.msgreadcount.request.table.note.n7">Packet별로 Unique한 + Id Milliseconds 형식 (ex. 1302575819285 )</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(2)</td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.request.table.property.n8">대화방ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.request.table.attribute.n8">BODY:chatroomId</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.request.table.sample.n8">99343295704997888</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.msgreadcount.request.table.note.n8">대화방 ID</span> + </td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(3)</td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.request.table.property.n9">메시지정보</span> + </td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.request.table.attribute.n9">BODY:messageEntry</span> + </td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td>List<messageentity></messageentity> + </td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.request.table.sample.n9"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.msgreadcount.request.table.note.n9"></span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(3-1)</td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.request.table.property.n10">메시지ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.request.table.attribute.n10">BODY:messageEntry: + msgId</span></td> + <td><span data-message-id="messenger.service.request.mandatory.y">y</span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.request.table.sample.n10">38635452485935</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.msgreadcount.request.table.note.n10">카운트 조회를 하고자 하는 + 메시지의 ID</span></td> + </tr> + <tr> + <td><span data-message-id="messenger.service.data.empty"></span></td> + <td>(3-2)</td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.request.table.property.n11">원본메시지 + 발송시간</span></td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.request.table.attribute.n11">BODY:endChatEntriy:messageEntry: + sentTime</span></td> + <td><span data-message-id="messenger.service.request.mandatory.n"></span></td> + <td><span data-message-id="messenger.service.request.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.request.table.sample.n11">1472639462088</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.msgreadcount.request.table.note.n11">카운트 조회를 하고자 하는 + 메시지의 sent time</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.response.subject.enc">Response Parameter [Encrypted]</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.response.properties">Properties</span></th> + <th><span data-message-id="messenger.service.response.attribute">Attribute</span></th> + <th><span data-message-id="messenger.service.response.datatype">Data Type</span></th> + <th><span data-message-id="messenger.service.response.sampledata">Sample Data</span></th> + <th><span data-message-id="messenger.service.response.note">Note</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="15%;"> + <col width="15%;"> + <col width="10%;"> + <col width="35%;"> + <col width="25%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.property.n1">요청ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.attribute.n1">requestId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.sample.n1">15783867572942564</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.msgreadcount.response.table.note.n1"><span + class="ellipsis">Packet별로 Unique한 Id (Milliseconds 형식)</span><br><span + class="ellipsis">※ 요청시 사용한 requestId 값과 동일</span></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.property.n2">대화방ID</span> + </td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.attribute.n2">chatroomId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.sample.n2">99536308621824000</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.msgreadcount.response.table.note.n2">대화방 Id</span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.property.n3">결과</span> + </td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.attribute.n3">result</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.empty"></span></td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.sample.n3"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.msgreadcount.response.table.note.n3">결과</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.property.n4">결과:코드</span> + </td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.attribute.n4">result:code</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.integer">Integer</span></td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.sample.n4">1000</span> + </td> + <td class="left desc"><span + data-message-id="messenger.service.msgreadcount.response.table.note.n4">결과 코드</span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.property.n5">결과:(에러)내용</span> + </td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.attribute.n5">result:msg</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.string">String</span></td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.sample.n5"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.msgreadcount.response.table.note.n5">결과 내용</span> + </td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.property.n6">결과:카운트 조회 + 목록</span></td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.attribute.n6">result:messageEntry</span> + </td> + <td>List<messageentity></messageentity> + </td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.sample.n6"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.msgreadcount.response.table.note.n6"></span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.property.n7">결과:카운트 조회 + 목록:메시지ID</span></td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.attribute.n7">result:messageEntry:msgId</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.sample.n7"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.msgreadcount.response.table.note.n7">카운트 조회한 메시지의 + ID</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.property.n8">결과:카운트 조회 + 목록:메시지발송시간</span></td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.attribute.n8">result:messageEntry:sentTime</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.long">Long</span></td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.sample.n8"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.msgreadcount.response.table.note.n8">카운트 조회한 메시지의 + sent time</span></td> + </tr> + <tr> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.property.n9">결과:카운트 조회 + 목록:읽음 카운트</span></td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.attribute.n9">result:messageEntry:readCount</span> + </td> + <td><span data-message-id="messenger.service.response.datatype.integer">Integer</span></td> + <td class="left"><span + data-message-id="messenger.service.msgreadcount.response.table.sample.n9"></span></td> + <td class="left desc"><span + data-message-id="messenger.service.msgreadcount.response.table.note.n9">해당 메시지에 대한 읽음 + 카운트</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.sample.subject">Sample</span></p> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="messenger.service.sample.request">Request</span></th> + <th><span data-message-id="messenger.service.sample.response">Response</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td class="left"><span data-message-id="messenger.service.msgreadcount.sample.table.n1"><span + class="ellipsis">POST /messenger/message/api/v1.0/message/messageReadCountRequest + HTTP/1.1</span><br><span class="ellipsis"></span><br><span class="ellipsis">headers: + {"Accept": "application/json", "Authorization": "Bearer + ed114dc382ca16d5b43154fe5832a7", "Content-Type": "application/json", "x-device-id": + "1000145874", "Content-Length": "172"}</span><br><span + class="ellipsis"></span><br><span class="ellipsis">body(암호화전): {"requestId": + 15784610001948974, "chatroomId": 99343295704997888, "messageEntry":[{"msgId": + 38635452485935, "sentTime":1472639462088}]}</span></span></td> + <td class="left"><span data-message-id="messenger.service.msgreadcount.sample.table.n2"><span + class="ellipsis">HTTP/1.1 200 OK</span><br><span class="ellipsis">Content-Type: + application/json</span><br><span class="ellipsis">Server: Message + Server</span><br><span class="ellipsis"></span><br><span + class="ellipsis">{"requestId": 15784610001948974, "chatroomId": 99343295704997888, + "result": {"code": 1000}, "messageEntry":[{"msgId": 38635452485935, + "sentTime":1472639462088, "readCount":0}]}</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p><span data-message-id="messenger.service.errorcode.subject">Error Code</span></p> + </div> + <div class="module-font"> + <p><span data-message-id="messenger.service.message.errorcode.detail">"메시지 API 공통 포맷" 부분 참조 (에러코드 부분)</span></p> + </div> +</div>
\ No newline at end of file diff --git a/lib/knox-api/messenger/messenger.ts b/lib/knox-api/messenger/messenger.ts new file mode 100644 index 00000000..58611621 --- /dev/null +++ b/lib/knox-api/messenger/messenger.ts @@ -0,0 +1,925 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +"use server" + +import { z } from 'zod'; + +// 환경 변수 타입 정의 +const MESSENGER_BASE_URL = process.env.MESSENGER_BASE_URL || 'https://api.messenger.com'; +const ACCESS_TOKEN = process.env.MESSENGER_ACCESS_TOKEN; +const DEVICE_ID = process.env.MESSENGER_DEVICE_ID; + +// 공통 헤더 생성 함수 +function createHeaders(additionalHeaders?: Record<string, string>) { + const headers: Record<string, string> = { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${ACCESS_TOKEN}`, + 'x-device-id': DEVICE_ID!, + 'x-device-type': 'relation', + ...additionalHeaders + }; + + return headers; +} + +// 응답 타입 정의 +type ApiResponse<T> = { + success: boolean; + data?: T; + error?: string; + statusCode?: number; +}; + +// 에러 핸들링 함수 +function handleApiError(error: any, endpoint: string): ApiResponse<never> { + console.error(`Knox Messenger API Error (${endpoint}):`, error); + + return { + success: false, + error: error.message || `Failed to call ${endpoint}`, + statusCode: error.status || 500 + }; +} + +// ============================================================================= +// 연락처 관리 API +// ============================================================================= + +// 연락처 추가 스키마 +const addContactSchema = z.object({ + contactList: z.array(z.object({ + userID: z.number() + })) +}); + +// 연락처 추가 +export async function addContact(data: z.infer<typeof addContactSchema>): Promise<ApiResponse<any>> { + try { + const validated = addContactSchema.parse(data); + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/contact/api/v1.0/contact/o1/user`, { + method: 'POST', + headers: createHeaders(), + body: JSON.stringify(validated) + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to add contact', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'addContact'); + } +} + +// 연락처 삭제 스키마 +const deleteContactSchema = z.object({ + contactList: z.array(z.object({ + userID: z.number() + })) +}); + +// 연락처 삭제 +export async function deleteContact(data: z.infer<typeof deleteContactSchema>): Promise<ApiResponse<any>> { + try { + const validated = deleteContactSchema.parse(data); + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/contact/api/v1.0/contact/o1/user/delete`, { + method: 'POST', + headers: createHeaders(), + body: JSON.stringify(validated) + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to delete contact', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'deleteContact'); + } +} + +// 연락처 목록 조회 +export async function getContactList(): Promise<ApiResponse<any>> { + try { + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/contact/api/v1.0/contact/o1/list`, { + method: 'GET', + headers: createHeaders() + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to get contact list', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'getContactList'); + } +} + +// 사용자 검색 스키마 +const searchUserSchema = z.object({ + singleIdList: z.array(z.object({ + singleId: z.string() + })) +}); + +// 사용자 검색 +export async function searchUserByLoginId(data: z.infer<typeof searchUserSchema>): Promise<ApiResponse<any>> { + try { + const validated = searchUserSchema.parse(data); + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/contact/api/v1.0/profile/o1/search/loginid`, { + method: 'POST', + headers: createHeaders(), + body: JSON.stringify(validated) + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to search user', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'searchUserByLoginId'); + } +} + +// ============================================================================= +// 장치 관리 API +// ============================================================================= + +// 장치 등록 +export async function registerDevice(): Promise<ApiResponse<any>> { + try { + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/contact/api/v1.0/device/o1/reg`, { + method: 'GET', + headers: createHeaders() + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to register device', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'registerDevice'); + } +} + +// 장치 해지 스키마 +const deregisterDeviceSchema = z.object({ + deviceServerID: z.number() +}); + +// 장치 해지 +export async function deregisterDevice(data: z.infer<typeof deregisterDeviceSchema>): Promise<ApiResponse<any>> { + try { + const validated = deregisterDeviceSchema.parse(data); + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/contact/api/v1.0/device/o1/delete`, { + method: 'POST', + headers: createHeaders(), + body: JSON.stringify(validated) + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to deregister device', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'deregisterDevice'); + } +} + +// 장치 사용 정보 조회 스키마 +const getDeviceUseInfoSchema = z.object({ + singleIdList: z.array(z.object({ + singleId: z.string() + })) +}); + +// 장치 사용 정보 조회 +export async function getDeviceUseInfo(data: z.infer<typeof getDeviceUseInfoSchema>): Promise<ApiResponse<any>> { + try { + const validated = getDeviceUseInfoSchema.parse(data); + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/contact/api/v1.0/device/o1/use/info`, { + method: 'POST', + headers: createHeaders(), + body: JSON.stringify(validated) + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to get device use info', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'getDeviceUseInfo'); + } +} + +// ============================================================================= +// 파일 관리 API +// ============================================================================= + +// 파일 서버 시간 및 키 조회 스키마 +const getFileServerTimeSchema = z.object({ + word: z.string() +}); + +// 파일 서버 시간 및 키 조회 +export async function getFileServerTime(data: z.infer<typeof getFileServerTimeSchema>): Promise<ApiResponse<any>> { + try { + const validated = getFileServerTimeSchema.parse(data); + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/file/api/v1.0/file/v1/getCurrentTime?word=${validated.word}`, { + method: 'GET', + headers: createHeaders({ + 'x-access-token': ACCESS_TOKEN! + }) + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to get file server time', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'getFileServerTime'); + } +} + +// 파일 업로드 스키마 +const uploadFileSchema = z.object({ + filename: z.string(), + fileData: z.instanceof(FormData).or(z.any()) +}); + +// 파일 업로드 +export async function uploadFile(data: z.infer<typeof uploadFileSchema>): Promise<ApiResponse<any>> { + try { + const validated = uploadFileSchema.parse(data); + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/file/api/v1.0/file/v1s/file/${validated.filename}`, { + method: 'PUT', + headers: createHeaders({ + 'x-access-token': ACCESS_TOKEN!, + 'Content-Type': 'multipart/form-data' + }), + body: validated.fileData + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to upload file', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'uploadFile'); + } +} + +// 파일 다운로드 스키마 +const downloadFileSchema = z.object({ + fileId: z.string() +}); + +// 파일 다운로드 +export async function downloadFile(data: z.infer<typeof downloadFileSchema>): Promise<ApiResponse<any>> { + try { + const validated = downloadFileSchema.parse(data); + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/file/api/v1.0/file/v1s/file/${validated.fileId}`, { + method: 'GET', + headers: createHeaders({ + 'x-access-token': ACCESS_TOKEN! + }) + }); + + if (!response.ok) { + return { + success: false, + error: 'Failed to download file', + statusCode: response.status + }; + } + + const blob = await response.blob(); + + return { + success: true, + data: blob + }; + } catch (error) { + return handleApiError(error, 'downloadFile'); + } +} + +// ============================================================================= +// 메시지 관리 API +// ============================================================================= + +// 메시지 서버 키 조회 +export async function getMessageServerKeys(): Promise<ApiResponse<any>> { + try { + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/msgctx/api/v1.0/key/getkeys`, { + method: 'GET', + headers: createHeaders() + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to get message server keys', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'getMessageServerKeys'); + } +} + +// 대화방 참여자 정보 조회 스키마 +const getChatMembersSchema = z.object({ + chatroomId: z.number() +}); + +// 대화방 참여자 정보 조회 +export async function getChatMembers(data: z.infer<typeof getChatMembersSchema>): Promise<ApiResponse<any>> { + try { + const validated = getChatMembersSchema.parse(data); + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/msgctx/api/v1.0/chat/activemember?chatroomId=${validated.chatroomId}`, { + method: 'GET', + headers: createHeaders() + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to get chat members', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'getChatMembers'); + } +} + +// 대화방 생성 스키마 +const createChatroomSchema = z.object({ + requestId: z.number(), + chatType: z.number(), // 0: 1:1, 1: GROUP, 2: BROADCAST GROUP, 5: BROADCAST SINGLE + receivers: z.array(z.number()), + chatroomTitle: z.string().optional() +}); + +// 대화방 생성 +export async function createChatroom(data: z.infer<typeof createChatroomSchema>): Promise<ApiResponse<any>> { + try { + const validated = createChatroomSchema.parse(data); + + // TODO: 실제 구현에서는 메시지 서버 키를 사용하여 암호화해야 함 + const encryptedBody = JSON.stringify(validated); // 임시로 평문 사용 + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/message/api/v1.0/message/createChatroomRequest`, { + method: 'POST', + headers: createHeaders(), + body: encryptedBody + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to create chatroom', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'createChatroom'); + } +} + +// 메시지 발송 스키마 +const sendMessageSchema = z.object({ + requestId: z.number(), + chatroomId: z.number(), + chatMessageParams: z.array(z.object({ + msgId: z.number(), + msgType: z.number(), // 0: TEXT, 1: MEDIA, 7: RTF, 8: NCUSTOM + chatMsg: z.string(), + msgTtl: z.number().optional() + })) +}); + +// 메시지 발송 +export async function sendMessage(data: z.infer<typeof sendMessageSchema>): Promise<ApiResponse<any>> { + try { + const validated = sendMessageSchema.parse(data); + + // 실제 구현에서는 메시지 서버 키를 사용하여 암호화해야 함 + const encryptedBody = JSON.stringify(validated); // 임시로 평문 사용 + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/message/api/v1.0/message/chatRequest`, { + method: 'POST', + headers: createHeaders(), + body: encryptedBody + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to send message', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'sendMessage'); + } +} + +// 대화상대 초대 스키마 +const inviteUserSchema = z.object({ + requestId: z.number(), + chatroomId: z.number(), + invitingMembers: z.array(z.number()) +}); + +// 대화상대 초대 +export async function inviteUser(data: z.infer<typeof inviteUserSchema>): Promise<ApiResponse<any>> { + try { + const validated = inviteUserSchema.parse(data); + + // 실제 구현에서는 메시지 서버 키를 사용하여 암호화해야 함 + const encryptedBody = JSON.stringify(validated); // 임시로 평문 사용 + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/message/api/v1.0/message/inviteRequest`, { + method: 'POST', + headers: createHeaders(), + body: encryptedBody + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to invite user', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'inviteUser'); + } +} + +// 대화상대 내보내기 스키마 +const removeUserSchema = z.object({ + requestId: z.number(), + chatroomId: z.number(), + removingMembers: z.array(z.number()) +}); + +// 대화상대 내보내기 +export async function removeUser(data: z.infer<typeof removeUserSchema>): Promise<ApiResponse<any>> { + try { + const validated = removeUserSchema.parse(data); + + // 실제 구현에서는 메시지 서버 키를 사용하여 암호화해야 함 + const encryptedBody = JSON.stringify(validated); // 임시로 평문 사용 + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/message/api/v1.0/message/removeMemberRequest`, { + method: 'POST', + headers: createHeaders(), + body: encryptedBody + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to remove user', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'removeUser'); + } +} + +// 대화방 삭제 스키마 +const deleteChatroomSchema = z.object({ + requestId: z.number(), + chatroomId: z.number() +}); + +// 대화방 삭제 +export async function deleteChatroom(data: z.infer<typeof deleteChatroomSchema>): Promise<ApiResponse<any>> { + try { + const validated = deleteChatroomSchema.parse(data); + + // 실제 구현에서는 메시지 서버 키를 사용하여 암호화해야 함 + const encryptedBody = JSON.stringify(validated); // 임시로 평문 사용 + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/message/api/v1.0/message/destroyChatroomRequest`, { + method: 'POST', + headers: createHeaders(), + body: encryptedBody + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to delete chatroom', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'deleteChatroom'); + } +} + +// 메시지 발신취소 스키마 +const recallMessageSchema = z.object({ + requestId: z.number(), + chatroomId: z.number(), + msgId: z.number() +}); + +// 메시지 발신취소 +export async function recallMessage(data: z.infer<typeof recallMessageSchema>): Promise<ApiResponse<any>> { + try { + const validated = recallMessageSchema.parse(data); + + // 실제 구현에서는 메시지 서버 키를 사용하여 암호화해야 함 + const encryptedBody = JSON.stringify(validated); // 임시로 평문 사용 + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/message/api/v1.0/message/recallMessageRequest`, { + method: 'POST', + headers: createHeaders(), + body: encryptedBody + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to recall message', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'recallMessage'); + } +} + +// 대화방명 변경 스키마 +const changeChatroomNameSchema = z.object({ + requestId: z.number(), + chatroomId: z.number(), + chatroomTitle: z.string() +}); + +// 대화방명 변경 +export async function changeChatroomName(data: z.infer<typeof changeChatroomNameSchema>): Promise<ApiResponse<any>> { + try { + const validated = changeChatroomNameSchema.parse(data); + + // 실제 구현에서는 메시지 서버 키를 사용하여 암호화해야 함 + const encryptedBody = JSON.stringify(validated); // 임시로 평문 사용 + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/message/api/v1.0/message/changeChatroomMetaRequest`, { + method: 'POST', + headers: createHeaders(), + body: encryptedBody + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to change chatroom name', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'changeChatroomName'); + } +} + +// 방장 변경 스키마 +const changeOwnerSchema = z.object({ + requestId: z.number(), + chatroomId: z.number(), + newOwnerUserId: z.number() +}); + +// 방장 변경 +export async function changeOwner(data: z.infer<typeof changeOwnerSchema>): Promise<ApiResponse<any>> { + try { + const validated = changeOwnerSchema.parse(data); + + // 실제 구현에서는 메시지 서버 키를 사용하여 암호화해야 함 + const encryptedBody = JSON.stringify(validated); // 임시로 평문 사용 + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/message/api/v1.0/message/changeOwnerRequest`, { + method: 'POST', + headers: createHeaders(), + body: encryptedBody + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to change owner', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'changeOwner'); + } +} + +// 대화방 나가기 스키마 +const leaveChatroomSchema = z.object({ + requestId: z.number(), + chatroomId: z.number() +}); + +// 대화방 나가기 +export async function leaveChatroom(data: z.infer<typeof leaveChatroomSchema>): Promise<ApiResponse<any>> { + try { + const validated = leaveChatroomSchema.parse(data); + + // 실제 구현에서는 메시지 서버 키를 사용하여 암호화해야 함 + const encryptedBody = JSON.stringify(validated); // 임시로 평문 사용 + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/message/api/v1.0/message/endChatRequest`, { + method: 'POST', + headers: createHeaders(), + body: encryptedBody + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to leave chatroom', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'leaveChatroom'); + } +} + +// 메시지 읽음 카운트 조회 스키마 +const getMessageReadCountSchema = z.object({ + requestId: z.number(), + chatroomId: z.number(), + msgId: z.number() +}); + +// 메시지 읽음 카운트 조회 +export async function getMessageReadCount(data: z.infer<typeof getMessageReadCountSchema>): Promise<ApiResponse<any>> { + try { + const validated = getMessageReadCountSchema.parse(data); + + // 실제 구현에서는 메시지 서버 키를 사용하여 암호화해야 함 + const encryptedBody = JSON.stringify(validated); // 임시로 평문 사용 + + const response = await fetch(`${MESSENGER_BASE_URL}/messenger/message/api/v1.0/message/messageReadCountRequest`, { + method: 'POST', + headers: createHeaders(), + body: encryptedBody + }); + + const result = await response.json(); + + if (!response.ok) { + return { + success: false, + error: result.message || 'Failed to get message read count', + statusCode: response.status + }; + } + + return { + success: true, + data: result + }; + } catch (error) { + return handleApiError(error, 'getMessageReadCount'); + } +} + +// ============================================================================= +// 유틸리티 함수 +// ============================================================================= + +// 현재 시간을 밀리초로 반환 (requestId 생성용) +export async function generateRequestId(): Promise<number> { + return Date.now(); +} + +// 메시지 ID 생성 (각 메시지마다 고유한 ID 필요) +export async function generateMessageId(): Promise<number> { + return Date.now() + Math.floor(Math.random() * 1000); +} + +// 헬퍼 함수 - 간단한 텍스트 메시지 발송 +export async function sendTextMessage(chatroomId: number, message: string): Promise<ApiResponse<any>> { + const requestId = await generateRequestId(); + const msgId = await generateMessageId(); + + return sendMessage({ + requestId, + chatroomId, + chatMessageParams: [{ + msgId, + msgType: 0, // TEXT + chatMsg: message, + msgTtl: 7200 // 2시간 + }] + }); +} + +// 헬퍼 함수 - 그룹 대화방 생성 +export async function createGroupChatroom(userIds: number[], title?: string): Promise<ApiResponse<any>> { + const requestId = await generateRequestId(); + + return createChatroom({ + requestId, + chatType: 2, // BROADCAST GROUP + receivers: userIds, + chatroomTitle: title + }); +} + +// 헬퍼 함수 - 1:1 대화방 생성 +export async function createPrivateChatroom(userId: number): Promise<ApiResponse<any>> { + const requestId = await generateRequestId(); + + return createChatroom({ + requestId, + chatType: 5, // BROADCAST SINGLE + receivers: [userId] + }); +} diff --git a/lib/knox-api/realtime-notification/realtime-notification-guide.html b/lib/knox-api/realtime-notification/realtime-notification-guide.html new file mode 100644 index 00000000..728df9c1 --- /dev/null +++ b/lib/knox-api/realtime-notification/realtime-notification-guide.html @@ -0,0 +1,764 @@ +<div class="body-content"> + <div class="sub-header margin"> + <h2 data-message-id="noti.subject">실시간알림</h2> + </div> + <div class="module-subsum"> + <p><span data-message-id="noti.guide.description">Knox Suite을 통해 토스트 알림을 전송합니다.</span></p> + </div><br><br> + <div class="module-font type03"><span data-message-id="noti.guide.policy01">[정책 및 제약사항]</span></div> + <div class="module-font type04"> + <dl> + <dt><span data-message-id="noti.guide.policy02">1. 토스트알림은 Knox Suite 로그인 사용자에게만 전송가능합니다.</span></dt> + <dt><span data-message-id="noti.guide.policy03">2. 토스트알림에 포함 된 링크는 호출 시 사전 확인 필요합니다.</span></dt> + <dt><span data-message-id="noti.guide.policy04">3. 토스트알림 최대 수신인은 100명을 초과할 수 없습니다.</span></dt> + </dl> + </div><br><br> + <div class="module-font type03"><span data-message-id="subject.api.list">[API 목록]</span> <a + target="blank" class="swagger-link" id="swaggerLinkStg" + href="http://developers.samsung.net/knoxcenter/wso2/swagger-ui/982ed416-88ed-4a6a-ba08-32de77173194"><span + data-message-id="subject.go.to.swagger">테스트 페이지로 이동(Swagger)</span></a><span + data-message-id="subject.go.to.swagger.chrome"><sub>*Chrome Browser만 이용 가능합니다.</sub></span></div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="150px"> + <col width="300px"> + <col width="100px"> + <col style="width:"> + </colgroup> + <thead> + <tr> + <th>API</th> + <th>URI</th> + <th>Method</th> + <th>Description</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="150px"> + <col width="300px"> + <col width="100px"> + <col style="width:"> + </colgroup> + <tbody> + <tr> + <td><a href="#emp"><span data-message-id="noti.guide.api02">알림 전송</span></a></td> + <td>/sendnotification</td> + <td>POST</td> + <td align="left"><span data-message-id="noti.guide.api03">실시간 토스트 알림 전송</span></td> + </tr> + </tbody> + </table> + </div> + </div><br><br><br> + <div class="dan-border"></div><br><br> + <div class="module-font type01" id="emp"><span data-message-id="noti.guide.sendnotification">알림 전송</span></div> + <div class="module-font type02"> + <p>Request Parameter</p><span data-message-id="noti.guide.sendnotification.request.title">URL : + /notification/api/v2.0/sendnotification</span> + </div> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="15%;"> + <col width="8%;"> + <col width="8%;"> + <col width="8%;"> + <col width="19%;"> + <col width="20%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Mandatory</th> + <th>Parameter Type</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="5%;"> + <col width="15%;"> + <col width="15%;"> + <col width="8%;"> + <col width="8%;"> + <col width="8%;"> + <col width="19%;"> + <col width="20%;"> + </colgroup> + <tbody> + <tr> + <td title="1">1</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request01">연계 시스템 ID</span> + </td> + <td class="left"> System-ID</td> + <td>Y</td> + <td>Header</td> + <td>String</td> + <td class="left">C60REST0001</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description01">발급받은 + 연계 ID</span></td> + </tr> + <tr> + <td title="2">2</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request02">수신계정</span></td> + <td class="left"> targetAddress</td> + <td>Y</td> + <td>Body</td> + <td>String Array</td> + <td class="left">["knoxportal@samsung.com"]</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description02">알림수신인 + 메일계정</span></td> + </tr> + <tr> + <td title="3">3</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request03">이벤트속성</span></td> + <td class="left"> ntype</td> + <td>Y</td> + <td>Body</td> + <td>String</td> + <td class="left">NEW</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description03">이벤트의 + 속성</span></td> + </tr> + <tr> + <td title="4">4</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request04">시스템이름</span></td> + <td class="left"> systemname</td> + <td>Y</td> + <td>Body</td> + <td>String</td> + <td class="left">Push service</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description04">외부 + 시스템 식별 Name</span></td> + </tr> + <tr> + <td title="5">5</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request05">알림표시명</span></td> + <td class="left"> from</td> + <td>Y</td> + <td>Body</td> + <td>String</td> + <td class="left">녹스포털 테스트</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description05">외부 + 시스템 Toast 표시명(Local)</span></td> + </tr> + <tr> + <td title="6">6</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request06">알림표시명(영)</span> + </td> + <td class="left"> fromGlobal</td> + <td>Y</td> + <td>Body</td> + <td>String</td> + <td class="left">Knox Portal Test</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description06">외부 + 시스템 Toast 표시명(Global)</span></td> + </tr> + <tr> + <td title="7">7</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request07">Visual속성</span> + </td> + <td class="left"> exVisualVO</td> + <td>Y</td> + <td>Body</td> + <td>JsonString</td> + <td class="left">N/A</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description07">알림 + Visual 속성</span></td> + </tr> + <tr> + <td title="8">8</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request08">토스트이름</span></td> + <td class="left"> template</td> + <td>N</td> + <td>Body</td> + <td>String</td> + <td class="left">default template</td> + <td class="left"><span + data-message-id="noti.guide.sendnotification.request.description08">Pre-Defined된 Toast + 이름</span></td> + </tr> + <tr> + <td title="9">9</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request09">로고이미지</span></td> + <td class="left"> skin</td> + <td>N</td> + <td>Body</td> + <td>String</td> + <td class="left">default skin</td> + <td class="left"><span + data-message-id="noti.guide.sendnotification.request.description09">Background 와 기본제공 + Logo 이미지</span></td> + </tr> + <tr> + <td title="10">10</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request10">영문사용여부</span> + </td> + <td class="left"> global</td> + <td>N</td> + <td>Body</td> + <td>String</td> + <td class="left">N</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description10">Text에 + 설정된 global 사용여부</span></td> + </tr> + <tr> + <td title="11">11</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request11">로고표시여부</span> + </td> + <td class="left"> logo</td> + <td>N</td> + <td>Body</td> + <td>String</td> + <td class="left">Y</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description11">logo + 표시여부</span></td> + </tr> + <tr> + <td title="12">12</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request12">로고이미지URL</span> + </td> + <td class="left"> logourl</td> + <td>N</td> + <td>Query</td> + <td>String</td> + <td class="left">http://www.samsung.net/logo.jpg</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description12">불러올 + logo 표시 이미지 url</span></td> + </tr> + <tr> + <td title="13">13</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request13">Text속성</span> + </td> + <td class="left"> exTextVO</td> + <td>Y</td> + <td>Query</td> + <td>JsonStringArray</td> + <td class="left">N/A</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description13">알림 + Text 속성</span></td> + </tr> + <tr> + <td title="14">14</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request14">표시문자열</span></td> + <td class="left"> content</td> + <td>Y</td> + <td>Body</td> + <td>String</td> + <td class="left">한글기준 10자이내, 30byte 이내</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description14">표시 + 문자열</span></td> + </tr> + <tr> + <td title="15">15</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request15">표시문자열(영)</span> + </td> + <td class="left"> contentglobal</td> + <td>N</td> + <td>Body</td> + <td>String</td> + <td class="left">Toast Title</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description15">표시 + 문자열 Global</span></td> + </tr> + <tr> + <td title="16">16</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request16">표시문자크기</span> + </td> + <td class="left"> size</td> + <td>N</td> + <td>Body</td> + <td>Int</td> + <td class="left">512</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description16">표시 + 문자열 문자 크기</span></td> + </tr> + <tr> + <td title="17">17</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request17">표시문자위치</span> + </td> + <td class="left"> pos</td> + <td>Y</td> + <td>Body</td> + <td>Int</td> + <td class="left">2</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description17">표시 + 문자열 위치</span></td> + </tr> + <tr> + <td title="18">18</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request18">표시문자스타일</span> + </td> + <td class="left"> style</td> + <td>N</td> + <td>Body</td> + <td>String</td> + <td class="left">BOLD</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description18">표시 + 문자열 문자 스타일</span></td> + </tr> + <tr> + <td title="19">19</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request19">Color속성</span> + </td> + <td class="left"> exColorVO</td> + <td>N</td> + <td>Body</td> + <td>JsonString</td> + <td class="left">N/A</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description19">표시 + 문자열 문자 색상</span></td> + </tr> + <tr> + <td title="20">20</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request20">표시문자Red</span> + </td> + <td class="left"> r</td> + <td>Y</td> + <td>Body</td> + <td>Int</td> + <td class="left">255</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description20">RGB + 값중 red 값</span></td> + </tr> + <tr> + <td title="21">21</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request21">표시문자Green</span> + </td> + <td class="left"> g</td> + <td>Y</td> + <td>Body</td> + <td>Int</td> + <td class="left">255</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description21">RGB + 값중 green 값</span></td> + </tr> + <tr> + <td title="22">22</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request22">표시문자Blue</span> + </td> + <td class="left"> b</td> + <td>Y</td> + <td>Body</td> + <td>Int</td> + <td class="left">0</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description22">RGB + 값중 blue 값</span></td> + </tr> + <tr> + <td title="23">23</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request23">Action속성</span> + </td> + <td class="left"> exActionsVO</td> + <td>Y</td> + <td>Body</td> + <td>JsonString</td> + <td class="left">N/A</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description23">알림 + Action 속성</span></td> + </tr> + <tr> + <td title="24">24</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request24">팝업여부</span></td> + <td class="left"> popup</td> + <td>N</td> + <td>Body</td> + <td>String</td> + <td class="left">Y</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description24">Toast + 클릭 시 links 값 중 rel 이 popup인 href 호출</span></td> + </tr> + <tr> + <td title="25">25</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request25">클릭허용여부</span> + </td> + <td class="left"> clickable</td> + <td>N</td> + <td>Body</td> + <td>String</td> + <td class="left">Y</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description25">Toast + 영역 클릭 허용 여부</span></td> + </tr> + <tr> + <td title="26">26</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request26">Link속성</span> + </td> + <td class="left"> exLinksVO</td> + <td>N</td> + <td>Body</td> + <td>JsonString</td> + <td class="left">N/A</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description26">알림 + Link 속성</span></td> + </tr> + <tr> + <td title="27">27</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request27">링크속성값</span></td> + <td class="left"> rel</td> + <td>N</td> + <td>Body</td> + <td>String</td> + <td class="left">popup</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description27">링크 식별 + 값</span></td> + </tr> + <tr> + <td title="28">28</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request28">링크URL</span></td> + <td class="left"> href</td> + <td>N</td> + <td>Body</td> + <td>String</td> + <td class="left">http://www.samsung.net</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description28">link + URL</span></td> + </tr> + <tr> + <td title="29">29</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request29">부가 옵션</span></td> + <td class="left"> hint</td> + <td>Y</td> + <td>Header</td> + <td>String</td> + <td class="left">multibrowser</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.request.description29"><span + class="ellipsis">multibrowser값 지정 시 녹스포털을 로그인한 브라우저의 Tab으로 href URL을 로딩 + </span><br><span class="ellipsis">* IE 는 Popup으로 표시됨</span></span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Response Parameter</p> + </div><span data-message-id="noti.guide.sendnotification.response.title">호출 성공여부 및 알림의 키 값(UID)을 리턴합니다.</span> + <div class="tbl-list01 kc-tbl text-full"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="4%;"> + <col width="16%;"> + <col width="15%;"> + <col width="10%;"> + <col width="20%;"> + <col width="35%;"> + </colgroup> + <thead> + <tr> + <th>No.</th> + <th class="left">Properties</th> + <th class="left">Attribute</th> + <th>Data Type</th> + <th class="left">Sample Data</th> + <th class="left">Note</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="4%;"> + <col width="16%;"> + <col width="15%;"> + <col width="10%;"> + <col width="20%;"> + <col width="35%;"> + </colgroup> + <tbody> + <tr> + <td title="1">1</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.response01">API 호출 + 성공여부</span></td> + <td class="left"> Result</td> + <td>String</td> + <td class="left">Success</td> + <td class="left"><span + data-message-id="noti.guide.sendnotification.response.description01">실시간알림 연계 + 성공여부</span></td> + </tr> + <tr> + <td title="2">2</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.response02">에러코드</span></td> + <td class="left"> ErrorCode</td> + <td>String</td> + <td class="left">null</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.response.description02">에러발생 + 시 코드 값</span></td> + </tr> + <tr> + <td title="3">3</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.response03">응답메시지 및 알림 + ID</span></td> + <td class="left"> Message and ID</td> + <td>String</td> + <td class="left">Alarm Created, uid : 3cd8085ff2c4420bb4cf1828d6369ea4</td> + <td class="left"><span data-message-id="noti.guide.sendnotification.response.description03">응답 + 메시지 및 알림 ID</span></td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Sample</p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <thead> + <tr> + <th>Request</th> + <th>Response</th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="50%;"> + <col width="50%;"> + </colgroup> + <tbody> + <tr> + <td> + <pre><span data-message-id="noti.guide.sendnotification.response.sample10"><span class="ellipsis">{</span><br><span class="ellipsis"> "targetAddress" : ["knoxportal@samsung.com"],</span><br><span class="ellipsis"> "ntype": "NEW", </span><br><span class="ellipsis"> "messageid": "EXT201804030305581008775022",</span><br><span class="ellipsis"> "systemname" : "push service", </span><br><span class="ellipsis"> "from" :"외부 알림 테스트", </span><br><span class="ellipsis"> "fromGlobal" : "External Notification Test ",</span><br><span class="ellipsis"> "exVisualVO": {</span><br><span class="ellipsis"> "template": "content",</span><br><span class="ellipsis"> "skin": "White",</span><br><span class="ellipsis"> "global": "N", </span><br><span class="ellipsis"> "logo": "Y",</span><br><span class="ellipsis"> "logourl": "",</span><br><span class="ellipsis"> "exTextVOList": [</span><br><span class="ellipsis"> {</span><br><span class="ellipsis"> "content": "제목", </span><br><span class="ellipsis"> "contentglobal": "Title", </span><br><span class="ellipsis"> "size": 14,</span><br><span class="ellipsis"> "pos": 1, </span><br><span class="ellipsis"> "exColorVO": { </span><br><span class="ellipsis"> "r": 0, </span><br><span class="ellipsis"> "g": 0,</span><br><span class="ellipsis"> "b": 0</span><br><span class="ellipsis"> },</span><br><span class="ellipsis"> "style": "BOLD"</span><br><span class="ellipsis"> }</span><br><span class="ellipsis"> ]</span><br><span class="ellipsis"> },</span><br><span class="ellipsis"> "exActionsVO": { </span><br><span class="ellipsis"> "popup": "Y", </span><br><span class="ellipsis"> "snooze": "N", </span><br><span class="ellipsis"> "clickable": "Y", </span><br><span class="ellipsis"> "hint": "multibrowser", </span><br><span class="ellipsis"> "exLinksVOList":</span><br><span class="ellipsis"> [</span><br><span class="ellipsis"> {</span><br><span class="ellipsis"> "rel": "popup", </span><br><span class="ellipsis"> "href": "http://naver.com", </span><br><span class="ellipsis"> "args" : ""</span><br><span class="ellipsis"> }</span><br><span class="ellipsis"> ]</span><br><span class="ellipsis"> }</span><br><span class="ellipsis">}</span></span> + </pre> + </td> + <td> + <pre><span data-message-id="noti.guide.sendnotification.response.sample11"><span class="ellipsis">{</span><br><span class="ellipsis"> "result": "OK",</span><br><span class="ellipsis"> "errorCode": null, </span><br><span class="ellipsis"> "message": "Alarm Created, uid : 3cd8085ff2c4420bb4cf1828d6369ea4"</span><br><span class="ellipsis">}</span></span> + </pre> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="module-font type02"> + <p>Error Code</p> + </div> + <div class="tbl-list01 kc-tbl"> + <div class="tbl-list-head"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <thead> + <tr> + <th><span data-message-id="common.type.message1">HTTP응답코드</span></th> + <th><span data-message-id="common.type.message2">에러코드</span></th> + <th><span data-message-id="common.type.message3">에러메시지</span></th> + <th><span data-message-id="common.type.message4">조치방안</span></th> + </tr> + </thead> + </table> + </div> + <div class="tbl-list-body"> + <table> + <colgroup> + <col width="10%;"> + <col width="10%;"> + <col width="40%;"> + <col width="40%;"> + </colgroup> + <tbody> + <tr> + <td>400</td> + <td>EX001</td> + <td class="left desc">Notification information is null.</td> + <td class="left desc"><span data-message-id="noti.guide.sendnotification.errormessage01">알림 인풋 + 전체가 NULL일 경우 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX002</td> + <td class="left desc">[ntype] value is NEW or RECALL.</td> + <td class="left desc"><span data-message-id="noti.guide.sendnotification.errormessage02">ntype + 값이 NEW이거나 RECALL이지 않은 경우 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX003</td> + <td class="left desc">[from] is mendentory.</td> + <td class="left desc"><span data-message-id="noti.guide.sendnotification.errormessage03">from값이 + 입력되지 않은 경우 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX004</td> + <td class="left desc">[fromGlobal] is mendentory.</td> + <td class="left desc"><span + data-message-id="noti.guide.sendnotification.errormessage04">fromGlobal값이 입력되지 않은 경우 + 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX006</td> + <td class="left desc">[systemname] is mendentory.</td> + <td class="left desc"><span + data-message-id="noti.guide.sendnotification.errormessage05">systemname값이 입력되지 않은 경우 + 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX007</td> + <td class="left desc">[exVisualVO] is mendentory.</td> + <td class="left desc"><span + data-message-id="noti.guide.sendnotification.errormessage06">exVisualVO값이 입력되지 않은 경우 + 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX008</td> + <td class="left desc">[exActionsVO] is mendentory.</td> + <td class="left desc"><span + data-message-id="noti.guide.sendnotification.errormessage07">exActionsVO값이 입력되지 않은 경우 + 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX009</td> + <td class="left desc">The length of [template] is max 10 characters.</td> + <td class="left desc"><span + data-message-id="noti.guide.sendnotification.errormessage08">template 값이 10자 이상 입력될 경우 + 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX010</td> + <td class="left desc">The length of [skin] is max 10 characters.</td> + <td class="left desc"><span data-message-id="noti.guide.sendnotification.errormessage09">skin 값이 + 10자 이상 입력될 경우 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX011</td> + <td class="left desc">The value of [global] value is not Y or N.</td> + <td class="left desc"><span data-message-id="noti.guide.sendnotification.errormessage10">global + 값이 Y혹은 N이 입력되지 않는 경우 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX012</td> + <td class="left desc">The value of [logo] value is not Y or N.</td> + <td class="left desc"><span data-message-id="noti.guide.sendnotification.errormessage11">logo 값이 + Y 혹은 N이 입력되지 않는 경우 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX013</td> + <td class="left desc">The value of [logourl] must start with url pattern(http://).</td> + <td class="left desc"><span + data-message-id="noti.guide.sendnotification.errormessage12">Logourl값이 정상적인 URL이 아닌 경우 + 발생(http://로 시작필요)</span></td> + </tr> + <tr> + <td>400</td> + <td>EX014</td> + <td class="left desc">[exTextVO] is mendentory.</td> + <td class="left desc"><span + data-message-id="noti.guide.sendnotification.errormessage13">exTextVO 값이 입력되지 않은 경우 + 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX015</td> + <td class="left desc">[content] is mendentory.</td> + <td class="left desc"><span data-message-id="noti.guide.sendnotification.errormessage14">content + 값이 입력되지 않은 경우 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX016</td> + <td class="left desc">[R,G,B] value range is 0 to 255.</td> + <td class="left desc"><span data-message-id="noti.guide.sendnotification.errormessage15">R,G,B + 값이 0~255범위에서 벗어나는 경우 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX017</td> + <td class="left desc">For the requested search conditions, paging is not possible.</td> + <td class="left desc"><span data-message-id="noti.guide.sendnotification.errormessage16">href 값이 + 정상적인 URL이 아닌 경우 발생(http://로 시작필요)</span></td> + </tr> + <tr> + <td>400</td> + <td>EX018</td> + <td class="left desc">The value of [template] encoding is supported UTF-8.</td> + <td class="left desc"><span + data-message-id="noti.guide.sendnotification.errormessage17">Template 값이 UTF-8로 인코딩 되지 + 않은 경우 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX019</td> + <td class="left desc">The value of [skin] encoding is supported UTF-8.</td> + <td class="left desc"><span data-message-id="noti.guide.sendnotification.errormessage18">Skin 값이 + UTF-8로 인코딩 되지 않은 경우 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX020</td> + <td class="left desc">The value of [rel] is max 10 characters.</td> + <td class="left desc"><span data-message-id="noti.guide.sendnotification.errormessage19">Rel 값이 + 10자 이상 입력될 경우 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX021</td> + <td class="left desc">The value of [rel] encoding is supported UTF-8.</td> + <td class="left desc"><span data-message-id="noti.guide.sendnotification.errormessage20">rel 값이 + UTF-8로 인코딩 되지 않은 경우 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX022</td> + <td class="left desc">[targetAddress] is invalid. Check if an on-leave or retired person.</td> + <td class="left desc"><span + data-message-id="noti.guide.sendnotification.errormessage21">targetAddress 값의 임직원 정보가 없는 + 경우 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX023</td> + <td class="left desc">[size] value range is 0 to 1024.</td> + <td class="left desc"><span data-message-id="noti.guide.sendnotification.errormessage22">size 값이 + 0~1024범위에서 벗어나는 경우 발생</span></td> + </tr> + <tr> + <td>400</td> + <td>EX024</td> + <td class="left desc">[pos] value range is 1 to 3.</td> + <td class="left desc"><span data-message-id="noti.guide.sendnotification.errormessage23">pos 값이 + 1~3위에서 벗어나는 경우 발생</span></td> + </tr> + </tbody> + </table> + </div> + </div><br><br> +</div>
\ No newline at end of file diff --git a/lib/knox-api/realtime-notification/realtime-notification.ts b/lib/knox-api/realtime-notification/realtime-notification.ts new file mode 100644 index 00000000..a26f5b55 --- /dev/null +++ b/lib/knox-api/realtime-notification/realtime-notification.ts @@ -0,0 +1,333 @@ +"use server" + +import { z } from "zod" + +// 타입 정의 +const ColorSchema = z.object({ + r: z.number().min(0).max(255), + g: z.number().min(0).max(255), + b: z.number().min(0).max(255), +}) + +const TextSchema = z.object({ + content: z.string().min(1), + contentglobal: z.string().optional(), + size: z.number().min(0).max(1024).optional(), + pos: z.number().min(1).max(3), + exColorVO: ColorSchema.optional(), + style: z.string().optional(), +}) + +const LinkSchema = z.object({ + rel: z.string().max(10).optional(), + href: z.string().url().optional(), + args: z.string().optional(), +}) + +const VisualSchema = z.object({ + template: z.string().max(10).optional(), + skin: z.string().max(10).optional(), + global: z.enum(["Y", "N"]).optional(), + logo: z.enum(["Y", "N"]).optional(), + logourl: z.string().url().optional(), + exTextVOList: z.array(TextSchema), +}) + +const ActionsSchema = z.object({ + popup: z.enum(["Y", "N"]).optional(), + snooze: z.enum(["Y", "N"]).optional(), + clickable: z.enum(["Y", "N"]).optional(), + hint: z.string().optional(), + exLinksVOList: z.array(LinkSchema).optional(), +}) + +const NotificationRequestSchema = z.object({ + targetAddress: z.array(z.string().email()).max(100), + ntype: z.enum(["NEW", "RECALL"]), + messageid: z.string().optional(), + systemname: z.string().min(1), + from: z.string().min(1), + fromGlobal: z.string().min(1), + exVisualVO: VisualSchema, + exActionsVO: ActionsSchema, +}) + +export type NotificationRequest = z.infer<typeof NotificationRequestSchema> +export type NotificationColor = z.infer<typeof ColorSchema> +export type NotificationText = z.infer<typeof TextSchema> +export type NotificationLink = z.infer<typeof LinkSchema> +export type NotificationVisual = z.infer<typeof VisualSchema> +export type NotificationActions = z.infer<typeof ActionsSchema> + +// 응답 타입 +export interface NotificationResponse { + result: string + errorCode: string | null + message: string +} + +// 에러 타입 +export interface NotificationError { + httpStatus: number + errorCode: string + message: string +} + +// 환경 변수 검증 +const getApiConfig = () => { + const baseUrl = process.env.KNOX_API_BASE_URL + const systemId = process.env.KNOX_SYSTEM_ID + + if (!baseUrl || !systemId) { + throw new Error("Knox API configuration missing: KNOX_API_BASE_URL and KNOX_SYSTEM_ID are required") + } + + return { baseUrl, systemId } +} + +/** + * Knox Suite 실시간 토스트 알림 전송 + */ +export async function sendNotification( + request: NotificationRequest +): Promise<NotificationResponse> { + try { + // 요청 데이터 검증 + const validatedRequest = NotificationRequestSchema.parse(request) + + const { baseUrl, systemId } = getApiConfig() + + const response = await fetch(`${baseUrl}/notification/api/v2.0/sendnotification`, { + method: "POST", + headers: { + "Content-Type": "application/json", + "System-ID": systemId, + "hint": validatedRequest.exActionsVO.hint || "multibrowser", + }, + body: JSON.stringify(validatedRequest), + }) + + if (!response.ok) { + const errorData = await response.json() + throw new Error(`API Error: ${errorData.message || response.statusText}`) + } + + const result: NotificationResponse = await response.json() + return result + + } catch (error) { + console.error("Knox notification error:", error) + throw error + } +} + +/** + * 간단한 토스트 알림 전송 (기본 설정 사용) + */ +export async function sendSimpleNotification( + targetEmails: string[], + title: string, + titleGlobal: string, + systemName: string, + link?: string +): Promise<NotificationResponse> { + const notification: NotificationRequest = { + targetAddress: targetEmails, + ntype: "NEW", + systemname: systemName, + from: title, + fromGlobal: titleGlobal, + exVisualVO: { + template: "content", + skin: "White", + global: "N", + logo: "Y", + logourl: "", + exTextVOList: [ + { + content: title, + contentglobal: titleGlobal, + size: 14, + pos: 1, + exColorVO: { + r: 0, + g: 0, + b: 0, + }, + style: "BOLD", + }, + ], + }, + exActionsVO: { + popup: "Y", + clickable: "Y", + hint: "multibrowser", + exLinksVOList: link ? [ + { + rel: "popup", + href: link, + args: "", + }, + ] : [], + }, + } + + return await sendNotification(notification) +} + +/** + * 알림 취소 (RECALL) + */ +export async function recallNotification( + targetEmails: string[], + systemName: string, + messageId: string +): Promise<NotificationResponse> { + const notification: NotificationRequest = { + targetAddress: targetEmails, + ntype: "RECALL", + messageid: messageId, + systemname: systemName, + from: "알림 취소", + fromGlobal: "Notification Recall", + exVisualVO: { + template: "content", + skin: "White", + global: "N", + logo: "Y", + logourl: "", + exTextVOList: [ + { + content: "알림이 취소되었습니다", + contentglobal: "Notification has been recalled", + size: 14, + pos: 1, + exColorVO: { + r: 255, + g: 0, + b: 0, + }, + style: "BOLD", + }, + ], + }, + exActionsVO: { + popup: "N", + clickable: "N", + hint: "multibrowser", + }, + } + + return await sendNotification(notification) +} + +/** + * 사용자 정의 스타일 토스트 알림 + */ +export async function sendCustomNotification( + targetEmails: string[], + systemName: string, + title: string, + titleGlobal: string, + options: { + template?: string + skin?: string + logoUrl?: string + textColor?: NotificationColor + textSize?: number + textStyle?: string + link?: string + linkRel?: string + } = {} +): Promise<NotificationResponse> { + const notification: NotificationRequest = { + targetAddress: targetEmails, + ntype: "NEW", + systemname: systemName, + from: title, + fromGlobal: titleGlobal, + exVisualVO: { + template: options.template || "content", + skin: options.skin || "White", + global: "N", + logo: options.logoUrl ? "Y" : "Y", + logourl: options.logoUrl || "", + exTextVOList: [ + { + content: title, + contentglobal: titleGlobal, + size: options.textSize || 14, + pos: 1, + exColorVO: options.textColor || { + r: 0, + g: 0, + b: 0, + }, + style: options.textStyle || "BOLD", + }, + ], + }, + exActionsVO: { + popup: options.link ? "Y" : "N", + clickable: options.link ? "Y" : "N", + hint: "multibrowser", + exLinksVOList: options.link ? [ + { + rel: options.linkRel || "popup", + href: options.link, + args: "", + }, + ] : [], + }, + } + + return await sendNotification(notification) +} + +/** + * 헬퍼 함수: 알림 ID 추출 + */ +export async function extractNotificationId(response: NotificationResponse): Promise<string | null> { + if (response.result === "OK" && response.message) { + const match = response.message.match(/uid\s*:\s*([a-f0-9]+)/i) + return match ? match[1] : null + } + return null +} + +/** + * 헬퍼 함수: 여러 사용자에게 배치 알림 전송 + */ +export async function sendBatchNotifications( + notifications: Array<{ + targetEmails: string[] + title: string + titleGlobal: string + systemName: string + link?: string + }> +): Promise<NotificationResponse[]> { + const results: NotificationResponse[] = [] + + for (const notification of notifications) { + try { + const result = await sendSimpleNotification( + notification.targetEmails, + notification.title, + notification.titleGlobal, + notification.systemName, + notification.link + ) + results.push(result) + } catch (error) { + console.error("Batch notification error:", error) + results.push({ + result: "ERROR", + errorCode: "BATCH_ERROR", + message: error instanceof Error ? error.message : "Unknown error", + }) + } + } + + return results +} |
