# Appendix

This appendix outlines the contents of the Scheduling and Follow-Up tutorial and provides some links to more in-depth documentation. Return to this document any time you want to review:

* Digital scheduling
* Timers and reminders
* Automatic outreach and TCPA compliance
* Creating and managing multi-Step Journeys

## Airkit Studio

* [Journey Builder](../../studio/builder-bar/journey-builder)
* [Web Flows Builder](../../studio/builder-bar/web-flows-builder)
* [AirData Builder](../../studio/builder-bar/airdata-builder)
* [Connections Builder](../../studio/builder-bar/connections-builder)
* [Schedules Builder](../../studio/builder-bar/schedules-builder)
* [Notifications Builder](../../studio/builder-bar/notifications-builder)
* [Variable Tree](../../studio/variable-tree)

## Digital Scheduling

* Appointments are made via the [Scheduler](../../web-controls/scheduler-web-control) Web Control, which must be associated with a [Schedule Object](../../working-with-data/airdata/schedule-objects) and an [Availability Schedule](../../building-apps/calendars/using-availability-schedules).
  * Schedule Objects are defined in [AirData](../../working-with-data/airdata).
  * Availability Schedules are defined in [Schedules Builder](../../studio/builder-bar/schedules-builder).
* Selecting an appointment time in a Scheduler Web Control automatically saves the relevant information to the associated Schedule Object, but if you want to save the appointment information locally, you will need to use the [Set Variable](https://github.com/airkit/airkit-docs/blob/master/docs/v18-2/the-set-variable-action.md) Action within the Scheduler's [Control Event](../../studio/events/control-events) to define a local variable as `event.value`.
  * Local variables are defined and managed in the [Variable Tree](../../studio/variable-tree).
  * Working comfortably with appointment information requires familiarity with the [DateTime](../../variable-data-types/the-datetime-variable-data-type) data type as well as [Airscript](../../working-with-data/airscript-quick-start). Some useful Airscript functions include:
    * [FORMAT\_DATETIME](../../airscript-expressions/datetime-functions/format_datetime)
    * [SUBTRACT\_FROM\_DATETIME](../../airscript-expressions/datetime-functions/subtract_from_datetime)
    * [ADD\_TO\_DATETIME](../../airscript-expressions/datetime-functions/add_to_datetime)

## Timers and Reminders

* Actions can be associated with a timer by nesting them under the [Start Timer](https://github.com/airkit/airkit-docs/blob/master/docs/v18-2/the-start-timer-action.md) Action in any [Action Builder](../../studio/action-builder).
  * To send reminders, it is common to nest a [Send SMS](../../actions/send-sms-notification-action) Action under the Start Timer Action.
    * SMS Notifications that can be sent through this Action are defined in [Notifications Builder](../../studio/builder-bar/notifications-builder).
* Timers can be canceled using the [Stop Timer](https://github.com/airkit/airkit-docs/blob/master/docs/v18-2/the-stop-timer-action.md) Action.

## Automatic Outreach and TCPA Compliance

**The** [**Actor**](../../concepts/actors) **must be initialized before outgoing messages can be sent.**

* Initializing the Actor with set values for different variables in the Actor namespace influences the behavior of outgoing messages in different ways.
  * An appropriate value for `actor.phone` must be set to send [SMS Notifications](../../sms/sms-notification-basics).
  * An appropriate value for `actor.email` must be set to send [Email Notifications](../../emails/email-notification-basics).
  * An appropriate value for `actor.calendar_restriction` must be set for Notifications send from a Journey Step to be TCPA compliant.
    * If appropriate values have been set for `actor.region` and `actor.timezone`, the correct value for `actor.calendar_restriction` will be generated automatically.
* Values for variables in the Actor namespace are set via the [Set Variable](https://github.com/airkit/airkit-docs/blob/master/docs/v18-2/the-set-variable-action.md) Action. The Actor is initialized via the [Initialize Actor](../../actions/the-initialize-actor-action) Action.

Assuming the Actor is initialized properly, all Notifications sent from a Journey Step will be TCPA complaint. **Enforcing TCPA-compliance while scheduling a Notification within an Action Chain, however, requires the calendar restriction be set manually.**

To remain TCPA compliant, the [Send SMS](../../actions/send-sms-notification-action) Action must be nested under a [Start Timer](https://github.com/airkit/airkit-docs/blob/master/docs/v18-2/the-start-timer-action.md) Action. While setting the timer, under **Which Availability Schedule > Custom Expression**, you will need to define an Availability Schedule Key that looks something like this:

```javascript
"TCPA-{{actor.region}}-{{actor.time_zone}}"
```

This string is an Availability Schedule Key that references an out-of-the-box Availability Schedule, encompassing all times that TCPA allows messages to be sent given a particular region and timezone, assuming assumes `actor. region` describes the user's region by its [State/Province Abbreviation Key](https://www.fs.fed.us/database/feis/format.html) and `actor.region` describes the users timezone by its [TZ database name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).

For more on TCPA compliance, see [TCPA](../../security-and-compliance/tcpa).

## Creating and Managing Multi-Step Journeys

* Steps are subsections of an application flow.
* Each Step must begin with a new Web Flow, but Web Flows and Journey Steps are distinctly different things.
  * Journey Steps can contain any number of Web Flows.

Web Flows are typically built around a specific purpose, such as filling out an individual form or making a single appointment. Meanwhile, Journey Steps conceptualize a broader perspective focused on funnel milestones.

In multi-Step Journeys, users are guided from one Step to another using the [Go to Next Journey Step](../../actions/go-to-next-journey-step-action) Action.
