> ## Documentation Index
> Fetch the complete documentation index at: https://docs.telzino.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Appointment Confirmation

**Appointment Confirmation Sample Application**

Step-by-Step Setup Guide

This guide walks you through setting up an automated appointment-confirmation system using Telzino and a Google Spreadsheet. Once it is set up, every time a row is added to the Google worksheet, Telzino automatically calls the customer to confirm their appointment. The outcome of each call — whether the customer confirmed, the recording, and a transcript — is written back into the spreadsheet.

You only have to set this up once. It takes about 20 minutes, and you do not need any programming experience — you will be copying and pasting a file we provide, and filling in a few boxes.

**Before you start:**  Have the accompanying script file, google\_script\_for\_telzino\_outbound\_call\_[trigger.gs](http://trigger.gs), saved somewhere you can open it (for example, your Downloads folder). You will need to copy a part of it in Part 2.  **The script file** can be [downloaded from this link](https://drive.google.com/file/d/1O8exzj9Iwq_fKGtZhxGHUYgqonZoa0qM/view?usp=sharing)

# **What you will need**

**1.  A Google account** (a free Gmail account works). You will create the spreadsheet inside this account.

**2.  Your Telzino API credentials.** You need three items from your Telzino account: an outbound calling agent setup with the desired call instructions,  the **Agent ID** of the outbound agent,  a **Client ID**, a **Client Secret**. These are found in your Telzino dashboard under the Account Settings menu.

**3.  The script file** (google\_script\_for\_telzino\_outbound\_call\_[trigger.gs](http://trigger.gs)) that can be [downloaded from this link](https://drive.google.com/file/d/1O8exzj9Iwq_fKGtZhxGHUYgqonZoa0qM/view?usp=sharing).

**4.  About 20 minutes** of uninterrupted time.

# **Part 1 · Create the spreadsheet**

1.  Open a web browser and go to Google Docs → [**sheets.new**](http://sheets.new). This creates a brand-new, empty Google Sheet.

2.  Click the words **"Untitled spreadsheet"** in the top-left corner and give it a name, for example *"Booking Confirmations"*.

3.  Leave this tab open. You will come back to it.

# **Part 2 · Add the automation**

1.  In your spreadsheet, click the **Extensions** menu at the top, then click **Apps Script**. A new tab opens — this is the editor where the automation lives.

2.  You will see a small amount of sample code. Click anywhere in that code, select everything (**Ctrl+A** on Windows, or **Cmd+A** on a Mac), and delete it so the page is empty.

<Frame>
  <img src="https://mintcdn.com/telimatic/8NPoqLDP-l2V8G8a/images/Screenshot-2026-07-03-at-20.14.04.png?fit=max&auto=format&n=8NPoqLDP-l2V8G8a&q=85&s=a93721048fbf4938c8c972d1807a45dc" alt="Screenshot 2026 07 03 At 20 14 04" width="3008" height="836" data-path="images/Screenshot-2026-07-03-at-20.14.04.png" />
</Frame>

3.  Open the provided file telzino\_outbound\_call\_[trigger.gs](http://trigger.gs) in a plain text editor (Notepad on Windows, or TextEdit on a Mac). Select everything and copy it.

4.  Click back into the empty Apps Script page and paste (**Ctrl+V** or **Cmd+V**). The full script should now fill the page.

5.  Click the **Save** icon (the floppy-disk symbol) near the top, or press **Ctrl+S / Cmd+S**.

Important:  Copy the code from the plain .gs file — not from a Word document or email. Word can silently change straight quotes into "curly" quotes, which breaks the script.

# **Part 3 · Create the columns**

The script can build the spreadsheet layout for you, so the columns are always named correctly.

1.  At the top of the Apps Script editor there is a dropdown menu that lists function names (it may say setupSheet or another name). Click it and choose setupSheet.

<Frame>
  <img src="https://mintcdn.com/telimatic/8NPoqLDP-l2V8G8a/images/Screenshot-2026-07-03-at-20.16.22.png?fit=max&auto=format&n=8NPoqLDP-l2V8G8a&q=85&s=859b6c0ca99ff6b17a1da891c53ff7fe" alt="Screenshot 2026 07 03 At 20 16 22" width="1802" height="868" data-path="images/Screenshot-2026-07-03-at-20.16.22.png" />
</Frame>

2.  Click the **Run** button (the ▷ play icon) next to it.

3.  The first time you run anything, Google asks for permission. Click **Review permissions**, choose your Google account, click **Advanced** → **Go to (your project)**, then **Allow**. This is normal and only happens once.

4.  Switch back to your spreadsheet tab. You should now see a tab named **Bookings** with 14 columns across the top.

# **Part 4 · Enter your Telzino credentials**

These are stored privately inside the script — never typed into the spreadsheet itself.

1.  In the Apps Script editor, click the **gear icon (Project Settings)** in the left-hand menu.

2.  Scroll down to the **Script Properties** section and click **Add script property**.

3.  Add each of the properties in the table below. Type the **name** exactly as shown (they are case-sensitive) in the left box, and the **value** in the right box. Click **Add script property** again for each new one.

| **Property name**       | **What to enter**                                                          | **Where to get it**                 |
| :---------------------- | :------------------------------------------------------------------------- | :---------------------------------- |
| TELZINO\_CLIENT\_ID     | Your Telzino Client ID                                                     | Telzino dashboard → API settings    |
| TELZINO\_CLIENT\_SECRET | Your Telzino Client Secret                                                 | Telzino dashboard → API settings    |
| TELZINO\_AGENT\_ID      | The ID of the voice agent that places calls                                | Telzino dashboard → Agents          |
| CALLBACK\_SECRET        | Any random password you invent (e.g. a long string of letters and numbers) | You make this up — just keep a copy |

4.  Click **Save script properties**.

Note:  There is a fifth property, WEB\_APP\_URL, that you will add in the next part — it does not exist yet.

# **Part 5 · Recording the call results**

This step gives Telzino a private address to send call results back to, so your spreadsheet fills in automatically.

1.  In the Apps Script editor, click the blue **Deploy** button (top-right) → **New deployment**.

2.  Click the **gear icon** next to "Select type" and choose **Web app**.

3.  Under **"Execute as"** choose **Me**. Under **"Who has access"** choose **Anyone**.

4.  Click **Deploy**. If asked, approve the permissions again.

5.  You will see a **Web app URL** that ends in /exec. Click **Copy**.

6.  Go back to **Project Settings → Script Properties** and add one more property:

| **Property name** | **What to enter**                                                                                      |
| :---------------- | :----------------------------------------------------------------------------------------------------- |
| WEB\_APP\_URL     | The URL you just copied, with ?secret= and your CALLBACK\_SECRET added to the end (see example below). |

**Example:** [https://script.google.com/macros/s/AKfycb.../exec?secret=YOUR\_SECRET\_HERE](https://script.google.com/macros/s/AKfycb.../exec?secret=YOUR_SECRET_HERE)

Replace YOUR\_SECRET\_HERE with the exact same text you entered for CALLBACK\_SECRET in Part 4. Then click **Save script properties**.

\*\*If you ever change the script later: \*\* the results connection only updates when you make a **new deployment** (Deploy → New deployment). Simply editing and saving is not enough for this one piece.

# **Part 6 · Set your calling hours**

By default, calls are only placed on weekdays between 9:00 AM and 8:00 PM Eastern time. A booking added outside those hours is held and called automatically when the window next opens. You can change these hours.

1.  In the Apps Script editor, look near the top of the script for the section labelled CALLING\_WINDOW.

2.  Adjust these values as needed:

TIMEZONE  — your local timezone, e.g. 'America/New\_York' or 'America/Chicago'.

START and END  — the earliest and latest call times, in 24-hour format (hour 9 = 9 AM, hour 20 = 8 PM).

ALLOWED\_DAYS  — which days calls may go out. 1 = Monday through 7 = Sunday. \[1,2,3,4,5] means weekdays only.

3.  Click **Save** when done.

Keep your timezones matched:  Set the timezone in three places to the same zone — the CALLING\_WINDOW above, the spreadsheet (**File → Settings**), and the Apps Script project (**gear icon → Time zone**). This keeps appointment dates and times accurate on the call.

# **Part 7 · Turn it on**

1.  In the function dropdown at the top of the editor, choose installTrigger.

2. Click **Run**. Approve permissions if asked.

3.  That is it — the automation is now live. From now on, any complete booking row will trigger a confirmation call automatically.

Tip:  The only two functions you ever run by hand are setupSheet and installTrigger (plus createBookingForm in the next optional part). Everything else runs on its own. If you accidentally run a different one and see an error, just re-select the correct function and run again.

# **Part 8 · Add a booking form (optional)**

If you would like a simple web form that staff or customers can fill in — instead of typing directly into the spreadsheet — the script can create one for you.

1.  In the function dropdown, choose createBookingForm, then click **Run**. Approve the new permission request if asked.

2.  When it finishes, open **View → Logs** (or press **Ctrl+Enter**). You will see a **share link** and an **edit link**.

3.  Share the **share link** with anyone who should be able to submit bookings. Each submission automatically creates a row and places a confirmation call (or holds it for your calling hours).

You can find the form again any time at [**forms.google.com**](http://forms.google.com), or in your Google Drive under the name *"Telzino Booking Intake"*. To see the links again, run showFormLinks.

\*\*Do not link the form to the spreadsheet manually. \*\* The script already connects them. If you add a response destination through the form’s own menu, you may get duplicate entries.

# **Part 9 · Test it**

1.  Go to the **Bookings** tab of your spreadsheet.

2.  In a new row, fill in a **Booking ID** (any text), a **Customer Name**, your **own mobile number** in the Phone Number column, and an **Appointment Date** and **Appointment Time**.

3.  Within a few seconds, the **Call Status** column should change. If you are inside your calling hours it will say queued and your phone should ring. If you are outside those hours it will say Waiting for Window.

4.  When the call ends, the **Disposition**, **Notes**, **Recording URL**, and **Transcript** columns fill in automatically.

# **Understanding the Call Status column**

| **Status**                 | **What it means**                                                                                                                         |
| :------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------- |
| (blank) or Pending         | The row has not been called yet.                                                                                                          |
| queued                     | The call has been sent to Telzino and should ring shortly.                                                                                |
| Waiting for Window         | The booking is ready but outside your calling hours. It will be called automatically when the window next opens.                          |
| Check Date/Time            | The date or time entry is unclear. See the Notes column for what to fix, then correct the cell — the call goes out on its own once fixed. |
| Invalid Number             | The phone number could not be understood. Check the Notes column and correct the number.                                                  |
| completed                  | The call finished. Disposition, Notes, Recording, and Transcript are filled in.                                                           |
| no\_answer / busy / failed | The call did not connect. The reason appears in the Disposition or Notes column.                                                          |

# **Troubleshooting**

| **Problem**                                                                | **What to do**                                                                                                                                                                                                           |
| :------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| I ran a function and got an error mentioning "undefined" or "toUpperCase". | You ran an internal helper by mistake. In the function dropdown, choose setupSheet or installTrigger and run again.                                                                                                      |
| Nothing happens when I add a row.                                          | Check that the tab is named exactly "Bookings"; that Booking ID, Customer Name, Phone Number, Date and Time are all filled in; and that you are within your calling hours (otherwise it will read "Waiting for Window"). |
| The agent says the wrong date or time.                                     | Make sure the date and time cells are entered as real dates and times (use the date/time entry, not plain text), and that all three timezones match (Part 6).                                                            |
| The call happens but results never appear in the spreadsheet.              | The Web App was not deployed, or WEB\_APP\_URL is missing or wrong. Re-check Part 5, and make sure the URL ends with ?secret= followed by your CALLBACK\_SECRET.                                                         |
| Form submissions do not create rows.                                       | Make sure you ran createBookingForm, and that you did not manually link the form to the spreadsheet.                                                                                                                     |
| A time like 5:00 is being read as the morning.                             | A bare "5:00" means 5 AM. For an afternoon time, enter 17:00, or type 5:00 PM.                                                                                                                                           |
