Wechat File Helper

Automation

WeChat File Helper automation. Use when: - Check if filehelper.weixin.qq.com is open in browser - Open the page if not already open - Capture QR code and sen...

Install

openclaw skills install wechat-helper

WeChat File Helper Automation Skill

Automate WeChat File Helper (filehelper.weixin.qq.com) to send text messages. Handles login QR code automatically.

Key Features:

  • Pure browser automation (no API keys needed)
  • Automatic QR code detection and delivery
  • Support for multiple messaging channels
  • Cron-ready monitoring scripts

When to Use

USE this skill when:

  • Send text messages to WeChat File Helper
  • Need automatic QR code handling when logged out
  • Want to use existing WeChat account (not personal)
  • Integrate with cron for periodic messages

DON'T use this skill when:

  • Sending to personal WeChat accounts (ToS violation)
  • Need real-time messaging (use API directly)
  • Uploading files (not supported)
  • Need message history/read receipts

Requirements

  • Browser extension enabled (openclaw browser status shows enabled: true)
  • WeChat File Helper account (not personal WeChat)
  • At least one messaging channel configured (for QR delivery)

Workflow Overview (5 Steps)

┌─────────────────────────────────────────────────────────────────┐
│  1. Open filehelper.weixin.qq.com or reuse existing tab         │
└─────────────────────────────────┬───────────────────────────────┘
                                  │
                                  ▼
┌─────────────────────────────────────────────────────────────────┐
│  2. Check login status - QR code needed?                         │
│     - URL ends with `/_/` → Logged in                           │
│     - Base URL → QR code displayed (logged out)                  │
└─────────────────────────────────┬───────────────────────────────┘
                                  │
                                  ▼
┌─────────────────────────────────────────────────────────────────┐
│  3a. If logged out: Capture QR and send to user                 │
│     - Screenshot QR code                                        │
│     - Send via available channel (WhatsApp/iMessage/Slack)      │
│     - Wait for user to scan                                     │
└─────────────────────────────────┬───────────────────────────────┘
                                  │
                                  ▼
┌─────────────────────────────────────────────────────────────────┐
│  3b. If logged in: Type message in textarea                     │
└─────────────────────────────────┬───────────────────────────────┘
                                  │
                                  ▼
┌─────────────────────────────────────────────────────────────────┐
│  4. Click send button or press Enter                             │
└─────────────────────────────────┬───────────────────────────────┘
                                  │
                                  ▼
┌─────────────────────────────────────────────────────────────────┐
│  5. Confirm message sent (check for success indicator)           │
└─────────────────────────────────────────────────────────────────┘

Step 1: Open or Reuse Tab

# Check if tab already exists
browser action=tabs targetUrl="https://filehelper.weixin.qq.com/"

# Open new tab if needed
browser action=open targetUrl="https://filehelper.weixin.qq.com/"
targetId="<new-target-id>"

Step 2: Check Login Status

# Check URL to determine state
browser action=evaluate fn="window.location.href" targetId="<targetId>"

Login Status Indicators

URL PatternStatusAction
filehelper.weixin.qq.com/_/✅ Logged InProceed to Step 3b
filehelper.weixin.qq.com/❌ Logged OutProceed to Step 3a

Step 3a: Capture and Send QR Code (When Logged Out)

# Capture QR code screenshot
browser action=screenshot path="/tmp/wechat-qr.png" targetId="<targetId>"

# Send via first available channel
message action=send to="<owner-phone>" media="/tmp/wechat-qr.png"

# Or specify channel explicitly
message action=send channel="whatsapp" to="+1234567890" media="/tmp/wechat-qr.png"
message action=send channel="telegram" to="@username" media="/tmp/wechat-qr.png"
message action=send channel="slack" to="#channel" media="/tmp/wechat-qr.png"

echo "📱 QR code sent. Waiting for scan..."

# Poll for login success (every 5 seconds, max 60 attempts)
attempts=0
while [ $attempts -lt 60 ]; do
  sleep 5
  url=$(browser action=evaluate fn="window.location.href" targetId="<targetId>")
  if echo "$url" | grep -q "_/"; then
    echo "✅ Login successful!"
    break
  fi
  attempts=$((attempts + 1))
done

Step 3b: Type Message (When Logged In)

# Take snapshot to get refs
browser action=snapshot targetId="<targetId>"

# Type message
browser action=act kind="type" ref="input-area" text="Hello from OpenClaw! 🦞" targetId="<targetId>"

Step 4: Send Message

# Option 1: Click send button
browser action=act kind="click" ref="send-btn" targetId="<targetId>"

# Option 2: Press Enter
browser action=act kind="press" key="Enter" targetId="<targetId>"

Step 5: Confirm Success

# Check for success indicator
browser action=evaluate fn="{
  const sent = document.body.innerText.includes('已发送') || 
               document.body.innerText.includes('sent') ||
               document.querySelector('.success, [class*=\"success\"]');
  !!sent;
}" targetId="<targetId>"

Complete Scripts

Quick Send (Single Command)

