> ## Documentation Index
> Fetch the complete documentation index at: https://help.dingtalk.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 企業 OA システムと DingTalk 連絡先の同期

> 本ドキュメントでは、企業独自の OA システムの連絡先と DingTalk 連絡先を同期する方法について説明します。

# 企業 OA システムと DingTalk 連絡先の同期

## 前提条件

[アプリの作成](/ja/open/dingstart/create-application)フローを完了します。

## ステップ 1：アプリ認証情報の取得

1. 対象のアプリを選択し、アプリ詳細ページに移動して、**ベーシック情報** > **認証情報とベーシック情報** をクリックします。
2. クライアント ID と Client Secret を取得します。

## ステップ 2：API 権限の追加

**開発設定** > **権限管理** をクリックし、権限検索ボックスに `qyapi_manage_addresslist` と入力して権限をリクエストします。

## ステップ 3：アプリのアクセス認証情報 アクセストークン の取得

### 重要

* サーバー API の差異については、旧バージョンサーバー API と新バージョンサーバー API の違いを参照してください。
* サーバー API インターフェース SDK のダウンロードについては、サーバー SDK ダウンロードを参照してください。

ステップ 1 で取得したクライアント ID と Client Secret を使用して、社内アプリのアプリアクセス認証情報 access\_token を取得します。

```java theme={"theme":{"light":"github-light","dark":"github-dark"}}
public void getAccessToken() throws ApiException {
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.io/gettoken");
        OapiGettokenRequest req = new OapiGettokenRequest();
        req.setAppkey("dingxxxxxxxxxhgn");
        req.setAppsecret("9G_xxxxxxxxxxxxxxx1JDf0Qq3nexxxxxxxxGIO");
        req.setHttpMethod("GET");
        OapiGettokenResponse rsp = client.execute(req);
        System.out.println(rsp.getBody());
    }
```

## ステップ 4：連絡先同期に関するフロー

1. DingTalk 連絡先情報を企業 OA システムの連絡先に同期する：

   同期実現のポイントは、DingTalk 連絡先内の情報に変更があった場合、企業 OA システムの連絡先にも対応する操作が反映されることを保証する点にあります。

   1. まず、企業内のすべての社員情報を取得するドキュメントを参考に、現在の DingTalk 組織構成情報をすべて企業 OA システムの連絡先内に取得します。
   2. DingTalk が提供するイベントサブスクリプション機能を使用し、連絡先イベントをサブスクライブします。DingTalk 連絡先内の変更に応じて、関連するコールバックイベント情報がプッシュされます。連絡先イベントのプッシュ情報フォーマットは、連絡先を参照してください。
   3. 企業 OA システムで DingTalk からプッシュされた連絡先イベントを受信・処理し、企業 OA システムの連絡先情報を同期して更新します。
2. 企業 OA システムの連絡先情報を DingTalk 連絡先に更新する：

   企業 OA システムの連絡先情報に変更が生じた場合、DingTalk 連絡先情報を同期して更新し、連絡先情報の一貫性を確保する必要があります。

   1. 企業 OA システムの連絡先内に部門が作成された場合、部門作成 API を呼び出し、企業独自の OA システム内の当該部門の階層と部門名に基づき、DingTalk クライアントサイドで同じ部門階層と部門名を作成します。

      ```java lines theme={"theme":{"light":"github-light","dark":"github-dark"}}
       public void deptCreate() throws ApiException {
              DingTalkClient client = new DefaultDingTalkClient("https://api.dingtalk.io/topapi/v2/department/create");
              OapiV2DepartmentCreateRequest req = new OapiV2DepartmentCreateRequest();
              req.setParentId(1L);
              req.setOuterDept(true);
              req.setHideDept(false);
              req.setCreateDeptGroup(true);
              req.setOrder(1L);
              req.setName("1019テスト部門");
              req.setSourceIdentifier("1019テスト部門");
              req.setOuterPermitUsers("manager7675,01472825524039877041");
              req.setOuterDeptOnlySelf(true);
              OapiV2DepartmentCreateResponse rsp = client.execute(req, getAccessToken());
              System.out.println(rsp.getBody());
          }
      ```

