제20장 신뢰할 수 있는 자동화: 스케줄링, Webhook 및 이벤트 트리거
Routine이 하루에 수십 번씩 깨어나 "오늘 변경 사항 없음"만 반환해도 크레딧은 그대로 차감됩니다. 작업에 명확한 규격이 없으면 조용히 오류가 발생하기 쉽습니다.
- 표준시 편차 (오전 9시 실행이 새벽 3시에 동작)
- 주기 오판 (기본값이 평일로 되어 있어 주말 누락)
- 대체 수단(fallback) 부재 (오류 발생 시 빈 데이터를 바탕으로 운영 환경을 엉망으로 수정)
Linux cron과 결합한 2단계 아키텍처는 공회전을 80% 이상 줄일 수 있습니다. 경계 계약(boundary contract)과 안전 게이트(human-in-the-loop)를 작성하고, 단축어와 X 이벤트 스트림을 연동해야 자동화가 안정적이고 비용을 절약할 수 있습니다.

트리거 선정: 정해진 시간에 실행할 것인가, 변경을 기다릴 것인가

정해진 시간에 결과물을 제출하는 것인지, 새로운 데이터를 기다리는 것인지 먼저 구분해야 합니다. Bot은 Grok, Cursor와 주간 크레딧 풀을 공유하므로, 고빈도 폴링은 며칠 만에 크레딧을 소진시킵니다.
구독 및 할당량 제한
The X Subscription(2026-10-12 기준)에서 Plus에는 Bot이 포함되지 않으며, 지원 티어는 Premium(월 $30 또는 연 $300, 4x), Super(월 $100 또는 연 $1000, 15x), Ultra(월 $200 또는 연 $2000, 50x)입니다.
단일 Bot당 Routine은 50개로 제한되며 기록은 20회까지 보관되고, 스케줄링 최소 간격은 5분입니다.
트리거 방식 및 선정
- 스케줄 Routine: 데이터 유무와 상관없이 지정된 시간에 도달하면 과금되며, 고정 일일 리포트에 적합합니다.
- Webhook: 평상시 소모가 전혀 없으며, Bearer 키가 포함된 POST 요청에만 제한됩니다.
- 서드파티 이벤트(GitHub, Slack 등): 이벤트가 발생할 때만 깨어나지만, 메시지가 잦은 채널에서는 크레딧이 급격히 소진되기 쉽습니다.
- X 인터랙션(@bot 답글): 동영상 게시물은 분석할 수 없으며, @grok과 @bot을 동시에 멘션하면 트리거되지 않습니다.
새로운 데이터가 들어올 때만 처리해야 한다면, 무조건 Webhook이나 서드파티 이벤트를 사용하세요.
Routine 설계 템플릿: 직함 대신 계약서 작성하기
프롬프트에 역할 직함만 적으면 실행 중 망가지기 쉽습니다. 프로덕션 Routine에는 반드시 구체적인 실행 계약을 명시해야 합니다.
출처: 《4.3 触发器与自动化:定时、Webhook、在 X 上派活》, 데이터 소스, 출력 형식, 결측 오류 처리 및 수동 승인 정책을 포함한 4가지 요소를 갖추어야 합니다.
계약서 작성 및 Routine 구성
- 입출력을 제약하는 계약서를 Bot에게 전송하여 기억하도록 합니다. 공유 Bot인 경우 Details의 About -> Description에 작성합니다.
负责范围:监控指定数据源并生成标准化 Markdown 摘要。
允许读取的数据源:工作区目录下的 data/incoming/ 文件夹及指定公开 RSS 链接。
输出格式规范:必须输出包含“标题、核心要点(最多3条)、影响评估、原始链接”的 Markdown 结构,存入 docs/daily/ 目录。
数据异常策略:若数据源无更新或文件为空,仅在工作区追加一行日志“[时间戳] NO_NEW_DATA”,严禁编造或推测新闻内容,严禁在聊天窗口发送刷屏提示。
权限边界:只读外部内容与本地写入。禁止调用外部发帖、转账、发送邮件或删除文件操作。- 대화창에서 워크플로를 자가 점검 로직이 포함된 Skill로 저장한 뒤, 직접 명령을 보내 스케줄 Routine을 생성합니다.
每个工作日上午 8:30,运行“晨间资讯归档”Skill。如果数据源没有更新,记录日志后保持沉默。Details의 "Routine" 목록에서 스위치로 Pause 또는 Resume을 전환합니다.
패널을 클릭하여 들어가면 Instruction, When to run, Webhook을 수정할 수 있으며, 하단에서 Pause/Resume, Test, Edit 및 Delete routine(휴지통 아이콘)을 지원합니다.
배포 전 드라이 런(Dry Run) 테스트
Routine은 클라우드 가상 머신에서 실제 작업을 수행하며, 모든 Bot은 기본적으로 기본 런타임 환경을 공유하고 샌드박스 격리가 없으므로, 통제를 벗어나면 실제 파일이 변경될 수 있습니다. 활성화하기 전에 먼저 대화창에서 명령을 보내 드라이 런으로 검증하세요.
针对即将上线的例程“晨间资讯归档”,进行一次干跑验证:
1. 复述你理解的执行触发条件与完整业务流程。
2. 列出本次执行涉及读写操作的路径,以及可能产生风险的 3 个最高风险步骤。
3. 说明如果源文件损坏或格式错误,你的具体兜底动作。
现在不要执行任何实际写文件和网络请求操作,仅输出分析报告。안전 게이트 설정
Settings의 Custom Rules(또는 Auto-review)로 이동하여, 되돌릴 수 없는 작업은 반드시 수동 승인으로 강제 설정합니다.
| 차단 명령어 | 동작 범위 |
|---|---|
send / post | 외부 메시지, 이메일 또는 소셜 미디어 발송 |
buy / transfer | 결제 및 이체 인터페이스 |
delete / permissions | 파일·데이터베이스 삭제, 권한 변경 |
명령어가 트리거되면 시스템에서 승인 카드를 띄워 실행을 일시 중단하고 사용자의 확인을 대기하며, 절대 자동으로 외부에 발송하지 않습니다.
Webhook 연동: 모바일 및 외부 파이프라인 연결
출처: 《Grok Bot Webhook + 快捷指令:知识自动入库流水线搭建》
자격 증명 및 상태
Routine에서 "Webhook이 트리거될 때"를 선택한 후, 반드시 Save를 클릭해야 URL, 비밀키, Header가 생성됩니다. v0.68.1에서 카드에 URL이 완전히 표시되지 않는 경우, Bot에게 대화창으로 링크를 보내달라고 요청하여 복사하고, 키는 절대 공개 그룹에 유출하지 마세요.
200 반환은 클라우드에서 시작되었음을 의미할 뿐, 실행이 완료되었음을 의미하지는 않습니다. 결과는 대화창에서 확인해야 하며, 200이 아닌 경우 Routine이 Paused 상태인지, 키가 올바른지 확인하세요.
단축어
공유 시트 지원 앱(브라우저 등):
- "공유 시트에 표시"를 체크하여 링크와 텍스트를 받습니다.
- "URL 콘텐츠 가져오기"로 POST 요청을 보내며, 요청 헤더에는
Authorization: Bearer <key>를 입력하고 JSON 본문에는content필드를 추가하여 단축어 입력을 넣습니다.
接收端 Bot 的配套 Instruction 模板:
收到 Webhook 传入的 JSON 数据后,提取 content 字段中的链接。
如果是普通网页,抓取正文,提炼核心结论与知识点。
整理完成后,以 Markdown 格式追加写入知识库目录下的 inbox.md,包含收录时间、原文链接、核心观点与分类标签。
处理完毕后在聊天中输出一句话确认回执。공유 시트 미지원 앱(WeChat 등):
- "텍스트 요청"을 사용한 뒤 "단축어 실행"으로 전달합니다.
- iPhone 15 Pro의 동작 버튼이나 홈 화면에 지정하여, 복사 후 팝업창에서 제출합니다.
대용량 파일은 요청 본문에 직접 넣을 수 없습니다. 오디오, 비디오, 이미지는 클라우드 스토리지에 먼저 업로드하여 공용 URL로 변환한 뒤 Bot에게 전달하세요.
빈 실행 방지를 위한 증분 판별: 2단계 검사 아키텍처

