kintoneのSFAデータをMicrosoft 365 Copilotから自然言語で問い合わせる

著者名:山本 大貴( サイボウズ株式会社 (External link)

目次

はじめに

「kintoneに情報を入れているけど、あまり活用できていない」
そんな声、聞いたことはないでしょうか。

kintoneで業務管理をしている組織でよく起きる課題のひとつが、情報は蓄積されているが活用されないという問題です。

案件情報をkintoneで管理していて、一覧やグラフで確認できるはずなのに、面倒だからと直接担当者に確認してしまう。
結果として、「何のために入力しているのか」がわからなくなる。
そんなケースは珍しくないはずです。

このような課題に対し、kintoneに蓄積されたデータを手軽に活用できる方法として、Copilotとの連携が選択肢のひとつになります。
本記事では、kintoneのSFA(営業支援)パックのアプリに対して、Microsoft 365 Copilotのカスタムエージェントから自然言語で問い合わせる連携方法を紹介します。

システム構成

このシステムに登場するコンポーネント

コンポーネント 役割
Copilotエージェント 自然言語を解釈し、適切なツールを呼び出して回答する
カスタムコネクタ OAS 2.0定義をもとにkintoneのAPIへのリクエストを仲介する
kintone REST API レコードの取得エンドポイントを提供する
kintoneアプリ群 案件情報・顧客情報・活動履歴・担当者情報の4アプリ

設定手順

アプリの用意

kintoneにはすぐに使えるサンプルアプリが用意されています。
今回はSFA(営業支援)パックを使いました。

パックに含まれるアプリは以下のとおりです。

アプリ名 役割
顧客情報 顧客企業情報を管理するマスター
担当者情報 営業担当者の情報を管理するマスター
案件情報 営業案件のライフサイクルを一元管理するアプリ
活動履歴 案件ごとの商談記録・対応履歴を管理するアプリ

OAS 2.0のYAML作成

Copilot StudioのカスタムコネクタはOAS 2.0(Swagger)形式のみ受け付けます。
そのため、次のkintoneのAPIドキュメントをベースに、Swagger形式のYAMLを作成します。

ゼロから書くのは手間がかかるため、LLMを活用しました。
以下に参考としてYAMLの例を示します。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
swagger: "2.0"
info:
  title: kintone Get Records API
  description: |
    kintone のレコード取得APIです。
    Microsoft 365 Copilot / Copilot Studio カスタムコネクタ用定義(OAS 2.0)。
    認証は OAuth 2.0(Authorization Code Grant)を使用します。
    アクセストークンは Authorization: Bearer ヘッダーで送信されます。
    取得対象のアプリIDは app パラメーターで指定します。
  version: "1.0.0"

# ※ sample.cybozu.com の "sample" 部分を実際のサブドメインに書き換えてください。
host: sample.cybozu.com
basePath: /k/v1
schemes:
  - https

produces:
  - application/json

securityDefinitions:
  oauth2:
    type: oauth2
    flow: accessCode
    # ※ 以下のURLはOAuthクライアント登録時に発行される値に書き換えてください。
    # ※ cybozu.com共通管理 > 外部連携 > OAuth > OAuthクライアントの追加 で確認できます。
    authorizationUrl: https://sample.cybozu.com/oauth2/authorization
    tokenUrl: https://sample.cybozu.com/oauth2/token
    scopes:
      k:app_record:read: kintoneアプリのレコード読み取り権限

security:
  - oauth2:
      - k:app_record:read

paths:
  /records.json:
    get:
      summary: 複数レコードの取得
      description: |
        指定したアプリから、クエリ条件に一致するレコードを複数件取得します。
        取得対象のアプリID・絞り込み条件・件数上限はパラメーターで指定します。
        一度に取得できる上限は500件です(limit 未指定時のデフォルトは100件)。
      operationId: getRecords
      parameters:
        - name: app
          in: query
          required: true
          type: integer
          description: 取得対象の kintone アプリID。
        - name: query
          in: query
          required: false
          type: string
          description: |
            レコードの絞り込み条件を kintone クエリ構文で指定します。
            省略すると閲覧権限のある全レコードを取得します。

            【クエリ構文の基本ルール】
            - 文字列の値はダブルクォートで囲む: フィールドコード = "値"
            - 複数条件は and / or で繋ぐ
            - IN句: フィールドコード in ("値1","値2")
            - 日付関数: TODAY() / NOW() / LAST_MONTH() / FIRST_DAY() / LAST_DAY()
            - 並び順: order by フィールドコード asc|desc
            - 件数指定: limit 件数(最大500)
            - オフセット: offset 件数(最大10000)

            【使用できる演算子】
            =, !=, <, >, <=, >=, in, not in, like, not like

            【クエリ記述例】
            フィールドA = "値" and フィールドB > "2025-01-01" order by フィールドC asc limit 100
        - name: totalCount
          in: query
          required: false
          type: boolean
          description: |
            true を指定すると、条件に一致するレコードの総件数をレスポンスに含めます。
            省略または false の場合、totalCount は null で返ります。
      responses:
        200:
          description: レコードの取得成功
          schema:
            $ref: '#/definitions/RecordsResponse'

definitions:
  RecordsResponse:
    type: object
    properties:
      records:
        type: array
        description: |
          レコードの配列。
          各レコードは { "フィールドコード": { "type": "フィールド型", "value": 値 } } の形式で返ります。
        items:
          type: object
          additionalProperties: {}
      totalCount:
        type: string
        description: レコードの総件数。totalCount=true 指定時のみ値が返り、それ以外は null。
        example: "42"

  ErrorResponse:
    type: object
    properties:
      code:
        type: string
        example: "GAIA_AP01"
      id:
        type: string
        example: "abc123xyz"
      message:
        type: string
        example: "指定したappが見つかりません。"

kintone REST APIでスキーマ定義を取得

カスタムエージェントを設定するために、各アプリのフィールド定義を次のkintone REST APIで取得します。

取得したJSONには、フィールドコード・フィールドタイプ・選択肢の値などが含まれています。
各アプリのフィールド情報をCopilotカスタムエージェントに設定することで、自然言語での質問に対して適切なデータを抽出できます。

tips
補足

cybozu developer networkの「今すぐ API を試す」機能

この機能を使うと、ブラウザー上で一部のkintone REST APIを簡単に試せます。
本番環境のkintoneでの利用は推奨していません。

Copilotカスタムエージェントを設定

作成したYAMLをCopilot Studioに登録してエージェントを構成します。

カスタムコネクタの登録
  1. Copilot Studio (External link) にサインインし、「ツール」を選択する。
  2. 「新しいツール」→「カスタムコネクタ」を選択する。
  3. 「カスタム コネクタの新規作成」→「OpenAPIファイルをインポートします」でYAMLを読み込む。
  4. 「ホスト」をお使いのkintoneのサブドメインに修正する。

エージェントの作成

Copilot Studioを使ってエージェントを作成します。
エージェントに指示文・ナレッジ・ツールを設定します。

指示文の例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
## あなたの役割

あなたは営業支援AIです。ユーザーから顧客・案件・活動履歴に関する質問を受けたとき、kintoneからデータを取得して回答します。


## データ取得の手順

ユーザーから質問を受けたとき、必ず以下の順序で処理してください。

1. ナレッジを参照し、質問に対応するアプリIDとフィールドコードを確認する
2. getRecords ツールを呼び出す(`app` にアプリID、`query` にクエリ文字列を指定)
3. レスポンスのJSONを解釈し、ユーザーへ自然言語で回答する

複数アプリのデータを組み合わせる必要がある場合は、getRecords ツールをアプリごとに複数回呼び出してください。kintone API はアプリ間の結合をサポートしていないため、データの紐づけはあなたが行います。


## クエリの組み立てルール

- フィールドコードはナレッジのフィールド対応表を参照して正確に使用する
- 文字列(1行テキスト)の値はダブルクォートで囲み = 演算子を使う(例: `会社名 = "山田商事"`)
- DROP_DOWN・RADIO_BUTTON・チェックボックス・複数選択は `in` / `not in` 演算子を使う(例: `商談フェーズ in ("提案中")`)
- 日付の絞り込みには TODAY() / FIRST_DAY() / LAST_DAY() などの日付関数を活用する
- 取得件数は原則 `limit 100` とし、大量取得が必要な場合のみ最大 `limit 500` まで増やす
- REFERENCE_TABLE 型・FILE 型のフィールドはクエリの絞り込み条件に使用できない

## 回答のルール

- kintoneから取得したデータをもとに、簡潔かつ具体的に回答する
- 数値(売上など)はカンマ区切りで読みやすく表示する
- 日付は「YYYY年MM月DD日」形式で表示する
- ユーザーの質問に必要なフィールドのみ抜粋して回答し、全フィールドを羅列しない
- データが0件の場合は「該当するデータが見つかりませんでした」と伝え、検索条件の見直しを提案する
- kintoneのデータ取得に失敗した場合はエラー内容をユーザーに伝え、再試行を促す


## やってはいけないこと

- ナレッジに記載されていないアプリIDやフィールドコードを推測で使用しない
- kintoneに存在しないデータを推測で回答しない
- ユーザーから明示的に指定されない限り、レコードの作成・更新・削除は行わない

ナレッジの例

アプリIDはご自身のkintoneの環境に合わせて編集が必要です。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
# kintone CRM ナレッジ
## アプリ定義・フィールド対応表・クエリ参照ガイド

## 1. アプリ一覧とアプリID

| アプリ名 | アプリID | 役割の概要 |
|---|---|---|
| 活動履歴アプリ | ※アプリIDを設定する | 電話・メール・商談の接触記録 |
| 顧客管理アプリ | ※アプリIDを設定する | 顧客企業のマスターデータ |
| 案件管理アプリ | ※アプリIDを設定する | 営業案件の進捗・売上管理 |
| 担当者管理アプリ | ※アプリIDを設定する | 顧客企業の連絡先担当者 |

## 2. アプリ間の関連構造

顧客管理アプリ
    │(顧客No で紐づく)
    ├── 担当者管理アプリ  ← 顧客企業の連絡先担当者
    ├── 案件管理アプリ    ← 営業案件の進捗・売上
    │       │(案件No で紐づく)
    └── 活動履歴アプリ   ← 電話・メール・商談の接触記録

### アプリ間の結合キー

| 結合関係 | 結合に使うフィールドコード |
|---|---|
| 顧客管理 ↔ 案件管理 | 顧客管理の `顧客No`(RECORD_NUMBER) = 案件管理の `顧客No_`(NUMBER) |
| 顧客管理 ↔ 担当者管理 | 顧客管理の `顧客No`(RECORD_NUMBER) = 担当者管理の `顧客No_`(NUMBER) |
| 顧客管理 ↔ 活動履歴 | 顧客管理の `顧客No`(RECORD_NUMBER) = 活動履歴の `顧客No`(NUMBER) |
| 案件管理 ↔ 活動履歴 | 案件管理の `案件No_`(RECORD_NUMBER) = 活動履歴の `案件No`(NUMBER) |

注意: 「顧客No」というフィールド名が複数アプリに存在しますが、フィールドコードが異なります。クエリには必ずフィールドコードを使用してください。

## 3. 顧客管理アプリ

### アプリの役割
顧客企業のマスターデータを管理します。会社の基本情報(住所・電話番号・業種)、請求情報(締め日・支払日)、顧客ランクを一元管理します。`顧客No`(RECORD_NUMBER)が全アプリを貫く顧客識別子です。

### フィールド対応表

| フィールド名 | フィールドコード | 型 | 説明・備考 |
|---|---|---|---|
| 顧客No. | `顧客No` | RECORD_NUMBER | 自動採番。他アプリとの結合キー |
| 会社名 | `会社名` | SINGLE_LINE_TEXT | 最大64文字。ユニーク制約あり |
| 都道府県 | `都道府県` | DROP_DOWN | 北海道〜沖縄の47都道府県 |
| 住所 | `住所` | SINGLE_LINE_TEXT | 都道府県以降の住所 |
| 建物名 | `建物名` | SINGLE_LINE_TEXT | ビル名・部屋番号など |
| 〒 | `郵便番号` | SINGLE_LINE_TEXT | 郵便番号 |
| 電話番号 | `電話番号` | LINK | 電話番号 |
| FAX | `FAX` | LINK | FAX番号 |
| Webサイト | `Webサイト` | LINK | 企業WebサイトURL |
| 業種 | `業種` | DROP_DOWN | 選択肢は下表参照 |
| 顧客ランク | `顧客ランク` | RADIO_BUTTON | A/B/C/D。デフォルトA |
| 締め日 | `締め日` | DROP_DOWN | 5日/10日/15日/20日/25日/末日 |
| 支払日 | `支払日` | DROP_DOWN | 翌月1日〜翌月末日 |
| 顧客情報メモ欄 | `顧客情報メモ欄` | MULTI_LINE_TEXT | 自由記述のメモ |
| 担当者一覧 | `担当者一覧` | REFERENCE_TABLE | クエリ・取得不可 |
| 案件一覧 | `案件一覧` | REFERENCE_TABLE | クエリ・取得不可 |
| 活動履歴一覧 | `活動履歴一覧` | REFERENCE_TABLE | クエリ・取得不可 |
| 更新者 | `更新者` | MODIFIER | 自動設定 |
| 作成者 | `作成者` | CREATOR | 自動設定 |
| 更新日時 | `更新日時` | UPDATED_TIME | 自動設定(ISO 8601) |
| 作成日時 | `作成日時` | CREATED_TIME | 自動設定(ISO 8601) |

### 選択肢の詳細

業種(`業種`): 農業 / 林業、狩猟業 / 漁業 / 鉱業 / 建設業 / 製造業 / 卸売業、小売業、飲食店 / 金融業、保険業 / 不動産業 / 運輸・通信業 / 電気・ガス・水道・熱供給業 / サービス業 / 公務 / その他

顧客ランク(`顧客ランク`): A(最重要)/ B(重要)/ C(通常)/ D(休眠・低優先)

### クエリ例

顧客ランクAの顧客:
顧客ランク = "A" order by 顧客No asc limit 100

東京都の製造業顧客:
都道府県 = "東京都" and 業種 = "製造業" order by 会社名 asc limit 100

会社名の部分検索:
会社名 like "商事" order by 顧客No asc limit 100

## 4. 案件管理アプリ

### アプリの役割
営業案件の進捗を管理します。商談フェーズ・確度・売上・次回アクションを管理し、前日9:00にアクション担当者へリマインド通知が送信されます。`案件No_`(RECORD_NUMBER)が活動履歴との結合キーです。

### フィールド対応表

| フィールド名 | フィールドコード | 型 | 説明・備考 |
|---|---|---|---|
| 案件No. | `案件No_` | RECORD_NUMBER | 自動採番。活動履歴との結合キー |
| 会社名 | `会社名` | SINGLE_LINE_TEXT | 顧客企業名(参照用) |
| 顧客No. | `顧客No_` | NUMBER | 顧客管理との結合キー(文字列で返る) |
| 主担当 | `主担当` | USER_SELECT | 案件の主担当者(社内ユーザー) |
| 案件名 | `案件名` | SINGLE_LINE_TEXT | 最大64文字。ユニーク制約あり |
| 商談フェーズ | `商談フェーズ` | DROP_DOWN | 選択肢は下表参照 |
| 受注予定日 | `受注予定日` | DATE | YYYY-MM-DD。未設定はnull |
| 初回商談日 | `初回商談日` | DATE | デフォルト:作成日 |
| 売上 | `売上` | NUMBER | 単位:円(文字列で返る) |
| 提案商品 | `提案商品` | DROP_DOWN | 商品A/B/C/その他 |
| 確度 | `確度` | DROP_DOWN | 選択肢は下表参照 |
| 次回アクション日 | `次回アクション日` | DATE | 前日9:00にリマインド通知あり |
| アクション内容 | `アクション内容` | SINGLE_LINE_TEXT | 次回アクションの内容 |
| アクション担当者 | `アクション担当者` | USER_SELECT | リマインド通知の宛先 |
| 詳細 | `詳細` | MULTI_LINE_TEXT | 案件の詳細メモ |
| 主担当組織 | `主担当組織` | ORGANIZATION_SELECT | 担当部署 |
| 契約書/申込書 | `契約書_申込書` | FILE | クエリ・取得不可 |
| 活動履歴 | `活動履歴` | REFERENCE_TABLE | クエリ・取得不可 |
| 同一顧客向け案件 | `同一顧客向け案件` | REFERENCE_TABLE | クエリ・取得不可 |
| 更新者 | `更新者` | MODIFIER | 自動設定 |
| 作成者 | `作成者` | CREATOR | 自動設定 |
| 更新日時 | `更新日時` | UPDATED_TIME | 自動設定(ISO 8601) |
| 作成日時 | `作成日時` | CREATED_TIME | 自動設定(ISO 8601) |

### 選択肢の詳細

商談フェーズ(`商談フェーズ`):

| 値 | 意味 |
|---|---|
| 商談予定 | まだ商談が始まっていない段階 |
| 提案中 | 提案書・見積を提出し顧客が検討中 |
| 内示 | 非公式の発注意思確認を受けた段階 |
| 受注 | 正式に受注が確定した案件 |
| 失注 | 受注に至らなかった案件 |
| 保留/中止 | 顧客都合で商談が停止・中止 |

確度(`確度`): 100%(確実)/ 80%(高)/ 60%(やや高)/ 40%(五分以下)/ 20%(低)

提案商品(`提案商品`): 商品A / 商品B / 商品C / その他

### クエリ例

提案中・内示の案件を受注予定日順:
商談フェーズ in ("提案中","内示") order by 受注予定日 asc limit 100

今月末までの高確度案件:
受注予定日 <= LAST_DAY(TODAY()) and 確度 in ("80%","100%") order by 受注予定日 asc limit 100

対応が必要な案件(次回アクション日が今日以前、進行中のみ):
次回アクション日 <= TODAY() and 商談フェーズ not in ("受注","失注","保留/中止") order by 次回アクション日 asc limit 100

特定顧客の案件:
顧客No_ = "123" order by 受注予定日 asc limit 100

## 5. 担当者管理アプリ

### アプリの役割
顧客企業の連絡先担当者を管理します。氏名・役職・連絡先・決裁権の有無を記録します。`お名前`・`お名前_フリガナ` は姓・名から自動計算されるフィールドです。

### フィールド対応表

| フィールド名 | フィールドコード | 型 | 説明・備考 |
|---|---|---|---|
| 担当者No. | `担当者No_` | RECORD_NUMBER | 自動採番 |
| 顧客名 | `顧客名` | SINGLE_LINE_TEXT | 所属企業名(参照用) |
| 顧客No. | `顧客No_` | NUMBER | 顧客管理との結合キー(文字列で返る) |
| 姓 | `姓` | SINGLE_LINE_TEXT | 担当者の姓 |
| 名 | `名` | SINGLE_LINE_TEXT | 担当者の名 |
| 姓(フリガナ) | `姓_フリガナ` | SINGLE_LINE_TEXT | 姓のフリガナ |
| 名(フリガナ) | `名_フリガナ` | SINGLE_LINE_TEXT | 名のフリガナ |
| お名前 | `お名前` | SINGLE_LINE_TEXT | 姓+名の自動計算(クエリ可) |
| お名前(フリガナ) | `お名前_フリガナ` | SINGLE_LINE_TEXT | フリガナの自動計算(クエリ可) |
| 部署 | `部署` | SINGLE_LINE_TEXT | 所属部署名 |
| 役職 | `役職` | SINGLE_LINE_TEXT | 役職名 |
| 電話番号 | `電話番号` | LINK | 直通電話番号 |
| 携帯番号 | `携帯番号` | LINK | 携帯電話番号 |
| メールアドレス | `メールアドレス` | LINK | メールアドレス |
| 決裁権 | `決裁権` | RADIO_BUTTON | あり/なし。デフォルト:なし |
| 備考 | `備考` | MULTI_LINE_TEXT | 自由記述の備考 |
| 添付ファイル(名刺等) | `添付ファイル_名刺等` | FILE | クエリ・取得不可 |
| 関連担当者情報 | `同一企業担当者` | REFERENCE_TABLE | クエリ・取得不可 |
| 更新者 | `更新者` | MODIFIER | 自動設定 |
| 作成者 | `作成者` | CREATOR | 自動設定 |
| 更新日時 | `更新日時` | UPDATED_TIME | 自動設定(ISO 8601) |
| 作成日時 | `作成日時` | CREATED_TIME | 自動設定(ISO 8601) |

### クエリ例

特定顧客の担当者一覧:
顧客No_ = "123" order by 担当者No_ asc limit 100

決裁権ありの担当者:
決裁権 = "あり" order by 顧客名 asc limit 100

役職で絞り込み:
役職 like "部長" order by 顧客名 asc limit 100

## 6. 活動履歴アプリ

### アプリの役割
営業担当者が顧客と接触したすべての活動を記録します。電話・メール・商談などの対応種別、対応日付、内容を管理します。`案件No`・`顧客No` の両方で他アプリと紐づいており、案件単位・顧客単位どちらでも参照できます。

### フィールド対応表

| フィールド名 | フィールドコード | 型 | 説明・備考 |
|---|---|---|---|
| 活動履歴No. | `レコード番号` | RECORD_NUMBER | 自動採番 |
| タイトル | `タイトル` | SINGLE_LINE_TEXT | 活動のタイトル・件名 |
| 対応日付 | `対応日付` | DATE | デフォルト:作成日 |
| 対応種別 | `対応種別` | DROP_DOWN | 選択肢は下表参照 |
| 対応者 | `対応者` | USER_SELECT | 活動を行った社内ユーザー |
| 所属組織 | `所属組織` | ORGANIZATION_SELECT | 対応者の所属部署 |
| 内容 | `内容` | MULTI_LINE_TEXT | 活動内容の詳細 |
| 会社名 | `会社名` | SINGLE_LINE_TEXT | 顧客企業名(参照用) |
| 案件名 | `案件名` | SINGLE_LINE_TEXT | 関連案件名(参照用) |
| 案件No. | `案件No` | NUMBER | 案件管理との結合キー(文字列で返る) |
| 顧客No. | `顧客No` | NUMBER | 顧客管理との結合キー(文字列で返る) |
| 添付ファイル | `添付ファイル` | FILE | クエリ・取得不可 |
| 関連活動履歴 | `関連活動履歴` | REFERENCE_TABLE | クエリ・取得不可 |
| 案件情報 | `案件情報` | REFERENCE_TABLE | クエリ・取得不可 |
| 更新者 | `更新者` | MODIFIER | 自動設定 |
| 作成者 | `作成者` | CREATOR | 自動設定 |
| 更新日時 | `更新日時` | UPDATED_TIME | 自動設定(ISO 8601) |
| 作成日時 | `作成日時` | CREATED_TIME | 自動設定(ISO 8601) |

### 選択肢の詳細

対応種別(`対応種別`):

| 値 | 意味 |
|---|---|
| 電話 | 電話での顧客対応 |
| メール | メールでのやり取り |
| 商談(初回) | 初回訪問・初回商談 |
| 商談(2回目以降) | 2回目以降の商談・打ち合わせ |
| その他 | 上記に該当しない活動 |

### クエリ例

特定案件の活動履歴(新しい順):
案件No = "456" order by 対応日付 desc limit 100

特定顧客の全活動履歴:
顧客No = "123" order by 対応日付 desc limit 100

今月の商談活動:
対応種別 in ("商談(初回)","商談(2回目以降)") and 対応日付 >= FIRST_DAY(TODAY()) order by 対応日付 desc limit 100

## 7. レスポンスのデータ構造

kintone REST API が返す JSON の構造です。

### 基本構造

records配列の各要素は以下の形式で返ります:

フィールドコード: { "type": "フィールド型", "value": 値 }

例:
案件名: { "type": "SINGLE_LINE_TEXT", "value": "〇〇システム導入案件" }
商談フェーズ: { "type": "DROP_DOWN", "value": "提案中" }
受注予定日: { "type": "DATE", "value": "2025-06-30" }
売上: { "type": "NUMBER", "value": "1500000" }
主担当: { "type": "USER_SELECT", "value": [{ "code": "yamamoto", "name": "山本 大樹" }] }
更新日時: { "type": "UPDATED_TIME", "value": "2025-04-28T10:00:00Z" }
次回アクション日: { "type": "DATE", "value": null }

totalCountはtotalCount=trueを指定した場合のみ値が返り、それ以外はnullです。

### 型ごとのvalue形式

| フィールド型 | valueの形式 | 注意点 |
|---|---|---|
| SINGLE_LINE_TEXT / MULTI_LINE_TEXT | 文字列 | 未入力は空文字 "" |
| DROP_DOWN / RADIO_BUTTON | 文字列 | 未選択はnull |
| NUMBER / RECORD_NUMBER | 文字列(数値ではない) | 比較・計算時は変換が必要 |
| DATE | "YYYY-MM-DD"形式の文字列 | 未設定はnull |
| UPDATED_TIME / CREATED_TIME | ISO 8601形式(例: "2025-04-28T10:00:00Z") | |
| USER_SELECT / ORGANIZATION_SELECT | [{ "code": "...", "name": "..." }]の配列 | 未選択は空配列 [] |
| MODIFIER / CREATOR | { "code": "...", "name": "..." }のオブジェクト | 配列ではない |
| LINK | 文字列 | |
| FILE | [{ "fileKey", "name", "contentType", "size" }]の配列 | クエリ・取得不可 |
| REFERENCE_TABLE | レスポンスに含まれない | クエリも不可 |

ツールの例

appとqueryの入力を設定します。

動作確認

次のプロンプトで動作を確認しました。

実行したプロンプト例①
1
2025年10月時点で、今月末までに受注予定の案件で、確度が高いものを教えて
実行結果

案件情報アプリから受注予定月が2025年10月のレコードを取得し、案件名・会社名などを一覧形式で返してくれました。

実行したプロンプト例②
1
確度80%以上の案件と、それぞれの直近の活動履歴を教えて
実行結果

案件情報と活動履歴を順番に取得し、それぞれを紐付けて回答しました。
複数に分けて取得した情報を統合できることを確認できました。

うまくいかなかった動作

質問によっては、Copilotがクエリを正しく組み立てられないことがあります。

1
商談フェーズが『提案中』のうち、2回目商談を行っていない案件はありますか

上記のプロンプトに対して、Copilotは次のクエリを生成しました。

1
対応種別 in ("商談(2回目以降)") limit 500

活動履歴アプリの「対応種別」フィールドには「商談(2回目以降)」(全角括弧)という選択肢が定義されています。
Copilotが括弧を半角に変換したため、クエリエラーが発生しました。
ナレッジに選択肢の値を正確に記載することで、こうしたエラーを減らせます。

おわりに

kintoneのSFA(営業支援)パックのアプリに対して、Microsoft 365 Copilotのカスタムエージェントから自然言語で問い合わせる方法を紹介しました。
kintoneのデータ活用をさらに進められる可能性があるので、ぜひ参考にしてみてください。

関連記事

information

このTipsは、2026年4月版kintoneで動作を確認しています。