### 説明

DingTalk 連絡先の部門 ID は自動生成され、設定はできません。連絡先を更新する際は、部門名を識別子として DingTalk に同期し、同時に対応する DingTalk 連絡先の部門 ID 値を保存することを推奨します。これにより、後続の操作で利用しやすくなります。
2\. 企業 OA システムの連絡先にロールを追加する場合、企業 OA システム内のロール情報に基づいて行います。

1. サーバー API の [ロールグループの作成](/ja/open/development/add-a-role-group) インターフェースを呼び出し、ロールグループ情報を作成します。

   ```java lines theme={"theme":{"light":"github-light","dark":"github-dark"}}
   public void addRoleGroup() throws ApiException {
           DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.io/role/add_role_group");
           OapiRoleAddrolegroupRequest req = new OapiRoleAddrolegroupRequest();
           req.setName("1019テストロールグループ");
           OapiRoleAddrolegroupResponse rsp = client.execute(req, getAccessToken());
           System.out.println(rsp.getBody());
       }
   ```
2. サーバー API のロール作成インターフェースを呼び出し、企業のロール情報を作成します。

   ```java lines theme={"theme":{"light":"github-light","dark":"github-dark"}}
     public void addRole() throws ApiException {
           DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.io/role/add_role");
           OapiRoleAddRoleRequest req = new OapiRoleAddRoleRequest();
           req.setRoleName("1019テストロール");
           req.setGroupId(3168010875L);
           OapiRoleAddRoleResponse rsp = client.execute(req, getAccessToken());
           System.out.println(rsp.getBody());
       }
   ```
3. [ユーザーの作成](/ja/open/development/user-information-creation) インターフェースを呼び出し、企業 OA システム内の各部門の社員を DingTalk の対応する部門に作成・追加します。本ステップでユーザーを追加する際、同時に当該社員のロール情報を追加することができます。

   ```java lines theme={"theme":{"light":"github-light","dark":"github-dark"}}
   public void createUser() throws ApiException {
           DingTalkClient client = new DefaultDingTalkClient("https://api.dingtalk.io/topapi/v2/user/create");
           OapiV2UserCreateRequest req = new OapiV2UserCreateRequest();
           req.setUserid("manger7666");
           req.setName("1009テストユーザー");
           req.setSeniorMode(false);
           req.setMobile("152****3025");
           req.setTitle("技術ディレクター");
           req.setEmail("test***@xx.com");
           req.setOrgEmail("test***@xxx.com");
           req.setOrgEmailType("profession");
           ArrayList<OapiV2UserCreateRequest.DeptTitle> deptTitles = new ArrayList<>();
           OapiV2UserCreateRequest.DeptTitle deptTitle = new OapiV2UserCreateRequest.DeptTitle();
           deptTitle.setDeptId(724960197L);
           deptTitle.setTitle("シニア技術ディレクター");
           deptTitles.add(deptTitle);
           req.setDeptTitleList(deptTitles);
           req.setHideMobile(false);
           req.setTelephone("010-8xxxxx6-2345");
           req.setJobNumber("202210190001");
           req.setHiredDate(1666143772000L);
           req.setWorkPlace("アリババセンター****");
           req.setRemark("備考情報");
           req.setDeptIdList("724960197");
           List<OapiV2UserCreateRequest.DeptOrder> deptOrderList = new ArrayList<OapiV2UserCreateRequest.DeptOrder>();
           OapiV2UserCreateRequest.DeptOrder deptOrder = new OapiV2UserCreateRequest.DeptOrder();
           deptOrder.setDeptId(724960197L);
           deptOrder.setOrder(1L);
           deptOrderList.add(deptOrder);
           req.setDeptOrderList(deptOrderList);
           req.setExtension("{\"趣味\":\"[趣味](http://test.com?userid=#userid#&corpid=#corpid#)\"}");
           req.setManagerUserid("manager7675");
           req.setLoginEmail("test****@xxx.com");
           OapiV2UserCreateResponse rsp = client.execute(req, getAccessToken());
           System.out.println(rsp.getBody());
       }
   ```