정기 검사마다 대규모 언어 모델을 실행하는 것은 크레딧 낭비가 심하므로, 작업을 2단계로 직접 분리합니다.
- Linux 내장 cron을 사용하여 기계적인 정기 검사를 수행합니다.
- 데이터가 변경되었을 때만 Webhook을 호출하여 Bot을 깨워 처리합니다.
출처: 《Grok Bot 额度再省一点:定时任务极限优化》。
1. 디커플링 원리: 알람 시계와 두뇌의 역할 분담
Grok Bot의 이면에는 항상 켜져 있는 Linux 클라우드 컴퓨터가 있습니다.
- 기계적 검사: cron으로 스크립트를 실행하여 데이터를 비교합니다. 이때 절대로 LLM을 호출하지 마세요. 몇 초 만에 종료되므로 사용량이 전혀 소모되지 않습니다.
- 증분 시에만 깨우기: 변경 사항이 있을 때만 로컬 Webhook으로 POST 요청을 보내 Bot을 깨워 분석 및 요약합니다.
6개의 Routine 중 대기 유형의 작업을 변경하는 데 약 23분이 걸렸으며, 매주 8~10회의 공회전을 줄이고 지연 시간을 하루에서 30분 이내로 단축했습니다.
2. 가상 머신 적용 설정 단계
- Bot에 "증분 처리 센터" Routine을 추가하고, 트리거로 Webhook을 선택한 뒤, Webhook URL과 Bearer 키를 잘 저장해 둡니다.
- 터미널을 열고 워크스페이스에
check_update.sh스크립트를 작성합니다:
2. 가상 머신 적용 설정 단계
#!/bin/bash
# 监测目标 API 或页面是否有增量变化,纯机械对比,严禁调用 LLM
TARGET_URL="https://api.example.com/v1/feed"
STATE_FILE="/home/user/workspace/last_state.hash"
WEBHOOK_URL="https://your-bot-webhook-url.com/api/v1/run"
WEBHOOK_KEY="Bearer YOUR_SECRET_KEY"
# 获取最新数据的哈希值或时间戳
CURRENT_HASH=$(curl -s "$TARGET_URL" | md5sum | awk '{print $1}')
if [ ! -f "$STATE_FILE" ]; then
echo "$CURRENT_HASH" > "$STATE_FILE"
exit 0
fi
OLD_HASH=$(cat "$STATE_FILE")
# 比对是否有变化
if [ "$CURRENT_HASH" != "$OLD_HASH" ]; then
echo "检测到数据更新,正在唤醒 Bot..."
echo "$CURRENT_HASH" > "$STATE_FILE"
# 叫醒 Bot 进行智能分析
curl -X POST "$WEBHOOK_URL" \
-H "Authorization: $WEBHOOK_KEY" \
-H "Content-Type: application/json" \
-d '{"event": "data_changed", "source": "feed_monitor"}'
else
# 无变化,保持沉默,零额度消耗
echo "无新变化,退出。"
fi- 터미널에서 cron 서비스를 설치하고 시작합니다:
sudo apt-get update && sudo apt-get install -y cron
sudo service cron startcrontab -e를 실행하여 스케줄을 설정합니다(평일 오전 9시부터 오후 7시까지, 30분마다 검사):
*/30 9-19 * * 1-5 /bin/bash /home/user/workspace/check_update.sh >> /home/user/workspace/cron_check.log 2>&1- 클라이언트에서 "컴퓨터 업데이트"를 클릭하면 시스템이 리셋됩니다: 워크스페이스 스크립트는 유지되지만,
apt-get으로 설치한 cron은 삭제되므로 업데이트 후 반드시 다시 설치하고 실행해야 합니다. - 스크립트에서 대규모 언어 모델 API를 호출하지 마세요: 가벼운 감지만 수행해야 합니다. 판단을 모델에 맡기면 비용을 절감할 수 없으며 지출이 전부 API 요금으로 전환됩니다.
서드파티 이벤트 및 X 플랫폼 연동
Slack 트리거
Slack 트리거는 Routine 시스템에 속하며, 사용 전에 계정에서 Slack을 연동해야 합니다. 《Cursor Help: Routines》를 참고하세요.
- 공개 채널에 "모든 메시지 수신 시" 트리거를 절대 설정하지 마세요. 잡담만으로 하루 만에 일주일 치 크레딧이 소진됩니다.
#alerts-p0또는#deploy-status등 전용 알림 채널만 모니터링하세요.!bot review또는@bot summary와 같이 반드시 트리거 접두사를 포함해야 합니다.- 생성 이후에 발생한 새 메시지에만 반응하며, 과거 기록은 소급하지 않습니다.
X 플랫폼 연동 범위 및 경계
v0.70.2부터는 개인 계정을 연동하지 않아도 트윗을 검색할 수 있습니다.
트윗 아래에 @bot을 댓글로 남기면 즐겨찾기(별표)된 메인 Bot에 알림이 전달되어 작업을 분배합니다. 《4.3 触发器与自动化:定时、Webhook、在 X 上派活》을 참고하세요.
- 제한 사항: 동영상 트윗은 분석할 수 없으며, 댓글에
@grok과@bot이 동시에 포함되면 충돌이 발생하여 트리거되지 않습니다. - 프롬프트 주입 방지: 메인 Bot은 요약, 분류 및 저장만 허용되며, 자동 게시, 좋아요 누르기 또는 클라우드 컴퓨터 변경은 엄격히 금지됩니다. 외부로 향하는 모든 동작은 데스크톱 클라이언트에서 수동으로 확인해야 합니다.
장애 대응(Fallback) 및 내결함성 전략

