Webhookサービス連携
2025年9月25日のプラン改定後、本機能はFreeプランではご利用いただけなくなります。プラン改定についてはこちらをご覧ください。
はじめに
💡Webhookサービス連携はSpirで特定のイベント発生時に、指定したURLにPOSTリクエストします
-
使用例
- Zapier、IFTTT等のアプリケーションと連携する
APIを通じて各サービスを連携させることが可能です
- 例:日程確定時にSalesforceと連携する
Spirでは日程が確定した際、デフォルトの通知は主催者・参加者へのメール通知のみですが、webhookを活用することで外部のサービスと連携することが可能です
- 例:日程確定時にSalesforceと連携する
設定
イベントタイプ
すべての空き時間リンクがwebhookの送信対象になります(個別に設定することはできません)Webhook URLの準備
Webhookサービス連携には、Spirからのリクエストを受信できるhttpsエンドポイント(以下、WebhookURL)を準備する必要がありますWebhookURLは、以下の点にご注意ください- HTTPS通信
- localhostのURLは不可
- IPアドレスは使用不可
有効なWebhookURLの例- https://example.com/callback-confirmed
リクエスト
SpirはPOSTメソッドでリクエストします リクエストボディはJSONオブジェクトに基づいており、イベントタイプによって異なりますレスポンス
💡設定したWebhookURLが、Spirからリクエストを受信したとき、ステータスコード200のレスポンスを返却してください以下の場合、Webhookの送受信に失敗したと見なされます- WebhookURLがステータスコード3xx、4xxまたは5xxのHTTPレスポンスを返却した場合
- システムへの接続がタイムアウトした場合(リクエストは30秒でタイムアウト)
失敗した場合- 10秒ごとに4回リトライします
- 最後のリクエストが失敗した場合エラーの通知をします
エラーの通知内容
- 通知方法 メール通知
- 通知先 チームの管理者全員
- メールタイトル
【Spir】Webhookの送信に失敗しました。
- メール通知内容
空き時間リンクの管理用タイトルWebhookURL送信時刻HTTPレスポンスなどの送信ログ(送信ログにつきましては添付ファイルに記載されます。)

