skills/claude-skills-open/skills/channels/mass-outreach/SKILL.md
Multi-channel outreach via Telegram/Email/WhatsApp
npx skillsauth add aaaaqwq/agi-super-team mass-outreachInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Mass message sending via Telegram, Email, WhatsApp with lessons learned from previous mistakes.
Mistake: Asked people to write an intro who had already done so.
Solution:
ALWAYS check via Telegram API who has already posted in the "Introduction" topic
DO NOT rely on old CSV data
Mistake: Marked a person as "IN GROUP" when they were not in the group.
Solution:
ALWAYS verify membership via client.get_participants(group)
DO NOT rely on notes in CRM
Mistake: Wrong dates in the message (Sunday 9, Monday 10 instead of 8 and 9).
Solution:
from datetime import datetime, timedelta
today = datetime.now()
# Find the nearest Sunday
days_until_sunday = (6 - today.weekday()) % 7
if days_until_sunday == 0:
days_until_sunday = 7
next_sunday = today + timedelta(days=days_until_sunday)
next_monday = next_sunday + timedelta(days=1)
print(f"Sunday: {next_sunday.strftime('%d.%m')}")
print(f"Monday: {next_monday.strftime('%d.%m')}")
Mistake: Did not check sent message history before the campaign.
Solution:
ALWAYS before sending:
1. Get the list of all potential recipients
2. Check outgoing messages for the last N days
3. Exclude those who have already been contacted
4. Show to the user for confirmation
Rules for Telegram:
Rules for Email:
[ ] 1. Dates verified (day of week = date)
[ ] 2. Recipient list verified via API
[ ] 3. Checked who has already received messages
[ ] 4. Checked who has written an intro (if relevant)
[ ] 5. Template shown to user and approved
[ ] 6. Rate limits configured
[ ] 7. There is a plan in case of error
# 1. Data verification
def verify_recipients(group_name, check_intro=True):
# Get all group participants
participants = client.get_participants(group)
# If needed -- check who has written an intro
if check_intro:
intro_messages = client.get_messages(group, limit=2000)
intro_authors = extract_intro_authors(intro_messages)
# Check who has already been contacted
already_sent = check_sent_messages(participants, days=3)
return {
'all': participants,
'with_intro': intro_authors if check_intro else [],
'already_sent': already_sent,
'to_send': [p for p in participants if p not in already_sent]
}
# 2. Sending with rate limiting
def send_with_delay(recipients, message_template, delay=45):
for i, recipient in enumerate(recipients):
try:
message = personalize(message_template, recipient)
client.send_message(recipient, message)
print(f"✓ {i+1}/{len(recipients)} - sent")
if i < len(recipients) - 1:
time.sleep(delay)
except FloodWaitError as e:
print(f"FloodWait: sleeping {e.seconds}s")
time.sleep(e.seconds)
except Exception as e:
print(f"✗ Error: {e}")
log_error(recipient, e)
| What | Path |
|------|------|
| Telegram sessions | $SALES_PATH/telegram/sessions/ |
| CRM contacts | $CRM_PATH/contacts/ |
| Activities | $CRM_PATH/activities.csv |
| Communities | $CRM_PATH/communities/ |
development
Technology-agnostic prompt generator that creates customizable AI prompts for scanning codebases and identifying high-quality code exemplars. Supports multiple programming languages (.NET, Java, JavaScript, TypeScript, React, Angular, Python) with configurable analysis depth, categorization methods, and documentation formats to establish coding standards and maintain consistency across development teams.
tools
Expert-level browser automation, debugging, and performance analysis using Chrome DevTools MCP. Use for interacting with web pages, capturing screenshots, analyzing network traffic, and profiling performance.
data-ai
Prompt for creating detailed feature implementation plans, following Epoch monorepo structure.
tools
Interactive prompt refinement workflow: interrogates scope, deliverables, constraints; copies final markdown to clipboard; never writes code. Requires the Joyride extension.