# Other services

> This page is about FlutterFlow (the app builder you use by describing your app), not FlutterFlow Studio.

URL: https://docs.flutterflow.io/ffx/more-services

Connect Resend, Airtable, Notion, Discord or Telegram, and then ask the agent for a feature that sends email, posts a message, or reads and adds records.

Add a feature that sends email with Resend, posts to Discord, messages people from your Telegram bot, or reads and adds records in Airtable or Notion. Your app calls each service through a [connection](https://docs.flutterflow.io/ffx/glossary#backend-and-data) to your own account.

You need an account at the service.

## What each service does {#what-it-does}

Each service offers your app a fixed set of actions:

| Service | What your app can do |
|---|---|
| **Resend** | Send an email from an address on a domain that you verified in Resend. |
| **Airtable** | Read records in a table, optionally only the ones that a view shows or a formula matches, and add records. Each read returns up to 100 records. Your app can't change or delete records. |
| **Notion** | Read rows in a database that you shared with your integration, and add rows. Each read returns up to 100 rows. Your app can't change or delete rows. |
| **Discord** | Post a message to the channel that your webhook belongs to. |
| **Telegram** | Send a message from your bot to a person, a group, or a channel. |

## Connect the service

Each service connects with one value that you paste:

| Service | What you enter | Where to find it |
|---|---|---|
| **Resend** | **API key**, which starts with `re_`. | Create one with sending access on Resend's API Keys page. |
| **Airtable** | **Personal access token**, which starts with `pat`. | Create one on Airtable's personal access tokens page with the scopes `data.records:read`, `data.records:write`, and `schema.bases:read`, and give it access to each base that your app uses. |
| **Notion** | **Internal integration secret**, which starts with `ntn_`, or `secret_` for an older integration. | Create an integration on Notion's integrations page. Then share each database that your app uses with it, from the database's ⋯ › Connections. |
| **Discord** | **Webhook URL**. | In Discord, go to Server Settings › Integrations › Webhooks › New Webhook › Copy Webhook URL. Create the webhook on a text channel: Discord refuses a webhook on a forum channel. |
| **Telegram** | **Bot token**. | Use the token that @BotFather gave you when you created the bot. To see it again, open @BotFather › /mybots › your bot › API Token. |

To connect the service:

1. Open **Project Settings › Connections**.
2. Find the service, and turn on its switch.
3. Paste the value into the dialog, and click **Connect**. If the dialog first lists the service from your other apps, choose the row that starts with **Paste**, under **Or connect another**.

The service checks the value before FlutterFlow saves it, and FlutterFlow never shows it again. To reuse a connection from another app, see [Connect a service](https://docs.flutterflow.io/ffx/connect-a-service).

<Mock name="connect-notion" alt="The Connect Notion dialog with the empty Internal integration secret field, its hint open from the info mark, Find it, and Encrypted, Cancel and Connect." />

## Recipients and access {#who-receives}

Your app's calls run on your account, so each feature sets who receives every email or message, and which base, table, or database it uses. People who use your app can't send to, or read from, anything that the feature doesn't allow: at most, they choose from the recipients or tables that you name.

In your request, name the recipient address and sender, the Discord channel (which the webhook sets), the Telegram chat, or the Airtable base and table or the Notion database.

Only people who are signed in to your app can make it send an email, post a message, or add a record or a row.

## What to ask

In your request, tell the agent what the feature does, what triggers it, and where it sends or saves. Here's an example request for each service.

### Resend {#resend}

> Example request: "When a signed-in person submits the feedback form, email their message to me at hello@example.com from support@example.com through Resend."

The sender address must be on a domain that you verified in Resend.

### Airtable {#airtable}

> Example request: "Show the records from the Vendors table in my Airtable base on a new Vendors screen. When a signed-in person adds a vendor, add a record to that table."

The token works only with the bases that you gave it access to when you created it.

### Notion {#notion}

> Example request: "Show the rows of my Budget goals database in Notion on the Goals screen, and add a row when a signed-in person saves a new goal."

Your app can't read or write people, relations, files, or formula properties. A row's value for one of these comes back empty.

### Discord {#discord}

> Example request: "When a signed-in person adds a transaction over 500, post the payee and the amount to my Discord channel."

Mentions in a message, such as `@everyone`, show in the channel but don't notify anyone.

### Telegram {#telegram}

> Example request: "I just sent my Telegram bot a message. Find that chat, and send me a message there when a monthly budget goes over its limit."

Your bot can message a person only after they start a chat with it. It can message a group after you add it to the group, and a channel after you make it an administrator there.

To find a chat, the agent reads the chats that messaged or added your bot in the last 24 hours. Before you ask, send your bot a message, or add it to the group or channel.

## Agent questions {#what-the-agent-may-ask-you}

If the service isn't connected, the agent asks you to connect it in a card labeled **Connect** above the message box, with a button such as **Connect Resend**. Connect the service there, or ask an owner to connect it. See [Connect a service](https://docs.flutterflow.io/ffx/connect-a-service).

## Review {#check-the-result}

After the agent finishes, read the turn's [**Summary**](https://docs.flutterflow.io/ffx/what-changed#summary) and review its [**Changes**](https://docs.flutterflow.io/ffx/what-changed#changes-tab). Check the affected screens in **Screens**, and try the change in **Preview**. If the change uses records or sign-in, test it with [the thread's own data in **Data**](https://docs.flutterflow.io/ffx/thread-data).

After you push a backend change, check the result in **Backend**.

Calls from the preview are real: testing sends real emails and messages, and adds real records and rows. While you test, send to your own address, chat, or a test channel. See [How connections work](https://docs.flutterflow.io/ffx/connections#preview-calls-are-real).

## Push {#push-it}

After you test the feature, [push the changes to your app](https://docs.flutterflow.io/ffx/push).

## Next steps {#then}

- To replace the key or disconnect the service, see [Manage connections](https://docs.flutterflow.io/ffx/manage-connections).
- To see every service that you can connect and its call limits, see [Available services](https://docs.flutterflow.io/ffx/services).

## Troubleshooting {#if-something-goes-wrong}

- **The service refuses your key, token, or webhook URL:** see [A service refuses your key](https://docs.flutterflow.io/ffx/troubleshoot-connections#key-refused).
- **Airtable or Notion can't find a base, table, or database:** give your Airtable token access to the base, or share the Notion database with your integration from the database's ⋯ › Connections.
- **Resend refuses to send:** check that the sender address is on a domain that you verified in Resend.
- **Your Telegram bot can't message someone:** the person must start a chat with your bot first. For a group, add the bot to it, and for a channel, make the bot an administrator.
- **The agent can't find your Telegram chat:** send your bot a message, and then ask again. The agent can't find chats this way while your bot has a webhook set.
- **Discord stops accepting messages:** the webhook was deleted or its URL was reset. Create a new webhook in the channel, and connect Discord again with its URL.
- **Your app shows a message about the service:** see [Messages shown in your app](https://docs.flutterflow.io/ffx/troubleshoot-connections#app-messages).
