โ† Back to Clawdbot Tools
Clawdbot Tools by @kesslerio

google-messages-openclaw-skill

Send and receive SMS/RCS

0
Source Code

Google Messages Browser Skill

Automate SMS/RCS messaging via messages.google.com using the browser tool.

Overview

Google Messages for Web allows you to send/receive texts from your Android phone via browser. This skill automates that interface.

Requirements:

  • Android phone with Google Messages app
  • Phone and computer on same network (for initial QR pairing)
  • Browser profile with persistent session (use openclaw or your preferred profile)

Note: Replace profile=openclaw in examples with your preferred browser profile if different.


Quick Reference

Action Command
Open pairing page browser action=open profile=openclaw targetUrl="https://messages.google.com/web/authentication"
Check session browser action=snapshot profile=openclaw โ€” look for conversation list vs QR code
Take screenshot browser action=screenshot profile=openclaw

Initial Setup (QR Pairing)

First-time setup requires scanning a QR code:

  1. Open Google Messages Web

    browser action=open profile=openclaw targetUrl="https://messages.google.com/web/authentication"
    
  2. Screenshot the QR code and share with user

    browser action=screenshot profile=openclaw
    
  3. User scans with phone:

    • Open Google Messages app on Android
    • Tap โ‹ฎ menu โ†’ "Device pairing" โ†’ "QR code scanner"
    • Scan the QR code
  4. Verify connection โ€” snapshot should show conversation list, not QR code

Important: Enable "Remember this computer" to persist the session.


Sending Messages

  1. Navigate to conversations

    browser action=navigate profile=openclaw targetUrl="https://messages.google.com/web/conversations"
    
  2. Take snapshot and find conversation

    browser action=snapshot profile=openclaw
    

    Look for the contact in the conversation list, note the ref.

  3. Click conversation

    browser action=act profile=openclaw request={"kind": "click", "ref": "<ref>"}
    
  4. Type message (find textarea ref from snapshot)

    browser action=act profile=openclaw request={"kind": "type", "ref": "<input_ref>", "text": "Your message"}
    
  5. Click send (find send button ref)

    browser action=act profile=openclaw request={"kind": "click", "ref": "<send_ref>"}
    

Receiving Messages (Real-time Notifications)

This skill includes a webhook system for real-time incoming SMS notifications.

Components

  1. sms-webhook-server.js โ€” receives notifications, forwards to OpenClaw channels
  2. sms-observer.js โ€” browser script that watches for new messages

Setup

  1. Set environment variables:

    export SMS_NOTIFICATION_TARGET="telegram:YOUR_CHAT_ID"
    export SMS_NOTIFICATION_CHANNEL="telegram"
    
  2. Start webhook server:

    node <skill>/sms-webhook-server.js
    
  3. Inject observer into browser (see references/observer-injection.md)

Systemd Service (Persistent)

cp <skill>/systemd/google-messages-webhook.service ~/.config/systemd/user/
# Edit service file: set SMS_NOTIFICATION_TARGET in Environment=
systemctl --user daemon-reload
systemctl --user enable --now google-messages-webhook

Reading Messages

See references/snippets.md for JavaScript snippets to:

  • Get recent conversations
  • Get messages in current conversation
  • Check session status

Troubleshooting

Problem Solution
QR code shown Session expired, re-pair
Elements not found Google updated UI, check snapshot for new selectors
Send button disabled Message input empty or phone disconnected
Observer not detecting Check browser console for [SMS Observer] logs
Webhook not receiving Verify server running: curl http://127.0.0.1:19888/health

Selectors Reference

Google Messages uses Angular components. These may change with updates.

Element Selector
Conversation list mws-conversations-list
Conversation item mws-conversation-list-item
Message input textarea[aria-label*="message"]
Send button button[aria-label*="Send"]
QR code mw-qr-code

Limitations

  • Phone must be online (messages sync through phone)
  • Browser tab must stay open for notifications
  • Session expires after ~14 days of inactivity
  • Observer lost on page reload (re-inject needed)

Security

  • Webhook listens on localhost only (127.0.0.1)
  • No credentials stored (session in browser cookies)
  • QR pairing links to your phone โ€” treat as sensitive

License

Apache-2.0