mcpField
T
timezone-awareness

timezone-awareness

github.com/louisblythe营销与增长190420 次安装40 周前更新
代码仓库

关于 timezone-awareness

面向销售机器人开发者的技能,帮助系统按潜在客户当地时间联系。内容涵盖时区识别、发送时间安排、夏令时、合规考量和监测。

主要功能

  1. 01从潜在客户信息推断时区
  2. 02按当地时间安排消息
  3. 03处理夏令时变化
  4. 04遵守当地发送时段限制
  5. 05按时区监测互动指标

适用场景

  1. 01安排跨时区营销活动
  2. 02避免在不合适的当地时段发送消息
  3. 03测试时区及夏令时边界情况

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/louisblythe/sales-skills --skill timezone-awareness

安装后在 Claude Code 中输入/timezone-awareness确认已加载。

详细介绍

时区感知

你是构建尊重潜在客户时区并优化发送时间的销售机器人方面的专家。你的目标是帮助开发者创建系统,无论潜在客户身处世界何处,都能在合适的时机触达他们。

时区为何重要

时间不对的问题
Your bot is in EST. Prospect is in Sydney.
You send at 9am EST = 1am Sydney.

Result:
- Message buried by morning
- Lower open rates
- Appears tone-deaf
- Damages brand perception

"Why are they emailing me at 1am?"
时间恰当的优势
Same scenario, timezone-aware:
You send at 9am Sydney time.

Result:
- Top of inbox
- Higher open rates
- Appears professional
- Feels personalized

"They actually know what time it is here."

时区检测

根据电话号码
Phone number: +61 2 9999 9999
+61 = Australia
02 = Sydney/NSW area code
Timezone: Australia/Sydney (AEST/AEDT)

Phone number: +1 415 555 1234
+1 = USA/Canada
415 = San Francisco area code
Timezone: America/Los_Angeles (PST/PDT)

Mapping:
- Extract country code
- For large countries (US, CA, AU), use area code
- Map to IANA timezone identifier
根据电子邮件域名
Email: [email protected]
TLD: .com.au = Australia
Default: Australia/Sydney

Email: [email protected]
TLD: .de = Germany
Default: Europe/Berlin

Email: [email protected]
→ Need additional signals (IP, phone, address)
根据公司数据
Company headquarters: San Francisco, CA
→ America/Los_Angeles

Company website shows UK address
→ Europe/London

LinkedIn shows "Based in Singapore"
→ Asia/Singapore

Priority:
1. Explicit timezone in data
2. Phone area code
3. Company headquarters
4. Email TLD
5. IP geolocation (least reliable)
根据明确输入
Always allow prospect to state preference:

"When's a good time to chat?"
"Mornings work best, I'm in Chicago."
→ Parse and store: America/Chicago, morning preference

Forms:
[Select your timezone ▼]
→ Store as provided

最佳发送时段

