Contacts
`contacts.list`, `get`, `create`, `update` et `delete`.
Toutes les méthodes
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)Les plus récemment vus d'abord, et en dernier les contacts à qui rien n'a jamais été envoyé. source vaut auto quand la ligne a été écrite parce qu'un membre a envoyé un message à cette adresse depuis le compositeur de l'application, ce qui est une affirmation sensiblement différente de « quelqu'un l'a enregistrée ». Le courrier qui arrive d'une adresse n'écrit rien, et un envoi via cette API non plus.
Le carnet appartient à l'espace de travail plutôt qu'à une personne : un contact enregistré par un membre est donc le contact que voient tous les membres et toutes les clés. create écrit source à manual et place le contact dans l'audience par défaut au moment de l'écriture. Nommez vos propres listes dans audienceIds pour l'y ajouter dans le même appel, ce qui exige aussi audiences:write, ou ajoutez le contact plus tard avec openemail.audiences.addContact.
Les adresses sont stockées en minuscules et le client encode celle que vous passez : [email protected] atteint donc la bonne ligne. L'adresse est l'identité : update ne peut donc pas la changer ; déplacer un contact, c'est un delete puis un create.
Paramètres : contacts.list
limitnumber- Combien de contacts renvoyer par page : un entier de 1 à 200, valant 50 par défaut. Il est converti, donc `'100'` venu d'une query string convient, et une valeur hors de l'intervalle donne un 422 plutôt qu'une valeur ramenée aux bornes.
cursorstring- Le `nextCursor` de la page précédente. N'en construisez jamais un vous-même : un curseur nommant un contact qui n'existe plus donne un 400 `invalid_cursor`, ce qui signifie que votre état de pagination est périmé et que le parcours doit repartir sans curseur.
sourceContactSource- `'manual'` pour les contacts que quelqu'un a enregistrés exprès, `'auto'` pour ceux qu'a enregistrés le compositeur de l'application. Omettez-le pour le carnet entier.
Réponse : ContactResource
contacts.list se résout en Page<ContactResource> : les lignes sont donc dans page.items et le parcours suit page.nextCursor tant que page.hasMore est true. get, create et update se résolvent chacun en un ContactDetailResource, la même ligne plus audiences. Le carnet d'adresses est sans limite, et c'est pourquoi cette route pagine au lieu de renvoyer un tableau qui s'arrêtait silencieusement à 200.
object'contact'- Toujours la chaîne `contact`, sur les lignes de liste comme sur `get`.
emailstring- L'adresse, mise en minuscules à l'écriture pour que `[email protected]` et `[email protected]` ne fassent qu'un seul contact, et la clé que prend chaque méthode contacts, puisqu'aucun id de contact n'est exposé. Les lignes appartiennent à l'espace de travail plutôt qu'au membre ou à la clé qui les a écrites : chaque membre et chaque clé de l'espace lisent et écrivent donc un seul carnet d'adresses.
namestring | null- Le nom affiché. Null quand aucun nom n'a jamais été enregistré pour l'adresse. Une écriture automatique n'en porte un que si l'en-tête fournissait autre chose que l'adresse elle-même, et elle ne peut jamais écraser un nom saisi par l'utilisateur.
source'manual' | 'auto' | (string & {})- `auto` signifie que la ligne a été écrite parce que l'utilisateur a envoyé du courrier à cette adresse ; `manual` signifie que quelqu'un l'a saisie à la main, une affirmation sensiblement différente, et un upsert ne rétrograde jamais `manual` en `auto`. Le courrier qui arrive d'une adresse n'écrit aucune ligne, délibérément : quelqu'un qui n'a jamais fait que vous écrire ne figure donc pas ici ; l'union reste ouverte parce que la colonne est du texte libre valant `manual` par défaut.
notesstring | null- Texte libre que quelqu'un a écrit sur cette personne, dans l'application ou via `update`, jamais généré. Null quand personne n'en a écrit, et un null explicite sur `update` l'efface.
lastSeenAtstring | null- ISO-8601 UTC, avancé chaque fois qu'un membre écrit à cette adresse depuis le compositeur de l'application, et non quand du courrier en arrive, ce qui n'écrit rien. Null sur un contact enregistré via `create` à qui rien n'a jamais été envoyé, et ceux-là arrivent en dernier dans l'ordre décroissant de `lastSeenAt` que renvoie cette route.
audiencesArray<ContactAudienceResource>- Uniquement sur `get`, `create` et `update`, jamais sur les lignes de liste. Chaque audience dont le contact fait partie, sous la forme `{ id, name, builtin }`, l'audience par défaut comprise. `builtin` vaut `default` sur l'audience à laquelle appartient chaque contact et null sur une audience créée par quelqu'un : branchez donc dessus plutôt que sur le nom, que n'importe qui peut changer.