# Send a message - handles login automatically
wechat "Hello from OpenClaw!"

Full Workflow Script

#!/bin/bash
# wechat-send.sh - Complete WeChat File Helper automation

MESSAGE="$1"
QR_FILE="/tmp/wechat-qr.png"
WEBSITE="https://filehelper.weixin.qq.com/"
TARGET_ID=""

echo "🔍 Checking WeChat File Helper status..."

# Step 1: Open or get existing tab
tabs=$(browser action=tabs targetUrl="$WEBSITE")
if echo "$tabs" | grep -q "targetId"; then
  TARGET_ID=$(echo "$tabs" | grep -o 'targetId="[^"]*"' | head -1 | cut -d'"' -f2)
  echo "✅ Using existing tab: $TARGET_ID"
else
  result=$(browser action=open targetUrl="$WEBSITE")
  TARGET_ID=$(echo "$result" | grep -o 'targetId="[^"]*"' | cut -d'"' -f2)
  echo "✅ Opened new tab: $TARGET_ID"
  sleep 2
fi

# Step 2: Check login status
url=$(browser action=evaluate fn="window.location.href" targetId="$TARGET_ID")

if echo "$url" | grep -q "_/"; then
  echo "✅ Already logged in"
else
  echo "❌ Not logged in - capturing QR..."
  
  # Capture QR code
  browser action=screenshot path="$QR_FILE" targetId="$TARGET_ID"
  
  # Send QR via owner's channel (set OWNER_PHONE env var)
  OWNER_PHONE="${OWNER_PHONE:-+1234567890}"
  message action=send to="$OWNER_PHONE" media="$QR_FILE" \
    -m "WeChat File Helper login required. Please scan QR code."
  
  echo "📱 QR code sent to $OWNER_PHONE"
  echo "⏳ Waiting for scan... (run again after scanning)"
  exit 0
fi

# Step 3: Type message
browser action=snapshot targetId="$TARGET_ID"
browser action=act kind="type" ref="input-area" text="$MESSAGE" targetId="$TARGET_ID"
echo "✅ Message typed"

# Step 4: Send
browser action=act kind="click" ref="send-btn" targetId="$TARGET_ID"
echo "✅ Send button clicked"

# Step 5: Confirm
sleep 1
result=$(browser action=evaluate fn="{
  document.body.innerText.includes('sent') || 
  document.body.innerText.includes('已发送')
}" targetId="$TARGET_ID")

if [ "$result" = "true" ]; then
  echo "✅ Message sent successfully!"
else
  echo "⚠️ Message may not have sent - check manually"
fi

Cron Monitoring Script

#!/bin/bash
# cron-wechat.sh - Run every minute via cron

# Set owner phone for QR delivery
OWNER_PHONE="${OWNER_PHONE:-+1234567890}"

# Source main script
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
source "$SCRIPT_DIR/monitor.sh"

# Log
echo "$(date): WeChat File Helper check"

Common Selectors

ElementSelectorRef
Message inputtextarea or div[contenteditable]input-area
Send buttonbutton[type="button"] or .send-btnsend-btn
QR code container.qr-container or [class*="qr"]qr-code
Success indicatorText containing "已发送" or "sent"-
User avatar[class*="avatar"] or [class*="user"]-

Page States

StateURLDescription
Logged Outhttps://filehelper.weixin.qq.com/Shows QR code for WeChat scan
Logged Inhttps://filehelper.weixin.qq.com/_/Chat interface ready

Auto QR Delivery via Channels

The skill detects configured channels and sends QR to the first available:

# Check configured channels
openclaw config channels

# Priority order: WhatsApp → Telegram → Slack → First available
message action=send to="+1234567890" media="/tmp/wechat-qr.png"

Limitations

  • No File Uploads: File button clicks may fail or trigger unwanted dialogs
  • No Message History: Cannot read past messages
  • Session Expiry: May need re-login after inactivity (~1-2 hours)
  • QR Expiry: QR refreshes every ~2 minutes if not scanned
  • ToS Warning: Using personal WeChat accounts violates WeChat ToS
  • No Group Support: File Helper is 1-on-1 only
  • Rate Limiting: May be throttled on rapid message sending

Troubleshooting

IssueSolution
Can't find inputRun snapshot to refresh refs
Send button not workingTry pressing Enter instead
Session expiredQR code shown, re-scan to login
Wrong refs after reloadPage reload resets refs
QR not sendingCheck configured channels
Messages not arrivingVerify recipient is correct
Cron not workingCheck crontab -e entry
Browser not startingRun openclaw browser status

Scripts

ScriptPurpose
scripts/monitor.shMain monitoring script
scripts/capture_qrcode.shCapture QR code only
scripts/cron-wechat.shCron wrapper for monitoring

Environment Variables

VariableDescriptionDefault
OWNER_PHONEPhone for QR delivery+1234567890

See Also

  • openclaw browser status - Check browser extension
  • openclaw config channels - List messaging channels
  • chat-deepseek - Similar automation for DeepSeek
  • imsg - Send results to iMessage
  • whatsapp-login - WhatsApp QR login