💬

Microsoft 365 Copilot チャット API を試してみる

に公開

はじめに

Microsoft 365 Copilot API の取得 API と検索 API については以前の記事でも紹介しました。

https://zenn.dev/karamem0/articles/2025_11_25_130000

今回は以前の記事では触れられなかったチャット API を試してみます。

チャット API について

取得 API、検索 API、およびチャット API について整理すると以下の図のようになります。

名前 説明
取得 API Microsoft 365 のセマンティック インデックスからデータを取得します。
検索 API Microsoft 365 Copilot 検索と同様のエクスペリエンスを提供します。
チャット API Microsoft 365 Copilot チャットと同様のエクスペリエンスを提供します。

チャット API を使用して Microsoft 365 Copilot チャットをカスタム アプリケーションに統合できます。このとき、追加のコンテキストを指示できるため、統合されたカスタム エージェントとして動作させることもできます。Copilot Studio を使っても似たようなことはできますが、チャット API ではカスタム アプリケーションとのシームレスな連携を可能にします。具体例としては Microsoft 365 Developer Blog にある Miro のデモが参考になります。Miro のデモでは Microsoft 365 のデータを使ってキャンバスに付箋やフローを自動的に作成しています。

https://devblogs.microsoft.com/microsoft365dev/microsoft-365-copilot-apis-whats-new-and-whats-next/?WT.mc_id=M365-MVP-5002941

注意点として、現時点ではチャット API は非常に多くのアクセス許可を要求します。

  • Sites.Read.All
  • Mail.Read
  • People.Read.All
  • OnlineMeetingTranscript.Read.All
  • Chat.Read
  • ChannelMessage.Read.All
  • ExternalItem.Read.All

取得 API と検索 API が要求するアクセス許可は Files.Read.All および Sites.Read.All なので比べるとその多さが一目瞭然です。この点については、今後 Agent 365 によりエージェントに対するアクセス許可が付与されるようになれば、改善する可能性があります。

チャット API の実行

Microsoft 365 Copilot Chat とチャットするためには最初に会話を作成します。

POST https://graph.microsoft.com/beta/copilot/conversations
Content-Type: application/json

{}

応答として会話 ID が返ってきます。

{
  "@odata.context": "https://graph.microsoft.com/beta/$metadata#copilot/conversations/$entity",
  "id": "90e9484c-...",
  "createdDateTime": "2025-12-22T05:38:51.0939192Z",
  "displayName": "",
  "state": "active",
  "turnCount": 0
}

会話 ID に対してチャット メッセージを送信します。ユーザーの位置情報を指定するための locationHint は必須です。locationHint はタイムゾーンのほか国名や座標を指定できます。

POST https://graph.microsoft.com/beta/copilot/conversations/90e9484c-...

{
  "message": {
    "text": "今年のふるさと納税の注意するべきポイントを教えてください。"
  },
  "locationHint": {
    "timeZone": "Asia/Tokyo"
  }
}

結果として Microsoft 365 Copilot の回答を得られます。メッセージだけではなく参照にしたドキュメントや URL も取得できます。続けてメッセージを送ることで会話を続けることができますが、OpenAI の API とは異なり、最新の会話のみのやり取りとなることに注意してください。現状、過去の会話履歴を取得する方法は提供されていないようです。また、ここでの会話が Microsoft 365 Copilot の会話履歴に表示されることはありません。

{
  "@odata.context": "https://graph.microsoft.com/beta/$metadata#microsoft.graph.copilotConversation",
  "id": "90e9484c-a497-4b69-83bd-fd30eccce683",
  "createdDateTime": "2025-12-22T05:45:08.8612949Z",
  "displayName": "今年のふるさと納税の注意するべきポイントを教えてください。",
  "state": "active",
  "turnCount": 1,
  "messages": [
    {
      "@odata.type": "#microsoft.graph.copilotConversationResponseMessage",
      "id": "b3ce4c4a-2caf-f682-2741-b651e3ccc62a",
      "text": "今年のふるさと納税の注意するべきポイントを教えてください。",
      "createdDateTime": "2025-12-22T05:45:08.8612949Z",
      "adaptiveCards": [],
      "attributions": [],
      "sensitivityLabel": {
        "sensitivityLabelId": null,
        "displayName": null,
        "tooltip": null,
        "priority": null,
        "color": null
      }
    },
    {
      "@odata.type": "#microsoft.graph.copilotConversationResponseMessage",
      "id": "41f01506-c3c4-4703-9d68-906397fe28ff",
      "text": "ご質問は「今年(2025年)のふるさと納税で注意すべきポイント」ですね。...",
      "createdDateTime": "2025-12-22T05:45:14.6729778Z",
      "adaptiveCards": [],
      "attributions": [
        {
          "attributionType": "citation",
          "providerDisplayName": "ふるさと納税サイト",
          "attributionSource": "model",
          "seeMoreWebUrl": "https://{{tenant-name}}.sharepoint.com/sites/furusato?web=1",
          "imageWebUrl": "",
          "imageFavIcon": "",
          "imageWidth": 0,
          "imageHeight": 0
        },
        ...
      ],
      "sensitivityLabel": {
        "sensitivityLabelId": null,
        "displayName": null,
        "tooltip": null,
        "priority": null,
        "color": null
      }
    }
  ]
}

おわりに

Microsoft 365 Copilot チャット API は、現時点ではパブリック プレビューです。要求されるアクセス許可が多いことや、会話履歴の取得ができないことなど、実運用では障害となるポイントがいくつかあります。一方で、Microsoft 365 Copilot と同等のチャット エクスペリエンスを任意のアプリケーションに直接組み込めるという意味では、取得 API や検索 API とも異なる選択肢になります。今後の機能強化や改善に期待したいところです。

Discussion