Meeting Scheduler Skill
Minimum Model
Any model that can follow numbered steps. For timezone reasoning or complex constraints, use a medium model.
Full Flow (6 Steps)
Step 1 — Understand the Request
Before acting, confirm:
- - Who to meet with
- Duration (default: 30 min if not specified)
- Timeframe ("this week", "next week", "mornings only", etc.)
- Meeting type (video, in-person, phone)
If the request is vague (e.g. "set up a call with Jane") → ask one clarifying question before proceeding.
Step 2 — Find the Other PA
Check data/pa-directory.json:
CODEBLOCK0
If no PA found → skip to Step 4 and contact the person directly by email.
Step 3 — Check Your Owner's Availability
CODEBLOCK1
Step 4 — Contact the Other PA
Propose 3–5 specific slots:
CODEBLOCK2
If no response within 2 hours on a business day → follow up once.
If still no response after 4 hours → tell your owner and suggest contacting the other person directly.
Step 5 — Book the Meeting
Once both agree on a time:
CODEBLOCK3
For video calls, add the meeting link:
--description "Video call: https://meet.google.com/xxx-xxxx-xxx"
Step 6 — Confirm Both Sides
CODEBLOCK5
Find Available Slots (Script)
CODEBLOCK6
Rescheduling
CODEBLOCK7
Always notify both sides when rescheduling:
"[Owner] needs to move the [Date] meeting. Can we try [new time]?"
Quick Templates
| Situation | Template |
|---|
| Initial request | "Hey [PA], [Owner A] wants to connect with [Owner B] for ~30 min [this/next] week. What works?" |
| Propose slots |
"Here are 3 options: [A], [B], [C]. Any work?" |
| Confirm | "✅ Booked for [time]. Invite sent to [email]." |
| Reschedule | "[Owner] can't make [time]. Can we try [alternative]?" |
| Cancel | "[Owner] needs to cancel [time]. Apologies." |
| No PA found | "Hi [Owner], [Your Owner] would like to schedule a call. Are you available [options]?" |
Cost Tips
- - Cheap: Finding slots and booking — any small model works
- More expensive: Reasoning across timezones or complex constraints — use medium model
- Batch: Propose 3–5 slots at once instead of one slot at a time (fewer back-and-forth messages)
- Avoid: Don't fetch the full calendar repeatedly — fetch once, extract 5 slots, propose them all
会议安排技能
最低模型要求
任何能够遵循编号步骤的模型均可。如需时区推理或复杂约束条件,请使用中等模型。
完整流程(6个步骤)
步骤1 — 理解请求
在操作前,确认以下信息:
- - 与谁会面
- 时长(如未指定,默认30分钟)
- 时间范围(本周、下周、仅限上午等)
- 会议类型(视频、线下、电话)
如果请求模糊不清(例如安排与Jane通话)→ 在继续前先提出一个澄清性问题。
步骤2 — 查找对方助理
检查 data/pa-directory.json:
bash
python3 -c
import json, sys
try:
with open(data/pa-directory.json) as f:
d = json.load(f)
except FileNotFoundError:
print(错误:未找到 data/pa-directory.json)
sys.exit(1)
name = 人员姓名 # 替换为实际姓名
matches = [p for p in d.get(pas, []) if name.lower() in p[owner].lower()]
if not matches:
print(未找到该人员的助理:, name)
else:
for p in matches:
print(助理:, p[name], | 电话:, p[phone])
如果未找到助理 → 跳至步骤4,直接通过电子邮件联系该人员。
步骤3 — 检查您负责人的空闲时间
bash
#!/bin/bash
获取当前时间和7天后的时间
TODAY=$(date -u +%Y-%m-%dT%H:%M:%SZ)
NEXT_WEEK=$(date -u -d +7 days +%Y-%m-%dT%H:%M:%SZ 2>/dev/null \
|| date -u -v+7d +%Y-%m-%dT%H:%M:%SZ)
获取事件并打印排序列表
GOG_ACCOUNT=owner@company.com gog calendar events primary \
--from $TODAY \
--to $NEXT_WEEK \
2>/dev/null \
| python3 -c
import sys, json
try:
events = json.load(sys.stdin)
except json.JSONDecodeError:
events = []
按开始时间排序并打印每个事件
print(即将到来的事件:)
for e in sorted(events, key=lambda x: x.get(start, {}).get(dateTime, )):
start = e.get(start, {}).get(dateTime, )[:16].replace(T, )
print( , start, —, e.get(summary, 未命名))
步骤4 — 联系对方助理
提出3–5个具体时间段:
你好[助理姓名],[您的负责人]希望与[他们的负责人]会面,时长[时长]。
可用的时间段:
• [星期 日期] 在 [HH:MM 时区]
• [星期 日期] 在 [HH:MM 时区]
• [星期 日期] 在 [HH:MM 时区]
这些时间可以吗?或者什么时间最合适?
如果在工作日的2小时内未收到回复 → 跟进一次。
如果4小时后仍未收到回复 → 告知您的负责人,并建议直接联系对方人员。
步骤5 — 预订会议
双方就时间达成一致后:
bash
基本日历事件
GOG_ACCOUNT=owner@company.com gog calendar create primary \
--summary 会议:[负责人A] + [负责人B] \
--start YYYY-MM-DDTHH:MM:SS+00:00 \
--end YYYY-MM-DDTHH:MM:SS+00:00 \
--attendees other-owner@company.com \
--description 通过助理协调安排
如需视频通话,添加会议链接:
bash
--description 视频通话:https://meet.google.com/xxx-xxxx-xxx
步骤6 — 确认双方
给您的负责人:
✅ 已完成 — [日期] 在 [时间] 与 [人员]。日历邀请已发送。
给对方助理:
✅ 已向[他们的负责人]发送邀请,时间为[日期] [时间]。如有任何变更请告知我。
查找可用时间段(脚本)
python
#!/usr/bin/env python3
在负责人的日历中查找空闲会议时间段。
import subprocess, json, sys
from datetime import datetime, timedelta, timezone
OWNER_EMAIL = owner@company.com # 替换
DURATION_MIN = 30
DAYS_AHEAD = 7
WORKSTARTHOUR = 9
WORKENDHOUR = 18
获取日历事件
try:
result = subprocess.run(
[gog, calendar, events, primary,
--from, datetime.now(timezone.utc).isoformat(),
--to, (datetime.now(timezone.utc) + timedelta(days=DAYS_AHEAD)).isoformat()],
env={GOG
ACCOUNT: OWNEREMAIL, PATH: /usr/bin:/usr/local/bin:/bin},
capture_output=True, text=True, timeout=30
)
events = json.loads(result.stdout) if result.stdout.strip() else []
except (subprocess.TimeoutExpired, json.JSONDecodeError, FileNotFoundError) as e:
print(无法获取日历:, e)
sys.exit(1)
构建忙碌时间段(开始,结束)列表
busy = []
for e in events:
start = e.get(start, {}).get(dateTime)
end = e.get(end, {}).get(dateTime)
if start and end:
busy.append((start, end))
在工作时间内查找空闲时间段
suggestions = []
for day
offset in range(1, DAYSAHEAD + 1):
day = datetime.now(timezone.utc) + timedelta(days=day_offset)
# 跳过周末
if day.weekday() >= 5:
continue
# 检查每个小时
for hour in range(WORKSTARTHOUR, WORKENDHOUR):
slot_start = day.replace(hour=hour, minute=0, second=0, microsecond=0)
slotend = slotstart + timedelta(minutes=DURATION_MIN)
# 如果时间段超过当天结束时间则跳过
if slotend.hour > WORKEND_HOUR:
continue
# 检查冲突
conflict = any(
slotstart.isoformat() < b[1] and slotend.isoformat() > b[0]
for b in busy
)
if not conflict:
suggestions.append(slot_start)
if len(suggestions) >= 5:
break
if len(suggestions) >= 5:
break
if not suggestions:
print(未来7天的工作时间内未找到可用时间段。)
else:
print(f可用的{DURATION_MIN}分钟时间段:)
for s in suggestions:
print( •, s.strftime(%A %b %d), 在, s.strftime(%H:%M), UTC)
重新安排
bash
1. 查找事件
GOG_ACCOUNT=owner@company.com gog calendar events primary \
--from $(date -u +%Y-%m-%dT%H:%M:%SZ) \
--to $(date -u -d +14 days +%Y-%m-%dT%H:%M:%SZ)
2. 删除旧事件(使用上述输出中的ID)
GOG
ACCOUNT=owner@company.com gog calendar delete primary EVENTID
3. 重新与对方助理协调并创建新事件
重新安排时务必通知双方:
[负责人]需要调整[日期]的会议。我们可以尝试[新时间]吗?
快速模板
| 情况 | 模板 |
|---|
| 初始请求 | 你好[助理],[负责人A]希望与[负责人B]联系,大约30分钟,[本周/下周]。什么时间方便? |
| 提出时间段 |
这里有3个选项:[A]、[B]、[C]。哪个可以? |
| 确认 | ✅ 已预订[时间]。邀请已发送至[邮箱]。 |
| 重新安排 | [负责人]无法参加[时间]。我们可以尝试[替代时间]吗? |
| 取消 | [负责人]需要取消[时间]。抱歉。 |
| 未找到助理 | 你好[负责人],[您的负责人]希望安排一次通话。您[选项]有空吗? |
成本提示
- - 低成本: 查找时间段和预订 — 任何小型模型均可
- 较高成本: 跨时区推理或复杂约束条件 — 使用中等模型
- 批量处理: 一次