> ## Documentation Index
> Fetch the complete documentation index at: https://forest-docs-cli-reference-headless-commands.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Send an SMS with Twilio and Zapier

This example shows you how to create a Smart Action `"Send SMS"` that triggers a [Zapier webhook](https://zapier.com/zapbook/webhook/) to send an SMS message with Twilio.

<img src="https://mintcdn.com/forest-docs-cli-reference-headless-commands/pDAjbNVKIKNmsjpB/images/legacy/javascript-agents/image%20(548).png?fit=max&auto=format&n=pDAjbNVKIKNmsjpB&q=85&s=43dce634ad635f77270a8bf783e48b5b" alt="" width="1395" height="632" data-path="images/legacy/javascript-agents/image (548).png" />

## Requirements

* An admin backend running on forest-express-sequelize
* A Zapier account
* [node-fetch](https://www.npmjs.com/package/node-fetch) npm package

## How it works

### Directory: /models

This directory contains the `users.js` file where the model is declared.

```javascript theme={null}
module.exports = (sequelize, DataTypes) => {
  const { Sequelize } = sequelize;
  const Users = sequelize.define(
    'users',
    {
      email: {
        type: DataTypes.STRING,
      },
      phoneNumber: {
        type: DataTypes.STRING,
      },
    },
    {
      tableName: 'users',
      timestamps: false,
      schema: process.env.DATABASE_SCHEMA,
    }
  );

  Users.associate = (models) => {};

  return Users;
};
```

### **Directory: /forest**

This directory contains the `users.js` file where the Smart Action `Send SMS`is declared.

```javascript theme={null}
const { collection } = require('forest-express-sequelize');

collection('users', {
  actions: [
    {
      name: 'Send SMS',
      type: 'single',
    },
  ],
});
```

### **Directory: /routes**

This directory contains the `users.js` file where the implementation of the route is handled. The `POST /forest/actions/send-sms` API call is triggered when you click on the Smart Action in the Forest UI. The route implementation retrieves all the necessary data and triggers another API call directly to a [Zapier hook](https://zapier.com/zapbook/webhook/).

```javascript theme={null}
const fetch = require('node-fetch');
//...

// Send SMS
router.post('/actions/send-sms', (request, response) => {
  let userId = request.body.data.attributes.ids[0];
  return users
    .findByPk(userId)
    .then((user) => {
      user = user.toJSON();
      return fetch(
        'https://hooks.zapier.com/hooks/catch/4760242/o1uqz0r/silent',
        {
          method: 'POST',
          body: JSON.stringify({
            phoneNumber: user.phoneNumber,
          }),
          headers: { 'Content-Type': 'application/json' },
        }
      );
    })
    .then(() => {
      response.status(204).send();
    });
});

//...

module.exports = router;
```
