{
  "_template": {
    "slug": "meeting-booking-form",
    "name": "Meeting and Appointment Booking Form",
    "version": 1,
    "specVersion": 1,
    "source": "https://www.regform.com/form-templates/meeting-booking-form"
  },
  "form": {
    "title": "Meeting and Appointment Booking Form",
    "nav": {
      "mode": "free",
      "backLabel": "Back",
      "nextLabel": "Next",
      "submitLabel": "Book Meeting",
      "showProgress": true,
      "validatePerStep": true
    },
    "steps": [
      {
        "id": "step-about",
        "title": "About You",
        "fields": [
          {
            "id": "f-first-name",
            "key": "first_name",
            "type": "text",
            "label": "First Name",
            "required": true,
            "hidden": false,
            "options": []
          },
          {
            "id": "f-last-name",
            "key": "last_name",
            "type": "text",
            "label": "Last Name",
            "required": true,
            "hidden": false,
            "options": []
          },
          {
            "id": "f-email",
            "key": "email",
            "type": "email",
            "label": "Email Address",
            "required": true,
            "hidden": false,
            "options": [],
            "description": "Your confirmation and any meeting link are sent here.",
            "placeholder": "name@example.com",
            "editableAfterSubmit": true
          },
          {
            "id": "f-phone",
            "key": "phone",
            "type": "phone",
            "label": "Mobile Phone",
            "required": true,
            "hidden": false,
            "options": [],
            "description": "So we can reach you if plans change on the day.",
            "placeholder": "+1 555 0100",
            "editableAfterSubmit": true
          },
          {
            "id": "f-company",
            "key": "company",
            "type": "text",
            "label": "Company",
            "required": true,
            "hidden": false,
            "options": []
          },
          {
            "id": "f-job-title",
            "key": "job_title",
            "type": "text",
            "label": "Job Title",
            "required": false,
            "hidden": false,
            "options": []
          }
        ]
      },
      {
        "id": "step-meeting",
        "title": "The Meeting",
        "fields": [
          {
            "id": "f-meeting-type",
            "key": "meeting_type",
            "type": "radio",
            "label": "What Kind of Meeting",
            "required": true,
            "hidden": false,
            "options": [
              {
                "label": "Product demonstration",
                "value": "Demo"
              },
              {
                "label": "Pricing and commercial discussion",
                "value": "Commercial"
              },
              {
                "label": "Technical deep dive",
                "value": "Technical"
              },
              {
                "label": "Partnership or reseller",
                "value": "Partnership"
              },
              {
                "label": "Existing customer, support or account",
                "value": "Support"
              },
              {
                "label": "Something else",
                "value": "Other"
              }
            ],
            "description": "Tells us who should take the meeting."
          },
          {
            "id": "f-topic",
            "key": "topic",
            "type": "textarea",
            "label": "What Would You Like to Cover",
            "required": true,
            "hidden": false,
            "options": [],
            "description": "The most useful thing on this form. One or two sentences is plenty.",
            "placeholder": "What you are trying to solve, or what you want to see"
          },
          {
            "id": "f-attendee-count",
            "key": "attendee_count",
            "type": "number",
            "label": "How Many People Will Attend",
            "required": false,
            "hidden": false,
            "options": []
          },
          {
            "id": "f-additional-attendees",
            "key": "additional_attendees",
            "type": "textarea",
            "label": "Who Else Is Joining",
            "required": false,
            "hidden": true,
            "options": [],
            "description": "Names and roles, so we know who is in the room."
          }
        ]
      },
      {
        "id": "step-slot",
        "title": "Choose a Time",
        "fields": [
          {
            "id": "f-slot-intro",
            "key": "slot_intro",
            "type": "text_block",
            "label": "",
            "required": false,
            "hidden": false,
            "options": [],
            "content": "<p>Each slot holds one meeting. Times that have gone are no longer shown, and if the day is full you will be offered a place on the waitlist.</p>"
          },
          {
            "id": "f-slot",
            "key": "slot",
            "type": "item_select",
            "label": "Choose a Time",
            "required": true,
            "hidden": false,
            "options": [],
            "description": "Replace these with your real availability. Keep the day in every name.",
            "pricingMode": "single",
            "selectionMode": "single",
            "visibleItemIds": [
              "slot-tue-0900",
              "slot-tue-0930",
              "slot-tue-1000",
              "slot-tue-1330",
              "slot-tue-1400",
              "slot-wed-0900",
              "slot-wed-0930",
              "slot-wed-1330",
              "slot-wed-1400",
              "slot-wed-1430"
            ]
          }
        ]
      },
      {
        "id": "step-format",
        "title": "Format",
        "fields": [
          {
            "id": "f-format",
            "key": "format",
            "type": "radio",
            "label": "How Should We Meet",
            "required": true,
            "hidden": false,
            "options": [
              {
                "label": "In person at the event",
                "value": "In person"
              },
              {
                "label": "Video call",
                "value": "Video"
              },
              {
                "label": "Phone call",
                "value": "Phone"
              }
            ]
          },
          {
            "id": "f-location-note",
            "key": "location_note",
            "type": "text_block",
            "label": "",
            "required": false,
            "hidden": true,
            "options": [],
            "content": "<p><strong>We will meet at our booth.</strong> Replace this with your booth number, the nearest entrance and who to ask for at the desk.</p>"
          },
          {
            "id": "f-video-platform",
            "key": "video_platform",
            "type": "dropdown",
            "label": "Preferred Video Platform",
            "required": false,
            "hidden": true,
            "options": [
              {
                "label": "Zoom",
                "value": "Zoom"
              },
              {
                "label": "Microsoft Teams",
                "value": "Teams"
              },
              {
                "label": "Google Meet",
                "value": "Meet"
              },
              {
                "label": "No preference",
                "value": "No preference"
              }
            ],
            "multiple": false
          },
          {
            "id": "f-time-zone",
            "key": "time_zone",
            "type": "dropdown",
            "label": "Your Time Zone",
            "required": false,
            "hidden": true,
            "options": [
              {
                "label": "Eastern (ET)",
                "value": "Eastern"
              },
              {
                "label": "Central (CT)",
                "value": "Central"
              },
              {
                "label": "Mountain (MT)",
                "value": "Mountain"
              },
              {
                "label": "Pacific (PT)",
                "value": "Pacific"
              },
              {
                "label": "Outside North America",
                "value": "Other"
              }
            ],
            "multiple": false,
            "description": "So the time in your confirmation is the right one."
          },
          {
            "id": "f-accessibility",
            "key": "accessibility",
            "type": "textarea",
            "label": "Accessibility or Support Needs",
            "required": false,
            "hidden": false,
            "options": [],
            "placeholder": "Optional"
          }
        ]
      },
      {
        "id": "step-confirm",
        "title": "Confirm",
        "fields": [
          {
            "id": "f-cancellation-ack",
            "key": "cancellation_ack",
            "type": "checkbox",
            "label": "I will let you know if I need to cancel, so the slot can go to somebody else",
            "required": true,
            "hidden": false,
            "options": []
          },
          {
            "id": "f-marketing-optin",
            "key": "marketing_optin",
            "type": "checkbox",
            "label": "Send me relevant updates after the event",
            "required": false,
            "hidden": false,
            "options": []
          }
        ]
      }
    ],
    "cart": {
      "enabled": true,
      "currencyCode": "USD",
      "items": [
        {
          "id": "slot-tue-0900",
          "name": "Tuesday 9:00 AM",
          "price": 0,
          "active": true,
          "capQuantity": 1,
          "description": "30 minutes."
        },
        {
          "id": "slot-tue-0930",
          "name": "Tuesday 9:30 AM",
          "price": 0,
          "active": true,
          "capQuantity": 1,
          "description": "30 minutes."
        },
        {
          "id": "slot-tue-1000",
          "name": "Tuesday 10:00 AM",
          "price": 0,
          "active": true,
          "capQuantity": 1,
          "description": "30 minutes."
        },
        {
          "id": "slot-tue-1330",
          "name": "Tuesday 1:30 PM",
          "price": 0,
          "active": true,
          "capQuantity": 1,
          "description": "30 minutes."
        },
        {
          "id": "slot-tue-1400",
          "name": "Tuesday 2:00 PM",
          "price": 0,
          "active": true,
          "capQuantity": 1,
          "description": "30 minutes."
        },
        {
          "id": "slot-wed-0900",
          "name": "Wednesday 9:00 AM",
          "price": 0,
          "active": true,
          "capQuantity": 1,
          "description": "30 minutes."
        },
        {
          "id": "slot-wed-0930",
          "name": "Wednesday 9:30 AM",
          "price": 0,
          "active": true,
          "capQuantity": 1,
          "description": "30 minutes."
        },
        {
          "id": "slot-wed-1330",
          "name": "Wednesday 1:30 PM",
          "price": 0,
          "active": true,
          "capQuantity": 1,
          "description": "30 minutes."
        },
        {
          "id": "slot-wed-1400",
          "name": "Wednesday 2:00 PM",
          "price": 0,
          "active": true,
          "capQuantity": 1,
          "description": "30 minutes."
        },
        {
          "id": "slot-wed-1430",
          "name": "Wednesday 2:30 PM",
          "price": 0,
          "active": true,
          "capQuantity": 1,
          "description": "30 minutes."
        }
      ],
      "fees": [],
      "holdMinutes": 10,
      "requireEmail": true,
      "paymentProviders": [
        "stripe"
      ],
      "promoStackingMode": "none",
      "buyerEmailFieldKey": "email"
    },
    "theme": "light",
    "editLinkTtl": {
      "unit": "days",
      "value": 30,
      "enabled": true
    },
    "cookieNotice": {
      "enabled": true,
      "privacyPolicyUrl": ""
    },
    "integrations": [
      {
        "key": "waitlist",
        "enabled": true,
        "settings": {
          "mode": "fifo",
          "offerWindow": {
            "unit": "hours",
            "value": 12
          },
          "reviewFieldKeys": [
            "first_name",
            "last_name",
            "company",
            "meeting_type"
          ],
          "itemCapacityEnabled": true
        }
      },
      {
        "key": "confirmation_email",
        "enabled": true,
        "settings": {
          "bodyHtml": "<p>Your meeting is booked. The time is below. Replace this text with where to meet us, who to ask for, and a number to call if you are running late. For video meetings, include the link.</p>",
          "includeCalendarLinks": false,
          "includeSessionIcsFile": false,
          "includeEventCalendarLink": false
        }
      }
    ],
    "notifications": {
      "emailOwnerOnSubmission": true
    },
    "thankYouMessage": "Your meeting is booked. The time and location details are on their way to your inbox.",
    "showLanguageSelector": false
  },
  "rules": [
    {
      "id": "rule-additional-attendees",
      "actions": [
        {
          "action": "show_field",
          "target": "additional_attendees"
        }
      ],
      "conditions": [
        {
          "fact": "attendee_count",
          "value": 1,
          "operator": "greaterThan"
        }
      ],
      "logicType": "all",
      "description": "Ask who else is coming when more than one person attends",
      "evaluationMode": "immediate"
    },
    {
      "id": "rule-video-format",
      "actions": [
        {
          "action": "show_field",
          "target": "video_platform"
        },
        {
          "action": "show_field",
          "target": "time_zone"
        },
        {
          "action": "require_field",
          "target": "time_zone"
        }
      ],
      "conditions": [
        {
          "fact": "format",
          "value": "Video",
          "operator": "equal"
        }
      ],
      "logicType": "all",
      "description": "Video meetings need a platform and a time zone",
      "evaluationMode": "immediate"
    },
    {
      "id": "rule-in-person",
      "actions": [
        {
          "action": "show_field",
          "target": "location_note"
        }
      ],
      "conditions": [
        {
          "fact": "format",
          "value": "In person",
          "operator": "equal"
        }
      ],
      "logicType": "all",
      "description": "Show where to meet for in person bookings",
      "evaluationMode": "immediate"
    }
  ]
}