인터페이스 타임아웃이나 빈 데이터가 반환될 때 모델이 자의적으로 내용을 지어내기 쉬우므로, Instruction에는 반드시 예외 차단 구문이 포함되어야 합니다:
前置校验步骤:
1. 检查抓取到的内容体积。如果内容为空、包含 HTTP 错误码(如 403、404、500)或少于 50 个字符,判定为源不可用。
2. 源不可用时,立刻终止后续分析流程。
3. 在 workspace/logs/routine_errors.log 中追加一行错误记录,格式:[ISO时间戳] [任务名] SOURCE_UNAVAILABLE [原因]。
4. 不得在公开聊天窗口发送报警消息,不得使用过往缓存伪造新数据,直接以退出状态结束本次 run。Webhook 오류 해결:
- 401: Header에서
Authorization: Bearer <key>를 확인하여 공백이나 줄바꿈이 추가되었는지, 또는 이전 키를 사용했는지 점검합니다. - 404: 데스크톱에서 실수로 삭제 및 취소되었는지 확인하기 위해 URL 무결성을 점검합니다.
- 429: 동시 요청 한도 초과이므로, 반드시 재시도 큐와 지수 백오프를 추가해야 합니다.
- 미실행: Paused 상태인지, 또는 모바일에서 Active 스위치가 꺼져 있는지 확인합니다.
화면 도배 방지를 위한 로그 파일 저장: 승인 차단 시에만 카드 알림을 띄우고, 요약본은 docs/reports/YYYY-MM-DD.md에 기록하며, 한 줄 로그는 workspace/run.log에 추가합니다.
모니터링 및 일상 유지보수
데스크톱에서는 Details, 모바일에서는 프로필 파일에서 Routine을 확인할 수 있으며, Failed를 클릭하여 오류 스택을 확인할 수 있습니다.
매주 Usage & Billing을 확인하세요(v0.70.2에서 사용량 표시가 수정되었습니다). 소모량이 급증했다면 공회전하거나 재시도 중인 Routine이 있음을 나타냅니다.
매주 금요일 정기적으로 15분을 할애하여 Routine을 정리하세요.
workspace/run.log를 불러와 실제 결과물을 확인합니다.- 7일 연속 증분이 없는 Routine은 먼저 Pause 처리합니다.
- 2주간 중단된 상태에서 의존성이 없다면 Delete routine을 수행합니다. 삭제는 되돌릴 수 없으며 Webhook도 동시에 비활성화됩니다.
자주 겪는 함정
- 평일 기본값 메커니즘: "매일 8시"로 설정하면 평일로 간주되는 경우가 많습니다. 상시 동작 작업은 프롬프트에 반드시 "토요일과 일요일 포함"을 명시해야 합니다.
- 표준시 편차: Routine을 생성하기 전에 Settings -> Bot -> Timezone에서 시간대를 먼저 확인하세요. 클라우드 기본값은 UTC이므로, 9시로 설정하면 심야에 실행될 수 있습니다.
- 더하기(+) 버튼으로 Bot 생성 실패: 사이드바의 (+)로 새로 생성할 때 멈추는 경우가 있으므로, 실행되지 않는다면 기존 Bot과의 대화를 통해 새 Bot을 파생시키세요.
- 자격 증명 미저장: Webhook 설정 시 반드시 하단의 Save를 클릭하여 발급받아야 합니다. 페이지를 바로 벗어나면 키가 생성되지 않습니다.
- 시스템 업데이트 시 초기화: "컴퓨터 업데이트"(Update computer)는 이미지를 초기화하므로,
apt-get으로 설치한 cron이 사라집니다. 업데이트 후에는 터미널에서 cron을 꼭 확인하세요. - 비밀키 유출: Webhook 키를 일반 대화창에 붙여넣지 마세요. 실수로 전송했다면 **즉시 메시지를 삭제하고 Routine에서 키를 재발급(리셋)**하세요.
- Test의 실제 실행: Test를 클릭하면 사용량이 소모되고 파일이 변경되므로, 절대로 프로덕션 데이터에서 테스트하지 마세요.
완료 후 검증 방법
- 데스크톱에서 When to run에 적힌 영문 일정(예: "Every day at 8:00 AM CST")을 확인하고, 로컬 시간대 및 주말 포함 여부를 대조합니다.
- 새 Routine은 다음 주기까지 기다렸다가 실행되므로, Next run 시간이 정확한지 확인합니다.
- 데이터 소스 이름을 바꾸거나 비워둔 뒤 Test를 한 번 실행하여, "데이터 소스 이상" 로그를 출력하고 정보를 지어내지 않은 채 안정적으로 중단되는지 확인합니다.
- 이메일 발송, 게시물 작성, 디렉터리 삭제 명령을 주입하여 작업이 차단되고 승인 카드가 뜨는지 확인하며 외부로 직접 패킷이 나가지 않는지 검증합니다.
- 터미널에서 curl을 사용하여 Webhook으로 POST 요청을 전송합니다:
curl -i -X POST "你的_WEBHOOK_URL" \
-H "Authorization: Bearer 你的_KEY" \
-H "Content-Type: application/json" \
-d '{"test": "ping"}'1초 이내에 200 상태 코드를 수신하는지 확인하고, 30초 이내에 클라이언트에서 Bot 상태가 Running으로 바뀌며 영수증 및 구조화된 결과를 출력하는지 점검합니다.
추가 참고 자료
- 관련 챕터: 第 8 章 技能与例程:把一次成功变成每天自动跑
- 관련 챕터: 第 10 章 额度与成本:让一周用量撑满一周
- 공식 문서: 《Cursor Help: Routines》
- 커뮤니티 원문: 《4.3 触发器与自动化:定时、Webhook、在 X 上派活》
- 커뮤니티 원문: 《Grok Bot Webhook + 快捷指令:知识自动入库流水线搭建》
- 커뮤니티 원문: 《Grok Bot 额度再省一点:定时任务极限优化》