Перейти к документации
SDK

Контакты

`contacts.list`, `get`, `create`, `update` и `delete`.

Все методы

usage.ts
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, по умолчанию 50. Значение приводится к типу, так что `'100'` из строки запроса подойдёт, а значение вне диапазона — это 422, а не обрезка до границы.
cursorstring
`nextCursor` с предыдущей страницы. Никогда не собирайте его сами: курсор, называющий контакт, которого больше нет, — это 400 `invalid_cursor`, а значит ваше состояние постраничности устарело и обход надо начать заново без курсора.
sourceContactSource
`'manual'` — контакты, которые кто-то сохранил намеренно, `'auto'` — те, что записал редактор приложения. Не указывайте, чтобы получить всю книгу.

Ответ: ContactResource

contacts.list разрешается в Page<ContactResource>, так что строки лежат в page.items, а обход идёт по page.nextCursor, пока page.hasMore истинно. get, create и update разрешаются каждый в один ContactDetailResource — ту же строку плюс audiences. Адресная книга не ограничена по размеру, поэтому этот маршрут постраничный, а не возвращающий массив, который молча обрывался на 200.

object'contact'
Всегда строка `contact` — и в строках списка, и в `get`.
emailstring
Адрес, приводимый к нижнему регистру при записи, так что `[email protected]` и `[email protected]` — один контакт, и ключ, который принимает каждый метод контактов, поскольку идентификатор контакта наружу не выдаётся. Строки принадлежат рабочему пространству, а не участнику или ключу, который их записал, так что все участники и все ключи рабочего пространства читают и пишут одну адресную книгу.
namestring | null
Отображаемое имя. Null, когда для адреса никогда не записывалось имя. Автоматическая запись несёт имя, только если заголовок дал что-то отличное от самого адреса, и она никогда не может перезаписать имя, введённое пользователем.
source'manual' | 'auto' | (string & {})
`auto` означает, что строка появилась потому, что пользователь отправил почту на этот адрес; `manual` означает, что кто-то ввёл его вручную, — существенно иное утверждение, и upsert никогда не понижает `manual` обратно до `auto`. Почта, приходящая с адреса, намеренно не создаёт строки вовсе, так что того, кто вам только писал, здесь нет; объединение остаётся открытым, потому что колонка — свободный текст со значением `manual` по умолчанию.
notesstring | null
Свободный текст, который кто-то написал об этом человеке — в приложении или через `update`, — и никогда не сгенерированный. Null, когда никто ничего не писал, и явный null в `update` очищает его.
lastSeenAtstring | null
ISO-8601 UTC, обновляется каждый раз, когда участник отправляет на этот адрес из редактора приложения, и не обновляется при приходе почты с него, что не записывает ничего. Null у контакта, сохранённого через `create`, которому никогда не писали, и такие идут в конце убывающего порядка по `lastSeenAt`, который возвращает этот маршрут.
audiencesArray<ContactAudienceResource>
Только в `get`, `create` и `update`, никогда в строках списка. Все аудитории, в которых состоит контакт, как `{ id, name, builtin }`, включая аудиторию по умолчанию. `builtin` равен `default` у аудитории, которой принадлежит каждый контакт, и null у созданной кем-то, так что ветвитесь по нему, а не по имени, которое может изменить кто угодно.