リクエストボディ
リクエストボディはJSONオブジェクトに基づいており、イベントタイプによって異なります日程確定 (event.confirmed)
Response Body
Property名 データ型 必須 説明 webhookEventNamestring true Webhookのイベントタイプ webhookEventIdstring ture Webhookのイベントごとに一意のid。 payloadObject true Payload Object
Property名 データ型 必須 説明 originalUrlstring true 確定に利用された空き時間リンク。空き時間リンクを一意に特定するのに利用できます。 privateTitlestring true 確定に利用された空き時間リンクの管理用タイトル。 confirmedAtstring true 日程調整を確定した日時。(確定した予定の日時ではありません。) titlestring true 予定のタイトル。 startDateTimestring true 予定の開始日時。 endDateTimestring true 予定の終了日時。 timeZonestring true 予定の確定者のタイムゾーン。 organizerObject true 予定の主催者。(空き時間リンクに設定されている主催者) attendeesFromOrganizerSideArray true 予定の主催者側の同席者。 inviteeObject true 予定の確定者。(空き時間リンクを受け取って日程を選んだ人) attendeesFromInviteeSideArray true 予定の確定者側の同席者。 onlineMeetingObject true 予定のWeb会議。 formAnswersArray true 空き時間リンクに設定されているフォームの回答。 roomsArray true 予定の会議室。 utmParametersObject false UTMパラメータ UTMパラメータが付与された空き時間リンクで確定された場合、Payloadに値が含まれます。 sourceObject false 日程確定した際の環境に関する情報を格納 Payload.source Object
Property名 データ型 必須 説明 urlObject false URLに関する情報を格納 Payload.source.url Object
Property名 データ型 必須 説明 queryString true 確定に利用された空き時間リンクのクエリパラメータ。最大で2000文字まで。 Json Sample
{
"webhookEventName": "event.confirmed",
"webhookEventId": "tp7mPJVl0oOULa9hOIM80",
"payload": {
"originalUrl": "https://app.spirinc.com/t/xxx/as/xxx/confirm",
"privateTitle": "セールス商談用URL",
"confirmedAt": "2023-07-01T12:00:00Z",
"startDateTime": "2023-07-05T12:00:00Z",
"endDateTime": "2023-07-05T13:00:00Z",
"timeZone": "Asia/Tokyo",
"title": "〇〇商談",
"organizer": {
"name": "伊藤 ひろき",
"email": "hiroki.ito@example.com"
},
"attendeesFromOrganizerSide": [
{
"name": "山田 剛",
"email": "go.yamadaa@example.com"
}
],
"invitee": {
"name": "中島 昌平",
"email": "syohei.nakazima@example.com",
"language": "JA"
},
"attendeesFromInviteeSide": [
{
"name": "澤田 充",
"email": "mitsuru.sawada@example.com"
}
],
"onlineMeeting": {
"type": "zoom",
"url": "https://zoom~",
"password": "abcd1234"
},
"formAnswers": [
{
"questionId": "xxx1",
"question": "name",
"answer": "中島 昌平"
},
{
"questionId": "xxx2",
"question": "email",
"answer": "syohei.nakazima@example.com"
},
{
"questionId": "xxx3",
"question": "会社名",
"answer": "株式会社Acme"
},
{
"questionId": "xxx4",
"question": "電話番号",
"answer": "08012345678"
}
],
"rooms": [
{
"name": "会議室1",
"email": "meeting-room-1@example.com"
}
],
"utmParameters": {
"utmSource": "test",
"utmCampaign": "campaign test",
"utmMedium": "medium test",
"utmTerm": "term test",
"utmContent": "test content"
},
"source": {
"url": {
"query": "?utm_source=test&utm_campaign&utm_medium=medium%20test&utm_term=term%20test&utm_content=test%20content"
}
}
}
}日程確定のキャンセル (event.canceled)
Response Body
Property名 データ型 必須 説明 webhookEventNamestring true Webhookのイベントタイプ。 webhookEventIdstring ture Webhookのイベントごとに一意のid。 payloadObject true Payload Object
Property名 データ型 必須 説明 originalUrlstring true 確定に利用された空き時間リンク。空き時間リンクを一意に特定するのに利用できます。 privateTitlestring true 確定に利用された空き時間リンクの管理用タイトル。 confirmedAtstring true 日程調整を確定した日時。(確定した予定の日時ではありません。) titlestring true 予定のタイトル。 startDateTimestring true 予定の開始日時。 endDateTimestring ture 予定の終了日時。 timeZonestring true 予定のタイムゾーン。 organizerObject true 予定の主催者。(空き時間リンクに設定されている主催者) attendeesFromOrganizerSideArray true 予定の主催者側の同席者。 inviteeObject true 予定の確定者。(空き時間リンクを受け取って日程を選んだ人) attendeesFromInviteeSideArray true 予定の確定者側の同席者。 formAnswersArray true 空き時間リンクに設定されているフォームの回答。 cacelReasonstring true 予定をキャンセルした理由。 roomsArray true 予定の会議室。 canceledAtstring true 予定をキャンセルした日時。 Json Sample
{
"webhookEventName": "event.canceled",
"webhookEventId": "tp7mPJVl0oOULa9hOIM80",
"payload": {
"originalUrl": "https://app.spirinc.com/t/xxx/as/xxx/confirm",
"privateTitle": "セールス商談用URL",
"confirmedAt": "2023-07-01T12:00:00Z"
"startDateTime": "2023-07-05T12:00:00Z",
"endDateTime": "2023-07-05T13:00:00Z",
"timeZone": "Asia/Tokyo",
"title": "〇〇商談",
"organizer": {
"name": "伊藤 ひろき",
"email": "hiroki.ito@example.com"
},
"attendeesFromOrganizerSide": [
{
"name": "山田 剛",
"email": "go.yamadaa@example.com"
}
],
"invitee": {
"name": "中島 昌平"
"email": "syohei.nakazima@example.com",
"language": "JA"
},
"attendeesFromInviteeSide": [
{
"name": "澤田 充",
"email": "mitsuru.sawada@example.com"
}
],
"formAnswers": [
{
"questionId": "xxx1",
"question": "name",
"answer": "中島 昌平"
},
{
"questionId": "xxx2",
"question": "email",
"answer": "syohei.nakazima@example.com"
},
{
"questionId": "xxx3",
"question": "会社名",
"answer": "株式会社Acme"
},
{
"questionId": "xxx4",
"question": "電話番号",
"answer": "08012345678"
}
],
"cancelReason": "急な社外mtgが入ってしまったため。",
"rooms": [
{
"name": "会議室1",
"email": "meeting-room-1@example.com"
}
],
"canceledAt": "2023-07-01T18:00:00Z"
}
}Webhookサービス連携のよくある質問
-
WebhookのIPアドレス教えてください
Webhook送信側 (Spir側) のIPアドレス固定化は実施しておりません。
そのため、個別のIPアドレスの回答は出来かねます。 -
ログの提供はしていますか?
本画面右下の吹き出しマークより、チャットサポートにてお問い合わせください。
- Zapier、IFTTT等のアプリケーションと連携する