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
page = client.contacts.list(limit: 100)contact = client.contacts.get("[email protected]") saved = client.contacts.create( email: "[email protected]", name: "Grace Hopper", notes: "Met at the compiler workshop") client.contacts.update("[email protected]", notes: nil)client.contacts.set_audiences("[email protected]", audienceIds: ["aud_4c1b8e2a7d9f05c36b4e8a71"])client.contacts.delete("[email protected]") puts page.items.size, page.has_more?, contact[:source], contact[:lastSeenAt], saved[:source]list en son görülen kişileri önce, hiç posta gönderilmemiş kişileri ise en sona koyar. Satır, bir üye uygulamanın yazma ekranından o adrese bir ileti gönderdiği için yazıldıysa source değeri auto olur; bu, birinin onu kaydetmiş olmasından esaslı biçimde 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 katmak için onları audienceIds içinde belirtin (bu, audiences:write de gerektirir) ya da kişiyi daha sonra Kitleler sayfasında anlatılan audiences.add_contact ile ekleyin. set_audiences bir kişinin hangi listelerde olduğunu tek bir çağrıda tam olarak belirler.
Adresler küçük harfle saklanır ve gem geçirdiğiniz adresi kodlar; bu yüzden [email protected] doğru satıra ulaşır. nil ya da boş bir adres, hiçbir şey gönderilmeden önce ArgumentError fırlatı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
limitInteger- Sayfa başına döndürülecek kişi sayısı: 1 ile 200 arasında bir tam sayı, varsayılanı 50. Değer dönüştürülür; bu yüzden bir sorgu dizesinden okunan `"100"` gibi bir String de olur. Aralık dışındaki bir değer kırpılmaz, 422 verir.
cursorString- Önceki sayfanın `next_cursor` değeri. Asla kendiniz oluşturmayın: artık var olmayan bir kişiyi belirten bir cursor, `OpenEmail::InvalidRequestError` olarak fırlatılan bir 400 `invalid_cursor` verir; bu, sayfalama durumunuzun eskidiği ve dolaşmanın cursor olmadan yeniden başlaması gerektiği anlamına gelir.
sourceString- Birinin bilerek kaydettiği kişiler için `manual`, uygulamanın yazma ekranının kaydettikleri için `auto`. Defterin tamamı için belirtmeyin.
qString- 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: bir kişi
contacts.list bir OpenEmail::Page döndürür; satırlar page.items içindedir ve dolaşma, page.has_more? true olduğu sürece page.next_cursor değerini izler. list_all tüm satırları tek bir Array olarak döndürür, iterate ise onları birer birer verir. get, create, update, save ve set_audiences her biri tek bir kişiyi Symbol anahtarlı bir Hash olarak döndürür: aynı satır ve ek olarak audiences. Adres defterinin bir sınırı yoktur; bu rotanın sessizce 200'de duran bir Array döndürmek yerine sayfalamasının nedeni budur.
objectString- Hem liste satırlarında hem de `get` yanıtında her zaman `contact` dizgesi.
emailString- 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.
nameString or nil- Görünen ad; adres için hiç ad kaydedilmemişse nil. Otomatik bir yazma, ancak başlık adresin kendisi dışında bir şey sağladığında bir ad taşır ve kullanıcının yazdığı bir adın üzerine asla yazamaz.
sourceString- `auto`, satırın kullanıcı o adrese posta gönderdiği için yazıldığı anlamına gelir. `manual`, birinin onu elle girdiği anlamına gelir; bu esaslı biçimde farklı bir iddiadır ve bir upsert `manual` değerini asla `auto` değerine düşürmez. Bir adresten gelen posta bilerek hiç satır yazmaz; bu yüzden size yalnızca yazmış biri burada yoktur. Değeri açık bir String olarak ele alın, çünkü sütun varsayılanı `manual` olan serbest metindir.
notesString or nil- Birinin bu kişi hakkında uygulamada ya da `update` üzerinden yazdığı serbest metin; asla otomatik üretilmez. Kimse bir şey yazmadıysa nil'dir ve `update` üzerinde `notes: nil` onu temizler.
lastSeenAtString or nil- Bir ISO 8601 UTC dizesi; bir üye uygulamanın yazma ekranından o adrese her gönderim yaptığında güncellenir, o adresten posta geldiğinde değil (bu hiçbir şey yazmaz). `create` ile kaydedilmiş ve hiç posta gönderilmemiş bir kişide nil'dir ve bu kişiler, bu rotanın döndürdüğü azalan `lastSeenAt` sırasında en sona düşer.
audiencesArray<Hash>- Yalnızca `get`, `create`, `update`, `save` ve `set_audiences` üzerinde bulunur, liste satırlarında asla. Kişinin içinde bulunduğu, varsayılan kitle dahil her kitle, `id`, `name` ve `builtin` içeren bir Hash olarak. `builtin`, her kişinin ait olduğu kitlede `default`, birinin oluşturduğu bir kitlede ise nil'dir; bu yüzden dallanmayı herkesin değiştirebileceği ada göre değil, buna göre yapın.
photoUrlString or nil- Kişi fotoğrafının sunulduğu yer; kişinin fotoğrafı yoksa nil. `set_photo` onu ayarlar ve her yükleme yeni bir URL alır.
Bir kişinin kitlelerini ayarlama
set_audiences(email, audienceIds: [...]), tek bir kişinin hangi kitlelerde olduğunu tek bir istekte tam olarak belirler. Kişi, listelenen ve henüz içinde olmadığı her kitleye katılır ve diğer her kitleden ayrılır; çağrı da değişiklikten sonraki kişiyi audiences ile birlikte döndürür. Kişiyi değil üyelikleri yazdığı için audiences:write gerektirir; tekrarlanması hiçbir şeyi değiştirmez, bu yüzden gem bir ağ hatasından sonra onu yeniden dener.
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 belirtmeyen 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. İkisi de OpenEmail::NotFoundError fırlatır.
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 birinde saved, threads ve lastAt bulunur. Bir OpenEmail::PeoplePage döndürür; bu da items, has_more? ve next_cursor alanlarına seen ekler. list ise yalnızca kayıtlı kişileri döndürür. Postada görülen adresler yalnızca anahtar threads:read iznine de sahipse gelir ve gelip gelmediklerini page.seen söyler. sort: değeri recent, name ya da threads olur ve OpenEmail::PEOPLE_SORTS bunları adlandırır. q: adlarda, adreslerde ve notlarda arar; blocked: true ise tüm alan adını kapsayan kurallar dahil, çalışma alanının engel listesinin engellediği kişileri tutar. blockedBy her satırda kuralı belirtir.
page = client.contacts.list_people(sort: "threads", limit: 50) page.items.each do |person| client.contacts.save(person[:email]) if !person[:saved] && person[:threads].to_i > 5end blocked = client.contacts.list_all_people(blocked: true)puts page.seen, blocked.sizelist_all_people tüm sayfaları tek bir Array olarak döndürür, iterate_people ise her kişiyi bir bloğa verir ya da blok olmadan bir Enumerator döndürür. Hiçbiri seen bildirmez; bunu öğrenmek için list_people ile bir sayfa okuyun. Cursor opaktır; bu yüzden next_cursor değerini geldiği gibi, aynı sort:, q: ve blocked: ile cursor: olarak geri geçirin.
Kaydetme, silme ve fotoğraflar
İsteğe bağlı name: ve notes: ile save(email), Kişilere ekle ve Kişilerde tut işlemlerine karşılık gelir: henüz kişi olmayan bir adresi kaydeder, bir gönderimden kaydedilmiş olanı elle kaydedilmiş olarak tutar ve silinmiş olanı geri getirir. delete, Sil işlemine karşılık gelir: kayıtlı kişiyi kaldırır ve adresi gizler, böylece yazma ekranı onu yeniden kaydetmez; yalnızca postada görülmüş bir adresi de kabul eder. Döndürdüğü Hash'teki wasSaved hangisi olduğunu söyler. delete_many tek çağrıda en fazla 200 tanesini siler.
client.contacts.save("[email protected]", name: "Grace Hopper") contact = client.contacts.set_photo("[email protected]", File.binread("photo.jpg"), content_type: "image/jpeg")puts contact[:photoUrl] client.contacts.set_photo("[email protected]", Pathname("photo.png")) client.contacts.remove_photo("[email protected]")client.contacts.delete_many(["[email protected]", "[email protected]"])set_photo görsel baytlarını olduğu gibi gönderir: 5 MB'a kadar PNG, JPEG, WebP ya da GIF, 512 piksellik bir kareye sığdırılır. Baytlar ikili bir String, bir IO ya da bir Pathname'dir. content_type: geçirin ya da kendi türünü taşıyan baytlar verin: bir Rails yüklemesi gibi content_type çağrısına yanıt veren bir nesne ya da adı .png, .jpg, .jpeg, .webp veya .gif ile biten bir File ya da Pathname. Tür olmadan baytlar application/octet-stream olarak gider ve sunucu bunu 422 invalid_image ile reddeder. OpenEmail::CONTACT_PHOTO_TYPES dört türü adlandırır. 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 olacak şekilde listeler ve o alan adındaki herkesin engeli de onunla birlikte kalkar. OpenEmail::CONTACT_BLOCK_LISTS iki listeyi de adlandırır.
Yazışmalar ve etkinlik
list_threads(email), adresin her klasörde yazdığı ya da kendisine yazılan konuşma dizilerini sayfalar; list_all_threads ve iterate_threads bunları 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 iletiler, yanıtınızı bekleyen konuşma dizileri ve her iki yöndeki medyan yanıt süresi. İkisi de threads:read gerektirir.
threads = client.contacts.list_threads("[email protected]", q: "invoice") activity = client.contacts.activity( "[email protected]", minutes: 30 * 24 * 60, grain: "day", offset_minutes: Time.now.utc_offset / 60) puts threads.items.size, activity.dig(:totals, :waiting)activity snake_case anahtar kelimeler alır. minutes: pencereyi ayarlar; belirtilmezse 90 gündür. grain: aralık genişliğini ayarlar: minute, hour ya da day. offset_minutes: günlerin bölündüğü, UTC'nin doğusundaki dakika sayısını ayarlar. Time.now.utc_offset / 60 yerel ofsettir ve gem bunu API'nin offsetMinutes alanı olarak gönderir.