メインコンテンツへスキップ
SyncHTTP プッシュ方式はオンプレミス環境に適しています。HTTP プッシュと比較して、SyncHTTP は業務データの最終状態を配信するため、開発者はプッシュされたデータをそのまま利用できます。

コールバックの概要

DingTalk は、アプリの有効化、アプリ認可の変更、部門の変更など、サブスクリプション済みのコールバックイベントをサードパーティ社内アプリにプッシュします。これらのイベントをサブスクライブすることで、開発者は DingTalk とより効果的に連携できます。 サードパーティ社内アプリを開発する際は、企業アプリの有効化イベントを受信するためにコールバックを登録する必要があります。このイベントは、どの組織がアプリを有効化したかをサードパーティアプリに通知します。サードパーティアプリのバックエンドがこのイベントを受信した後、組織情報を初期化してください。 DingTalk は現在、次のプッシュ方式をサポートしています。
  • RDS プッシュ
  • HTTP プッシュ
  • SyncHTTP プッシュ
SyncHTTP は HTTP コールバックを通じて ISV サービスへデータをプッシュし、RDS プッシュと同じフィールドおよびフォーマットを使用します。サービスプロバイダーは、RDS プッシュの方式とタイプに従い、HTTP で受信したデータを自前のデータベースまたは RDS に保存できます。 注意 SyncHTTP がコールバックを受信したら、すぐにデータベースに保存してから成功レスポンスを返してください。その他の業務ロジックを処理する場合は、非同期処理を使用してください。 SyncHTTP を使用すると、アプリ有効化 API を手動で呼び出す必要はありません。プッシュされた ticket を受信した後、それを使用してサーバー API を直接呼び出してください。 注意 SyncHTTP プッシュおよび HTTP プッシュの送信元 IP は次のとおりです。
  • 203.119.0.0/16
  • 203.119.128.0/17
  • 140.205.0.0/16
  • 106.11.0.0/16
  • 198.11.0.0/16
  • 59.82.0.0/16

コールバックイベントの登録フロー

コールバックイベントのサブスクリプションフローを次の図に示します。 まず、DingTalk Open Platform でプッシュされるサブスクリプションイベントを受信するための HTTP リクエストエンドポイントを設定し、次にサブスクライブしたいイベントを設定します。リクエストエンドポイントを設定すると、DingTalk Open Platform はそのエンドポイントに POST リクエストを送信します。指定された時間内に「success」を含む暗号化文字列を正しく返した場合にのみ、イベントサブスクリプションが完了します。

リクエストエンドポイントの設定とコールバックイベントのサブスクライブ

SyncHTTP を通じて DingTalk がプッシュするコールバックイベントを受信するには、まず HTTP コールバック URL を設定します。サブスクライブしたイベントがトリガーされると、DingTalk はこの URL に対応する HTTP POST リクエストを送信します。
  1. Developer Console にログインします。作成したアプリを検索し、その詳細ページを開きます。
  2. Development Management をクリックし、次に Edit をクリックして、プッシュタイプとして SyncHTTP Push を選択します。
  3. リクエストを受信するための HTTP エンドポイントを設定します。
    • token: DingTalk がエンドポイントにイベントデータをプッシュするたびに、Signature を生成しコールバックリクエストの正当性を検証するために使用する token が含まれます。英字または数字で構成し、3〜32 文字の長さである必要があります。
    • Encryption AES Key: Generate Automatically をクリックして AES キーを生成します。これはコールバックメッセージのコンテンツを暗号化・復号するために使用するパラメータです。AES キーの Base64 エンコードです。詳細は後述のメッセージの暗号化と復号を参照してください。
    • Callback URL: サブスクライブしたイベントのリクエストを受信するために使用する URL です。サブスクライブしたイベントがトリガーされると、DingTalk はこの URL に対応する HTTP POST リクエストを送信します。 注意 各アプリには 1 つのコールバック URL しか設定できません。アプリのサブスクリプションに対するすべてのイベント通知は、このリクエスト URL に送信されます。
  4. 設定が完了した後、Verify Validity ボタンをクリックすると、Open Platform は設定した URL に application/json の POST リクエストをプッシュして、その正当性を検証します。以下に示します。
    Open Platform から POST 検証リクエストを受信したら、それを復号し、1,200 ms 以内に success を含む暗号化文字列を DingTalk に返してください。時間内に応答しない場合、リクエストがレート制限される可能性があります。
  5. リクエストエンドポイントの設定が正常に完了した後、Callback Events リストエリアで、サブスクライブしたいコールバックイベントを選択し、右上の Save をクリックします。 注意 コールバックイベントを選択できない場合は、Developer Console の Manage Permissions ページで対応する API 権限を申請してください。

プッシュデータの説明

Callback URL を設定した後、Verify Validity ボタンをクリックすると、Open Platform は設定した URL に application/json の POST リクエストをプッシュして、その正当性を検証します。以下に示します。
受信したメッセージのコンテンツを復号します。詳細は後述のメッセージの暗号化と復号を参照してください。復号後のイベントタイプは次のとおりです。
  • check_url: テストコールバックイベント 復号後のデータ:
  • check_create_suite_url: 検証コールバックイベント 復号後のデータ:
  • check_update_suite_url: コールバック URL 更新イベント 復号後のデータ:
  • SYNC_HTTP_PUSH_HIGH: アプリ有効化などの高優先度データ
  • SYNC_HTTP_PUSH_MEDIUM: 連絡先の変更などの通常優先度データ
SYNC_HTTP_PUSH_HIGH および SYNC_HTTP_PUSH_MEDIUM タイプの bizData は、RDS プッシュの open_sync_biz_data テーブルおよび open_sync_biz_data_medium テーブル内のデータそのものです。具体的なフォーマットについては、データフォーマットを参照してください。

コールバックイベントの受信と応答

HTTP サービスを起動します(以下に示します)。サービスの応答ロジックで、コールバック(プッシュ)データを復号して保存します。 完全なコード例: <https://github.com/opendingtalk/eapp-isv-quick-start-java/blob/master/src/main/java/com/controller/CallbackController.java>

メッセージの暗号化と復号

安全なデータ伝送を確保するため、DingTalk がサブスクライブされたコールバックイベントを Callback URL にプッシュする際、イベントのソースを検証するために設定した token を含めます。また、キーを使用してメッセージのコンテンツを対称暗号化します。 コールバックの暗号化・復号ライブラリとそのデモはこちらから取得できます。 DingTalk サーバーは、msg メッセージ本文のプレーンテキストを encrypt にエンコードします。encrypt = Base64_Encode(AES_Encrypt[random(16B) + msg_len(4B) + msg + $key]) は、暗号化されたプレーンテキストメッセージ msg の Base64 エンコードです。ここで、
  • random は 16 バイトのランダム文字列です。
  • msg_len は msg の 4 バイトの長さで、ネットワークバイトオーダーです。
  • msg はメッセージ本文のプレーンテキストです。
  • key はアプリの suiteKey です。
返された JSON から encrypt フィールドを抽出します。
  • 暗号文を Base64 デコードします: aes_msg = Base64_Decode(encrypt)。
  • AESKey を使用して AES 復号を実行します: rand_msg = AES_Decrypt(aes_msg)。
暗号化・復号のコード例を以下に示します。完全な例については、DingTalk サードパーティ社内アプリ - ミニプログラム - クイックスタート(Java)を参照してください。 注意 このコード例における暗号化・復号処理は、DingCallbackCrypto ユーティリティクラスに依存します。dingtalk-callback-Crypto を参照してください。