IQ Bot： カスタムドメインのJsonファイルの見本と構造

IQ Botのカスタムドメインについては[こちらの記事](https://qiita.com/IQBotter/items/a10df61cc7f070e93db1)で説明していますが、このページではカスタムドメインをPostするためのJsonファイルの構造をまとめます。


#カスタムドメインのJsonファイルの見本

```json:カスタムドメインの見本
{
    "name": "カスタムドメインの見本",
    "languages": [
        "Japanese"
    ],
    "fields": [
        {
            "name": "F01_請求金額",
            "type": "FORM_FIELD",
            "format": "Number",
            "default": true,
            "aliases": [
                {
                    "names": [
                        "ご請求金額","合計金額","合計","御請求金額"
                    ],
                    "language": "Japanese"
                }
            ]
        },
        {
            "name": "F02_消費税額",
            "type": "FORM_FIELD",
            "format": "Number",
            "default": true,
            "aliases": [
                {
                    "names": [
                        "消費税","税額"
                    ],
                    "language": "Japanese"
                }
            ]
        },
        {
            "name": "T01_品名",
            "type": "TABLE_COLUMN_FIELD",
            "format": "Text",
            "default": true,
            "aliases": [
                {
                    "names": [
                        "品名","摘要"
                    ],
                    "language": "Japanese"
                }
            ]
        },
        {
            "name": "T02_数量",
            "type": "TABLE_COLUMN_FIELD",
            "format": "Number",
            "default": false,
            "aliases": [
                {
                    "names": [
                        "数","入数"
                    ],
                    "language": "Japanese"
                }
            ]
        }
    ]
}

```

#カスタムドメインのJsonファイルの構造

上記のJsonファイルの構造を、上から少しずつ区切って説明していきます。

##ヘッダー部分のnameとlanguages

```json:ヘッダー部分
{
    "name": "カスタムドメインの見本",
    "languages": [
        "Japanese"
    ],

```

|項目名|説明|
|:-----------------|:------------------|
|name|ドキュメントタイプの選択肢に表示する名称。同一のIQ Botサーバー（クラスター）の中で、重複する名称は定義できない。|
|languages|ドキュメントの主要言語の選択肢|

ここで設定した`name`と`languages`は、UI上に以下のように反映されます。
![106_ヘッダー部分.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/0a6cc988-eba3-8cbe-6df6-809126118e8a.jpeg)

##fields部分

fields部分は、以下の赤枠の範囲がひとかたまりになってひとつの項目を定義しています。

![107_Fields部分.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/d7fb33f0-fa05-6a7c-f1cd-b4be757ba097.jpeg)

###fields部分のname～defaultの内容

|項目名|説明|
|:-----------------|:------------------|
|name|ここで定義した名称が、以下の名称になります。<br>①CSVに表示される列名<br>②マッピング画面に表示されるフィールド名<br><br>英語、数字、日本語、スペースを組み合わせることができますが、記号は入力できません。<br>最初の文字または最後の文字をスペースにすることはできません。<br>最初の文字を数字にすることもできません。<br><br>**カスタムドメインをPOSTした後は、項目の並びはここで定義した名称の文字コード順となります。**<br>Tipsとして、順序性を担保したい場合は、項目の先頭にF0,F02...(フィールドの場合),T01,T02...(テーブルの場合)などの通番を付番しておくのがオススメです。|
|Type|該当項目が①フォームフィールドか②テーブルフィールドかを定義します。<br>①の場合：FORM_FIELD<br>②の場合：TABLE_COLUMN_FIELD|
|Format|マッピングの画面で定義できるデータタイプの選択肢を指定します。以下のリストの選択肢と同じ文字列を、**先頭文字を大文字にして指定**します。![データタイプ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/ab18fddc-b917-1773-f4e6-6f6a29545873.jpeg)<br>ここで指定するFormatはあくまでもデータタイプの初期値なので、グループごとに後からUIで変更することが可能です。|
|default|カスタムドメインを選択した際に、該当の項目をデフォルトで選択しておくかどうかをtrueかfalseで指定します。<br>![108_default.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/ae283e10-ee27-757b-d182-c6429b50ba6a.jpeg)|

###fields部分のaliases欄

この部分は最重要なので切り出して説明します。

```json:aliases部分
            "aliases": [
                {
                    "names": [
                        "ご請求金額","合計金額","合計","御請求金額"
                    ],
                    "language": "Japanese"
                }
```

上記の例であれば、`"ご請求金額"`、`"合計金額"`、`"合計"`、`"御請求金額"`の**いずれかの文字列に前方一致する文字列を、帳票上から該当項目のラベルとして取得する**という意味です。

この要領で`names`を幅広く定義していくことにより、帳票上からラベルとして取得できる文字列の選択肢を増やし、分類を意図通りに行いやすくします。

`names`のネーミングルールは、`fields`の`name`と同様です。

#注意事項

- `fields`の`name`と`aliases`の`names`は、ひとつのドメインの中で重複した値を保持することができません。

記載のとおりです。重複がある状態でPOSTするとエラーになるので、重複を排除してください。

- POST後の項目の並びは、文字コード順になります。

UIから項目名を入力した場合、項目は入力した順番に並びますが、カスタムドメインをPOSTした場合、**項目はフィールド／テーブルそれぞれで、JSONファイルで定義した`name`の文字コード順に並びます。**

順序性を保証したい場合は、項目名の先頭にF01,F02...(フィールドの場合)、T01,T02...(テーブルの場合)などの通番を付番することで対応できます。