Automated Water Consumption Tracker - Stored in Sheet and Notify in Slack
Go to WorkflowDescription
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
The iOS shortcut template:
The result in iOS health:
The template demo in Youtube
Key Features
Scheduled Reminders: Automatically sends water reminders at random times every hour.
Intelligent Scheduling: Delays the next reminder if you've recently had water.
AI-Generated Messages: Uses OpenAI to generate friendly and non-repetitive reminder messages.
Data Tracking: Records daily water intake and calculates percentage of goal achievement.
Quick Response: Easily record water intake through Slack buttons.
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:
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
Slack:
Create a Slack app and obtain an API token
Configure permissions for interactive buttons
OpenAI:
Obtain an OpenAI API key
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+"T"+$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-4o-mini
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**: Records water intake data to spreadsheet
Configuration**:
Operation: Append
Document ID: Your Google spreadsheet ID
Sheet Name: log
Column Mapping:
date: {{ $now.format('yyyy-MM-dd') }}
time: {{ $now.format('HH:mm:ss') }}
value: {{ $json.value }}
4.5. Send to Slack with Confirm
Purpose**: Sends confirmation message and provides iOS shortcut link
Configuration**:
Channel: Your Slack channel ID
Message Type: Block
Block UI: Contains confirmation message and iOS Health app button
Reply Settings: Reply to the thread of the original message
Author Information
This workflow was created by darrell_tw_, an engineer focused on AI and Automation.
Contact:
X
Threads
Instagram
Website