> ## Documentation Index
> Fetch the complete documentation index at: https://developers.hubspot.jp/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# ビデオ会議拡張機能

export const postmanIcon = <svg xmlns="http://www.w3.org/2000/svg" width={25} height={25} preserveAspectRatio="xMidYMid" viewBox="0 0 256 256">
    <path fill="#FF6C37" d="M254.953 144.253c8.959-70.131-40.569-134.248-110.572-143.206C74.378-7.912 10.005 41.616 1.047 111.619c-8.959 70.003 40.569 134.248 110.572 143.334 70.131 8.959 134.248-40.569 143.334-110.7Z" />
    <path fill="#FFF" d="m174.2 82.184-54.007 54.007-15.229-15.23c53.11-53.11 58.358-48.503 69.236-38.777Z" />
    <path fill="#FF6C37" d="M120.193 137.47c-.384 0-.64-.128-.895-.384l-15.358-15.229a1.237 1.237 0 0 1 0-1.792c54.007-54.006 59.638-48.887 71.028-38.649.255.256.383.512.383.896s-.128.64-.383.896l-54.007 53.878c-.128.256-.512.384-.768.384Zm-13.437-16.509 13.437 13.438 52.087-52.087c-9.47-8.446-15.87-11.006-65.524 38.65Z" />
    <path fill="#FFF" d="m135.679 151.676-14.718-14.718 54.007-54.006c14.46 14.59-7.167 38.265-39.29 68.724Z" />
    <path fill="#FF6C37" d="M135.679 152.956c-.384 0-.64-.128-.896-.384l-14.718-14.718c-.256-.256-.256-.512-.256-.896s.128-.64.384-.895L174.2 82.056a1.237 1.237 0 0 1 1.791 0 15.58 15.58 0 0 1 4.991 11.902c-.256 14.206-16.38 32.25-44.28 58.614-.383.256-.767.384-1.023.384Zm-12.926-15.998c8.19 8.319 11.646 11.646 12.926 12.926 21.5-20.476 42.36-41.464 42.488-55.926.128-3.327-1.152-6.655-3.327-9.214l-52.087 52.214Z" />
    <path fill="#FFF" d="m105.22 121.345 10.878 10.878c.256.256.256.512 0 .768-.128.128-.128.128-.256.128l-22.524 4.863c-1.152.128-2.175-.64-2.431-1.791-.128-.64.128-1.28.512-1.664l13.053-13.054c.256-.256.64-.384.768-.128Z" />
    <path fill="#FF6C37" d="M92.934 139.262c-1.92 0-3.327-1.536-3.327-3.455 0-.896.384-1.792 1.024-2.432l13.053-13.054c.768-.64 1.792-.64 2.56 0l10.878 10.878c.768.64.768 1.792 0 2.56-.256.256-.512.384-.896.512l-22.524 4.863c-.256 0-.512.128-.768.128Zm11.902-16.51-12.542 12.543c-.256.256-.383.64-.128 1.024.128.383.512.511.896.383l21.116-4.607-9.342-9.342Z" />
    <path fill="#FFF" d="M202.739 52.238c-8.191-7.935-21.373-7.679-29.307.64-7.935 8.318-7.679 21.372.64 29.306A20.678 20.678 0 0 0 199.155 85l-14.59-14.59 18.174-18.172Z" />
    <path fill="#FF6C37" d="M188.405 89.223c-12.158 0-22.012-9.854-22.012-22.012 0-12.158 9.854-22.012 22.012-22.012 5.631 0 11.134 2.176 15.23 6.143.255.256.383.512.383.896s-.128.64-.384.895L186.357 70.41l13.566 13.566c.512.512.512 1.28 0 1.792l-.256.256c-3.327 2.047-7.295 3.199-11.262 3.199Zm0-41.337c-10.75 0-19.452 8.703-19.324 19.453 0 10.75 8.702 19.452 19.452 19.324 2.944 0 5.887-.64 8.575-2.047l-13.438-13.31c-.256-.256-.384-.512-.384-.896s.128-.64.384-.895l17.149-17.15c-3.456-2.943-7.807-4.479-12.414-4.479Z" />
    <path fill="#FFF" d="m203.122 52.622-.255-.256-18.301 18.044 14.461 14.462c1.408-.896 2.816-1.92 3.967-3.072a20.51 20.51 0 0 0 .128-29.178Z" />
    <path fill="#FF6C37" d="M199.155 86.28c-.384 0-.64-.128-.896-.384l-14.589-14.59c-.256-.256-.384-.512-.384-.896s.128-.64.384-.895l18.173-18.173a1.237 1.237 0 0 1 1.791 0l.384.256c8.575 8.574 8.575 22.396.128 31.098-1.28 1.28-2.687 2.432-4.223 3.328-.384.128-.64.256-.768.256Zm-12.798-15.87 12.926 12.926c1.024-.64 2.048-1.536 2.816-2.304 7.294-7.294 7.678-19.196.64-26.875L186.357 70.41Z" />
    <path fill="#FFF" d="M176.375 84.488a7.879 7.879 0 0 0-11.134 0l-48.247 48.247 8.063 8.063 51.062-44.792c3.328-2.816 3.584-7.807.768-11.134-.256-.128-.384-.256-.512-.384Z" />
    <path fill="#FF6C37" d="M124.929 142.077c-.384 0-.64-.128-.896-.383l-8.063-8.063a1.237 1.237 0 0 1 0-1.792l48.247-48.247a9.115 9.115 0 0 1 12.926 0 9.115 9.115 0 0 1 0 12.926l-.384.384-51.063 44.792c-.128.255-.384.383-.767.383Zm-6.143-9.342 6.27 6.271 50.167-44.024c2.816-2.304 3.072-6.527.768-9.342-2.303-2.816-6.526-3.072-9.342-.768-.128.128-.256.256-.512.384l-47.351 47.48Z" />
    <path fill="#FFF" d="M80.009 187.637c-.512.256-.768.768-.64 1.28l2.175 9.214c.512 1.28-.256 2.816-1.663 3.2-1.024.384-2.176 0-2.816-.768l-14.077-13.95 45.943-45.943 15.87.256 10.75 10.75c-2.56 2.175-18.045 17.149-55.542 35.961Z" />
    <path fill="#FF6C37" d="M78.985 202.61c-1.024 0-2.048-.383-2.688-1.151l-13.95-13.95c-.255-.256-.383-.512-.383-.896 0-.383.128-.64.384-.895l45.944-45.944c.256-.256.64-.384.895-.384l15.87.256c.383 0 .64.128.895.384l10.75 10.75c.256.256.384.64.384 1.024s-.128.64-.512.896l-.895.767c-13.566 11.902-31.995 23.804-54.902 35.194l2.175 9.086c.384 1.664-.384 3.456-1.92 4.352-.767.384-1.407.512-2.047.512Zm-14.078-15.997 13.182 13.054c.384.64 1.152.896 1.792.512.64-.384.896-1.152.512-1.792l-2.176-9.214c-.256-1.152.256-2.176 1.28-2.688 22.652-11.39 40.952-23.163 54.39-34.81l-9.47-9.47-14.718-.256-44.792 44.664Z" />
    <path fill="#FFF" d="m52.11 197.62 11.006-11.007 16.38 16.381-26.107-1.791c-1.151-.128-1.92-1.152-1.791-2.304 0-.512.128-1.024.512-1.28Z" />
    <path fill="#FF6C37" d="m79.497 204.146-26.236-1.791c-1.92-.128-3.199-1.792-3.071-3.712.128-.768.384-1.535 1.024-2.047L62.22 185.59a1.237 1.237 0 0 1 1.792 0l16.38 16.38c.385.385.512.897.257 1.408-.256.512-.64.768-1.152.768Zm-16.381-15.74-10.11 10.11c-.384.255-.384.895 0 1.151.127.128.255.256.511.256l22.652 1.536-13.053-13.054ZM104.452 146.557c-.768 0-1.28-.64-1.28-1.28 0-.384.128-.64.384-.896l12.414-12.414a1.237 1.237 0 0 1 1.792 0l8.062 8.063c.384.384.512.768.384 1.28-.128.384-.512.767-1.023.895l-20.477 4.352h-.256Zm12.414-11.902-8.446 8.446 13.821-2.943-5.375-5.503Z" />
    <path fill="#FFF" d="m124.8 140.926-14.077 3.071c-1.024.256-2.048-.384-2.303-1.408-.128-.64 0-1.28.511-1.791l7.807-7.807 8.063 7.935Z" />
    <path fill="#FF6C37" d="M110.467 145.277a3.168 3.168 0 0 1-3.2-3.2c0-.895.385-1.663.897-2.303l7.806-7.807a1.237 1.237 0 0 1 1.792 0l8.062 8.063c.384.384.512.768.384 1.28-.128.384-.512.767-1.023.895l-14.078 3.072h-.64Zm6.399-10.622-6.91 6.91c-.257.257-.257.512-.129.768s.384.384.768.384l11.774-2.56-5.503-5.502ZM203.25 64.907c-.256-.767-1.151-1.151-1.92-.895-.767.255-1.151 1.151-.895 1.92 0 .127.128.255.128.383.768 1.536.512 3.455-.512 4.863-.512.64-.384 1.536.128 2.048.64.512 1.536.384 2.048-.256 1.92-2.432 2.303-5.503 1.023-8.063Z" />
  </svg>;

