Kişiler
`contacts.list`, `get`, `create`, `save`, `update`, `set_audiences`, `delete`, `delete_many`, `list_people`, `set_photo`, `remove_photo`, `block`, `unblock`, `list_threads` ve `activity`.
Her yöntem
from openemail import openemail page = openemail.contacts.list(limit=100)contact = openemail.contacts.get('[email protected]') saved = openemail.contacts.create({ 'email': '[email protected]', 'name': 'Grace Hopper', 'notes': 'Met at the compiler workshop',}) openemail.contacts.update(saved['email'], {'notes': None})openemail.contacts.set_audiences(saved['email'], { 'audienceIds': ['aud_4c1b8e2a7d9f05c36b4e8a71'],})openemail.contacts.delete(saved['email']) print(len(page['items']), page['hasMore'], contact['source'], contact['lastSeenAt'])En son görülenler başta, kendisine hiç posta gönderilmemiş kişiler sonda. Satır, bir üye uygulamanın yazma ekranından o adrese mesaj gönderdiği için yazıldığında source değeri auto olur; bu, birinin adresi bilerek kaydetmiş olmasından esasen farklı bir iddiadır. Bir adresten gelen posta hiçbir şey yazmaz, bu API üzerinden yapılan bir gönderim de yazmaz.
Defter tek bir kişiye değil çalışma alanına aittir; bu yüzden herhangi bir üyenin kaydettiği kişi, her üyenin ve her anahtarın gördüğü kişidir. create, source değerini manual olarak yazar ve kişiyi yazıldığı anda varsayılan kitleye koyar. Aynı çağrıda kendi listelerinize de katmak için bunları audienceIds içinde belirtin; bu ayrıca audiences:write gerektirir. Ya da kişiyi sonradan openemail.audiences.add_contact ile ekleyin. set_audiences bir kişinin tam olarak hangi listelerde olduğunu tek çağrıda belirtir.
Adresler küçük harfe çevrilerek saklanır ve istemci geçirdiğiniz adresi kodlar; böylece [email protected] doğru satıra ulaşır. Adres kimliğin kendisidir, bu yüzden update onu değiştiremez: bir kişiyi taşımak bir delete ve bir create demektir.
Parametreler: contacts.list
limitint- Sayfa başına kaç kişi döndürüleceği: 1 ile 200 arasında bir integer, varsayılan 50. Değer dönüştürülür, dolayısıyla bir sorgu dizesinden gelen `'100'` sorun olmaz; aralık dışındaki bir değer ise sınıra çekilmek yerine 422 verir.
cursorstr- Bir önceki sayfadan gelen `nextCursor`. Asla kendiniz oluşturmayın: artık var olmayan bir kişiyi gösteren bir cursor 400 `invalid_cursor` verir; bu da sayfalama durumunuzun eskidiği ve gezinmenin cursor olmadan yeniden başlaması gerektiği anlamına gelir.
sourceContactSource- Birinin bilerek kaydettiği kişiler için `'manual'`, uygulamanın yazma ekranının kaydettikleri için `'auto'`. Defterin tamamı için bu alanı boş bırakın.
qstr- Adı ve adresi arar, en fazla 200 karakter. İlk sayfada hiçbir şey tam eşleşmezse bunun yerine yakın yazımlar döner ve sonraki sayfalar da aynı şekilde eşleşmeye devam eder.
Yanıt: ContactResource
contacts.list bir Page[ContactResource] döndürür; bu yüzden satırlar page['items'] içindedir ve gezinme, page['hasMore'] True olduğu sürece page['nextCursor'] değerini izler; list_all ve iterate bunu sizin için yapar. get, create, save, update, set_audiences, set_photo ve remove_photo her biri tek bir ContactDetailResource döndürür: aynı satır artı audiences. Adres defterinin sınırı yoktur; bu rotanın, sessizce 200'de duran bir liste döndürmek yerine sayfalamasının nedeni budur.
objectLiteral['contact']- Hem liste satırlarında hem de `get` yanıtında her zaman `contact` dizgesi.
emailstr- Adres; yazarken küçük harfe çevrilir, böylece `[email protected]` ile `[email protected]` tek bir kişidir. Hiçbir kişi id'si dışarı verilmediği için her contacts metodunun aldığı anahtar da budur. Satırlar, onları yazan üyeye veya anahtara değil çalışma alanına aittir; dolayısıyla çalışma alanındaki her üye ve her anahtar tek bir adres defterini okur ve yazar.
namestr | None- Adres için hiç ad kaydedilmemişse `None`. Otomatik bir yazma, yalnızca başlık adresin kendisinden başka bir şey sağladığında bir ad taşır ve kullanıcının yazdığı bir adın üzerine asla yazamaz.
sourceContactSource | str- `auto`, satırın kullanıcı o adrese posta gönderdiği için yazıldığı anlamına gelir; `manual` ise birinin adresi elle girdiği anlamına gelir; bu esasen farklı bir iddiadır ve bir upsert `manual` değerini asla `auto` seviyesine düşürmez. Bir adresten gelen posta bilerek hiç satır yazmaz; dolayısıyla size yalnızca yazmış olan biri burada yer almaz. Sütun, varsayılanı `manual` olan serbest metin olduğu için birleşim tipi açık bırakılmıştır.
notesstr | None- Birinin bu kişi hakkında uygulamada veya `update` üzerinden yazdığı serbest metin; asla üretilmez. Kimse yazmadıysa `None` olur ve `update` çağrısında açıkça `None` göndermek bu alanı temizler.
lastSeenAtstr | None- ISO-8601 UTC; bir üye uygulamanın yazma ekranından o adrese her gönderdiğinde güncellenir, o adresten posta geldiğinde değil; gelen posta hiçbir şey yazmaz. `create` ile kaydedilmiş ve kendisine hiç posta gönderilmemiş bir kişide `None` olur ve bu kişiler, bu rotanın döndürdüğü azalan `lastSeenAt` sıralamasında en sonda yer alır.
audienceslist[ContactAudienceResource]- Yalnızca `get`, `create`, `save`, `update`, `set_audiences`, `set_photo` ve `remove_photo` üzerinde bulunur, liste satırlarında asla. Kişinin içinde bulunduğu her kitle, varsayılan kitle de dahil, `id`, `name` ve `builtin` içeren bir sözlük olarak. `builtin`, her kişinin ait olduğu kitlede `default`, birinin oluşturduğu bir kitlede ise `None` olur; bu yüzden herkesin değiştirebileceği ada göre değil, buna göre dallanın.
photoUrlstr | None- Kişi fotoğrafının sunulduğu yer; kişinin fotoğrafı yoksa `None`. `set_photo` onu ayarlar ve her yükleme yeni bir URL alır.
Bir kişinin kitlelerini belirleme
set_audiences(email, {'audienceIds': [...]}) bir kişinin tam olarak hangi kitlelerde olduğunu tek istekte belirtir. Kişi, listelenen ve henüz içinde olmadığı her kitleye katılır, diğer hepsinden ayrılır; çağrı değişiklikten sonraki ContactDetailResource değerini döndürür. Kişiyi değil üyelikleri yazdığı için audiences:write gerektirir ve yinelemek hiçbir şeyi değiştirmez.
Varsayılan kitle her zaman korunur; bu yüzden {'audienceIds': []} kişiyi yalnızca varsayılan kitlede bırakır. En fazla 100 kimlik alır. Bu çalışma alanında hiçbir kitleyi göstermeyen bir kimlik 404 audience_not_found verir ve hiçbir şey değişmez; kişi olmayan bir adres ise 404 contact_not_found verir.
Kişiler sayfasındaki herkes
list_people, uygulamadaki Kişiler sayfasının gösterdiği kişileri listeler: kayıtlı kişiler ve postada görülen her adres, her biri saved, threads ve lastAt ile. list yalnızca kayıtlı kişilerdir. Postada görülen adresler yalnızca anahtar ayrıca threads:read tutuyorsa gelir, page['seen'] de gelip gelmediklerini söyler. sort recent, name ya da threads olur, q adları, adresleri ve notları arar, blocked=True de çalışma alanının engel listesinin engellediği kişileri tutar, tüm alan adını kapsayan kurallar dahil. blockedBy her satırda kuralı belirtir.
from openemail import openemail page = openemail.contacts.list_people(sort='threads', limit=50) for person in page['items']: if not person['saved'] and (person['threads'] or 0) > 5: openemail.contacts.save(person['email']) blocked = openemail.contacts.list_all_people(blocked=True)list_all_people ve iterate_people her sayfayı dolaşır. İmleç opaktır, bu yüzden nextCursor değerini geldiği gibi, aynı sort, q ve blocked ile geri gönderin.
Kaydetme, silme ve fotoğraflar
save(email, {'name': ..., 'notes': ...}), Kişilere ekle ve Kişilerde tut'tur: henüz kişi olmayan bir adresi kaydeder, bir gönderimden kaydedilmiş olanı elle kaydedilmiş olarak tutar ve silinmiş olanı geri getirir. delete Sil'dir: kayıtlı kişiyi kaldırır ve adresi gizler, böylece düzenleyici onu yeniden kaydetmez, yalnızca postada görülmüş bir adresi de kabul eder. wasSaved hangisi olduğunu söyler. delete_many tek çağrıda en fazla 200 tanesini siler.
from pathlib import Path from openemail import openemail openemail.contacts.save('[email protected]', {'name': 'Grace Hopper'}) photo = Path('grace.jpg').read_bytes()contact = openemail.contacts.set_photo('[email protected]', photo, content_type='image/jpeg') openemail.contacts.remove_photo('[email protected]')openemail.contacts.delete_many(['[email protected]', '[email protected]'])set_photo görüntü baytlarını olduğu gibi gönderir: 512 piksellik bir kareye sığdırılmış, en fazla 5 MB PNG, JPEG, WebP ya da GIF. content_type= geçirin, çünkü baytların kendi türü yoktur: o olmadan yükleme application/octet-stream olarak gider ve bu, 422 invalid_image ile reddedilir. Adresin önce kayıtlı bir kişi olması gerekir.
Engelleme
block(email) adresi çalışma alanının engel listesine koyar, böylece ondan gelen posta reddedilir, artı etiketini de atar; unblock(email) ise onu engelleyen her kuralı kaldırır. İkisi de settings:write gerektirir, çünkü kişiyi değil engel listesini değiştirirler, ve hiçbiri adresin kişi olmasını gerektirmez.
unblock tüm alan adını kapsayan bir kuralı kaldırdığında removed onu list değeri blockedDomains olarak listeler ve o alan adındaki herkesin engeli onunla birlikte kalkar.
Yazışmalar ve etkinlik
list_threads(email) adresin yazdığı ya da ona yazılan ileti dizilerini tüm klasörlerde sayfa sayfa gezer, list_all_threads ve iterate_threads da hepsini dolaşır. activity(email) bir kişinin Etkinlik sekmesinin arkasındaki sayıları döndürür: aralık başına alınan ve gönderilen, yanıtınızı bekleyen ileti dizileri ve iki yönde ortanca yanıt süresi. İkisi de threads:read gerektirir.
import time from openemail import openemail threads = openemail.contacts.list_threads('[email protected]', q='invoice') activity = openemail.contacts.activity( '[email protected]', minutes=30 * 24 * 60, grain='day', offset_minutes=time.localtime().tm_gmtoff // 60,) print(len(threads['items']), activity['totals']['waiting'])Referans
contacts.list()Tam başvurucontacts.list_all()Tam başvurucontacts.iterate()Tam başvurucontacts.get()Tam başvurucontacts.create()Tam başvurucontacts.save()Tam başvurucontacts.update()Tam başvurucontacts.set_audiences()Tam başvurucontacts.delete()Tam başvurucontacts.delete_many()Tam başvurucontacts.list_people()Tam başvurucontacts.list_all_people()Tam başvurucontacts.iterate_people()Tam başvurucontacts.set_photo()Tam başvurucontacts.remove_photo()Tam başvurucontacts.block()Tam başvurucontacts.unblock()Tam başvurucontacts.list_threads()Tam başvurucontacts.list_all_threads()Tam başvurucontacts.iterate_threads()Tam başvurucontacts.activity()Tam başvuru