# Setting Timers

The [Start Timer](../../actions/the-start-timer-action) Action can be used to run Action Chains at designated times. Timers can be set to fire some number of time units from the moment they're set or at a specific [DateTime](../../variable-data-types/the-datetime-variable-data-type), and they provide options to enforce [TCPA](../../security-and-compliance/tcpa) compliance as well.&#x20;

For example, if configuring a Timer to send a reminder to a customer five minutes before their selected call time, this can be done as follows by utilizing the [SUBTRACT\_FROM\_DATETIME](../../airscript-expressions/datetime-functions/subtract_from_datetime) function:

![](https://3333962744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbnBffrSN2FHLC5cM89AM%2Fuploads%2Fgit-blob-b1d1c4c6b580eadb86888fd98ec15dca09911ce9%2Fsetting-timers-v183-0.png?alt=media)

But sometimes, that reminder may be set to send outside of TCPA-compliant hours. In order to comply by TCPA restrictions, Timers have the option to pass in a TCPA compliant [Availability Schedules](../../studio/studio/builder-bar/schedules-builder) from the customer's timezone:

![](https://3333962744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbnBffrSN2FHLC5cM89AM%2Fuploads%2Fgit-blob-0d16a0d741a1cb4d46b02a3389ec9a12ef23bf4c%2Fsetting-timers-v183-1.png?alt=media)

From there, under **If time is not available**, you can define how the Timer will fire instead:

<figure><img src="https://3333962744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbnBffrSN2FHLC5cM89AM%2Fuploads%2Fgit-blob-06dc954480fdeb017f0b305ab508476020a02a72%2Fsetting-timers-v183-2.png?alt=media" alt="" width="250"><figcaption></figcaption></figure>

Once you have inserted a Start Timer Action into your Action Chain, you can nest Actions with it by clicking on the '+' icon to its right:

<figure><img src="https://3333962744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbnBffrSN2FHLC5cM89AM%2Fuploads%2Fgit-blob-ad662084212687c78deb7f7160a88ca35553b31a%2Fsetting-timers-v183-3.png?alt=media" alt="" width="250"><figcaption></figcaption></figure>

Any number of Actions can be nested within a Start Timer Action. These Actions will be taken if and only if the Timer is fired, and they will be taken from top to bottom in the order they were listed, as if they were a self-contained Action Chain.

## Best Practices using Timers

* When using Timers for customer reminders, it is always good practice to comply by TCPA restrictions. Check out [TCPA](../../security-and-compliance/tcpa) for more information.
* Timer Keys must be unique across the application when creating Timers.
* It is good practice to use the [Stop Timer](../../actions/the-stop-timer-action) Action when the Timer is no longer needed in the customer Journey. Don't rely on session management to cancel the timers.
* Build out Timers that are tied to Events. This enables you to have full control over the inputs and management of your Timers.
* Timers only have access to data that is tied to the client state. If a Timer is created in an Event, data cannot be passed from the Event namespace to an Action in the Timer. If passing data from the Event namespace, data must be stored in a temporary variable and then passed to the Actions associated with the Timer.