<Card title="Run in Postman" href="https://app.getpostman.com/run-collection/26126890-8f5582df-b553-403f-b001-6fe4cbafe4e4" icon={postmanIcon} horizontal={true} />

<DndSection>
  <DndModule numCols={10}>
    <div>
      # ビデオ会議拡張機能

      <RelatedApiLink />
    </div>
  </DndModule>

  <DndModule numCols={2} />
</DndSection>

ビデオ会議APIを使用すると、[Google Meet](https://knowledge.hubspot.com/integrations/use-hubspots-integration-with-google-meet)連携や[Zoom](https://knowledge.hubspot.com/integrations/use-hubspots-integration-with-zoom)連携と同じように、ユーザーが[ビデオ会議を作成する](https://knowledge.hubspot.com/meetings-tool/create-and-edit-scheduling-pages#overview)ときにビデオ会議のリンクを追加するための[公開アプリ](/apps/legacy-apps/public-apps/overview)を構成できます。このAPIを使用するには、次の作業が必要です。

1.ビデオ会議拡張機能Webhookを使用した公開アプリをセットアップします。このアプリに、HubSpotがミーティングの作成、更新、削除イベントが発生した時点でユーザーに通知するために使用するURIを設定します。2.ミーティングの作成Webhookと更新Webhookを処理するカスタムのバックエンドをセットアップします。3. 必要に応じて、ユーザーID検証Webhookを処理するようにバックエンドをセットアップします。

ビデオ会議APIに送信する全てのリクエストには、開発者アカウントの開発者APIキーを使用した認証が必要になります。このキーを`hapikey`クエリーパラメーターに格納して、リクエストURLの末尾に追加します。開発者アカウントで[開発者APIキーを確認](/apps/legacy-apps/public-apps/overview#developer-api-keys)できます。

## 前提条件

手順を開始する前に、[開発者アカウント](/getting-started/account-types#developer-accounts)を作成し、そのアカウント内で[公開アプリ](/apps/legacy-apps/public-apps/overview)を作成します。

## Webhook URLを設定する

まず、HubSpotがミーティングの作成、更新、削除イベントが発生した時点で送信する通知の宛先を把握できるよう、Webhook URLを設定します。

それには、`PUT`リクエストを`/crm/v3/extensions/videoconferencing/settings/{appId}?hapikey=YOUR_HUBSPOT_DEVELOPER_API_KEY`に送信します。

リクエスト本文に`createMeetingUrl`フィールドを含め、このフィールドに、HubSpotがミーティング作成Webhookのペイロードの送信先とするURLを設定する必要があります。必要に応じて、他のWebhook URLも追加できます。これらの値は、同じリクエストURLを使用して後で更新できます。

```json theme={null}
// Example request

{
  "createMeetingUrl": "https://example.com/create-meeting",
  "updateMeetingUrl": "https://example.com/update-meeting",
  "deleteMeetingUrl": "https://example.com/delete-meeting"
}
```

| フィールド              | 型   | 説明                                                                                                           |
| ------------------ | --- | ------------------------------------------------------------------------------------------------------------ |
| `createMeetingUrl` | 文字列 | 新しいミーティングが作成されたときにHubSpotが通知するURL。このフィールドに、ミーティングの詳細を含むJSONペイロードが格納されます。URLでは、`https`プロトコルを使用する必要があります。      |
| `updateMeetingUrl` | 文字列 | 既存のミーティングが更新されたときにHubSpotが通知するURL。このフィールドに、更新されたミーティングの詳細を含むJSONペイロードが格納されます。URLでは、`https`プロトコルを使用する必要があります。 |
| `deleteMeetingUrl` | 文字列 | 既存のミーティングが削除されたときにHubSpotが通知するURL。このフィールドに、削除されたミーティングの`conferenceId`が格納されます。URLでは、`https`プロトコルを使用する必要があります。 |
| `userVerifyUrl`    | 文字列 | HubSpotが外部ビデオ会議システム内に当該ユーザーが存在することを確認するために使用するURL。                                                           |

**レスポンスの例：**

```json theme={null}
// Example 200 response
{
  "createMeetingUrl": "https://example.com/create-meeting",
  "updateMeetingUrl": "https://example.com/update-meeting",
  "deleteMeetingUrl": "https://example.com/delete-meeting"
}
```

### Webhook URLを取得する

既存のアプリ用に構成されたWebhook URLを取得するには、`GET`リクエストを`/crm/v3/extensions/videoconferencing/settings/{appId}`に送信します。

返されるレスポンスに、現在構成されているWebhook URLが含まれます。

```json theme={null}
// Example 200 response
{
  "createMeetingUrl": "https://example.com/create-meeting",
  "updateMeetingUrl": "https://example.com/update- meeting",
  "deleteMeetingUrl": "https://example.com/delete-meeting",
  "userVerifyUrl": "https://example.com/user-verify"
}
```

## Webhookペイロード

Webhook URLを設定すると、ミーティングの作成、更新、または削除イベントの発生時に、HubSpotがこれらのURLにペイロードを送信するようになります。

<Info>
  HubSpotから送信される全てのWebhookには、貴社のアプリシークレットを使用したHMACで署名が付けられます。詳細については、[Webhookのセキュリティーに関するドキュメント](/api-reference/webhooks-webhooks-v3/guide#security)をご確認ください（このページの残りの部分は、これらのビデオ会議拡張機能Webhookには当てはまりません）。
</Info>

### ミーティング作成Webhook

ミーティングが作成されると、HubSpotは`createMeetingUrl`フィールドで指定されたURLにリクエストを送信します。リクエストのペイロードは、HubSpotアカウントに関する情報、関連するHubSpotユーザー、ミーティングの詳細で構成されます。

```json theme={null}
// Example payload
{
  "portalId": 123123,
  "userId": 123,
  "userEmail": "test.user@example.com",
  "topic": "A Test Meeting",
  "source": "MEETINGS",
  "startTime": 1534197600000,
  "endTime": 1534201200000
}
```

| フィールド       | 型   | 説明                                                                                                                                                                                                                                                   |
| ----------- | --- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `portalId`  | 数値  | リクエストの送信元HubSpotアカウントのID。                                                                                                                                                                                                                            |
| `userId`    | 数値  | ミーティングに割り当てられているHubSpotユーザーのID。                                                                                                                                                                                                                      |
| `userEmail` | 文字列 | ミーティングに割り当てられているHubSpotユーザーのEメールアドレス。                                                                                                                                                                                                                |
| `topic`     | 文字列 | ミーティングのタイトル。                                                                                                                                                                                                                                         |
| `source`    | 文字列 | ミーティングが作成された場所を示します。有効な値は次のとおりです。<ul><li>`MEETINGS`：ミーティングは[ミーティングスケジュール設定ページ](https://knowledge.hubspot.com/meetings-tool/create-and-edit-scheduling-pages#create-scheduling-pages)で作成されました。</li><li>`MANUAL`：ミーティングは手動でCRMレコードから作成されました。</li></ul> |
| `startTime` | 数値  | ミーティングの開始時刻（エポックミリ秒）。                                                                                                                                                                                                                                |
| `endTime`   | 数値  | ミーティングの終了時刻（エポックミリ秒）。                                                                                                                                                                                                                                |

このWebhookを正常に処理するには、開発者がこのミーティング用のビデオ会議を生成（または、既存の会議にリンク）し、その会議に関する情報をレスポンスとして返す必要があります。このレスポンス内に想定されるフィールドは次のとおりです。

* `conferenceId`：このイベントで会議に関連付けられた固有のID。
  このIDはシステム全体で重複しない値にする必要があります。HubSpotはこのIDを
  更新Webhookで返します。
* `conferenceUrl:`ユーザーが会議に参加するために使用するURL。
* `conferenceDetails`：招待に関するプレーンテキストの情報。ここで、
  イベントの出席者がこのビデオ会議にアクセスする方法が
  説明されます。このテキスト内では改行が維持されますが、改行以外の書式はサポートされません。

例えば、次のようなレスポンスになります。

```json theme={null}
//example response
{
  "conferenceId": "some-unique-id",
  "conferenceUrl": "https://example.com/join",
  "conferenceDetails": "Click here to join: https://example.com/join"
}
```

### ミーティング更新Webhook

`updateMeetingUrl`を指定した場合、HubSpotはミーティング関連の詳細が変更されるたびに、このURIにリクエストを送信します。ビデオ会議のトピックまたは開催時間を最新の状態に維持する必要がある場合は、この通知が欠かせません。リクエストのペイロードは、HubSpotアカウントに関する情報、関連するHubSpotユーザー、ミーティングの詳細で構成されます。

```json theme={null}
//example request
{
  "conferenceId": "some-unique-id",
  "userId": 123,
  "userEmail": "test.user@example.com",
  "portalId": 123123,
  "topic": "A Test Meeting (updated)",
  "startTime": 1534197600000,
  "endTime": 1534201200000
}
```

| フィールド          | 型   | 説明                                                                       |
| -------------- | --- | ------------------------------------------------------------------------ |
| `conferenceId` | 文字列 | ミーティング作成Webhookへのレスポンスとして、貴社の連携によって提供される会議の固有ID。                         |
| `userId`       | 数値  | ミーティングに割り当てられているHubSpotユーザーのID。値は常に、ミーティング作成ペイロードに含まれるユーザーの値と同じです。       |
| `userEmail`    | 文字列 | ミーティングに割り当てられているHubSpotユーザーのEメールアドレス。値は常に、ミーティング作成ペイロードに含まれるユーザーの値と同じです。 |
| `portalId`     | 数値  | リクエストの送信元HubSpotアカウントのID。                                                |
| `topic`        | 文字列 | ミーティングのタイトル。                                                             |
| `startTime`    | 数値  | ミーティングの開始時刻（エポックミリ秒）。                                                    |
| `endTime`      | 数値  | ミーティングの終了時刻（エポックミリ秒）。                                                    |

これらのリクエストに応答する際のレスポンスに本文は必要ありません。必要なのは、このWebhookが正常に受信されたことをHubSpotに通知する`200`または`204`レスポンスコードのみです。

### ミーティング削除Webhook

HubSpotでミーティングが削除されると、`deleteMeetingUrl`フィールドで指定されたURLにリクエストが送信されます。ペイロードには、削除されたミーティングの`conferenceId`が含まれます。

```json theme={null}
// Example payload
{
  "conferenceId": "some-unique-id"
}
```

これらのリクエストに応答する際のレスポンスに本文は必要ありません。必要なのは、このWebhookが正常に受信されたことをHubSpotに通知する`200`または`204`レスポンスコードのみです。

### ユーザー確認Webhook

HubSpotのシステムは常に貴社のシステムに対し、ユーザーのHubSpot上のユーザーIDとHubSpotアカウントのEメールアドレスを通知します。HubSpotのシステム内のユーザーが、貴社のシステム上で別のEメールアドレスまたはIDとして存在する可能性があります。

HubSpotは、ビデオ会議リンクを作成、更新、削除するために貴社のシステムを呼び出す前に、アプリの設定で`userVerifyUrl`フィールドを確認します。このフィールドにURLが設定されている場合、HubSpotはネイティブユーザーIDを取得するために、そのURLを呼び出します。取得したIDは、以降のリクエストでユーザーのEメールアドレスとして送信されます。ユーザー確認用のURLが設定されていない場合、HubSpotは常に、ユーザーのIDは確認済みであると見なします。

この設定は任意であり、必要であるかどうかは自由に判断できます。システム内でユーザーマッピングを維持する必要があれば、呼び出しごとにHubSpotユーザーのIDまたはEメールアドレスを内部ユーザーIDにマッピングすることも可能です。

このWebhookのペイロードには、HubSpotアカウントIDとユーザーのEメールアドレスが含まれます。

```json theme={null}
//example request
{
  "portalId": 123123,
  "userEmail": "test.user@example.com"
}
```

`200`レスポンスまたは任意のエラーコード（`404`が適切です）を返すことができます。`200`を返す場合は、Eメールアドレスとして使用できる新しいIDを格納したペイロードを返してください。

```json theme={null}
//example response
{
  "id": "any-string-id"
}
```
