連絡先
`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 ページあたりに返す連絡先の件数。1 から 200 の integer で、既定は 50 です。型強制されるのでクエリ文字列から来た `'100'` でも構いませんが、範囲外の値は丸められずに 422 になります。
cursorstring- 前のページの `nextCursor`。自分で組み立ててはいけません。すでに存在しない連絡先を指すカーソルは 400 `invalid_cursor` になり、それはページング状態が古くなったという意味なので、カーソルなしでたどり直すべきです。
sourceContactSource- 誰かが意図して保存した連絡先には `'manual'`、アプリのコンポーザーが記録したものには `'auto'` を指定します。アドレス帳全体を見たいときは省略してください。
レスポンス: ContactResource
contacts.list は Page<ContactResource> に解決されるので、行は page.items にあり、page.hasMore が true の間は page.nextCursor をたどります。get、create、update はそれぞれ 1 件の ContactDetailResource、つまり同じ行に audiences を加えたものに解決されます。アドレス帳に上限はなく、だからこの経路は、黙って 200 件で止まる配列ではなくページングを行います。
object'contact'- 常に文字列 `contact` です。`get` のときだけでなく一覧の行でも同じです。
emailstring- アドレスです。書き込み時に小文字化されるので `[email protected]` と `[email protected]` は 1 件の連絡先になります。連絡先 id は公開されないため、すべての contacts メソッドが受け取るキーはこれです。行は書き込んだメンバーやキーではなくワークスペースに属するので、ワークスペース上のすべてのメンバーとすべてのキーが 1 つのアドレス帳を読み書きします。
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 なので、誰でも変更できる名前ではなくこちらで分岐してください。