Kontakty
`contacts.list`, `get`, `create`, `update` i `delete`.
Wszystkie metody
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)Najpierw ostatnio widziane, a kontakty, do których nigdy nie pisano, na końcu. source to auto, gdy wiersz powstał dlatego, że członek wysłał na ten adres wiadomość z kompozytora aplikacji, co jest materialnie inną informacją niż to, że ktoś adres zapisał. Poczta przychodząca z adresu nie zapisuje nic, podobnie jak wysyłka przez to API.
Książka należy do przestrzeni roboczej, a nie do jednej osoby, więc kontakt zapisany przez dowolnego członka jest kontaktem, który widzi każdy członek i każdy klucz. create zapisuje source jako manual i umieszcza kontakt w domyślnej grupie odbiorców już przy zapisie. Wymień własne listy w audienceIds, żeby dołączyć do nich w tym samym wywołaniu, co wymaga również audiences:write, albo dodaj kontakt później przez openemail.audiences.addContact.
Adresy są przechowywane małymi literami, a klient koduje ten, który przekażesz, więc [email protected] trafia do właściwego wiersza. Adres jest tożsamością, więc update nie może go zmienić: przeniesienie kontaktu to delete i create.
Parametry: contacts.list
limitnumber- Ile kontaktów zwrócić na stronę: liczba całkowita od 1 do 200, domyślnie 50. Jest rzutowana, więc `'100'` z query stringa jest w porządku, a wartość spoza zakresu daje 422, a nie przycięcie do granicy.
cursorstring- `nextCursor` z poprzedniej strony. Nigdy nie buduj go sam: kursor nazywający kontakt, który już nie istnieje, to 400 `invalid_cursor`, co oznacza, że Twój stan stronicowania jest nieaktualny i przechodzenie należy zacząć od nowa bez kursora.
sourceContactSource- `'manual'` dla kontaktów, które ktoś zapisał celowo, `'auto'` dla tych zapisanych przez kompozytor aplikacji. Pomiń, żeby dostać całą książkę.
Odpowiedź: ContactResource
contacts.list rozwiązuje się do Page<ContactResource>, więc wiersze są w page.items, a przechodzenie podąża za page.nextCursor, dopóki page.hasMore jest true. get, create i update rozwiązują się każde do jednego ContactDetailResource, czyli tego samego wiersza plus audiences. Książka adresowa jest nieograniczona i dlatego ta trasa stronicuje, zamiast zwracać tablicę, która po cichu kończyła się na 200 wierszach.
object'contact'- Zawsze ciąg `contact`, zarówno na wierszach listy, jak i w `get`.
emailstring- Adres, zapisywany małymi literami, więc `[email protected]` i `[email protected]` to jeden kontakt, i klucz, który przyjmuje każda metoda contacts, bo żaden identyfikator kontaktu nie jest wystawiony. Wiersze należą do przestrzeni roboczej, a nie do członka czy klucza, który je zapisał, więc każdy członek i każdy klucz w przestrzeni roboczej czyta i zapisuje jedną książkę adresową.
namestring | null- Nazwa wyświetlana. Null, gdy dla adresu nigdy nie zapisano żadnej nazwy. Zapis automatyczny niesie ją tylko wtedy, gdy nagłówek podał coś innego niż sam adres, i nigdy nie może nadpisać nazwy wpisanej przez użytkownika.
source'manual' | 'auto' | (string & {})- `auto` znaczy, że wiersz powstał dlatego, że użytkownik wysłał pocztę na ten adres; `manual` znaczy, że ktoś wpisał go ręcznie, co jest materialnie inną informacją, a upsert nigdy nie cofa `manual` z powrotem do `auto`. Poczta przychodząca z adresu celowo nie zapisuje żadnego wiersza, więc ktoś, kto tylko do Ciebie pisał, nie jest tutaj; unia pozostaje otwarta, bo kolumna to dowolny tekst z domyślnym `manual`.
notesstring | null- Dowolny tekst, który ktoś napisał o tej osobie, w aplikacji albo przez `update`, nigdy generowany. Null, gdy nikt nic nie napisał; jawny null w `update` go czyści.
lastSeenAtstring | null- ISO-8601 UTC, podbijane za każdym razem, gdy członek wyśle na ten adres z kompozytora aplikacji, a nie gdy przychodzi z niego poczta, co nie zapisuje nic. Null na kontakcie zapisanym przez `create`, do którego nigdy nie pisano; takie sortują się na końcu w malejącym porządku `lastSeenAt`, który zwraca ta trasa.
audiencesArray<ContactAudienceResource>- Tylko w `get`, `create` i `update`, nigdy na wierszach listy. Każda grupa odbiorców, do której należy kontakt, jako `{ id, name, builtin }`, wraz z domyślną. `builtin` to `default` na grupie, do której należy każdy kontakt, i null na tej utworzonej przez kogoś, więc rozgałęziaj się na nim, a nie na nazwie, którą każdy może zmienić.