ドキュメント本文へスキップ
Ruby

連絡先

`contacts.list`、`get`、`create`、`save`、`update`、`set_audiences`、`delete`、`delete_many`、`list_people`、`set_photo`、`remove_photo`、`block`、`unblock`、`list_threads`、`activity`。

すべてのメソッド

usage.rb
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 は最近見かけた連絡先から順に返し、一度もメールを送っていない連絡先は最後になります。source が auto なのは、メンバーがアプリのコンポーザーからそのアドレスにメッセージを送ったために行が書き込まれた場合で、誰かが保存したというのとは本質的に異なる主張です。あるアドレスからメールが届いても何も書き込まれず、この API を通じた送信でも書き込まれません。

アドレス帳は一人の人ではなくワークスペースに属するため、どのメンバーが保存した連絡先も、すべてのメンバーとすべてのキーから見える連絡先になります。create は source を manual として書き込み、書き込みと同時に連絡先を既定のオーディエンスに入れます。同じ呼び出しで自分のリストにも加えるには audienceIds にそれらを指定します(audiences:write も必要です)。または後から audiences.add_contact で追加します。これはオーディエンスのページで説明しています。set_audiences は、連絡先がどのリストに入るかを 1 回の呼び出しで正確に指定します。

アドレスは小文字で保存され、gem は渡されたアドレスをエンコードするため、[email protected] も正しい行に届きます。nil や空のアドレスは、何かが送信される前に ArgumentError を送出します。アドレスが識別子なので update では変更できません:連絡先を移すには delete と create を行います。

パラメーター: contacts.list

limitInteger
1 ページあたりに返す連絡先の数:1〜200 の整数で、既定値は 50。型が変換されるため、クエリ文字列から読んだ `"100"` のような String でもかまいません。範囲外の値は丸められるのではなく 422 になります。
cursorString
前のページの `next_cursor`。自分で組み立てないでください:もう存在しない連絡先を指すカーソルは 400 `invalid_cursor` になり、`OpenEmail::InvalidRequestError` として送出されます。これはページ分割の状態が古くなったことを意味し、カーソルなしで走査をやり直すべきです。
sourceString
誰かが意図して保存した連絡先は `manual`、アプリのコンポーザーが記録したものは `auto`。アドレス帳全体を対象にするには省略します。
qString
名前とアドレスを最大 200 文字で検索します。最初のページで完全に一致するものがなければ、代わりに近い綴りが返り、続くページも同じ方法で一致を続けます。

レスポンス:連絡先

contacts.list は OpenEmail::Page を返すため、行は page.items にあり、走査は page.has_more? が true の間 page.next_cursor をたどります。list_all はすべての行を 1 つの Array として返し、iterate は 1 行ずつ yield します。get、create、update、save、set_audiences はいずれも 1 件の連絡先を Symbol キーの Hash として返し、同じ行に audiences が加わります。アドレス帳には上限がないため、このルートは、200 件で黙って打ち切られた Array を返すのではなく、ページ分割します。

objectString
常に文字列 `contact` です。`get` のときだけでなく一覧の行でも同じです。
emailString
アドレスです。書き込み時に小文字化されるので `[email protected]` と `[email protected]` は 1 件の連絡先になります。連絡先 id は公開されないため、すべての contacts メソッドが受け取るキーはこれです。行は書き込んだメンバーやキーではなくワークスペースに属するので、ワークスペース上のすべてのメンバーとすべてのキーが 1 つのアドレス帳を読み書きします。
nameString or nil
表示名で、そのアドレスに名前が一度も記録されていない場合は nil です。自動の書き込みが名前を持つのは、ヘッダーがアドレス自体以外のものを示した場合だけで、ユーザーが入力した名前を上書きすることは決してありません。
sourceString
`auto` は、ユーザーがそのアドレスにメールを送ったために行が書き込まれたことを意味します。`manual` は誰かが手で入力したことを意味し、これは本質的に異なる主張です。upsert が `manual` を `auto` に戻すことはありません。あるアドレスからメールが届いても、意図的に行は一切書き込まれないため、あなたにメールを書いてきただけの人はここには含まれません。この列は既定値が `manual` の自由記述のテキストなので、値は決まった集合のない String として扱ってください。
notesString or nil
誰かがアプリまたは `update` でこの人について書いた自由記述のテキストで、自動生成されることはありません。誰も何も書いていない場合は nil で、`update` で `notes: nil` を渡すと消去されます。
lastSeenAtString or nil
ISO 8601 の UTC の文字列で、メンバーがアプリのコンポーザーからそのアドレスに送信するたびに更新されます。そのアドレスからメールが届いたときは更新されず、何も書き込まれません。`create` で保存され、一度もメールを送っていない連絡先では nil で、このルートが返す `lastSeenAt` の降順では最後に並びます。
audiencesArray<Hash>
`get`、`create`、`update`、`save`、`set_audiences` にだけ含まれ、一覧の行には含まれません。連絡先が入っているすべてのオーディエンス(既定のものを含む)で、それぞれ `id`、`name`、`builtin` を持つ Hash です。`builtin` は、すべての連絡先が属するオーディエンスでは `default`、誰かが作成したものでは nil なので、誰でも変更できる名前ではなく、これで分岐してください。
photoUrlString or nil
連絡先の写真が配信される場所で、写真がない場合は nil です。`set_photo` で設定し、アップロードのたびに新しい URL になります。

