Bỏ qua tới phần tài liệu
SDK

Danh bạ

`contacts.list`, `get`, `create`, `update` và `delete`.

Mọi phương thức

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)

Gần đây nhất trước, còn các contact chưa từng được gửi thư thì xếp cuối. sourceauto khi bản ghi được tạo do một thành viên đã gửi thư tới địa chỉ đó từ trình soạn thư trong ứng dụng, một khẳng định khác hẳn về bản chất so với việc ai đó chủ động lưu nó. Thư đến từ một địa chỉ không ghi gì cả, và một lần gửi qua API này cũng vậy.

Danh bạ thuộc về workspace chứ không thuộc về một cá nhân, nên một contact do bất kỳ thành viên nào lưu là contact mà mọi thành viên và mọi key đều thấy. create ghi sourcemanual và đưa contact vào audience mặc định ngay khi ghi. Hãy nêu các danh sách của riêng bạn trong audienceIds để thêm vào chúng trong cùng lệnh gọi, việc này cũng cần audiences:write, hoặc thêm contact sau bằng openemail.audiences.addContact.

Địa chỉ được lưu ở dạng chữ thường và client mã hóa địa chỉ bạn truyền vào, nên [email protected] tới đúng bản ghi. Địa chỉ chính là định danh, nên update không thể đổi nó: chuyển một contact là một lần delete và một lần create.

Tham số: contacts.list

limitnumber
Số contact trả về mỗi trang: một integer từ 1 đến 200, mặc định 50. Giá trị được ép kiểu, nên `'100'` lấy từ query string vẫn ổn, và một giá trị ngoài khoảng là 422 chứ không bị ép về giới hạn.
cursorstring
`nextCursor` của trang trước. Đừng bao giờ tự dựng: một cursor trỏ tới contact không còn tồn tại là 400 `invalid_cursor`, nghĩa là trạng thái phân trang của bạn đã cũ và nên duyệt lại từ đầu mà không có cursor.
sourceContactSource
`'manual'` cho các contact được ai đó chủ động lưu, `'auto'` cho các contact do trình soạn thư trong ứng dụng ghi lại. Bỏ trống để lấy toàn bộ danh bạ.

Phản hồi: ContactResource

contacts.list phân giải ra một Page<ContactResource>, nên các dòng nằm trong page.items và việc duyệt đi theo page.nextCursor chừng nào page.hasMore còn là true. get, createupdate mỗi cái phân giải ra một ContactDetailResource, tức cùng bản ghi đó cộng thêm audiences. Danh bạ không giới hạn kích thước, và đó là lý do route này phân trang thay vì trả về một mảng âm thầm dừng ở 200 dòng.

object'contact'
Luôn là chuỗi `contact`, trên các dòng của danh sách cũng như trên `get`.
emailstring
Địa chỉ, được chuyển về chữ thường khi ghi nên `[email protected]` và `[email protected]` là cùng một contact, và là khóa mà mọi phương thức contacts nhận, vì không có contact id nào được công khai. Bản ghi thuộc về workspace chứ không thuộc về thành viên hay key đã ghi nó, nên mọi thành viên và mọi key trong workspace đọc và ghi cùng một danh bạ.
namestring | null
Tên hiển thị. Null khi chưa từng có tên nào được ghi cho địa chỉ đó. Một lần ghi tự động chỉ mang theo tên khi header cung cấp thứ gì đó khác với chính địa chỉ, và không bao giờ ghi đè tên do người dùng nhập.
source'manual' | 'auto' | (string & {})
`auto` nghĩa là bản ghi được tạo vì người dùng đã gửi thư tới địa chỉ đó; `manual` nghĩa là ai đó đã nhập thủ công, một khẳng định khác hẳn về bản chất, và một lần upsert không bao giờ hạ `manual` về `auto`. Thư đến từ một địa chỉ hoàn toàn không tạo bản ghi, và đó là cố ý, nên người chỉ từng viết thư cho bạn sẽ không có ở đây; union được để mở vì cột này là văn bản tự do với mặc định `manual`.
notesstring | null
Văn bản tự do ai đó đã viết về người này, trong ứng dụng hoặc qua `update`, không bao giờ do máy tạo. Null khi chưa ai viết gì, và một null tường minh trên `update` sẽ xóa nó.
lastSeenAtstring | null
ISO-8601 UTC, được cập nhật mỗi lần một thành viên gửi thư tới địa chỉ đó từ trình soạn thư trong ứng dụng, không phải khi thư đến từ địa chỉ đó, vốn không ghi gì. Null trên contact được lưu qua `create` mà chưa từng được gửi thư, và những contact này xếp cuối theo thứ tự `lastSeenAt` giảm dần mà route này trả về.
audiencesArray<ContactAudienceResource>
Chỉ có trên `get`, `create` và `update`, không bao giờ có trên các dòng danh sách. Mọi audience mà contact thuộc về, dưới dạng `{ id, name, builtin }`, kể cả audience mặc định. `builtin` là `default` trên audience mà mọi contact đều thuộc về và null trên audience do người dùng tạo, nên hãy rẽ nhánh theo nó chứ không theo tên, vì ai cũng đổi được tên.