Meeting Templates
Meeting Templates
A Meeting Template defines the meeting configuration that applies to all conversations within a campaign. When a candidate successfully completes the conversation flow, the meeting template settings determine how the meeting is scheduled.
Prerequisites
To use scheduling features, your campaign must have:
- Closing method set to
CALENDAR_MEETING_INTEGRATION - Meeting Template attached to the campaign
How It Works
┌─────────────────────────────────────────────────────────────┐
│ CAMPAIGN │
│ closingMethod: CALENDAR_MEETING_INTEGRATION │
│ meetingTemplateId: "template_abc123" │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ MEETING TEMPLATE │ │
│ │ • Duration: 30 minutes │ │
│ │ • Video: Google Meet │ │
│ │ • Participants: Hiring Manager (calendar connected)│ │
│ │ • Open Hours: Mon-Fri, 9am-5pm │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │Conversation │ │Conversation │ │Conversation │ │
│ │ (John) │ │ (Sarah) │ │ (Mike) │ │
│ │ Uses same │ │ Uses same │ │ Uses same │ │
│ │ template │ │ template │ │ template │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
All conversations within a campaign share the same meeting template configuration. This ensures consistency across all candidate interactions.
What's Included in a Meeting Template
| Setting | Description |
|---|---|
| Duration | Meeting length in minutes (e.g., 15, 30, 45, 60) |
| Video Conferencing | Whether to include a video link (Google Meet, Microsoft Teams) |
| Participants | Who should attend the meeting and how availability is sourced |
| Open Hours | Days and times when meetings can be scheduled |
| Location | Physical address for in-person meetings |
| Title & Description | Meeting title and calendar invite description |
Meeting Participants
Each meeting template defines the participants who will attend. For each participant, you configure:
Availability Source
| Source | Description |
|---|---|
| Connected Calendar | Real-time availability from Google or Microsoft calendar |
| Pre-defined Slots | Specific time windows when the participant is available |
| Auto-Collect via Email | Popp emails the participant to collect their availability (see guide) |
Participant Roles
- Organizer: The meeting owner who sends the calendar invite (one required)
- Attendee: Additional participants who will join the meeting
Creating Meeting Templates
Create a meeting template via the API:
curl -X POST "https://api.joinpopp.com/v1/meeting-templates" \
-H "x-api-key: YOUR_API_KEY" \
-H "x-organization-id: YOUR_ORGANIZATION_ID" \
-H "Content-Type: application/json" \
-d '{
"title": "Interview Call",
"description": "Initial screening interview",
"duration": 30,
"timezone": "Europe/London",
"videoConferencing": true,
"videoConferencingProvider": "Google Meet",
"openHours": [
{
"days": [1, 2, 3, 4, 5],
"start": "09:00",
"end": "17:00"
}
],
"meetingParticipants": [
{
"name": "Jane Smith",
"email": "[email protected]",
"isOrganizer": true,
"isCalendarConnected": true
}
],
"buffer": 15,
"noticePeriodMinutes": 60,
"availableDaysInTheFuture": 30
}'Required Fields
| Field | Type | Description |
|---|---|---|
title | string | The title of the meeting |
duration | integer | Meeting length in minutes (1-1440) |
timezone | string | IANA timezone (e.g., Europe/London, America/New_York) |
videoConferencing | boolean | Whether to include video conferencing |
openHours | array | Available time windows for scheduling |
meetingParticipants | array | List of participants (exactly one must be the organizer) |
Optional Fields
| Field | Type | Default | Description |
|---|---|---|---|
description | string | - | Calendar invite description |
videoConferencingProvider | string | - | Google Meet or Microsoft Teams (required if videoConferencing is true) |
location | string | - | Physical address (cannot be used with video conferencing) |
buffer | integer | 0 | Buffer time in minutes before/after meetings (multiple of 5, max 120) |
noticePeriodMinutes | integer | 0 | Minimum notice required for booking |
availableDaysInTheFuture | integer | 30 | How many days in the future bookings are available |
reminderMinutesBeforeMeeting | integer | 1440 | Minutes before meeting to send reminder |
Participant Configuration
Each participant requires:
{
"name": "Jane Smith",
"email": "[email protected]",
"isOrganizer": true,
"isCalendarConnected": true
}For participants without a connected calendar, provide pre-defined availability:
{
"name": "John Doe",
"email": "[email protected]",
"isOrganizer": false,
"isCalendarConnected": false,
"availability": {
"timezone": "Europe/London",
"timeSlots": [
{
"date": "2025-01-20",
"startTime": "09:00",
"endTime": "12:00"
},
{
"date": "2025-01-21",
"startTime": "14:00",
"endTime": "17:00"
}
]
}
}Set autoCollectAvailability: true to have Popp automatically collect the participant's availability via conversation.
Availability Outreach Settings
When using autoCollectAvailability: true, you can customize how Popp collects availability from the participant using availabilityOutreachSettings. These settings can be configured at the template level (applies to all participants) or at the participant level (overrides template settings for that participant).
Resolution order: participant-level > template-level > system defaults.
Template-Level Settings
{
"title": "Panel Interview",
"availabilityOutreachSettings": {
"requiredHours": 4,
"periodDays": 10,
"customTemplatedSubjectLine": "{{INTERVIEWER_NAME}}, availability needed for upcoming interviews",
"customTemplatedMessage": "Hi {{INTERVIEWER_NAME}},\n\nCould you please share at least 4 hours of availability over the next 10 days?\n\nThanks,\n{{AGENT_NAME}}",
"nudgeSettings": [
{ "delayHours": 12 },
{ "delayHours": 24 }
],
"additionalRecipients": ["[email protected]"]
},
"meetingParticipants": [
{
"name": "Jane Smith",
"email": "[email protected]",
"isOrganizer": true,
"isCalendarConnected": false,
"autoCollectAvailability": true
}
]
}Per-Participant Overrides
Each participant can override any field from the template-level settings. Fields not specified fall back to the template-level value, then to system defaults.
{
"meetingParticipants": [
{
"name": "Bob Smith",
"email": "[email protected]",
"isOrganizer": true,
"isCalendarConnected": false,
"autoCollectAvailability": true,
"availabilityOutreachSettings": {
"requiredHours": 6,
"periodDays": 14,
"additionalRecipients": ["[email protected]"]
}
}
]
}In this example, Bob's outreach email will request 6 hours over 14 days (his overrides), but use the template-level subject line and message (since he didn't override those).
Field Reference
| Field | Type | Default | Description |
|---|---|---|---|
requiredHours | integer | 6 | Minimum hours of availability to request |
periodDays | integer | 14 | Number of days into the future to collect availability for (min 7, max 60) |
customTemplatedSubjectLine | string | "Availability Request" | Email subject line for the outreach email |
customTemplatedMessage | string | System default | Opening email body sent to the participant |
nudgeSettings | array | 3 nudges at 24h intervals | Follow-up nudge configuration (see below) |
additionalRecipients | string[] | [] | Email addresses CC'd on all outreach communications |
Nudge Settings
nudgeSettings is an array where each entry represents one follow-up nudge. The delayHours field specifies the wait time since the previous message. The array length determines the total number of nudges.
"nudgeSettings": [
{ "delayHours": 12 },
{ "delayHours": 24 }
]This sends 2 nudges: the first 12 hours after the initial email, the second 24 hours after the first nudge. An empty array [] disables nudging entirely.
Supported Placeholders
The following placeholders can be used in customTemplatedSubjectLine and customTemplatedMessage for availability outreach:
| Placeholder | Resolves To |
|---|---|
{{INTERVIEWER_NAME}} | The meeting participant's first name |
{{AGENT_NAME}} | The AI agent's name |
{{ORGANIZATION_NAME}} | Your organization name |
{{CAMPAIGN_OWNER_NAME}} | The campaign owner's name |
{{INTERVIEWER_NAME}}is only available for availability outreach settings.
Response
{
"id": "b0453b2c-9bf2-4903-a4da-b9cddb682425",
"title": "Interview Call",
"status": "ACTIVE",
"createdAt": "2025-01-01T09:00:00Z"
}Once you have a meeting template ID, attach it to your campaign by setting the closing method to CALENDAR_MEETING_INTEGRATION. All conversations in that campaign will use the template settings.
Listing Meeting Templates
Retrieve all meeting templates for your organization:
curl -X GET "https://api.joinpopp.com/v1/meeting-templates" \
-H "x-api-key: YOUR_API_KEY" \
-H "x-organization-id: YOUR_ORGANIZATION_ID"Filtering
| Parameter | Type | Description |
|---|---|---|
title | string | Search by title (partial match) |
status | string | Filter by status (ACTIVE, ARCHIVED) |
location | string | Search by location (partial match) |
isVideoConference | boolean | Filter by video conferencing enabled |
limit | integer | Results per page (1-100, default: 100) |
nextToken | string | Pagination token from previous response |
Example with filters:
curl -X GET "https://api.joinpopp.com/v1/meeting-templates?status=ACTIVE&title=Interview&limit=10" \
-H "x-api-key: YOUR_API_KEY" \
-H "x-organization-id: YOUR_ORGANIZATION_ID"Getting Meeting Template Details
Retrieve the full configuration for a specific meeting template:
curl -X GET "https://api.joinpopp.com/v1/meeting-templates/{templateId}" \
-H "x-api-key: YOUR_API_KEY" \
-H "x-organization-id: YOUR_ORGANIZATION_ID"This returns all configuration details including availability settings, buffer times, and reminder settings.
Inviting Calendar Contacts
Before creating a meeting template with a participant, they must have their calendar connected to Popp. Use the Invite Calendar Contact endpoint to send an invitation:
curl -X POST "https://api.joinpopp.com/v1/invite-calendar-contact" \
-H "x-api-key: YOUR_API_KEY" \
-H "x-organization-id: YOUR_ORGANIZATION_ID" \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"name": "Jane Smith",
"reference": "hiring-manager-001"
}'The contact will receive an email invitation to connect their Google or Microsoft calendar to Popp.
Example Use Cases
Standard Interview
- Duration: 30 minutes
- Video: Google Meet
- Participants: Hiring Manager (calendar connected)
- Open Hours: Monday-Friday, 9am-5pm
Panel Interview
- Duration: 60 minutes
- Video: Microsoft Teams
- Participants:
- Hiring Manager (calendar connected, organizer)
- Team Lead (calendar connected)
- HR Representative (calendar connected)
- Open Hours: Tuesday-Thursday, 10am-4pm
On-site Visit
- Duration: 90 minutes
- Video: None
- Location: 123 Main St, Suite 400, New York, NY 10001
- Participants: Office Manager (pre-defined availability)
- Open Hours: Monday, Wednesday, Friday, 9am-12pm
API Reference
- Create Meeting Template - Create a new meeting template
- List Meeting Templates - List and search templates
- Get Meeting Template - Get full template details
- Invite Calendar Contact - Invite team members to connect calendars
Next Steps
Once your campaign has a meeting template configured:
- Auto-Schedule Conversations via the API
- Set up Webhooks to receive meeting notifications
Updated 5 days ago