Контакты
`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, по умолчанию 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 у созданной кем-то, так что ветвитесь по нему, а не по имени, которое может изменить кто угодно.