docs
EnglishChatigram website ↗Open Chatigram
Recipes

Build a clinic appointment assistant

Collect a patient’s appointment request in a conversation, then add reviewed Google Calendar availability and booking steps.

Build a clinic appointment assistant Expand a node to see its configuration

Swipe sideways to explore the workflow branches.

  • TRIGGERNew Chat Created

    Example configuration

    {}
      • bookingMenuAsk Multiple Choice Question

        Example configuration

        {
          "question": [
            {
              "$tag": "Constant",
              "value": "How can our reception team help?"
            }
          ],
          "answerOptions": [
            "New appointment",
            "Change an appointment",
            "Contact reception"
          ]
        }
        • New appointment
          • ask1Send Text Message

            Example configuration

            {
              "message": [
                {
                  "$tag": "Constant",
                  "value": "Please share your preferred appointment date and time, your name, and the contact method you want us to use. Do not include medical details."
                }
              ]
            }
              • 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."
                        }
                      ]
                    }
        • Change an appointment
          • ask2Send Text Message

            Example configuration

            {
              "message": [
                {
                  "$tag": "Constant",
                  "value": "Please share your booking reference and the new date/time you would prefer. Do not include medical details."
                }
              ]
            }
              • 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."
                        }
                      ]
                    }
        • Contact reception
          • ask3Send Text Message

            Example configuration

            {
              "message": [
                {
                  "$tag": "Constant",
                  "value": "Please tell us the scheduling question you would like the reception team to review."
                }
              ]
            }
              • request3Receive Message

                Example configuration

                {
                  "receiveText": true,
                  "receiveAudio": false,
                  "receiveImage": false,
                  "receiveVideo": false,
                  "receiveFile": false
                }
                  • received3Send 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."
                        }
                      ]
                    }

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 collects scheduling information in Inbox without creating a Calendar event. It keeps medical history and clinical advice outside the appointment request.

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 #

  1. Import the workflow with Paste/Import Workflow.
  2. Open bookingMenu and edit the choices to match your business.
  3. Review the question and acknowledgement on every branch. Replace generic contact and follow-up wording with your actual process.
  4. 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 the correct clinician or room resource. Choose the actual appointment duration and working hours; do not assume every consultation uses the same slot. Collect only the scheduling details needed for the request.

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.

Test the business rules #

  • Ask for a new appointment and verify the request appears in Inbox.
  • Test a request outside working hours after adding the Calendar profile.
  • Verify that only the Created branch confirms a booking; Unavailable and Error should offer a useful next step.

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.

READY TO CUSTOMIZE

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.

Download JSON
View workflow JSON
Workflow JSON
{
  "format": "chatigram-workflow",
  "version": 1,
  "metadata": {
    "sourceName": "Build a clinic appointment 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": "How can our reception team help?"
            }
          ],
          "answerOptions": [
            "New appointment",
            "Change an appointment",
            "Contact reception"
          ]
        }
      },
      {
        "$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 appointment date and time, your name, and the contact method you want us to use. Do not include medical details."
            }
          ]
        }
      },
      {
        "$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 your booking reference and the new date/time you would prefer. Do not include medical details."
            }
          ]
        }
      },
      {
        "$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."
            }
          ]
        }
      },
      {
        "$tag": "Node",
        "id": "d0c00000-0000-4000-8000-000000000008",
        "name": "ask3",
        "parentId": "d0c00000-0000-4000-8000-000000000001",
        "branchIndex": 2,
        "type": "SEND_TEXT_MESSAGE",
        "data": {
          "message": [
            {
              "$tag": "Constant",
              "value": "Please tell us the scheduling question you would like the reception team to review."
            }
          ]
        }
      },
      {
        "$tag": "Node",
        "id": "d0c00000-0000-4000-8000-000000000009",
        "name": "request3",
        "parentId": "d0c00000-0000-4000-8000-000000000008",
        "branchIndex": 0,
        "type": "RECEIVE_MESSAGE",
        "data": {
          "receiveText": true,
          "receiveAudio": false,
          "receiveImage": false,
          "receiveVideo": false,
          "receiveFile": false
        }
      },
      {
        "$tag": "Node",
        "id": "d0c00000-0000-4000-8000-000000000010",
        "name": "received3",
        "parentId": "d0c00000-0000-4000-8000-000000000009",
        "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": []
  }
}
Keep building.Need help with this? Explore troubleshooting ↗

Find an answer. Try “welcome workflow”, “database”, or “Telegram”.