Workplace from Metaは廃止されます。Workplaceは2025年8月31日まで今までどおりご利用いただけます。詳しくはヘルプセンターをご覧ください。
アクセス認証プレビューは、Workplaceでコンテンツが正しくプレビューされるようにします。そのためには、Workplaceで予期される形式でアクセス認証プレビューのメタデータのサポートを提供する必要があります。これにより、コンテンツのURLがシェアされたときに、Workplaceはそのメタデータをフェッチしてプレビューを作成できます。このプロセスはよくリンク展開と呼ばれます。
Facebookは、Open GraphプロトコルとFacebookクローラーでメタデータを取得して公開URLを展開できますが、より頻繁にWorkplaceにシェアされる非公開URLでは、このプロセスは不可能です。他のユーザーが非公開URLをWorkplaceにシェアした場合、あなたが設定するコールバックURLにWebhookが送信されます。そして、それをシェアしているユーザーのURLを記述したメタデータペイロードが記載された応答を返して、リンクプレビューをレンダリングすることができます。
Workplace上でシェアされたURLを表示する各ユーザーに対してこれと同じプロセスが繰り返され、ユーザーごとにプレビューの表示を制御することができます。
Workplace用のアクセス認証プレビューでは、ソースマテリアルのプライバシーが尊重される方法で、ユーザーはWorkplaceで情報を安全かつ容易にシェアできます。Workplace用のアクセス認証プレビューをサポートすると、プライバシーを意識した安全な方法で、コンテンツがWorkplaceで正しくプレビューされるようになります。
Workplaceでは、ユーザーは多くの場合、社内リソースへのリンクをシェアします。この種のリソースは、特定のユーザーだけが表示できるようにする必要があります。これは、利用者がニュース記事やブログ投稿などの公開コンテンツをシェアすることが多いFacebookとは対照的です。
Workplaceが社内限定の非公開コンテンツのプレビューを生成するためには、いくつかのメタデータを提供する必要があります。提供者は、Workplaceの現在の閲覧者がコンテンツの表示を許可されているかどうかに応じて、彼らのためにメタデータを提供するかどうかを選択できます。
このドキュメントでは、アクセス認証プレビューを有効にする以下のようなコンポーネントについて概説します。
アクセス認証プレビューを有効にするには、以下が設定されるようにアプリを構成する必要があります。
次のように、Facebookが提供者にリクエストを送信する状況がいくつかあります。
上記のいずれのシナリオでも、Webhookは次の形式のPOST
リクエストとして送信されます。
{ "object": "link", "entry": [ { "time": int, "changes": [ { "field": "preview", "value": { "community": { "id": string, }, "user": { "id": string, }, "link": string, } } ] } ] }
このペイロードには、次のフィールドが含まれています。
フィールド名 | 説明 |
---|---|
| Webhookトピック。このコンテキストでは常に |
| リクエストのリスト。常に1つのみです。 |
| リクエストが送信された時刻。 |
| このリクエストに含まれる変更のリスト。常に1つのみです。 |
| Webhookフィールド。常に |
| リクエストのコンテキストを含む実際のオブジェクト。 |
| リクエストをトリガーしたユーザーのコミュニティ。 |
| リクエストをトリガーしたユーザー。 |
| Workplaceがレンダリングしようとしているリンク。アプリによって構成されたドメインと正規表現に一致します。 |
POST /callback HTTP/1.1 Host: third-party.com Accept: application/json Content-Type: application/json User-Agent: Webhooks/1.0 (https://fb.me/webhooks) X-Hub-Signature: sha1=bf3102e52efd0fd4bd26277030aa180d7b5cf587 ... { "object": "link", "entry": [{ "time": 1501515097793, "changes": [{ "field": "preview", "value": { "community": { "id": "138169208138649" }, "user": { "id": "88575656148087" } "link": "https://company.third-party.com/document-about-this" } }] }] }
Webhookリクエストを受信したら、特定の応答形式でメタデータペイロードを提供する必要があります。
{ "data": [ { "link": string, ?"canonical_link": string, ?"title": string, ?"description": string, ?"icon": string, ?"download_url": string, "privacy": 'organization' | 'accessible' | 'inaccessible', ?"type": 'document' | 'folder' | 'task' | 'link', ?"additional_data": [ { "title" => string, "format" => 'text' | 'date' | 'datetime' | 'user', "value" => string | number, ?"color" => 'blue' | 'green' | 'yellow' | 'orange' | 'red', }, ], } ], ?"linked_user": boolean }
このペイロードには、次のフィールドが含まれていることになっています。
フィールド名 | 説明 |
---|---|
| ユーザーが利用できるアイテムのコレクション。アプリがこのユーザーに対して当該リンクを展開しないことを選択した場合、空になる可能性があります。 |
| 第三者がユーザーを認識しているかどうかを示すブーリアン型のフィールド。 |
| このアイテムを一意に識別するリンク。リクエストに含まれるリンクと一致する必要があります。 |
| このコンテンツの正規URL表現。リンクと異なる場合、関連するシェアを簡単にクエリできるように、このコンテンツは正規コンテンツに関連付けられます。 |
| このアイテムのタイトル。privacyがinaccessibleに設定されているアイテム以外では必須です。 |
| リッチプレビューでレンダリングされるアイテムの簡潔な説明。 |
| Workplaceがコンテンツのアイコンを表示する場所を表す、このコンテンツのアセット。誰もがアクセス可能なURLであることが必要です。最良の結果を得るには、アセットを16ピクセルの正方形にしてください。 |
| WorkplaceがアイテムのPDF/JPEG/PNG表現をダウンロードして画像投稿に変換できるURL。 |
| オブジェクトのプライバシーを示します。 |
|
|
| リッチプレビューでレンダリングされるメタデータのコレクション。 |
HTTP/1.1 200 OK Content-Type: application/json X-Hub-Signature: sha1=b5a6f32f084100ae5b355174b9bb8398f5fbe983 ... { "data": [ { "link": "https://taaskly.herokuapp.com/task/4", "title": "Launch Workplace Integration for F8", "privacy": "organization", "type": "task", "additional_data": [ { "title": "Owner", "format": "user", "value": "319922278498384" }, { "title": "Created", "format": "datetime", "value": "2018-02-28T03:35:40.827Z" }, { "title": "Priority", "format": "text", "value": "high", "color": "red" } ] } ], "linked_user": true }
プライバシーモードは、Facebookが現在のユーザーとその後のユーザーにユーザー認証を要求するかどうかと無関係に、ユーザーがコンテンツを表示できるかどうかを決定します。
organization
: ユーザーは表示可能、ユーザー認証は不要accessible
: 現在のユーザーは表示可能だが、それ以外のユーザーにはユーザーIDマッピングが必要な場合があるinaccessible
: ユーザーは表示不可リンクプレビューに情報を追加するために、最大3つの追加データアイテムを送信できます。追加データアイテムはキー/値要素のセットで構成されますが、値はさまざまな形式で設定できます。
現在のところ、次の4つの形式がサポートされています。
text
: 値はそのままレンダリングされます。文字列を指定する必要があります。この形式では、追加データにcolor
プロパティを含めることもできます。blue
、green
、yellow
、orange
、red
のいずれかの値を指定する必要があります。指定した場合は、その色を背景として値がレンダリングされます。date
: 値は時刻を含まないISO-8601日付形式として解析され、時刻表示なしでレンダリングされます。datetime
: 値は時刻と時間帯を含むISO-8601日付形式として解析され、ユーザーの時間帯の時刻表示でレンダリングされます。user
: 値はユーザーIDとして解析され、ユーザーの名前がレンダリングされます。追加データが設定された場合、download_url
パラメーターは無視されます。
ドキュメントのプライバシーモードがorganization
またはaccessible
としてマークされていて、ダウンロードURLが指定されている場合は、データをダウンロードするための追加リクエストが送信されます。
GET /download/super-fancy-document HTTP/1.1 Host: provider.com Accept: <some mime types> User-Agent: Webhooks/1.0 (https://fb.me/webhooks) X-Hub-Signature: sha1=bf3102e52efd0fd4bd26277030aa180d7b5cf587
これにより、Workplaceはこのファイルを取得して写真に変換し、それに基づいて複数の写真を含む投稿を作成します。
上記のように、アクセス認証プレビューを提供するには、何らかの種類のIDマッピングが必要です。IDマッピングは、Workplaceユーザーがプレビュー対象のコンテンツを表示するアクセス許可を持っているかどうかを制御し、Workplaceでコンテンツのアクセスルールが確実に尊重されるようにします。
IDマッピングの最も単純な形態は、組織全体のマッピングです。この場合、Workplaceのユーザーにプレビューが表示されるには、Workplaceコミュニティのメンバーシップがあれば十分です。このシナリオは、全社的なイントラネット、またはすべてのオブジェクト(または少なくともそれらのメタデータ)が会社全体に表示されるサービスに対してリンクをプレビューする場合によく使用されます。
Workplaceコミュニティに統合がインストールされている場合は、インストール時に取得したアクセストークンを使用して、/community
エンドポイントからコミュニティIDを確認できます。このコミュニティIDをトークンとともに保存して、サービス内のテナントまたは組織のIDにマッピングできます。そうすれば、Workplaceコミュニティとサービス内の組織との間にマッピングが作成されます。
これにより、アクセス認証プレビューのWebhookリクエストに応答する際に、WebhookペイロードのコミュニティIDがその組織にリンクされたコミュニティIDと一致することを確認して、メタデータペイロードを安全に返せるかどうかを判断できます。そのペイロードのプライバシーをORGANIZATIONとしてマークすれば、FacebookがそのWorkplaceコミュニティのユーザーごとに追加のWebhookを送信する必要がなくなります。
よりきめ細かいアクセス許可の設定が必要な場合は、ユーザーごとのマッピングをサポートして、Workplaceの閲覧者ごとにメタデータをレンダリングするかどうかを選択できます。Workplaceは、個々のWebhookペイロードでアクセス認証プレビュー用のユーザーIDを送信します。ユーザーごとのマッピングをサポートするには、Webhookペイロードで送信されたWorkplaceユーザーIDに対して、システム内のどのユーザーレコードがマップされているかを知る必要があります。
特定のWorkplaceユーザーIDを初めて受信した場合は、ブーリアンフィールドlinked_user
をfalse
に設定して応答できます。そうすると、Workplaceに[プレビューを有効にする]ボタンが表示され、ユーザーは自分のアカウントをリンクするよう求められます。
ユーザーがボタンを押すと、定義したアカウントリンクエンドポイントのダイアログが開きます。このダイアログで、サービス内のユーザーセッションを検証できます。WorkplaceはPOSTリクエストを使用してこのURLを開き、署名されたリクエストパラメーターを渡します。これには現在のユーザーIDとコミュニティIDが含まれています。
POST https://www.example.com/account_linking?redirect_uri=https%3A%2F%2Ffoxfabrics.facebook.com%2Flink_complete HTTP/1.1 Host: foxfabrics.third-party.com Origin: http://www.facebook.com Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 Gecko/20100101 Firefox/57.0 ... signed_request=238fsdfsd.oijdoifjsidf899
ペイロード内には、このユーザーに関する情報が含まれているsigned_requestパラメーターがあります。このリクエストは次のようにしてデコードできます。
このペイロードには、次のフィールドが含まれています。
{ "algorithm": "HMAC-SHA256", "user_id": "88575656148087", "community_id": "138169208138649" }
この時点で、WorkplaceユーザーID、コミュニティID、そしてサービスの検証済みユーザーセッションを取得しているので、サービスのユーザーのIDの横にユーザーのWorkplace IDを記録することができます。完了したら、元のリクエストでクエリパラメーターredirect_uriとして提供されたURLにリダイレクトします。
GET {$redirect_uri} HTTP/1.1 Host: foxfabrics.facebook.com User-Agent: Mozilla/5.0 Gecko/20100101 Firefox/57.0 Referer: https://www.example.com/account_linking ...
Workplaceは、IDマッピングが完了したことを認識し、アクセス認証プレビューのメタデータを再度リクエストします。今度はlinked_user
をtrue
に設定して応答し、必要なメタデータを提供できます。
認識されていないユーザーが初めてコンテンツをプレビューしようとすると、そのたびにこのラウンドトリップ全体が一度だけ発生します。IDマッピングが完了したら、その後のプレビューではこのラウンドトリップをバイパスできます。
No, Workplace Authenticated Previews do not have the same performance requirements or unsubscribe behavior as Messenger Platform webhooks.
So that people using Workplace have a good experience, the full HTTP roundtrip should take less than 5 seconds as measured from the Workplace side (i.e., the HTTP client side).
No, these requests are one-time only.
For estimating / expectation standpoint you can plan around this behavior. You may observe some differences in practice due to retries or race conditions.
No, Workplace will not automatically disable a link webhooks subscription.