@teamlearners/clawops 0.35.0 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +92 -4
- package/dist/agent/index.cjs +10 -10
- package/dist/agent/index.js +2 -2
- package/dist/{chunk-TVDUOKJD.cjs → chunk-IYSPOOKH.cjs} +14 -2
- package/dist/chunk-IYSPOOKH.cjs.map +1 -0
- package/dist/{chunk-NT6ZS3TQ.cjs → chunk-LKFNV2GI.cjs} +3 -3
- package/dist/{chunk-NT6ZS3TQ.cjs.map → chunk-LKFNV2GI.cjs.map} +1 -1
- package/dist/{chunk-36JABW7P.js → chunk-VYGIWHRU.js} +14 -2
- package/dist/chunk-VYGIWHRU.js.map +1 -0
- package/dist/{chunk-M6BYGYJO.js → chunk-XL2VWU36.js} +3 -3
- package/dist/{chunk-M6BYGYJO.js.map → chunk-XL2VWU36.js.map} +1 -1
- package/dist/{client-CKaAfPlF.d.cts → client-DKsEma11.d.cts} +580 -21
- package/dist/{client-CKaAfPlF.d.ts → client-DKsEma11.d.ts} +580 -21
- package/dist/index.cjs +307 -39
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +272 -7
- package/dist/index.js.map +1 -1
- package/dist/solapi/index.cjs +7 -7
- package/dist/solapi/index.d.cts +2 -2
- package/dist/solapi/index.d.ts +2 -2
- package/dist/solapi/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-36JABW7P.js.map +0 -1
- package/dist/chunk-TVDUOKJD.cjs.map +0 -1
|
@@ -230,7 +230,7 @@ type AssignmentLink = z.infer<typeof AssignmentLinkSchema>;
|
|
|
230
230
|
type AssignmentLinkCreateResponse = z.infer<typeof AssignmentLinkCreateResponseSchema>;
|
|
231
231
|
type AssignmentLinkStatus = AssignmentLink['status'];
|
|
232
232
|
|
|
233
|
-
type RequestOptions$
|
|
233
|
+
type RequestOptions$3 = {
|
|
234
234
|
extraHeaders?: Record<string, string>;
|
|
235
235
|
extraQuery?: Record<string, unknown>;
|
|
236
236
|
timeout?: number;
|
|
@@ -246,13 +246,13 @@ declare class AssignmentLinks extends APIResource {
|
|
|
246
246
|
webhookUrl?: string;
|
|
247
247
|
webhookMethod?: 'POST' | 'GET';
|
|
248
248
|
note?: string;
|
|
249
|
-
}, options?: RequestOptions$
|
|
249
|
+
}, options?: RequestOptions$3): Promise<AssignmentLinkCreateResponse>;
|
|
250
250
|
list(params?: {
|
|
251
251
|
status?: AssignmentLinkStatus;
|
|
252
252
|
page?: number;
|
|
253
253
|
pageSize?: number;
|
|
254
|
-
}, options?: RequestOptions$
|
|
255
|
-
retrieve(linkId: string, options?: RequestOptions$
|
|
254
|
+
}, options?: RequestOptions$3): Promise<Page<AssignmentLink>>;
|
|
255
|
+
retrieve(linkId: string, options?: RequestOptions$3): Promise<AssignmentLink>;
|
|
256
256
|
revoke(linkId: string, options?: {
|
|
257
257
|
extraHeaders?: Record<string, string>;
|
|
258
258
|
timeout?: number;
|
|
@@ -316,7 +316,7 @@ type BlockedChannel = BlockedRecipient['channel'];
|
|
|
316
316
|
type BlockedRecipientStatus = 'active' | 'released' | 'all';
|
|
317
317
|
type BlockedRecipientSource = 'api' | 'console' | 'import';
|
|
318
318
|
|
|
319
|
-
type RequestOptions$
|
|
319
|
+
type RequestOptions$2 = {
|
|
320
320
|
extraHeaders?: Record<string, string>;
|
|
321
321
|
extraQuery?: Record<string, unknown>;
|
|
322
322
|
timeout?: number;
|
|
@@ -345,7 +345,7 @@ declare class BlockedRecipients extends APIResource {
|
|
|
345
345
|
source?: BlockedRecipientSource;
|
|
346
346
|
sourceRef?: string;
|
|
347
347
|
note?: string;
|
|
348
|
-
}, options?: RequestOptions$
|
|
348
|
+
}, options?: RequestOptions$2): Promise<BlockedRecipient>;
|
|
349
349
|
/**
|
|
350
350
|
* 수신거부 목록을 조회합니다. 기본은 **현재 차단 중인 항목만** 이며,
|
|
351
351
|
* 해제 이력까지 보려면 `status` 를 `'released'` 또는 `'all'` 로 지정합니다.
|
|
@@ -356,9 +356,9 @@ declare class BlockedRecipients extends APIResource {
|
|
|
356
356
|
status?: BlockedRecipientStatus;
|
|
357
357
|
page?: number;
|
|
358
358
|
pageSize?: number;
|
|
359
|
-
}, options?: RequestOptions$
|
|
359
|
+
}, options?: RequestOptions$2): Promise<Page<BlockedRecipient>>;
|
|
360
360
|
/** 항목 상세를 조회합니다. 해제된 항목도 이력으로 남아 조회됩니다(`active: false`). */
|
|
361
|
-
retrieve(blockId: string, options?: RequestOptions$
|
|
361
|
+
retrieve(blockId: string, options?: RequestOptions$2): Promise<BlockedRecipient>;
|
|
362
362
|
/**
|
|
363
363
|
* 메모를 수정합니다.
|
|
364
364
|
*
|
|
@@ -367,7 +367,7 @@ declare class BlockedRecipients extends APIResource {
|
|
|
367
367
|
*/
|
|
368
368
|
update(blockId: string, params?: {
|
|
369
369
|
note?: string | null;
|
|
370
|
-
}, options?: RequestOptions$
|
|
370
|
+
}, options?: RequestOptions$2): Promise<BlockedRecipient>;
|
|
371
371
|
/**
|
|
372
372
|
* 수신거부를 해제해 다시 발신할 수 있게 합니다.
|
|
373
373
|
*
|
|
@@ -379,7 +379,7 @@ declare class BlockedRecipients extends APIResource {
|
|
|
379
379
|
*/
|
|
380
380
|
release(blockId: string, params?: {
|
|
381
381
|
note?: string;
|
|
382
|
-
}, options?: RequestOptions$
|
|
382
|
+
}, options?: RequestOptions$2): Promise<BlockedRecipient>;
|
|
383
383
|
}
|
|
384
384
|
|
|
385
385
|
declare const CallSchema: z.ZodObject<{
|
|
@@ -797,10 +797,457 @@ declare class Calls extends APIResource {
|
|
|
797
797
|
}): Promise<SummaryStatus>;
|
|
798
798
|
}
|
|
799
799
|
|
|
800
|
+
/**
|
|
801
|
+
* 채널 연결 상태. 서버가 어휘를 소유하므로 **열린 유니온**이다 — 목록에 없는 값도 그대로
|
|
802
|
+
* 실리고, 낡는 것은 자동완성뿐이다.
|
|
803
|
+
*/
|
|
804
|
+
type KakaoChannelStatus = 'connected' | 'needs_attention' | (string & {});
|
|
805
|
+
/**
|
|
806
|
+
* 이 계정에 연결된 카카오 비즈니스 채널.
|
|
807
|
+
*
|
|
808
|
+
* ⚠️ `searchId` 는 채널 소유자가 카카오 비즈니스에서 바꿀 수 있다. **연동 키로 쓰지 말 것** —
|
|
809
|
+
* 키는 `id`(ClawOps 리소스 ID)다.
|
|
810
|
+
*/
|
|
811
|
+
declare const KakaoChannelSchema: z.ZodObject<{
|
|
812
|
+
/** ClawOps 채널 리소스 ID. 템플릿 조회와 알림톡 발송에 이 값을 쓴다. */
|
|
813
|
+
id: z.ZodString;
|
|
814
|
+
/** 카카오 채널 검색용 ID. `@` 없는 형태로 저장된다. */
|
|
815
|
+
searchId: z.ZodString;
|
|
816
|
+
name: z.ZodString;
|
|
817
|
+
categoryCode: z.ZodString;
|
|
818
|
+
/**
|
|
819
|
+
* `connected` = 연결 완료. `needs_attention` = 연결 기록은 있으나 카카오 채널 상태를
|
|
820
|
+
* 확인하지 못한 상태다 — 실제로 끊겼을 수도, 일시적인 조회 실패일 수도 있다.
|
|
821
|
+
* `channels.retrieve()` 를 다시 부르면 재확인한다.
|
|
822
|
+
*
|
|
823
|
+
* ⛔ **닫힌 enum 으로 두지 않는다.** 어휘는 서버가 소유하므로, 상태가 하나 늘면
|
|
824
|
+
* 닫힌 enum 은 조회를 통째로 실패시킨다(알림톡 `'ata'` 가 정확히 그렇게 터졌다).
|
|
825
|
+
* 열린 유니온이면 자동완성만 낡고 조회는 계속 산다.
|
|
826
|
+
*/
|
|
827
|
+
status: z.ZodType<KakaoChannelStatus>;
|
|
828
|
+
/** 담당자 휴대전화번호(마스킹). 원문은 저장하지 않는다. */
|
|
829
|
+
managerPhoneMasked: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
830
|
+
connectedAt: z.ZodString;
|
|
831
|
+
/** 카카오 채널 상태를 마지막으로 확인한 시각. null 이면 연결 이후 한 번도 확인하지 않았다. */
|
|
832
|
+
syncedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
833
|
+
createdAt: z.ZodString;
|
|
834
|
+
updatedAt: z.ZodString;
|
|
835
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
836
|
+
/** ClawOps 채널 리소스 ID. 템플릿 조회와 알림톡 발송에 이 값을 쓴다. */
|
|
837
|
+
id: z.ZodString;
|
|
838
|
+
/** 카카오 채널 검색용 ID. `@` 없는 형태로 저장된다. */
|
|
839
|
+
searchId: z.ZodString;
|
|
840
|
+
name: z.ZodString;
|
|
841
|
+
categoryCode: z.ZodString;
|
|
842
|
+
/**
|
|
843
|
+
* `connected` = 연결 완료. `needs_attention` = 연결 기록은 있으나 카카오 채널 상태를
|
|
844
|
+
* 확인하지 못한 상태다 — 실제로 끊겼을 수도, 일시적인 조회 실패일 수도 있다.
|
|
845
|
+
* `channels.retrieve()` 를 다시 부르면 재확인한다.
|
|
846
|
+
*
|
|
847
|
+
* ⛔ **닫힌 enum 으로 두지 않는다.** 어휘는 서버가 소유하므로, 상태가 하나 늘면
|
|
848
|
+
* 닫힌 enum 은 조회를 통째로 실패시킨다(알림톡 `'ata'` 가 정확히 그렇게 터졌다).
|
|
849
|
+
* 열린 유니온이면 자동완성만 낡고 조회는 계속 산다.
|
|
850
|
+
*/
|
|
851
|
+
status: z.ZodType<KakaoChannelStatus>;
|
|
852
|
+
/** 담당자 휴대전화번호(마스킹). 원문은 저장하지 않는다. */
|
|
853
|
+
managerPhoneMasked: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
854
|
+
connectedAt: z.ZodString;
|
|
855
|
+
/** 카카오 채널 상태를 마지막으로 확인한 시각. null 이면 연결 이후 한 번도 확인하지 않았다. */
|
|
856
|
+
syncedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
857
|
+
createdAt: z.ZodString;
|
|
858
|
+
updatedAt: z.ZodString;
|
|
859
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
860
|
+
/** ClawOps 채널 리소스 ID. 템플릿 조회와 알림톡 발송에 이 값을 쓴다. */
|
|
861
|
+
id: z.ZodString;
|
|
862
|
+
/** 카카오 채널 검색용 ID. `@` 없는 형태로 저장된다. */
|
|
863
|
+
searchId: z.ZodString;
|
|
864
|
+
name: z.ZodString;
|
|
865
|
+
categoryCode: z.ZodString;
|
|
866
|
+
/**
|
|
867
|
+
* `connected` = 연결 완료. `needs_attention` = 연결 기록은 있으나 카카오 채널 상태를
|
|
868
|
+
* 확인하지 못한 상태다 — 실제로 끊겼을 수도, 일시적인 조회 실패일 수도 있다.
|
|
869
|
+
* `channels.retrieve()` 를 다시 부르면 재확인한다.
|
|
870
|
+
*
|
|
871
|
+
* ⛔ **닫힌 enum 으로 두지 않는다.** 어휘는 서버가 소유하므로, 상태가 하나 늘면
|
|
872
|
+
* 닫힌 enum 은 조회를 통째로 실패시킨다(알림톡 `'ata'` 가 정확히 그렇게 터졌다).
|
|
873
|
+
* 열린 유니온이면 자동완성만 낡고 조회는 계속 산다.
|
|
874
|
+
*/
|
|
875
|
+
status: z.ZodType<KakaoChannelStatus>;
|
|
876
|
+
/** 담당자 휴대전화번호(마스킹). 원문은 저장하지 않는다. */
|
|
877
|
+
managerPhoneMasked: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
878
|
+
connectedAt: z.ZodString;
|
|
879
|
+
/** 카카오 채널 상태를 마지막으로 확인한 시각. null 이면 연결 이후 한 번도 확인하지 않았다. */
|
|
880
|
+
syncedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
881
|
+
createdAt: z.ZodString;
|
|
882
|
+
updatedAt: z.ZodString;
|
|
883
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
884
|
+
type KakaoChannel = z.infer<typeof KakaoChannelSchema>;
|
|
885
|
+
/**
|
|
886
|
+
* 알림톡 템플릿.
|
|
887
|
+
*
|
|
888
|
+
* 본문·버튼·아이템 리스트·강조 문구는 **카카오 검수를 받은 그대로** 발송된다. 발송 요청으로
|
|
889
|
+
* 바꿀 수 있는 것은 `variables` 값뿐이다.
|
|
890
|
+
*/
|
|
891
|
+
declare const KakaoTemplateSchema: z.ZodObject<{
|
|
892
|
+
/** ClawOps 템플릿 리소스 ID. 발송의 `kakao.templateId` 에 이 값을 쓴다. */
|
|
893
|
+
id: z.ZodString;
|
|
894
|
+
/** ClawOps 채널 리소스 ID. 발송의 `kakao.channelId` 와 같은 값이다. */
|
|
895
|
+
channelId: z.ZodString;
|
|
896
|
+
name: z.ZodString;
|
|
897
|
+
/** 검수를 받은 템플릿 본문. `#{변수}` 자리는 발송 시 치환된다. */
|
|
898
|
+
content: z.ZodString;
|
|
899
|
+
/**
|
|
900
|
+
* 카카오 검수 상태(`APPROVED`·`REJECTED` 등). **카카오 쪽 열린 집합이라 문자열이다.**
|
|
901
|
+
* 발송 가능 여부 판정은 `sendable` 이 정본이다.
|
|
902
|
+
*/
|
|
903
|
+
status: z.ZodString;
|
|
904
|
+
/** 휴면 템플릿. `true` 면 승인 상태여도 발송할 수 없다. */
|
|
905
|
+
dormant: z.ZodBoolean;
|
|
906
|
+
/** 지금 발송에 쓸 수 있으면 true. `status === 'APPROVED' && !dormant` 다. */
|
|
907
|
+
sendable: z.ZodBoolean;
|
|
908
|
+
/** `CHANNEL`(채널 소유) 또는 `GROUP`(기본 제공). */
|
|
909
|
+
assignType: z.ZodString;
|
|
910
|
+
messageType: z.ZodString;
|
|
911
|
+
emphasizeType: z.ZodString;
|
|
912
|
+
/**
|
|
913
|
+
* 발송 시 `kakao.variables` 에 모두 채워야 하는 변수 이름.
|
|
914
|
+
* 버튼 링크·강조 문구에 들어간 변수도 이 한 목록에 모인다.
|
|
915
|
+
*/
|
|
916
|
+
variables: z.ZodArray<z.ZodString, "many">;
|
|
917
|
+
createdAt: z.ZodString;
|
|
918
|
+
updatedAt: z.ZodString;
|
|
919
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
920
|
+
/** ClawOps 템플릿 리소스 ID. 발송의 `kakao.templateId` 에 이 값을 쓴다. */
|
|
921
|
+
id: z.ZodString;
|
|
922
|
+
/** ClawOps 채널 리소스 ID. 발송의 `kakao.channelId` 와 같은 값이다. */
|
|
923
|
+
channelId: z.ZodString;
|
|
924
|
+
name: z.ZodString;
|
|
925
|
+
/** 검수를 받은 템플릿 본문. `#{변수}` 자리는 발송 시 치환된다. */
|
|
926
|
+
content: z.ZodString;
|
|
927
|
+
/**
|
|
928
|
+
* 카카오 검수 상태(`APPROVED`·`REJECTED` 등). **카카오 쪽 열린 집합이라 문자열이다.**
|
|
929
|
+
* 발송 가능 여부 판정은 `sendable` 이 정본이다.
|
|
930
|
+
*/
|
|
931
|
+
status: z.ZodString;
|
|
932
|
+
/** 휴면 템플릿. `true` 면 승인 상태여도 발송할 수 없다. */
|
|
933
|
+
dormant: z.ZodBoolean;
|
|
934
|
+
/** 지금 발송에 쓸 수 있으면 true. `status === 'APPROVED' && !dormant` 다. */
|
|
935
|
+
sendable: z.ZodBoolean;
|
|
936
|
+
/** `CHANNEL`(채널 소유) 또는 `GROUP`(기본 제공). */
|
|
937
|
+
assignType: z.ZodString;
|
|
938
|
+
messageType: z.ZodString;
|
|
939
|
+
emphasizeType: z.ZodString;
|
|
940
|
+
/**
|
|
941
|
+
* 발송 시 `kakao.variables` 에 모두 채워야 하는 변수 이름.
|
|
942
|
+
* 버튼 링크·강조 문구에 들어간 변수도 이 한 목록에 모인다.
|
|
943
|
+
*/
|
|
944
|
+
variables: z.ZodArray<z.ZodString, "many">;
|
|
945
|
+
createdAt: z.ZodString;
|
|
946
|
+
updatedAt: z.ZodString;
|
|
947
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
948
|
+
/** ClawOps 템플릿 리소스 ID. 발송의 `kakao.templateId` 에 이 값을 쓴다. */
|
|
949
|
+
id: z.ZodString;
|
|
950
|
+
/** ClawOps 채널 리소스 ID. 발송의 `kakao.channelId` 와 같은 값이다. */
|
|
951
|
+
channelId: z.ZodString;
|
|
952
|
+
name: z.ZodString;
|
|
953
|
+
/** 검수를 받은 템플릿 본문. `#{변수}` 자리는 발송 시 치환된다. */
|
|
954
|
+
content: z.ZodString;
|
|
955
|
+
/**
|
|
956
|
+
* 카카오 검수 상태(`APPROVED`·`REJECTED` 등). **카카오 쪽 열린 집합이라 문자열이다.**
|
|
957
|
+
* 발송 가능 여부 판정은 `sendable` 이 정본이다.
|
|
958
|
+
*/
|
|
959
|
+
status: z.ZodString;
|
|
960
|
+
/** 휴면 템플릿. `true` 면 승인 상태여도 발송할 수 없다. */
|
|
961
|
+
dormant: z.ZodBoolean;
|
|
962
|
+
/** 지금 발송에 쓸 수 있으면 true. `status === 'APPROVED' && !dormant` 다. */
|
|
963
|
+
sendable: z.ZodBoolean;
|
|
964
|
+
/** `CHANNEL`(채널 소유) 또는 `GROUP`(기본 제공). */
|
|
965
|
+
assignType: z.ZodString;
|
|
966
|
+
messageType: z.ZodString;
|
|
967
|
+
emphasizeType: z.ZodString;
|
|
968
|
+
/**
|
|
969
|
+
* 발송 시 `kakao.variables` 에 모두 채워야 하는 변수 이름.
|
|
970
|
+
* 버튼 링크·강조 문구에 들어간 변수도 이 한 목록에 모인다.
|
|
971
|
+
*/
|
|
972
|
+
variables: z.ZodArray<z.ZodString, "many">;
|
|
973
|
+
createdAt: z.ZodString;
|
|
974
|
+
updatedAt: z.ZodString;
|
|
975
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
976
|
+
type KakaoTemplate = z.infer<typeof KakaoTemplateSchema>;
|
|
977
|
+
/** 채널 업종 카테고리. **열린 집합이므로 코드에 하드코딩하지 말 것** — 이 응답이 정본이다. */
|
|
978
|
+
declare const KakaoChannelCategorySchema: z.ZodObject<{
|
|
979
|
+
/** 채널 연결의 `categoryCode` 에 그대로 보내는 값. */
|
|
980
|
+
code: z.ZodString;
|
|
981
|
+
name: z.ZodString;
|
|
982
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
983
|
+
/** 채널 연결의 `categoryCode` 에 그대로 보내는 값. */
|
|
984
|
+
code: z.ZodString;
|
|
985
|
+
name: z.ZodString;
|
|
986
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
987
|
+
/** 채널 연결의 `categoryCode` 에 그대로 보내는 값. */
|
|
988
|
+
code: z.ZodString;
|
|
989
|
+
name: z.ZodString;
|
|
990
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
991
|
+
type KakaoChannelCategory = z.infer<typeof KakaoChannelCategorySchema>;
|
|
992
|
+
declare const KakaoChannelCategoryListSchema: z.ZodObject<{
|
|
993
|
+
data: z.ZodArray<z.ZodObject<{
|
|
994
|
+
/** 채널 연결의 `categoryCode` 에 그대로 보내는 값. */
|
|
995
|
+
code: z.ZodString;
|
|
996
|
+
name: z.ZodString;
|
|
997
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
998
|
+
/** 채널 연결의 `categoryCode` 에 그대로 보내는 값. */
|
|
999
|
+
code: z.ZodString;
|
|
1000
|
+
name: z.ZodString;
|
|
1001
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
1002
|
+
/** 채널 연결의 `categoryCode` 에 그대로 보내는 값. */
|
|
1003
|
+
code: z.ZodString;
|
|
1004
|
+
name: z.ZodString;
|
|
1005
|
+
}, z.ZodTypeAny, "passthrough">>, "many">;
|
|
1006
|
+
meta: z.ZodObject<{
|
|
1007
|
+
/** 이 목록을 공급자에서 실제로 받아 온 시각. */
|
|
1008
|
+
fetchedAt: z.ZodString;
|
|
1009
|
+
/** 서버 캐시에서 응답했는지. 캐시는 짧고 값이 바뀌면 자동으로 따라간다. */
|
|
1010
|
+
cached: z.ZodBoolean;
|
|
1011
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
1012
|
+
/** 이 목록을 공급자에서 실제로 받아 온 시각. */
|
|
1013
|
+
fetchedAt: z.ZodString;
|
|
1014
|
+
/** 서버 캐시에서 응답했는지. 캐시는 짧고 값이 바뀌면 자동으로 따라간다. */
|
|
1015
|
+
cached: z.ZodBoolean;
|
|
1016
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
1017
|
+
/** 이 목록을 공급자에서 실제로 받아 온 시각. */
|
|
1018
|
+
fetchedAt: z.ZodString;
|
|
1019
|
+
/** 서버 캐시에서 응답했는지. 캐시는 짧고 값이 바뀌면 자동으로 따라간다. */
|
|
1020
|
+
cached: z.ZodBoolean;
|
|
1021
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
1022
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
1023
|
+
data: z.ZodArray<z.ZodObject<{
|
|
1024
|
+
/** 채널 연결의 `categoryCode` 에 그대로 보내는 값. */
|
|
1025
|
+
code: z.ZodString;
|
|
1026
|
+
name: z.ZodString;
|
|
1027
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
1028
|
+
/** 채널 연결의 `categoryCode` 에 그대로 보내는 값. */
|
|
1029
|
+
code: z.ZodString;
|
|
1030
|
+
name: z.ZodString;
|
|
1031
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
1032
|
+
/** 채널 연결의 `categoryCode` 에 그대로 보내는 값. */
|
|
1033
|
+
code: z.ZodString;
|
|
1034
|
+
name: z.ZodString;
|
|
1035
|
+
}, z.ZodTypeAny, "passthrough">>, "many">;
|
|
1036
|
+
meta: z.ZodObject<{
|
|
1037
|
+
/** 이 목록을 공급자에서 실제로 받아 온 시각. */
|
|
1038
|
+
fetchedAt: z.ZodString;
|
|
1039
|
+
/** 서버 캐시에서 응답했는지. 캐시는 짧고 값이 바뀌면 자동으로 따라간다. */
|
|
1040
|
+
cached: z.ZodBoolean;
|
|
1041
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
1042
|
+
/** 이 목록을 공급자에서 실제로 받아 온 시각. */
|
|
1043
|
+
fetchedAt: z.ZodString;
|
|
1044
|
+
/** 서버 캐시에서 응답했는지. 캐시는 짧고 값이 바뀌면 자동으로 따라간다. */
|
|
1045
|
+
cached: z.ZodBoolean;
|
|
1046
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
1047
|
+
/** 이 목록을 공급자에서 실제로 받아 온 시각. */
|
|
1048
|
+
fetchedAt: z.ZodString;
|
|
1049
|
+
/** 서버 캐시에서 응답했는지. 캐시는 짧고 값이 바뀌면 자동으로 따라간다. */
|
|
1050
|
+
cached: z.ZodBoolean;
|
|
1051
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
1052
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
1053
|
+
data: z.ZodArray<z.ZodObject<{
|
|
1054
|
+
/** 채널 연결의 `categoryCode` 에 그대로 보내는 값. */
|
|
1055
|
+
code: z.ZodString;
|
|
1056
|
+
name: z.ZodString;
|
|
1057
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
1058
|
+
/** 채널 연결의 `categoryCode` 에 그대로 보내는 값. */
|
|
1059
|
+
code: z.ZodString;
|
|
1060
|
+
name: z.ZodString;
|
|
1061
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
1062
|
+
/** 채널 연결의 `categoryCode` 에 그대로 보내는 값. */
|
|
1063
|
+
code: z.ZodString;
|
|
1064
|
+
name: z.ZodString;
|
|
1065
|
+
}, z.ZodTypeAny, "passthrough">>, "many">;
|
|
1066
|
+
meta: z.ZodObject<{
|
|
1067
|
+
/** 이 목록을 공급자에서 실제로 받아 온 시각. */
|
|
1068
|
+
fetchedAt: z.ZodString;
|
|
1069
|
+
/** 서버 캐시에서 응답했는지. 캐시는 짧고 값이 바뀌면 자동으로 따라간다. */
|
|
1070
|
+
cached: z.ZodBoolean;
|
|
1071
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
1072
|
+
/** 이 목록을 공급자에서 실제로 받아 온 시각. */
|
|
1073
|
+
fetchedAt: z.ZodString;
|
|
1074
|
+
/** 서버 캐시에서 응답했는지. 캐시는 짧고 값이 바뀌면 자동으로 따라간다. */
|
|
1075
|
+
cached: z.ZodBoolean;
|
|
1076
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
1077
|
+
/** 이 목록을 공급자에서 실제로 받아 온 시각. */
|
|
1078
|
+
fetchedAt: z.ZodString;
|
|
1079
|
+
/** 서버 캐시에서 응답했는지. 캐시는 짧고 값이 바뀌면 자동으로 따라간다. */
|
|
1080
|
+
cached: z.ZodBoolean;
|
|
1081
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
1082
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
1083
|
+
type KakaoChannelCategoryList = z.infer<typeof KakaoChannelCategoryListSchema>;
|
|
1084
|
+
/**
|
|
1085
|
+
* 인증번호 발송 요청 접수 결과.
|
|
1086
|
+
*
|
|
1087
|
+
* **응답에 인증번호는 없다.** 인증번호는 카카오 비즈니스에 등록된 담당자 휴대전화로만 가고,
|
|
1088
|
+
* ClawOps 는 그 값을 받지도 저장하지도 않는다.
|
|
1089
|
+
*/
|
|
1090
|
+
declare const KakaoTokenRequestSchema: z.ZodObject<{
|
|
1091
|
+
requested: z.ZodBoolean;
|
|
1092
|
+
/** 정규화된 검색용 ID. `channels.connect()` 에 이 값을 그대로 보낸다. */
|
|
1093
|
+
searchId: z.ZodString;
|
|
1094
|
+
/** 인증번호가 발송된 번호(마스킹). */
|
|
1095
|
+
phoneNumberMasked: z.ZodString;
|
|
1096
|
+
/** 재요청까지 기다릴 시간(초). */
|
|
1097
|
+
retryAfterSeconds: z.ZodNumber;
|
|
1098
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
1099
|
+
requested: z.ZodBoolean;
|
|
1100
|
+
/** 정규화된 검색용 ID. `channels.connect()` 에 이 값을 그대로 보낸다. */
|
|
1101
|
+
searchId: z.ZodString;
|
|
1102
|
+
/** 인증번호가 발송된 번호(마스킹). */
|
|
1103
|
+
phoneNumberMasked: z.ZodString;
|
|
1104
|
+
/** 재요청까지 기다릴 시간(초). */
|
|
1105
|
+
retryAfterSeconds: z.ZodNumber;
|
|
1106
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
1107
|
+
requested: z.ZodBoolean;
|
|
1108
|
+
/** 정규화된 검색용 ID. `channels.connect()` 에 이 값을 그대로 보낸다. */
|
|
1109
|
+
searchId: z.ZodString;
|
|
1110
|
+
/** 인증번호가 발송된 번호(마스킹). */
|
|
1111
|
+
phoneNumberMasked: z.ZodString;
|
|
1112
|
+
/** 재요청까지 기다릴 시간(초). */
|
|
1113
|
+
retryAfterSeconds: z.ZodNumber;
|
|
1114
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
1115
|
+
type KakaoTokenRequest = z.infer<typeof KakaoTokenRequestSchema>;
|
|
1116
|
+
|
|
1117
|
+
interface KakaoChannelListParams {
|
|
1118
|
+
/** 미지정·`'all'` 은 전체. 그 밖의 값은 `400` 이다 — 오타가 조용히 전체 목록이 되지 않는다. */
|
|
1119
|
+
status?: KakaoChannelStatus | 'all';
|
|
1120
|
+
page?: number;
|
|
1121
|
+
pageSize?: number;
|
|
1122
|
+
}
|
|
1123
|
+
interface KakaoTokenRequestParams {
|
|
1124
|
+
/** 카카오 채널 검색용 ID. `@` 를 붙여 보내도 떼어내고 처리한다. */
|
|
1125
|
+
searchId: string;
|
|
1126
|
+
/**
|
|
1127
|
+
* 인증번호를 받을 담당자 휴대전화번호. 하이픈·`+82` 형태 모두 허용된다.
|
|
1128
|
+
* **카카오 비즈니스 채널에 관리자로 등록된 번호여야** 인증번호가 발송된다.
|
|
1129
|
+
*/
|
|
1130
|
+
phoneNumber: string;
|
|
1131
|
+
}
|
|
1132
|
+
interface KakaoChannelConnectParams {
|
|
1133
|
+
/** `channels.requestToken()` 이 돌려준 정규화된 값을 그대로 보낸다. */
|
|
1134
|
+
searchId: string;
|
|
1135
|
+
/** 인증번호를 받은 담당자 휴대전화번호. 앞 단계와 같은 번호여야 한다. */
|
|
1136
|
+
phoneNumber: string;
|
|
1137
|
+
/** `channelCategories()` 응답의 `code`. */
|
|
1138
|
+
categoryCode: string;
|
|
1139
|
+
/** 담당자 휴대전화로 받은 인증번호. 저장하지 않고 확인에만 쓴다. */
|
|
1140
|
+
token: string;
|
|
1141
|
+
}
|
|
1142
|
+
interface KakaoTemplateListParams {
|
|
1143
|
+
/** ClawOps 채널 리소스 ID. **필수다** — 없으면 `400` 이다. */
|
|
1144
|
+
channelId: string;
|
|
1145
|
+
page?: number;
|
|
1146
|
+
pageSize?: number;
|
|
1147
|
+
}
|
|
1148
|
+
|
|
1149
|
+
type RequestOptions$1 = {
|
|
1150
|
+
extraHeaders?: Record<string, string>;
|
|
1151
|
+
extraQuery?: Record<string, unknown>;
|
|
1152
|
+
timeout?: number;
|
|
1153
|
+
};
|
|
1154
|
+
/**
|
|
1155
|
+
* 카카오 비즈니스 채널.
|
|
1156
|
+
*
|
|
1157
|
+
* 채널 연결은 두 단계다 — `requestToken()` 으로 담당자 휴대전화에 인증번호를 보내고,
|
|
1158
|
+
* 받은 번호를 `connect()` 에 실어 완료한다. 서버는 그 사이 상태를 저장하지 않으므로
|
|
1159
|
+
* `searchId` 와 `phoneNumber` 를 두 번 모두 보낸다.
|
|
1160
|
+
*/
|
|
1161
|
+
declare class KakaoChannels extends APIResource {
|
|
1162
|
+
private get _path();
|
|
1163
|
+
/**
|
|
1164
|
+
* 연결된 채널 목록.
|
|
1165
|
+
*
|
|
1166
|
+
* **카카오 쪽 상태를 확인하지 않는다** — 저장된 연결 정보를 그대로 돌려주므로 빠르다.
|
|
1167
|
+
* 실제 채널 상태까지 확인하려면 `retrieve()` 를 쓴다.
|
|
1168
|
+
*/
|
|
1169
|
+
list(params?: KakaoChannelListParams, options?: RequestOptions$1): Promise<Page<KakaoChannel>>;
|
|
1170
|
+
/**
|
|
1171
|
+
* 채널 하나를 조회한다. **목록과 달리 카카오 쪽 상태를 실제로 확인하고 `status` 를 갱신한다.**
|
|
1172
|
+
*
|
|
1173
|
+
* `connect()` 가 타임아웃됐을 때 결과를 확정하는 경로이기도 하다 — 연결을 재호출하면 중복
|
|
1174
|
+
* 등록을 시도하게 되지만 이 조회는 몇 번을 불러도 안전하다.
|
|
1175
|
+
*
|
|
1176
|
+
* 카카오 쪽 조회에 실패해도 `404` 가 아니다. 연결 기록은 유효하므로 `status` 가
|
|
1177
|
+
* `needs_attention` 으로 온다.
|
|
1178
|
+
*/
|
|
1179
|
+
retrieve(channelId: string, options?: RequestOptions$1): Promise<KakaoChannel>;
|
|
1180
|
+
/**
|
|
1181
|
+
* 채널 권한을 증명할 인증번호를 **담당자 휴대전화로 발송**해 달라고 요청한다. 연결의 첫 단계다.
|
|
1182
|
+
*
|
|
1183
|
+
* 응답에 인증번호는 없다(`202`). 받은 번호는 `connect()` 의 `token` 으로 보내며, 유효 시간이
|
|
1184
|
+
* 있으므로 받은 뒤 바로 진행한다. 재요청이 잦으면 `429 KAKAO_RATE_LIMITED` 이고
|
|
1185
|
+
* 응답의 `retryAfterSeconds` 만큼 기다린다.
|
|
1186
|
+
*/
|
|
1187
|
+
requestToken(params: KakaoTokenRequestParams, options?: RequestOptions$1): Promise<KakaoTokenRequest>;
|
|
1188
|
+
/**
|
|
1189
|
+
* 인증번호로 채널 연결을 완료한다. **먼저 `requestToken()` 을 불러야 한다.**
|
|
1190
|
+
*
|
|
1191
|
+
* **멱등이다** — 이미 이 계정에 연결된 채널이면 인증번호를 소모하지 않고 기존 연결을 돌려준다.
|
|
1192
|
+
* 다른 계정에 연결된 채널은 멱등이 아니라 충돌이라 `409 KAKAO_CHANNEL_ALREADY_LINKED` 다.
|
|
1193
|
+
*
|
|
1194
|
+
* ⚠️ **타임아웃되면 재호출하지 말 것.** 이미 연결에 성공했을 수 있어 중복 등록을 시도하게 된다.
|
|
1195
|
+
* `list()` 나 `retrieve()` 로 실제 등록 여부를 확인한 뒤 결과를 확정한다.
|
|
1196
|
+
*
|
|
1197
|
+
* ⚠️ **실패해도 인증번호는 소모된다**(`422 KAKAO_TOKEN_INVALID`·`KAKAO_CHANNEL_REJECTED`).
|
|
1198
|
+
* 원인을 해결한 뒤 `requestToken()` 부터 다시 시작해야 한다.
|
|
1199
|
+
*/
|
|
1200
|
+
connect(params: KakaoChannelConnectParams, options?: RequestOptions$1): Promise<KakaoChannel>;
|
|
1201
|
+
/**
|
|
1202
|
+
* 채널 연동을 해제한다. 카카오톡 채널 자체는 지워지지 않고 ClawOps 와의 연동만 끊긴다.
|
|
1203
|
+
*
|
|
1204
|
+
* ⚠️ **되돌릴 수 없고, 그 채널에 등록된 알림톡 템플릿도 함께 삭제된다.** 템플릿은 카카오
|
|
1205
|
+
* 검수를 다시 받아야 하므로 복구에 시간이 걸린다 — 호출 전에 사용자 확인을 받을 것.
|
|
1206
|
+
*
|
|
1207
|
+
* 해제 후에는 그 채널을 다시 연결할 수 있다(본인이든 다른 계정이든). `requestToken()` 부터
|
|
1208
|
+
* 다시 시작하면 된다.
|
|
1209
|
+
*/
|
|
1210
|
+
disconnect(channelId: string, options?: RequestOptions$1): Promise<KakaoChannel>;
|
|
1211
|
+
}
|
|
1212
|
+
/** 알림톡 템플릿(읽기 전용). 등록·검수는 콘솔에서 한다. */
|
|
1213
|
+
declare class KakaoTemplates extends APIResource {
|
|
1214
|
+
/**
|
|
1215
|
+
* 한 채널의 알림톡 템플릿 목록.
|
|
1216
|
+
*
|
|
1217
|
+
* 응답의 `data[].id` 를 발송의 `kakao.templateId` 로, `data[].channelId` 를
|
|
1218
|
+
* `kakao.channelId` 로 쓴다. **`sendable: true` 인 템플릿만 발송할 수 있고**,
|
|
1219
|
+
* `variables` 의 모든 항목을 발송 요청의 `kakao.variables` 에 채워야 한다.
|
|
1220
|
+
*/
|
|
1221
|
+
list(params: KakaoTemplateListParams, options?: RequestOptions$1): Promise<Page<KakaoTemplate>>;
|
|
1222
|
+
}
|
|
1223
|
+
/**
|
|
1224
|
+
* 카카오 알림톡 관련 리소스.
|
|
1225
|
+
*
|
|
1226
|
+
* 발송 자체는 `client.messages.create({ kakao: … })` 다 — 여기서 얻은 채널·템플릿 ID 를 그대로 쓴다.
|
|
1227
|
+
*/
|
|
1228
|
+
declare class Kakao extends APIResource {
|
|
1229
|
+
get channels(): KakaoChannels;
|
|
1230
|
+
get templates(): KakaoTemplates;
|
|
1231
|
+
/**
|
|
1232
|
+
* 채널 연결 시 지정할 업종 카테고리 목록.
|
|
1233
|
+
*
|
|
1234
|
+
* **값을 코드에 하드코딩하지 말 것** — 카카오/공급자 쪽에서 늘거나 바뀌는 열린 집합이고
|
|
1235
|
+
* 이 응답이 그때그때의 정본이다. 응답의 `code` 를 `channels.connect()` 의 `categoryCode`
|
|
1236
|
+
* 로 그대로 보낸다.
|
|
1237
|
+
*
|
|
1238
|
+
* 페이지네이션이 없어 `Page` 가 아니라 `{ data, meta }` 를 그대로 돌려준다.
|
|
1239
|
+
*/
|
|
1240
|
+
channelCategories(options?: RequestOptions$1): Promise<KakaoChannelCategoryList>;
|
|
1241
|
+
}
|
|
1242
|
+
|
|
800
1243
|
declare const MessageSchema: z.ZodObject<{
|
|
801
1244
|
messageId: z.ZodString;
|
|
802
1245
|
status: z.ZodEnum<["queued", "sending", "sent", "failed", "received"]>;
|
|
803
|
-
|
|
1246
|
+
/**
|
|
1247
|
+
* `'ata'` 는 카카오 알림톡이다. `body` 에는 템플릿에 변수를 치환한 결과가 담기고,
|
|
1248
|
+
* 버튼·아이템 리스트·강조 문구는 템플릿에 검수된 대로 발송되어 이 값에는 담기지 않는다.
|
|
1249
|
+
*/
|
|
1250
|
+
type: z.ZodEnum<["sms", "lms", "mms", "rcs", "ata"]>;
|
|
804
1251
|
to: z.ZodString;
|
|
805
1252
|
from: z.ZodString;
|
|
806
1253
|
body: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
@@ -814,7 +1261,11 @@ declare const MessageSchema: z.ZodObject<{
|
|
|
814
1261
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
815
1262
|
messageId: z.ZodString;
|
|
816
1263
|
status: z.ZodEnum<["queued", "sending", "sent", "failed", "received"]>;
|
|
817
|
-
|
|
1264
|
+
/**
|
|
1265
|
+
* `'ata'` 는 카카오 알림톡이다. `body` 에는 템플릿에 변수를 치환한 결과가 담기고,
|
|
1266
|
+
* 버튼·아이템 리스트·강조 문구는 템플릿에 검수된 대로 발송되어 이 값에는 담기지 않는다.
|
|
1267
|
+
*/
|
|
1268
|
+
type: z.ZodEnum<["sms", "lms", "mms", "rcs", "ata"]>;
|
|
818
1269
|
to: z.ZodString;
|
|
819
1270
|
from: z.ZodString;
|
|
820
1271
|
body: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
@@ -828,7 +1279,11 @@ declare const MessageSchema: z.ZodObject<{
|
|
|
828
1279
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
829
1280
|
messageId: z.ZodString;
|
|
830
1281
|
status: z.ZodEnum<["queued", "sending", "sent", "failed", "received"]>;
|
|
831
|
-
|
|
1282
|
+
/**
|
|
1283
|
+
* `'ata'` 는 카카오 알림톡이다. `body` 에는 템플릿에 변수를 치환한 결과가 담기고,
|
|
1284
|
+
* 버튼·아이템 리스트·강조 문구는 템플릿에 검수된 대로 발송되어 이 값에는 담기지 않는다.
|
|
1285
|
+
*/
|
|
1286
|
+
type: z.ZodEnum<["sms", "lms", "mms", "rcs", "ata"]>;
|
|
832
1287
|
to: z.ZodString;
|
|
833
1288
|
from: z.ZodString;
|
|
834
1289
|
body: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
@@ -842,13 +1297,12 @@ declare const MessageSchema: z.ZodObject<{
|
|
|
842
1297
|
}, z.ZodTypeAny, "passthrough">>;
|
|
843
1298
|
type Message = z.infer<typeof MessageSchema>;
|
|
844
1299
|
|
|
845
|
-
|
|
1300
|
+
/** 문자 타입. 발송·대체발송·목록 필터가 같은 어휘를 쓴다. */
|
|
1301
|
+
type TextMessageType = 'sms' | 'lms' | 'mms';
|
|
1302
|
+
/** 문자·알림톡 공통 필드. */
|
|
1303
|
+
interface MessageCreateBaseParams {
|
|
846
1304
|
to: string;
|
|
847
1305
|
from: string;
|
|
848
|
-
body: string;
|
|
849
|
-
type?: 'sms' | 'lms' | 'mms';
|
|
850
|
-
subject?: string;
|
|
851
|
-
mediaUrl?: string[];
|
|
852
1306
|
/**
|
|
853
1307
|
* 발송 멱등키. 같은 계정에서 같은 키로 다시 요청하면 발송하지 않고 1회차 결과를 돌려준다.
|
|
854
1308
|
* 재시도·재실행 경로가 있는 호출자만 채운다.
|
|
@@ -857,14 +1311,99 @@ interface MessageCreateParams {
|
|
|
857
1311
|
*/
|
|
858
1312
|
idempotencyKey?: string;
|
|
859
1313
|
}
|
|
1314
|
+
/** SMS/LMS/MMS 발송 파라미터. */
|
|
1315
|
+
interface TextMessageCreateParams extends MessageCreateBaseParams {
|
|
1316
|
+
body: string;
|
|
1317
|
+
/**
|
|
1318
|
+
* 생략하면 서버가 고른다 — `mediaUrl` 이 있으면 `mms`, `subject` 가 있거나 본문이
|
|
1319
|
+
* EUC-KR 90byte(한글 45자)를 넘으면 `lms`, 그 외에는 `sms`.
|
|
1320
|
+
*
|
|
1321
|
+
* `'sms'` 로 명시한 본문이 90byte 를 넘으면 `400 body_too_long` 이다. 길이가 런타임에
|
|
1322
|
+
* 정해지는 경우(템플릿 치환 등)에는 생략하는 편이 안전하다.
|
|
1323
|
+
*/
|
|
1324
|
+
type?: TextMessageType;
|
|
1325
|
+
subject?: string;
|
|
1326
|
+
/** MMS 첨부 (최대 3개). jpg·jpeg·png·bmp, 장당 300KB 이하. */
|
|
1327
|
+
mediaUrl?: string[];
|
|
1328
|
+
kakao?: never;
|
|
1329
|
+
fallback?: never;
|
|
1330
|
+
}
|
|
1331
|
+
/** 알림톡 템플릿 지정. 구조(본문·버튼·아이템·강조)는 검수된 템플릿이 정하고, 요청은 값만 채운다. */
|
|
1332
|
+
interface KakaoSendParams {
|
|
1333
|
+
/** `kakao.channels.list()` 의 `data[].id` (ClawOps 리소스 ID). */
|
|
1334
|
+
channelId: string;
|
|
1335
|
+
/** `kakao.templates.list()` 의 `data[].id` (ClawOps 리소스 ID). */
|
|
1336
|
+
templateId: string;
|
|
1337
|
+
/**
|
|
1338
|
+
* 템플릿 변수. 키는 `고객명` 과 `#{고객명}` 을 모두 받는다.
|
|
1339
|
+
*
|
|
1340
|
+
* 템플릿이 요구하는 변수가 빠지면 `400 kakao_variable_missing`, 템플릿에 없는 변수를 주면
|
|
1341
|
+
* `400 kakao_variable_unknown` 이다. 버튼 링크·강조 문구에 들어간 변수도 같은 목록에 포함된다.
|
|
1342
|
+
*
|
|
1343
|
+
* 채워야 할 이름은 `kakao.templates.list()` 응답의 `variables` 가 알려준다.
|
|
1344
|
+
*/
|
|
1345
|
+
variables?: Record<string, string>;
|
|
1346
|
+
}
|
|
1347
|
+
/** 알림톡이 발송 실패했을 때 대신 나갈 문자. */
|
|
1348
|
+
interface KakaoFallbackParams {
|
|
1349
|
+
/** 생략하면 알림톡 본문(변수 치환 결과)을 그대로 문자로 보낸다. */
|
|
1350
|
+
body?: string;
|
|
1351
|
+
subject?: string;
|
|
1352
|
+
/** 생략하면 본문 길이에 맞춰 서버가 고른다. */
|
|
1353
|
+
type?: TextMessageType;
|
|
1354
|
+
/** `true` 면 알림톡이 실패해도 문자를 보내지 않는다 — 실패가 그대로 실패로 남는다. */
|
|
1355
|
+
disabled?: boolean;
|
|
1356
|
+
}
|
|
1357
|
+
/**
|
|
1358
|
+
* 카카오 알림톡 발송 파라미터.
|
|
1359
|
+
*
|
|
1360
|
+
* **본문은 템플릿이 정한다.** `body`·`subject`·`mediaUrl` 은 실을 수 없고(서버가 400),
|
|
1361
|
+
* 버튼·아이템 리스트·강조 문구는 카카오 검수를 받은 그대로 발송된다 — 요청으로 바꿀 수 없다.
|
|
1362
|
+
*
|
|
1363
|
+
* 대체발송된 문자는 **별도의 메시지 1건**으로 기록되고 문자 단가로 청구된다.
|
|
1364
|
+
*/
|
|
1365
|
+
interface KakaoMessageCreateParams extends MessageCreateBaseParams {
|
|
1366
|
+
kakao: KakaoSendParams;
|
|
1367
|
+
fallback?: KakaoFallbackParams;
|
|
1368
|
+
/** `kakao` 를 실으면 알림톡이다. 명시할 필요가 없고, 명시한다면 `'ata'` 뿐이다. */
|
|
1369
|
+
type?: 'ata';
|
|
1370
|
+
body?: never;
|
|
1371
|
+
subject?: never;
|
|
1372
|
+
mediaUrl?: never;
|
|
1373
|
+
}
|
|
1374
|
+
/**
|
|
1375
|
+
* 발송 파라미터. 문자와 알림톡은 **서로 배타적**이다 — 서버 규칙이 그렇고, 섞으면 컴파일 에러다.
|
|
1376
|
+
*/
|
|
1377
|
+
type MessageCreateParams = TextMessageCreateParams | KakaoMessageCreateParams;
|
|
860
1378
|
interface MessageListParams {
|
|
861
|
-
type?:
|
|
862
|
-
status?: 'queued' | '
|
|
1379
|
+
type?: TextMessageType | 'ata';
|
|
1380
|
+
status?: 'queued' | 'sent' | 'failed' | 'received';
|
|
1381
|
+
/** 발신 또는 수신 번호. 하이픈 유무를 모두 매칭한다. */
|
|
1382
|
+
number?: string;
|
|
863
1383
|
page?: number;
|
|
864
1384
|
pageSize?: number;
|
|
865
1385
|
}
|
|
866
1386
|
|
|
867
1387
|
declare class Messages extends APIResource {
|
|
1388
|
+
/**
|
|
1389
|
+
* 문자(SMS/LMS/MMS) 또는 카카오 알림톡을 발송합니다.
|
|
1390
|
+
*
|
|
1391
|
+
* 둘은 배타적입니다 — `kakao` 를 실으면 알림톡이고, 이때 `body`·`subject`·`mediaUrl` 은
|
|
1392
|
+
* 실을 수 없습니다(본문은 검수된 템플릿이 정합니다).
|
|
1393
|
+
*
|
|
1394
|
+
* ```ts
|
|
1395
|
+
* // 문자
|
|
1396
|
+
* await client.messages.create({ to: '010…', from: '070…', body: '안녕하세요' });
|
|
1397
|
+
*
|
|
1398
|
+
* // 알림톡 — 실패하면 fallback 문구가 문자로 대신 나갑니다(별도 1건으로 과금)
|
|
1399
|
+
* await client.messages.create({
|
|
1400
|
+
* to: '010…',
|
|
1401
|
+
* from: '070…',
|
|
1402
|
+
* kakao: { channelId, templateId, variables: { 고객명: '홍길동' } },
|
|
1403
|
+
* fallback: { body: '주문이 접수되었습니다.' },
|
|
1404
|
+
* });
|
|
1405
|
+
* ```
|
|
1406
|
+
*/
|
|
868
1407
|
create(params: MessageCreateParams, options?: {
|
|
869
1408
|
extraHeaders?: Record<string, string>;
|
|
870
1409
|
extraQuery?: Record<string, unknown>;
|
|
@@ -1261,8 +1800,19 @@ declare class AccountContext {
|
|
|
1261
1800
|
get webhookLogs(): WebhookLogs;
|
|
1262
1801
|
get assignmentLinks(): AssignmentLinks;
|
|
1263
1802
|
get blockedRecipients(): BlockedRecipients;
|
|
1803
|
+
get kakao(): Kakao;
|
|
1264
1804
|
}
|
|
1265
1805
|
|
|
1806
|
+
/**
|
|
1807
|
+
* 서버가 에러 응답의 `code` 로 싣는 값.
|
|
1808
|
+
*
|
|
1809
|
+
* 문구가 아니라 **이 값으로 분기한다** — 한글 메시지는 바뀔 수 있다.
|
|
1810
|
+
*
|
|
1811
|
+
* ⚠️ 문자 도메인은 snake_case, 카카오 채널 도메인은 SCREAMING_CASE 다. 서버가 실제로
|
|
1812
|
+
* 그렇게 보내므로 SDK 가 임의로 정규화하지 않는다. 열린 유니온이라 목록에 없는 코드도
|
|
1813
|
+
* 그대로 실린다(자동완성만 돕는다).
|
|
1814
|
+
*/
|
|
1815
|
+
type ClawOpsErrorCode = 'invalid_phone' | 'invalid_type' | 'invalid_input' | 'from_not_registered' | 'body_too_long' | 'sms_no_subject' | 'sms_no_media' | 'lms_no_media' | 'too_many_media' | 'invalid_media_ext' | 'media_download_failed' | 'type_not_supported' | 'messaging_blocked' | 'recipient_blocked' | 'quota_exceeded' | 'override_quota_exceeded' | 'no_active_subscription' | 'kakao_required' | 'kakao_type_conflict' | 'kakao_body_not_allowed' | 'kakao_subject_not_allowed' | 'kakao_media_not_allowed' | 'kakao_channel_not_found' | 'kakao_template_not_found' | 'kakao_template_not_approved' | 'kakao_template_dormant' | 'kakao_variable_missing' | 'kakao_variable_unknown' | 'kakao_send_failed' | 'kakao_unavailable' | 'invalid_fallback_type' | 'KAKAO_TOKEN_INVALID' | 'KAKAO_CHANNEL_ALREADY_LINKED' | 'KAKAO_CHANNEL_REJECTED' | 'KAKAO_RATE_LIMITED' | 'KAKAO_PROVIDER_UNAVAILABLE' | 'VALIDATION' | 'NOT_FOUND' | (string & {});
|
|
1266
1816
|
declare class ClawOpsError extends Error {
|
|
1267
1817
|
constructor(message: string);
|
|
1268
1818
|
}
|
|
@@ -1280,6 +1830,13 @@ declare class APIStatusError extends APIError {
|
|
|
1280
1830
|
readonly status: number;
|
|
1281
1831
|
readonly body: unknown;
|
|
1282
1832
|
readonly headers: Headers | undefined;
|
|
1833
|
+
/**
|
|
1834
|
+
* 서버가 함께 보낸 기계 판독용 코드(`{ error, code }`). 없으면 undefined 다.
|
|
1835
|
+
*
|
|
1836
|
+
* 같은 상태 코드가 서로 다른 사유를 담는다 — 422 만 해도 수신거부(`recipient_blocked`)와
|
|
1837
|
+
* 할당량 초과(`quota_exceeded`)가 갈리고, 한글 문구로 구분하면 문구가 바뀔 때 깨진다.
|
|
1838
|
+
*/
|
|
1839
|
+
readonly code: ClawOpsErrorCode | undefined;
|
|
1283
1840
|
constructor(message: string, response: {
|
|
1284
1841
|
status: number;
|
|
1285
1842
|
headers?: Headers;
|
|
@@ -1453,8 +2010,10 @@ declare class ClawOps extends APIClient {
|
|
|
1453
2010
|
get webhookLogs(): WebhookLogs;
|
|
1454
2011
|
get assignmentLinks(): AssignmentLinks;
|
|
1455
2012
|
get blockedRecipients(): BlockedRecipients;
|
|
2013
|
+
/** 카카오 채널·알림톡 템플릿. 발송은 `messages.create({ kakao: … })` 다. */
|
|
2014
|
+
get kakao(): Kakao;
|
|
1456
2015
|
get webhooks(): Webhooks;
|
|
1457
2016
|
accounts(accountId: string): AccountContext;
|
|
1458
2017
|
}
|
|
1459
2018
|
|
|
1460
|
-
export {
|
|
2019
|
+
export { type MessageListParams as $, APIClient as A, BadRequestError as B, type Call as C, ClawOps as D, ClawOpsError as E, type ClawOpsErrorCode as F, type ClawOpsOptions as G, ConflictError as H, InternalServerError as I, type KakaoChannel as J, Kakao as K, type KakaoChannelCategory as L, type KakaoChannelCategoryList as M, type KakaoChannelConnectParams as N, type KakaoChannelListParams as O, type KakaoChannelStatus as P, KakaoChannels as Q, type KakaoFallbackParams as R, type KakaoMessageCreateParams as S, type KakaoSendParams as T, type KakaoTemplate as U, type KakaoTemplateListParams as V, KakaoTemplates as W, type KakaoTokenRequest as X, type KakaoTokenRequestParams as Y, type Message as Z, type MessageCreateParams as _, type APIClientOptions as a, Messages as a0, NotFoundError as a1, type NumberCreateParams as a2, type NumberListItem as a3, type NumberUpdateParams as a4, type NumberUpdateResponse as a5, Numbers as a6, Page as a7, PermissionDeniedError as a8, type PhoneNumber as a9, RateLimitError as aa, type RecordingDownload as ab, Recordings as ac, type RoutingType as ad, ServiceUnavailableError as ae, type SipCredential as af, SipCredentials as ag, type SipEndpoint as ah, SipEndpoints as ai, SolapiBridgeError as aj, type TextMessageCreateParams as ak, UnprocessableEntityError as al, type WebhookLog as am, WebhookLogs as an, WebhookVerificationError as ao, Webhooks as ap, APIConnectionError as b, APIError as c, APIResponseValidationError as d, APIStatusError as e, APITimeoutError as f, AccountContext as g, AgentConnectionError as h, AgentError as i, type AssignmentLink as j, type AssignmentLinkAssignment as k, type AssignmentLinkCreateResponse as l, type AssignmentLinkStatus as m, AssignmentLinks as n, AuthenticationError as o, type BlockedChannel as p, type BlockedRecipient as q, type BlockedRecipientSource as r, type BlockedRecipientStatus as s, BlockedRecipients as t, type CallContextParam as u, type CallControlResponse as v, type CallCreateParams as w, type CallListParams as x, type CallUpdateParams as y, Calls as z };
|