# Services

In order to build an automated task within our cozy-stack, we can create *services* which are JavaScript files called from a trigger job.

For instance on Ecolyo, to schedule a mail that alert the user that a new **monthly report** is available in the application, we add a trigger that is launched every month with a *cron* attribute. On that trigger we link a .js script then we instantiate this script with cozy-client.

## Configuration

### Manifest

The service should be described in the manifest.webapp file. it should defined the type, the file and the trigger. See more information in the official doc of Cozy [here](https://docs.cozy.io/en/howTos/dev/services/)

Here is an example of service declaration in the ecolyo manifest:

![Manifest.webapp](/img/services/monthly-service.png)

File location is determined after the build, see [here](https://forge.grandlyon.com/web-et-numerique/factory/llle_project/ecolyo/-/tree/build/services/monthlyReport).

:::note Cron
See the cron definition at [cozy-stack](https://docs.cozy.io/en/cozy-stack/jobs/#cron-syntax).
:::

## Ecolyo services

Service code are located under `src\targets\services`.

## Run services

### On alpha

To run services on alpha, a script `get_instance_triggers.sh` allows you to get triggers associated with services. You can find the corresponding service by looking at the trigger frequency and comparing it with our [manifest.webapp](https://forge.grandlyon.com/web-et-numerique/factory/llle_project/ecolyo/-/blob/dev/manifest.webapp#L171).

Then you need to run the script `launch_instance_trigger.sh`.

### Locally

To run services on a local dev environment, you need to run a build first.

Then you need to run :

```sh
yarn run cozy-konnector-dev -m manifest.webapp <service.js>
# example
yarn run cozy-konnector-dev -m manifest.webapp ./build/services/enedisHalfHourMonthlyAnalysis/ecolyo.js
```

:::danger Expired token error
If you have an "Expired token" error, you should remove `token.json`
:::

More details on the [cozy docs / Services / Execution](https://docs.cozy.io/en/howTos/dev/services/#execution).