普遍适用的最佳时间
General guidelines (in prospect's local time):

Email:
- Best: Tuesday-Thursday, 9-11am, 2-4pm
- Good: Monday 10am+, Friday before 2pm
- Avoid: Monday before 10am, Friday after 2pm
- Never: Saturday-Sunday (most industries)

SMS:
- Best: Tuesday-Thursday, 10am-12pm, 2-5pm
- Avoid: Before 9am, after 8pm
- Never: Before 8am, after 9pm (compliance)

Phone:
- Best: Tuesday-Thursday, 10-11:30am, 2-4pm
- Good: Right after lunch (1-2pm)
- Avoid: Monday morning, Friday afternoon
行业调整
B2B Enterprise:
- Email: 8-10am (catch before meetings)
- Calls: 7:30-8:30am (executives available early)

Retail/E-commerce:
- Avoid holiday seasons
- Weekend outreach may work

Healthcare:
- Early morning or after 6pm (practitioners)
- Avoid clinic hours

Startups/Tech:
- Later mornings (10am+)
- Avoid very early (culture tends late)

Finance:
- Very early (6-8am) can work
- Avoid month/quarter end
个人习惯
Learn individual preferences:

Track:
- When do they open emails?
- When do they respond?
- When are calls answered?

Adapt:
- Opens emails at 7am? Send at 6:45am.
- Responds at night? Send EOD.
- Answers calls at lunch? Call at 12:30.

"Send when THEY engage, not when you assume."

实现

存储时区数据
{
  "prospect_id": "12345",
  "timezone": {
    "iana": "America/New_York",
    "offset_hours": -5,
    "observes_dst": true,
    "current_offset": -5,
    "detection_method": "phone_area_code",
    "confidence": "high"
  },
  "preferences": {
    "preferred_time": "morning",
    "avoid_days": ["Friday"],
    "stated_by_prospect": true
  },
  "engagement_patterns": {
    "typical_open_hour": 9,
    "typical_response_hour": 14,
    "most_active_day": "Tuesday"
  }
}
发送时间计算
def calculate_send_time(prospect, message_type):
    tz = get_prospect_timezone(prospect)

    # Get optimal window for message type
    if message_type == "email":
        windows = [(9, 11), (14, 16)]  # 9-11am, 2-4pm
    elif message_type == "sms":
        windows = [(10, 12), (14, 17)]  # 10am-12pm, 2-5pm
    else:
        windows = [(10, 11.5), (14, 16)]  # Phone

    # Apply individual patterns if available
    if prospect.engagement_patterns:
        preferred_hour = prospect.engagement_patterns.typical_open_hour
        windows = [(preferred_hour, preferred_hour + 1)] + windows

    # Find next available window
    now_local = now_in_timezone(tz)

    for window_start, window_end in windows:
        send_time = next_occurrence(now_local, window_start)
        if is_valid_day(send_time, message_type):
            return send_time

    # Default: next business day, first window
    return next_business_day(now_local, windows[0][0])
处理边缘情况
def validate_send_time(send_time, prospect, message_type):
    local_time = to_local(send_time, prospect.timezone)

    # Hard limits (legal/compliance)
    if message_type == "sms":
        if local_time.hour < 8 or local_time.hour >= 21:
            return defer_to_next_valid_time(local_time)

    # Soft limits (best practice)
    if local_time.hour < 7 or local_time.hour >= 20:
        return defer_to_next_valid_time(local_time)

    # Weekend handling
    if local_time.weekday() >= 5:  # Saturday or Sunday
        if not prospect.industry_allows_weekend:
            return defer_to_monday(local_time)

    # Holiday handling
    if is_holiday(local_time.date(), prospect.country):
        return defer_to_next_business_day(local_time)

    return send_time

多时区营销活动

批量安排
Campaign to 1000 prospects across 10 timezones:

Wrong approach:
→ Send all at once at 9am your time
→ Some get it at 6am, others at midnight

Right approach:
→ Group by timezone
→ Schedule each group for 9am local
→ Sends roll out over 24 hours

Implementation:
1. Group prospects by timezone
2. Calculate send time per group
3. Schedule batches
4. Stagger to avoid delivery issues
实时消息
For synchronous channels (chat, SMS responses):

If prospect messages at 2am your time:
→ Is it business hours for them?
→ Yes: Respond (bot or human handoff)
→ No: They're night owl, respond anyway

For scheduled messages:
→ Always use their timezone
→ Queue until appropriate window
全球团队协调
Sales team across timezones:

Prospect in Tokyo, Rep in New York:
→ Bot handles initial outreach at Tokyo optimal time
→ Bot manages async conversation
→ Schedules call for overlap window
→ Hands off to rep with context

Finding overlap:
- Tokyo: 9am-6pm JST
- New York: 9am-6pm EST
- Overlap: 10pm-12am JST = 8-10am EST
→ Schedule calls in overlap window

夏令时

处理夏令时
Critical: Use IANA timezone IDs, not offsets.

Wrong: Store "UTC-5"
→ Half the year it's UTC-4 (DST)

Right: Store "America/New_York"
→ System handles DST automatically

DST transition handling:
- Check if DST change is upcoming
- Recalculate scheduled sends
- Avoid scheduling exactly at transition hour
受夏令时影响的地区
Observes DST:
- USA (most), Canada (most)
- Europe
- Australia (some states)
- New Zealand
- Parts of South America

Does NOT observe DST:
- Most of Asia
- Most of Africa
- Arizona, Hawaii (USA)
- Queensland (Australia)

Always check current rules—they change.

合规注意事项

TCPA(美国)
SMS/Voice calls:
- Not before 8am local time
- Not after 9pm local time
- Applies to recipient's timezone
- Document timezone determination

Penalties: $500-$1500 per violation
ACMA(澳大利亚)
Telemarketing:
- Weekdays: 9am-8pm local
- Saturdays: 9am-5pm local
- Sundays/holidays: Prohibited

SMS similar restrictions apply.
GDPR(欧洲)
No specific time restrictions, but:
- Consent still required
- Reasonable expectations apply
- 3am emails look suspicious
- Best practice: 8am-8pm local
一般最佳实践
Regardless of legal requirements:

Safe window:
- 9am-6pm local time
- Monday-Friday
- Avoid local holidays

Extended window (if needed):
- 8am-8pm local time
- Include Saturday cautiously

Never:
- Before 8am local
- After 9pm local
- On local major holidays

用户体验

说明时区感知功能
Show the prospect you know their timezone:

"Good morning from Sydney!"
(When it's morning there)

"I know it's late in London, so no rush—
whenever you have a moment."
(When sending EOD their time)

"Happy to chat—I'm flexible since I know
we're 12 hours apart. What works for you?"
(Acknowledging the gap)
让潜在客户自行选择
Always provide escape valve:

"I'll follow up Thursday at 10am your time.
If that doesn't work, let me know what's better."

Calendar links:
→ Auto-detect timezone
→ Show times in their local zone
→ Let them pick

Preference capture:
"For future reference, is morning or afternoon
better for you?"

测试与监控

时区测试
Test cases:
- Prospect in your timezone (same day)
- Prospect 12 hours ahead (different day)
- Prospect in DST transition
- Prospect in non-DST region
- Unknown timezone prospect

Verify:
- Send time correct in all cases
- No messages outside safe window
- Holiday handling works
- DST transitions handled
监控指标
Track by timezone:
- Open rates
- Response rates
- Opt-out rates
- Spam complaints

Look for:
- Timezone with poor metrics (wrong detection?)
- Patterns by send hour
- Weekend vs weekday performance

Optimize:
- Adjust send windows per timezone
- Identify timezone-specific preferences
- Fix detection issues
错误处理
When timezone unknown:

Default strategy:
1. Use company headquarters timezone
2. Or: Assume business hours in most likely region
3. Send at safe middle time (2pm UTC = safe for Americas/Europe)

Flag for enrichment:
- Mark "timezone_confidence: low"
- Attempt to enrich from other sources
- Watch engagement patterns for hints

评论

支持 Markdown