Build a gym and studio booking assistant
Collect personal-training and group-class requests, with clear guidance for Calendar availability and class-capacity rules.
Swipe sideways to explore the workflow branches.
TRIGGERNew Chat Created
Example configuration
{}bookingMenuAsk Multiple Choice Question
Example configuration
{ "question": [ { "$tag": "Constant", "value": "What would you like to request?" } ], "answerOptions": [ "Personal training", "Group class" ] }- Personal training
ask1Send Text Message
Example configuration
{ "message": [ { "$tag": "Constant", "value": "Please share your preferred date/time and trainer, if you have a preference." } ] }request1Receive Message
Example configuration
{ "receiveText": true, "receiveAudio": false, "receiveImage": false, "receiveVideo": false, "receiveFile": false }received1Send Text Message
Example configuration
{ "message": [ { "$tag": "Constant", "value": "Thank you. Your request is in this conversation. The appointment or change is not confirmed yet; our team needs to review it." } ] }
- Group class
ask2Send Text Message
Example configuration
{ "message": [ { "$tag": "Constant", "value": "Please share the class name and preferred session date/time." } ] }request2Receive Message
Example configuration
{ "receiveText": true, "receiveAudio": false, "receiveImage": false, "receiveVideo": false, "receiveFile": false }received2Send Text Message
Example configuration
{ "message": [ { "$tag": "Constant", "value": "Thank you. Your request is in this conversation. The appointment or change is not confirmed yet; our team needs to review it." } ] }
- Personal training
This diagram follows the downloadable workflow. Edit and run it in Chatigram.Swipe the diagram to explore its branches.
Plan availability #
| Feature | Free | Starter | Pro | Enterprise |
|---|---|---|---|---|
| Active Lines | 2 | 5 | 15 | Unlimited |
| Active workflows | 3 | 10 | 45 | Unlimited |
Allowances follow the published Chatigram pricing page. Your organization’s Billing & Plans screen confirms its subscription and current usage. Plans can change. Plan information reviewed 2026-11-10.
What the assistant does #
This intake process requires a team-supported Line with Private AI mode disabled so your team can review requests in Inbox. See Private AI mode before changing the Line’s privacy setting.
The starter separates personal-training requests from class requests. It does not reserve a class seat or create a calendar event until you add and test those rules.
The copyable workflow starts on New Chat Created, presents a service menu, asks for the relevant details, waits for a text reply, and acknowledges the request. Your team can review the conversation in Inbox. Acknowledging a request is not a confirmed booking or an automatic notification to a staff member.
Customize the intake #
- Import the workflow with Paste/Import Workflow.
- Open bookingMenu and edit the choices to match your business.
- Review the question and acknowledgement on every branch. Replace generic contact and follow-up wording with your actual process.
- Save, assign it to a test Line, and test every option in a fresh conversation.
Add Google Calendar booking #
Connect the intended Google Calendar account in App Connections. After importing, use the node picker to add Find Available Time Slots and, where appropriate, Create Google Calendar Event. Select your actual account and Calendar ID in those nodes. The booking guide explains their fields, availability profile, timezone, and outcomes.
Use Calendar availability for a trainer or room time slot. Group-class capacity is a separate rule: count confirmed places in an appropriate booking system or record store before confirming another seat. A shared Calendar event alone is not a capacity counter.
Collect and validate the requested date/time, show the customer the proposed details, and create the event only after a clear choice. Connect Created, Unavailable, and Error separately. Only Created should send an appointment confirmation.
If you use Chatigram Database for capacity #
| Feature | Free | Starter | Pro | Enterprise |
|---|---|---|---|---|
| Databases | Not included | 1 | 2 | Unlimited |
Allowances follow the published Chatigram pricing page. Your organization’s Billing & Plans screen confirms its subscription and current usage. Plans can change. Plan information reviewed 2026-11-10.
The intake workflow itself does not require a database. If the plan does not include databases, use an available booking system that provides the required capacity information rather than bypassing the entitlement.
Test the business rules #
- Request a one-to-one session while the trainer is busy.
- Test a class with capacity remaining and a class that is full.
- Check that repeated messages or retried runs do not confirm the same place twice.
Use a test calendar and controlled recipients. Check invitation settings before sending updates. Read Workflow Activity and inspect the calendar after any uncertain result before retrying.
Ask the AI assistant to help build it #
Use the matching prompt to ask the connected Chatigram plugin to discover the actual nodes and prepare a disabled booking workflow. It will still need your calendar, business hours, resource rules, and any required account setup.
Share the pattern #
Use the copy and download controls for this starter, or adapt it into a Marketplace product with clear setup instructions and appropriate review.
Try this in Chatigram
Import, customize the messages, and assign to a test Line. This starter collects a request in the conversation; it does not create, update, or cancel a Calendar event. Add and configure Google Calendar nodes through the picker before enabling automatic bookings.
View workflow JSON
{
"format": "chatigram-workflow",
"version": 1,
"metadata": {
"sourceName": "Build a gym and studio booking assistant",
"importHelp": {
"note": "Import, customize the messages, and assign to a test Line. This starter collects a request in the conversation; it does not create, update, or cancel a Calendar event. Add and configure Google Calendar nodes through the picker before enabling automatic bookings."
}
},
"workflow": {
"instruction": null,
"multiLanguageSupport": null,
"properties": [],
"trigger": {
"$tag": "Trigger",
"type": "CONVERSATION_CREATED",
"data": {}
},
"nodes": [
{
"$tag": "Node",
"id": "d0c00000-0000-4000-8000-000000000001",
"name": "bookingMenu",
"parentId": null,
"branchIndex": 0,
"type": "ASK_MULTIPLE_CHOICE_QUESTION",
"data": {
"question": [
{
"$tag": "Constant",
"value": "What would you like to request?"
}
],
"answerOptions": [
"Personal training",
"Group class"
]
}
},
{
"$tag": "Node",
"id": "d0c00000-0000-4000-8000-000000000002",
"name": "ask1",
"parentId": "d0c00000-0000-4000-8000-000000000001",
"branchIndex": 0,
"type": "SEND_TEXT_MESSAGE",
"data": {
"message": [
{
"$tag": "Constant",
"value": "Please share your preferred date/time and trainer, if you have a preference."
}
]
}
},
{
"$tag": "Node",
"id": "d0c00000-0000-4000-8000-000000000003",
"name": "request1",
"parentId": "d0c00000-0000-4000-8000-000000000002",
"branchIndex": 0,
"type": "RECEIVE_MESSAGE",
"data": {
"receiveText": true,
"receiveAudio": false,
"receiveImage": false,
"receiveVideo": false,
"receiveFile": false
}
},
{
"$tag": "Node",
"id": "d0c00000-0000-4000-8000-000000000004",
"name": "received1",
"parentId": "d0c00000-0000-4000-8000-000000000003",
"branchIndex": 0,
"type": "SEND_TEXT_MESSAGE",
"data": {
"message": [
{
"$tag": "Constant",
"value": "Thank you. Your request is in this conversation. The appointment or change is not confirmed yet; our team needs to review it."
}
]
}
},
{
"$tag": "Node",
"id": "d0c00000-0000-4000-8000-000000000005",
"name": "ask2",
"parentId": "d0c00000-0000-4000-8000-000000000001",
"branchIndex": 1,
"type": "SEND_TEXT_MESSAGE",
"data": {
"message": [
{
"$tag": "Constant",
"value": "Please share the class name and preferred session date/time."
}
]
}
},
{
"$tag": "Node",
"id": "d0c00000-0000-4000-8000-000000000006",
"name": "request2",
"parentId": "d0c00000-0000-4000-8000-000000000005",
"branchIndex": 0,
"type": "RECEIVE_MESSAGE",
"data": {
"receiveText": true,
"receiveAudio": false,
"receiveImage": false,
"receiveVideo": false,
"receiveFile": false
}
},
{
"$tag": "Node",
"id": "d0c00000-0000-4000-8000-000000000007",
"name": "received2",
"parentId": "d0c00000-0000-4000-8000-000000000006",
"branchIndex": 0,
"type": "SEND_TEXT_MESSAGE",
"data": {
"message": [
{
"$tag": "Constant",
"value": "Thank you. Your request is in this conversation. The appointment or change is not confirmed yet; our team needs to review it."
}
]
}
}
],
"gotos": []
}
}