연락처
`contacts.list`, `get`, `create`, `update`, `delete`.
모든 메서드
const page = await openemail.contacts.list({ limit: 100 }) const contact = await openemail.contacts.get('[email protected]') const saved = await openemail.contacts.create({ email: '[email protected]', name: 'Grace Hopper', notes: 'Met at the compiler workshop', }) await openemail.contacts.update(saved.email, { notes: null }) await openemail.contacts.delete(saved.email) console.log(page.items.length, page.hasMore, contact.source, contact.lastSeenAt)가장 최근에 본 순서대로이며, 한 번도 메일을 보낸 적 없는 연락처가 뒤로 갑니다. source는 멤버가 앱 작성기에서 그 주소로 메시지를 보냈기 때문에 행이 기록된 경우 auto이며, 이는 누군가 직접 저장했다는 것과는 실질적으로 다른 주장입니다. 어떤 주소에서 메일이 도착해도 아무것도 기록되지 않고, 이 API를 통한 발송도 마찬가지입니다.
주소록은 한 사람이 아니라 워크스페이스에 속하므로, 어느 멤버가 저장한 연락처든 모든 멤버와 모든 키가 같은 연락처를 봅니다. create는 source를 manual로 기록하고, 저장하면서 연락처를 기본 오디언스에 넣습니다. 같은 호출에서 직접 만든 목록에 추가하려면 audienceIds에 지정하세요. 여기에는 audiences:write도 필요합니다. 아니면 나중에 openemail.audiences.addContact로 추가하면 됩니다.
주소는 소문자로 저장되고 클라이언트가 전달한 값을 인코딩하므로 [email protected]도 올바른 행에 도달합니다. 주소가 곧 신원이므로 update로는 주소를 바꿀 수 없습니다. 연락처를 옮기는 일은 delete와 create입니다.
매개변수: contacts.list
limitnumber- 한 페이지에 반환할 연락처 수입니다. 1에서 200까지의 integer이고 기본값은 50입니다. 형 변환이 이루어지므로 쿼리 문자열에서 온 `'100'`도 괜찮으며, 범위를 벗어난 값은 잘려 들어가지 않고 422가 됩니다.
cursorstring- 이전 페이지의 `nextCursor`입니다. 절대 직접 만들지 마세요. 더 이상 존재하지 않는 연락처를 가리키는 커서는 400 `invalid_cursor`이며, 이는 페이징 상태가 낡았으니 커서 없이 처음부터 다시 훑어야 한다는 뜻입니다.
sourceContactSource- 누군가 의도적으로 저장한 연락처는 `'manual'`, 앱 작성기가 기록한 연락처는 `'auto'`입니다. 주소록 전체를 보려면 생략하세요.
응답: ContactResource
contacts.list는 Page<ContactResource>로 resolve되므로 행은 page.items에 있고, page.hasMore가 true인 동안 page.nextCursor를 따라갑니다. get, create, update는 각각 같은 행에 audiences가 더해진 ContactDetailResource 하나로 resolve됩니다. 주소록에는 상한이 없으며, 그래서 이 경로는 조용히 200행에서 멈추는 배열 대신 페이징을 합니다.
object'contact'- 목록 행에서도 `get`에서도 항상 문자열 `contact`입니다.
emailstring- 주소이며, 저장 시 소문자로 바뀌므로 `[email protected]`과 `[email protected]`은 하나의 연락처입니다. 연락처 id는 노출되지 않으므로 모든 contacts 메서드가 받는 키가 바로 이 값입니다. 행은 그것을 기록한 멤버나 키가 아니라 워크스페이스에 속하므로, 워크스페이스의 모든 멤버와 모든 키가 하나의 주소록을 읽고 씁니다.
namestring | null- 표시 이름입니다. 해당 주소에 대해 이름이 기록된 적이 없으면 null입니다. 자동 기록은 헤더가 주소 자체가 아닌 무언가를 제공했을 때만 이름을 담으며, 사용자가 입력한 이름을 덮어쓰는 일은 결코 없습니다.
source'manual' | 'auto' | (string & {})- `auto`는 사용자가 그 주소로 메일을 보냈기 때문에 행이 기록되었다는 뜻이고, `manual`은 누군가 직접 입력했다는 뜻으로 실질적으로 다른 주장이며, upsert가 `manual`을 `auto`로 되돌리는 일은 없습니다. 어떤 주소에서 메일이 도착해도 행은 전혀 기록되지 않는데 이는 의도된 것이므로, 당신에게 메일을 보내기만 한 사람은 여기에 없습니다. 이 컬럼은 기본값이 `manual`인 자유 텍스트이므로 유니온은 열려 있습니다.
notesstring | null- 앱에서든 `update`를 통해서든 누군가 이 사람에 대해 적은 자유 텍스트이며, 자동 생성되지 않습니다. 아무도 적지 않았으면 null이고, `update`에서 명시적으로 null을 주면 지워집니다.
lastSeenAtstring | null- ISO-8601 UTC로, 멤버가 앱 작성기에서 그 주소로 보낼 때마다 갱신됩니다. 그 주소에서 메일이 도착할 때는 아무것도 기록되지 않으므로 갱신되지 않습니다. `create`로 저장했고 한 번도 메일을 보내지 않은 연락처에서는 null이며, 이 경로가 반환하는 `lastSeenAt` 내림차순 정렬에서 그런 연락처는 맨 뒤로 갑니다.
audiencesArray<ContactAudienceResource>- 목록 행에는 없고 `get`, `create`, `update`에만 있습니다. 연락처가 속한 모든 오디언스를 기본 오디언스까지 포함해 `{ id, name, builtin }` 형태로 담습니다. `builtin`은 모든 연락처가 속하는 오디언스에서 `default`이고 누군가 만든 오디언스에서는 null이므로, 누구나 바꿀 수 있는 이름이 아니라 이 값으로 분기하세요.