Automated Water Consumption Tracker - Stored in Sheet and Notify in Slack - n8n Workflow | Neura Market
Automated Water Consumption Tracker - Stored in Sheet and Notify in Slack
# Water Reminder Workflow
This workflow demonstrates how to use **n8n** and **Slack** to build an intelligent water drinking reminder system, combined with **Google Sheets** for data recording and **OpenAI** for generating personalized reminder messages.
---
[Google Sheet Template](https://docs.google.com/spreadsheets/d/1cMf03l3Ae3vo-4w8yeaUvSh9dB7CLM7CFUb2y4BmqwY/edit?usp=sharing)
The iOS shortcut template:

**The result in iOS health:**
 [The template demo on YouTube](https://www.youtube.com/watch?v=h2_QO5gxdts)
---
## Key Features
1. **Scheduled Reminders**: Automatically sends water reminders at random times every hour.
2. **Intelligent Scheduling**: Delays the next reminder if you've recently had water.
3. **AI-Generated Messages**: Uses OpenAI to generate friendly and non-repetitive reminder messages.
4. **Data Tracking**: Records daily water intake and calculates the percentage of goal achievement.
5. **Quick Response**: Easily record water intake through Slack buttons.
6. **iOS Integration**: Provides iOS shortcut links to sync data with the Health app.
---
## Pre-Configuration Requirements
To use this workflow, you need to set up the following:
1. **Google Sheets**:
- Create a Google spreadsheet with `log` and `setting` sheets
- The `log` sheet should include `date`, `time`, and `value` columns
- The `setting` sheet is used to store daily water intake goals
2. **Slack**:
- Create a Slack app and obtain an API token
- Configure permissions for interactive buttons
3. **OpenAI**:
- Obtain an OpenAI API key
4. **iOS Shortcut** (optional):
- Create an iOS shortcut named `darrell_water` for recording health data
---
## Node Configurations
### 1. Scheduled Triggers and Data Collection
#### 1.1. Schedule Trigger
- **Purpose**: Triggers water reminders on schedule
- **Configuration**:
- **Cron Expression**: `0 {{ Math.floor(Math.random() * 11) }} 8-23 * * *`
- Triggers at a random minute every hour, only between 8 AM and 11 PM
#### 1.2. Google Sheets - Get Target
- **Purpose**: Retrieves daily water intake goal
- **Configuration**:
- **Document ID**: Your Google spreadsheet ID
- **Sheet Name**: `setting`
#### 1.3. Google Sheets - Get Log
- **Purpose**: Retrieves today's water intake records
- **Configuration**:
- **Document ID**: Your Google spreadsheet ID
- **Sheet Name**: `log`
- **Filter Condition**: `date` equals today's date `{{ $now.format(yyyy-MM-dd) }}`
#### 1.4. Summarize
- **Purpose**: Calculates total water intake for today
- **Configuration**:
- **Fields to Summarize**: `value` (sum)
#### 1.5. Limit
- **Purpose**: Gets the most recent water intake record
- **Configuration**:
- **Keep**: Last items
---
### 2. Intelligent Reminder Logic
#### 2.1. Combine Data
- **Purpose**: Merges target and actual water intake data
- **Configuration**:
- **Combine By**: Combine by position
- **Number of Inputs**: 3
#### 2.2. If
- **Purpose**: Checks if water was consumed recently
- **Configuration**:
- **Condition**:
- `{{ DateTime.fromISO($json.date++$json.time).format(yyyy-MM-dd HH:mm:ss) }}` is after `{{ $now.minus(30, minutes) }}`
#### 2.3. Wait
- **Purpose**: Randomly delays the reminder if water was consumed recently
- **Configuration**:
- **Wait Time**: `{{ Math.floor(Math.random() * 1) + 1 }}` minutes
---
### 3. AI Message Generation and Sending
#### 3.1. OpenAI
- **Purpose**: Generates personalized water reminder messages
- **Configuration**:
- **Model**: `gpt-3.5-turbo`
- **Messages**:
- System prompt: Requests responses in Traditional Chinese and in JSON format
- User prompt: Includes information about last water time, current time, goal, and progress
- **Temperature**: 1
#### 3.2. Slack Send Drink Notification
- **Purpose**: Sends water reminders to Slack channel
- **Configuration**:
- **Channel**: Your Slack channel ID
- **Message Type**: Block
- **Block UI**: Contains AI-generated reminder message and water amount buttons (100ml, 150ml, 200ml, 250ml, 300ml)
---
### 4. User Interaction and Data Recording
#### 4.1. Slack Drink Webhook
- **Purpose**: Receives user interactions when water buttons are clicked
- **Configuration**:
- **HTTP Method**: `POST`
- **Path**: `slack-water-webhook`
#### 4.2. Slack Action Payload
- **Purpose**: Parses Slack interaction data
- **Configuration**:
- **Mode**: Raw
- **JSON Output**: `{{ $json.body.payload }}`
#### 4.3. Slack Action Drink Data
- **Purpose**: Extracts water amount and message information
- **Configuration**:
- **Assignments**:
- `value`: `{{ $json.actions[0].value }}`
- `message_text`: `{{ $json.message.text }}`
- `shortcut_url`: `shortcuts://run-shortcut?name=darrell_water&input=`
- `shortcut_url_data`: JSON containing water amount and time
- `message_ts`: `{{ $json.container.message_ts }}`
#### 4.4. Google Sheets
- **Purpose**:
Platform
n8n
Category
Health & Fitness
Price
Free
Creator
darrell_tw
if
set
wait
limit
merge
slack
webhook
summarize
stickyNote
googleSheets
How to import this workflow into n8n
1Purchase or download the workflow to get the n8n workflow JSON file.
2In your n8n instance, open Workflows and choose "Import from File" (or paste the JSON with Ctrl+V on the canvas).
3Open each node marked with a credential warning and connect your own accounts and API keys.
4Run the workflow once manually to verify the data flow, then toggle it to Active.