連絡先のオーディエンスを設定する

set_audiences(email, audienceIds: [...]) は、1 件の連絡先がどのオーディエンスに入るかを 1 回のリクエストで正確に指定します。連絡先は、指定されたオーディエンスのうちまだ入っていないものすべてに加わり、それ以外のすべてから抜けます。呼び出しは変更後の連絡先を audiences 付きで返します。連絡先ではなくメンバーシップを書き込むため audiences:write が必要で、繰り返しても何も変わらないため、gem はネットワーク障害の後にリトライします。

既定のオーディエンスは常に維持されるため、audienceIds: [] を渡すと、連絡先は既定のオーディエンスだけに入った状態になります。id は最大 100 個まで指定できます。このワークスペースのどのオーディエンスも指さない id は 404 audience_not_found になって何も変わらず、連絡先でないアドレスは 404 contact_not_found になります。どちらも OpenEmail::NotFoundError を送出します。

連絡先ページの全員

list_people は、アプリの連絡先ページに表示される人を一覧にします:保存済みの連絡先と、メールで見かけたすべてのアドレスで、それぞれ saved、threads、lastAt を持ちます。list は保存済みの連絡先だけです。OpenEmail::PeoplePage を返し、これは items、has_more?、next_cursor に seen を加えたものです。メールで見かけたアドレスは、キーが threads:read も持つ場合にだけ含まれ、含まれたかどうかは page.seen で分かります。sort: は recent、name、threads のいずれかで、OpenEmail::PEOPLE_SORTS がそれらを定義しています。q: は名前、アドレス、メモを検索し、blocked: true はワークスペースのブロックリストがブロックしている人(ドメイン全体のルールを含む)だけを残します。blockedBy はすべての行でそのルールを示します。

people.rb
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.size

list_all_people はすべてのページを 1 つの Array として返し、iterate_people は各人をブロックに yield するか、ブロックがなければ Enumerator を返します。どちらも seen を報告しないため、それを知るには list_people で 1 ページを読んでください。カーソルは不透明な値なので、next_cursor を受け取ったとおりに cursor: として、同じ sort:、q:、blocked: と一緒に渡し返してください。

保存、削除、写真

省略可能な name: と notes: を付けた save(email) は、アプリの「連絡先に追加」と「連絡先に残す」にあたります:まだ連絡先でないアドレスを保存し、送信から記録された連絡先を手で保存したものとして残し、削除された連絡先を復活させます。delete は「削除」にあたります:保存済みの連絡先を削除してアドレスを非表示にするため、コンポーザーがそれを再び記録することはありません。メールで見かけただけのアドレスも受け付けます。返される Hash の wasSaved が、どちらだったかを示します。delete_many は 1 回の呼び出しで最大 200 件を削除します。

photo.rb
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 は画像のバイト列をそのまま送ります:最大 5 MB の PNG、JPEG、WebP、GIF で、512 ピクセルの正方形に収められます。バイト列はバイナリの String、IO、Pathname のいずれかです。content_type: を渡すか、自身の種類を持つバイト列を渡してください:Rails のアップロードのように content_type に応答するオブジェクト、または名前が .png、.jpg、.jpeg、.webp、.gif で終わる File か Pathname です。種類がないとバイト列は application/octet-stream として送られ、サーバーは 422 invalid_image で拒否します。OpenEmail::CONTACT_PHOTO_TYPES がその 4 つの種類を定義しています。アドレスは先に保存済みの連絡先でなければなりません。

ブロック

block(email) はアドレスをワークスペースのブロックリストに載せてそこからのメールを拒否し、プラスタグは取り除きます。unblock(email) はそのアドレスをブロックしているルールをすべて外します。どちらも連絡先ではなくブロックリストを変更するので settings:write が必要で、どちらもアドレスが連絡先である必要はありません。

unblock がドメイン全体のルールを解除すると、removed はそれを list が blockedDomains の行として一覧にし、そのドメインの全員が一緒にブロック解除されます。OpenEmail::CONTACT_BLOCK_LISTS が両方のリストを定義しています。

会話とアクティビティ

list_threads(email) は、すべてのフォルダーで、そのアドレスが書いた、またはそのアドレス宛てに書かれたスレッドをページ単位で返し、list_all_threads と iterate_threads はそれらをたどります。activity(email) は連絡先の「アクティビティ」タブの元になる数値を返します:区間ごとの受信数と送信数、あなたの返信を待っているスレッド、双方向それぞれの返信時間の中央値です。どちらも threads:read が必要です。

activity.rb
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 のキーワード引数を受け取ります。minutes: は期間を設定し、省略すると 90 日です。grain: は区間の幅を設定します:minute、hour、day のいずれかです。offset_minutes: は日の区切りを UTC から東に何分ずらすかを設定します。Time.now.utc_offset / 60 がローカルのオフセットで、gem はそれを API の offsetMinutes として送ります。