Give me a booking link
Status planned
Say "give me a booking link" and get a link at your domain that books calls into the hours you keep free, with reminders sent.
Send one link, and people book a call in the hours you keep free. Its status is planned: your agent tells you so and runs nothing yet.
Needs Startup
What you get
- 1booking link at your DomainMeeting Type
- 1set of weekly hours, less what your calendar already holdsAvailability
- 1Meeting per booking, with a join link and a reminderMeeting
Your agent does
You, to your agent
Give me a booking link.
Send them my booking link.
Let people book a call with me.
# Look up the Human: Human.list
WORKER= $(curl "https: //api.sb/ leaseline.app/ humans? limit= 1" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" | jq -r '.humans[0]["$id"] | split("/ ") | last')
# 1. Availability.set
AVAILABILITY= $(curl -X POST https: //api.sb/ leaseline.app/ availabilities/ set \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/ json" \
-d '{"worker": "'"$WORKER"'", "hours": {"tue": ["09: 00-12: 00"], "thu": ["13: 00-17: 00"]}, "timezone": "America/ Chicago"}' | jq -r '.availability["$id"] | split("/ ") | last')
# 2. MeetingType.create
MEETING_TYPE= $(curl -X POST https: //api.sb/ leaseline.app/ meeting-types \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/ json" \
-d '{"name": "Intro call", "duration": 20, "medium": "video", "availability": "'"$AVAILABILITY"'"}' | jq -r '.meetingType["$id"] | split("/ ") | last')
# 3. MeetingType.publish
curl -X POST https: //api.sb/ leaseline.app/ meeting-types/ $MEETING_TYPE/ publish \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
import { $ } from 'startup-builder'
const [worker] = await $.Human.list({ limit: 1 })
const availability = await $.Availability.set({ worker: worker.$id, hours: { tue: ['09: 00-12: 00'], thu: ['13: 00-17: 00'] }, timezone: 'America/ Chicago' })
const meetingType = await $.MeetingType.create({ name: 'Intro call', duration: 20, medium: 'video', availability: availability.$id })
await $.MeetingType.publish({ meetingType: meetingType.$id })
WORKER= $(npx startup-builder do Human.list --json '{"limit": 1}' | jq -r '.humans[0]["$id"] | split("/ ") | last')
AVAILABILITY= $(npx startup-builder do Availability.set --json '{"worker": "'"$WORKER"'", "hours": {"tue": ["09: 00-12: 00"], "thu": ["13: 00-17: 00"]}, "timezone": "America/ Chicago"}' | jq -r '.availability["$id"] | split("/ ") | last')
MEETING_TYPE= $(npx startup-builder do MeetingType.create --json '{"name": "Intro call", "duration": 20, "medium": "video", "availability": "'"$AVAILABILITY"'"}' | jq -r '.meetingType["$id"] | split("/ ") | last')
npx startup-builder do MeetingType.publish --json '{"meetingType": "'"$MEETING_TYPE"'"}'
{
"name": "do",
"arguments": {
"code": "const [worker] = await $.Human.list({ limit: 1 })\nconst availability = await $.Availability.set({ worker: worker.$id, hours: { tue: ['09: 00-12: 00'], thu: ['13: 00-17: 00'] }, timezone: 'America/ Chicago' })\nconst meetingType = await $.MeetingType.create({ name: 'Intro call', duration: 20, medium: 'video', availability: availability.$id })\nreturn await $.MeetingType.publish({ meetingType: meetingType.$id })"
}
}
Change it
- Make it 30 minutes.
- Only offer Tuesday and Thursday mornings.
- Ask what they want to talk about before they book.
Under the hood
- Systems
- Scheduling, CRM
- Nouns
- Meeting Type, Availability, Meeting
- Events
MeetingType.published,Meeting.booked
Each booking calls Meeting.book and raises Meeting.booked, which starts Prepare and follow up a call. A Meeting Type with an Offer takes payment before the time is held.