solapi
    Preparing search index...
    storedMessageSchema: Struct<
        {
            _id: optional<typeof String$>;
            accountId: optional<typeof String$>;
            autoTypeDetect: optional<
                transformOrFail<
                    Union<[typeof Boolean$, typeof Number$]>,
                    typeof Boolean$,
                    never,
                >,
            >;
            clusterKey: NullishOr<typeof String$>;
            country: NullishOr<typeof String$>;
            currentQueue: optional<NullishOr<typeof Unknown>>;
            customFields: optional<NullishOr<Record$<typeof String$, typeof String$>>>;
            dateCreated: optional<typeof String$>;
            dateProcessed: NullishOr<typeof String$>;
            dateReceived: NullishOr<typeof String$>;
            dateReported: NullishOr<typeof String$>;
            dateUpdated: optional<typeof String$>;
            faxOptions: optional<NullishOr<Record$<typeof String$, typeof Unknown>>>;
            faxPageCount: optional<NullishOr<typeof Number$>>;
            from: NullishOr<typeof String$>;
            groupId: optional<typeof String$>;
            imageId: NullishOr<typeof String$>;
            kakaoOptions: optional<NullishOr<Record$<typeof String$, typeof Unknown>>>;
            log: optional<NullishOr<Array$<typeof Unknown>>>;
            messageId: optional<typeof String$>;
            naverOptions: optional<NullishOr<Record$<typeof String$, typeof Unknown>>>;
            networkCode: NullishOr<typeof String$>;
            networkName: NullishOr<typeof String$>;
            queues: optional<NullishOr<Array$<typeof Unknown>>>;
            rcsOptions: optional<NullishOr<Record$<typeof String$, typeof Unknown>>>;
            reason: NullishOr<typeof String$>;
            replacement: optional<
                transformOrFail<
                    Union<[typeof Boolean$, typeof Number$]>,
                    typeof Boolean$,
                    never,
                >,
            >;
            replacements: optional<NullishOr<Array$<typeof Unknown>>>;
            resendCount: optional<typeof Number$>;
            status: NullishOr<typeof String$>;
            statusCode: NullishOr<typeof String$>;
            subject: NullishOr<typeof String$>;
            text: NullishOr<typeof String$>;
            to: optional<Union<[typeof String$, Array$<typeof String$>]>>;
            type: NullishOr<
                Literal<
                    [
                        "SMS",
                        "LMS",
                        "MMS",
                        "ATA",
                        "CTA",
                        "CTI",
                        "NSA",
                        "RCS_SMS",
                        "RCS_LMS",
                        "RCS_MMS",
                        "RCS_TPL",
                        "RCS_ITPL",
                        "RCS_LTPL",
                        "FAX",
                        "VOICE",
                        "BMS_TEXT",
                        "BMS_IMAGE",
                        "BMS_WIDE",
                        "BMS_WIDE_ITEM_LIST",
                        "BMS_CAROUSEL_FEED",
                    ],
                >,
            >;
            unavailableSenderNumber: optional<
                NullishOr<
                    transformOrFail<
                        Union<[typeof Boolean$, typeof Number$]>,
                        typeof Boolean$,
                        never,
                    >,
                >,
            >;
            voiceDuration: optional<NullishOr<typeof Number$>>;
            voiceOptions: optional<NullishOr<Record$<typeof String$, typeof Unknown>>>;
            voiceReplied: optional<
                NullishOr<
                    transformOrFail<
                        Union<[typeof Boolean$, typeof Number$]>,
                        typeof Boolean$,
                        never,
                    >,
                >,
            >;
        },
    > = ...

    조회 응답(getMessages/getGroupMessages)에 포함된 메시지 아이템 스키마.

    발송용 messageSchema와 달리 서버가 저장해둔 값을 그대로 반환하므로

    • optional 필드 상당수가 null로 내려올 수 있다.
    • kakaoOptions/rcsOptions 등 내부 구조가 발송 요청과 다르다(서버 정규화 포맷).

    핵심 필드만 선언하고 타입 수준에서 검증/정규화한다. 여기에 없는 필드는 decodeServerResponse의 onExcessProperty:'preserve' 옵션으로 런타임에 그대로 보존된다.