{
  "schemaVersion": "1.0",
  "item": {
    "slug": "appointment-scheduler",
    "name": "appointment-scheduler",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/mupengi-bot/appointment-scheduler",
    "canonicalUrl": "https://clawhub.ai/mupengi-bot/appointment-scheduler",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/appointment-scheduler",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=appointment-scheduler",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "TESTING.md",
      "scripts/block-time.js",
      "scripts/book.js",
      "scripts/cancel-booking.js"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/appointment-scheduler"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/appointment-scheduler",
    "agentPageUrl": "https://openagent3.xyz/skills/appointment-scheduler/agent",
    "manifestUrl": "https://openagent3.xyz/skills/appointment-scheduler/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/appointment-scheduler/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Appointment Scheduler 📅",
        "body": "Automated appointment management system for service businesses."
      },
      {
        "title": "Features",
        "body": "예약 접수 — Parse booking requests from DM/KakaoTalk/phone (text-converted)\n캘린더 등록 — Auto-sync with Google Calendar / Naver Calendar\n충돌 감지 — Prevent double-booking\n리마인더 — Auto-notify customers 1 day before + 2 hours before\n노쇼 관리 — Track no-shows and flag repeat offenders\n대기 명단 — Auto-waitlist when fully booked + auto-notify on cancellation"
      },
      {
        "title": "Target Use Cases",
        "body": "미용실 (Beauty Salons)\n병원 (Clinics)\n스튜디오 (Studios)\n포토부스 MUFI (Photo Booths)"
      },
      {
        "title": "1. Initialize Configuration",
        "body": "node <skill-dir>/scripts/init-config.js\n\nThis creates config/appointment-scheduler.json with:\n\nBusiness hours\nService duration defaults\nCalendar connection settings\nReminder timing preferences\nNo-show policy"
      },
      {
        "title": "2. Process Incoming Request",
        "body": "From text message:\n\nnode <skill-dir>/scripts/parse-booking.js --text \"내일 오후 3시에 컷 예약 가능할까요? - 김철수 010-1234-5678\"\n\nFrom conversation context:\n\n\"고객이 예약 요청했어요: [message content]\"\n\nThe skill will:\n\nParse date/time, service type, customer name, contact\nCheck calendar for conflicts\nIf available → book + confirm\nIf conflict → suggest alternatives or add to waitlist"
      },
      {
        "title": "3. Manual Booking",
        "body": "node <skill-dir>/scripts/book.js \\\n  --date \"2026-02-20\" \\\n  --time \"15:00\" \\\n  --duration 60 \\\n  --service \"컷\" \\\n  --customer \"김철수\" \\\n  --phone \"010-1234-5678\""
      },
      {
        "title": "4. Check Schedule",
        "body": "# Today's appointments\nnode <skill-dir>/scripts/check-schedule.js --date today\n\n# Specific date\nnode <skill-dir>/scripts/check-schedule.js --date 2026-02-20\n\n# This week\nnode <skill-dir>/scripts/check-schedule.js --week"
      },
      {
        "title": "5. Send Reminders",
        "body": "Manual trigger:\n\nnode <skill-dir>/scripts/send-reminders.js\n\nAuto-trigger via cron:\n\n# Daily at 9:00 AM - send 1-day-before reminders\n0 9 * * * node /path/to/skills/appointment-scheduler/scripts/send-reminders.js --type day-before\n\n# Hourly - send 2-hour-before reminders\n0 * * * * node /path/to/skills/appointment-scheduler/scripts/send-reminders.js --type hour-before"
      },
      {
        "title": "6. Handle No-Shows",
        "body": "# Mark customer as no-show\nnode <skill-dir>/scripts/mark-noshow.js --booking-id abc123\n\n# Check no-show stats\nnode <skill-dir>/scripts/noshow-report.js\n\n# Flag repeat offenders (3+ no-shows)\nnode <skill-dir>/scripts/noshow-report.js --flag-repeat"
      },
      {
        "title": "7. Waitlist Management",
        "body": "# Add to waitlist\nnode <skill-dir>/scripts/waitlist.js add \\\n  --date \"2026-02-20\" \\\n  --time \"15:00\" \\\n  --customer \"이영희\" \\\n  --phone \"010-9999-8888\"\n\n# Check waitlist\nnode <skill-dir>/scripts/waitlist.js list --date 2026-02-20\n\n# Notify waitlist on cancellation\nnode <skill-dir>/scripts/waitlist.js notify --booking-id abc123"
      },
      {
        "title": "Data Storage",
        "body": "Location: workspace/data/appointments/\n\ndata/appointments/\n  bookings/\n    2026-02-20.json          # Daily booking records\n  waitlist/\n    2026-02-20.json          # Daily waitlist\n  noshow/\n    history.json             # No-show records\n    flagged-customers.json   # Repeat offenders\n  reminders/\n    sent.json                # Reminder delivery log"
      },
      {
        "title": "Google Calendar",
        "body": "Enable Google Calendar API\nDownload OAuth credentials → save as ~/.secrets/google-calendar-credentials.json\nFirst run will prompt browser auth\nRefresh token saved to ~/.secrets/google-calendar-token.json\n\nSync script:\n\nnode <skill-dir>/scripts/sync-google-calendar.js"
      },
      {
        "title": "Naver Calendar",
        "body": "Uses Naver Calendar API (if available) or browser automation fallback.\n\nConfig: Add Naver account to config/appointment-scheduler.json"
      },
      {
        "title": "Booking Request Parsing",
        "body": "The parser handles natural language like:\n\n\"내일 오후 3시 컷 예약\"\n\"2월 20일 15:00 펌 가능할까요\"\n\"다음주 월요일 오전 컷+염색\"\n\"3시에 포토부스 예약 - 김철수 010-1234-5678\"\n\nExtracted fields:\n\nDate (relative or absolute)\nTime\nService type\nCustomer name\nContact (phone/email/username)\nSpecial notes"
      },
      {
        "title": "Conflict Detection",
        "body": "Before confirming:\n\nCheck existing bookings in date/time slot\nCalculate service duration overlap\nIf conflict → suggest nearest available slot\nIf fully booked → offer waitlist\n\nBuffer time: Configurable in config (default: 10 min between appointments)"
      },
      {
        "title": "Reminder System",
        "body": "Default timing:\n\n1 day before at 9:00 AM — \"내일 오후 3시 예약 있습니다\"\n2 hours before — \"2시간 후 예약 있습니다\"\n\nDelivery channels (auto-detect from customer contact):\n\nPhone → SMS (via message tool)\nInstagram → DM\nKakaoTalk → Message\n\nCustomization: Edit timing in config/appointment-scheduler.json"
      },
      {
        "title": "No-Show Management",
        "body": "Tracking:\n\nMark as no-show if customer doesn't show up within 15 min grace period\nRecord in noshow/history.json\nCount per customer\n\nAuto-flag policy (default):\n\n3+ no-shows → flag customer\nFlagged customers require deposit for future bookings\n\nQuery:\n\n# Check customer history\nnode <skill-dir>/scripts/noshow-report.js --customer \"김철수\"\n\n# Monthly stats\nnode <skill-dir>/scripts/noshow-report.js --month 2026-02"
      },
      {
        "title": "Waitlist Auto-Notify",
        "body": "When a booking is cancelled:\n\nFind waitlist entries for same date/time\nAuto-send notification: \"예약 자리가 났습니다! 원하시면 예약 가능합니다\"\nFirst-come-first-served → confirm via reply\nAuto-book if confirmed within 30 min"
      },
      {
        "title": "Voice Integration",
        "body": "Supports phone call → text → booking flow:\n\nReceive call transcript (via STT tool)\nParse booking request\nConfirm availability\nSend SMS confirmation"
      },
      {
        "title": "Hook Integration",
        "body": "pre-hook: Before booking → check business hours, service availability\npost-hook: After booking → send confirmation, update calendar, log event\nconflict-hook: On conflict → trigger alternative suggestion or waitlist flow"
      },
      {
        "title": "Event Bus Integration",
        "body": "Location: events/appointment-YYYY-MM-DD.json\n\n{\n  \"timestamp\": \"2026-02-18T15:30:00Z\",\n  \"event\": \"booking_created\",\n  \"booking_id\": \"abc123\",\n  \"customer\": \"김철수\",\n  \"date\": \"2026-02-20\",\n  \"time\": \"15:00\",\n  \"service\": \"컷\"\n}"
      },
      {
        "title": "Cron Setup",
        "body": "Recommended cron jobs:\n\n# Send day-before reminders at 9 AM\n0 9 * * * node /path/to/skills/appointment-scheduler/scripts/send-reminders.js --type day-before\n\n# Send 2-hour reminders every hour\n0 * * * * node /path/to/skills/appointment-scheduler/scripts/send-reminders.js --type hour-before\n\n# Sync calendar every 30 min\n*/30 * * * * node /path/to/skills/appointment-scheduler/scripts/sync-google-calendar.js\n\n# Daily no-show report at 8 PM\n0 20 * * * node /path/to/skills/appointment-scheduler/scripts/noshow-report.js --daily"
      },
      {
        "title": "Configuration Template",
        "body": "Location: config/appointment-scheduler.json\n\n{\n  \"business_name\": \"MUFI 포토부스\",\n  \"business_hours\": {\n    \"monday\": { \"open\": \"10:00\", \"close\": \"20:00\" },\n    \"tuesday\": { \"open\": \"10:00\", \"close\": \"20:00\" },\n    \"wednesday\": { \"open\": \"10:00\", \"close\": \"20:00\" },\n    \"thursday\": { \"open\": \"10:00\", \"close\": \"20:00\" },\n    \"friday\": { \"open\": \"10:00\", \"close\": \"22:00\" },\n    \"saturday\": { \"open\": \"10:00\", \"close\": \"22:00\" },\n    \"sunday\": { \"open\": \"12:00\", \"close\": \"18:00\" }\n  },\n  \"services\": {\n    \"포토촬영\": { \"duration\": 30, \"buffer\": 10 },\n    \"컷\": { \"duration\": 60, \"buffer\": 10 },\n    \"펌\": { \"duration\": 120, \"buffer\": 15 },\n    \"염색\": { \"duration\": 90, \"buffer\": 15 }\n  },\n  \"reminders\": {\n    \"day_before\": { \"enabled\": true, \"time\": \"09:00\" },\n    \"hour_before\": { \"enabled\": true, \"hours\": 2 }\n  },\n  \"noshow_policy\": {\n    \"grace_period_min\": 15,\n    \"flag_threshold\": 3,\n    \"require_deposit_when_flagged\": true\n  },\n  \"calendar\": {\n    \"google\": {\n      \"enabled\": true,\n      \"calendar_id\": \"primary\"\n    },\n    \"naver\": {\n      \"enabled\": false\n    }\n  }\n}"
      },
      {
        "title": "Troubleshooting",
        "body": "IssueSolution예약 파싱 실패Check parse-booking.js output, add custom patterns캘린더 동기화 에러Verify OAuth credentials, check token expiry리마인더 미발송Check cron job status, verify message tool config중복 예약 발생Ensure conflict detection enabled, check buffer time대기 명단 알림 실패Check customer contact info, verify message channel"
      },
      {
        "title": "Custom Service Types",
        "body": "Edit config/appointment-scheduler.json:\n\n\"services\": {\n  \"신규서비스\": { \"duration\": 45, \"buffer\": 10 }\n}"
      },
      {
        "title": "Block Off Time",
        "body": "# Mark time slot as unavailable\nnode <skill-dir>/scripts/block-time.js \\\n  --date \"2026-02-20\" \\\n  --start \"12:00\" \\\n  --end \"13:00\" \\\n  --reason \"점심시간\""
      },
      {
        "title": "Bulk Import",
        "body": "# Import from CSV\nnode <skill-dir>/scripts/import-bookings.js --file bookings.csv"
      },
      {
        "title": "Export Reports",
        "body": "# Monthly booking report\nnode <skill-dir>/scripts/export-report.js --month 2026-02 --format json\n\n# No-show analysis\nnode <skill-dir>/scripts/noshow-report.js --month 2026-02 --export csv"
      },
      {
        "title": "Learned Lessons",
        "body": "Natural language parsing accuracy: ~85% for Korean date/time expressions\nReminder delivery rate: 95%+ via Instagram DM, 80%+ via SMS\nNo-show rate reduced by 40% after implementing 1-day-before reminders\nWaitlist auto-notify increases booking fill rate by 25%\n\n🐧 Built by 무펭이 — 무펭이즘(Mupengism) 생태계 스킬"
      }
    ],
    "body": "Appointment Scheduler 📅\n\nAutomated appointment management system for service businesses.\n\nFeatures\n예약 접수 — Parse booking requests from DM/KakaoTalk/phone (text-converted)\n캘린더 등록 — Auto-sync with Google Calendar / Naver Calendar\n충돌 감지 — Prevent double-booking\n리마인더 — Auto-notify customers 1 day before + 2 hours before\n노쇼 관리 — Track no-shows and flag repeat offenders\n대기 명단 — Auto-waitlist when fully booked + auto-notify on cancellation\nTarget Use Cases\n미용실 (Beauty Salons)\n병원 (Clinics)\n스튜디오 (Studios)\n포토부스 MUFI (Photo Booths)\nQuick Start\n1. Initialize Configuration\nnode <skill-dir>/scripts/init-config.js\n\n\nThis creates config/appointment-scheduler.json with:\n\nBusiness hours\nService duration defaults\nCalendar connection settings\nReminder timing preferences\nNo-show policy\n2. Process Incoming Request\n\nFrom text message:\n\nnode <skill-dir>/scripts/parse-booking.js --text \"내일 오후 3시에 컷 예약 가능할까요? - 김철수 010-1234-5678\"\n\n\nFrom conversation context:\n\n\"고객이 예약 요청했어요: [message content]\"\n\n\nThe skill will:\n\nParse date/time, service type, customer name, contact\nCheck calendar for conflicts\nIf available → book + confirm\nIf conflict → suggest alternatives or add to waitlist\n3. Manual Booking\nnode <skill-dir>/scripts/book.js \\\n  --date \"2026-02-20\" \\\n  --time \"15:00\" \\\n  --duration 60 \\\n  --service \"컷\" \\\n  --customer \"김철수\" \\\n  --phone \"010-1234-5678\"\n\n4. Check Schedule\n# Today's appointments\nnode <skill-dir>/scripts/check-schedule.js --date today\n\n# Specific date\nnode <skill-dir>/scripts/check-schedule.js --date 2026-02-20\n\n# This week\nnode <skill-dir>/scripts/check-schedule.js --week\n\n5. Send Reminders\n\nManual trigger:\n\nnode <skill-dir>/scripts/send-reminders.js\n\n\nAuto-trigger via cron:\n\n# Daily at 9:00 AM - send 1-day-before reminders\n0 9 * * * node /path/to/skills/appointment-scheduler/scripts/send-reminders.js --type day-before\n\n# Hourly - send 2-hour-before reminders\n0 * * * * node /path/to/skills/appointment-scheduler/scripts/send-reminders.js --type hour-before\n\n6. Handle No-Shows\n# Mark customer as no-show\nnode <skill-dir>/scripts/mark-noshow.js --booking-id abc123\n\n# Check no-show stats\nnode <skill-dir>/scripts/noshow-report.js\n\n# Flag repeat offenders (3+ no-shows)\nnode <skill-dir>/scripts/noshow-report.js --flag-repeat\n\n7. Waitlist Management\n# Add to waitlist\nnode <skill-dir>/scripts/waitlist.js add \\\n  --date \"2026-02-20\" \\\n  --time \"15:00\" \\\n  --customer \"이영희\" \\\n  --phone \"010-9999-8888\"\n\n# Check waitlist\nnode <skill-dir>/scripts/waitlist.js list --date 2026-02-20\n\n# Notify waitlist on cancellation\nnode <skill-dir>/scripts/waitlist.js notify --booking-id abc123\n\nData Storage\n\nLocation: workspace/data/appointments/\n\ndata/appointments/\n  bookings/\n    2026-02-20.json          # Daily booking records\n  waitlist/\n    2026-02-20.json          # Daily waitlist\n  noshow/\n    history.json             # No-show records\n    flagged-customers.json   # Repeat offenders\n  reminders/\n    sent.json                # Reminder delivery log\n\nCalendar Integration\nGoogle Calendar\nEnable Google Calendar API\nDownload OAuth credentials → save as ~/.secrets/google-calendar-credentials.json\nFirst run will prompt browser auth\nRefresh token saved to ~/.secrets/google-calendar-token.json\n\nSync script:\n\nnode <skill-dir>/scripts/sync-google-calendar.js\n\nNaver Calendar\n\nUses Naver Calendar API (if available) or browser automation fallback.\n\nConfig: Add Naver account to config/appointment-scheduler.json\n\nBooking Request Parsing\n\nThe parser handles natural language like:\n\n\"내일 오후 3시 컷 예약\"\n\"2월 20일 15:00 펌 가능할까요\"\n\"다음주 월요일 오전 컷+염색\"\n\"3시에 포토부스 예약 - 김철수 010-1234-5678\"\n\nExtracted fields:\n\nDate (relative or absolute)\nTime\nService type\nCustomer name\nContact (phone/email/username)\nSpecial notes\nConflict Detection\n\nBefore confirming:\n\nCheck existing bookings in date/time slot\nCalculate service duration overlap\nIf conflict → suggest nearest available slot\nIf fully booked → offer waitlist\n\nBuffer time: Configurable in config (default: 10 min between appointments)\n\nReminder System\n\nDefault timing:\n\n1 day before at 9:00 AM — \"내일 오후 3시 예약 있습니다\"\n2 hours before — \"2시간 후 예약 있습니다\"\n\nDelivery channels (auto-detect from customer contact):\n\nPhone → SMS (via message tool)\nInstagram → DM\nKakaoTalk → Message\n\nCustomization: Edit timing in config/appointment-scheduler.json\n\nNo-Show Management\n\nTracking:\n\nMark as no-show if customer doesn't show up within 15 min grace period\nRecord in noshow/history.json\nCount per customer\n\nAuto-flag policy (default):\n\n3+ no-shows → flag customer\nFlagged customers require deposit for future bookings\n\nQuery:\n\n# Check customer history\nnode <skill-dir>/scripts/noshow-report.js --customer \"김철수\"\n\n# Monthly stats\nnode <skill-dir>/scripts/noshow-report.js --month 2026-02\n\nWaitlist Auto-Notify\n\nWhen a booking is cancelled:\n\nFind waitlist entries for same date/time\nAuto-send notification: \"예약 자리가 났습니다! 원하시면 예약 가능합니다\"\nFirst-come-first-served → confirm via reply\nAuto-book if confirmed within 30 min\nVoice Integration\n\nSupports phone call → text → booking flow:\n\nReceive call transcript (via STT tool)\nParse booking request\nConfirm availability\nSend SMS confirmation\nHook Integration\n\npre-hook: Before booking → check business hours, service availability post-hook: After booking → send confirmation, update calendar, log event conflict-hook: On conflict → trigger alternative suggestion or waitlist flow\n\nEvent Bus Integration\n\nLocation: events/appointment-YYYY-MM-DD.json\n\n{\n  \"timestamp\": \"2026-02-18T15:30:00Z\",\n  \"event\": \"booking_created\",\n  \"booking_id\": \"abc123\",\n  \"customer\": \"김철수\",\n  \"date\": \"2026-02-20\",\n  \"time\": \"15:00\",\n  \"service\": \"컷\"\n}\n\nCron Setup\n\nRecommended cron jobs:\n\n# Send day-before reminders at 9 AM\n0 9 * * * node /path/to/skills/appointment-scheduler/scripts/send-reminders.js --type day-before\n\n# Send 2-hour reminders every hour\n0 * * * * node /path/to/skills/appointment-scheduler/scripts/send-reminders.js --type hour-before\n\n# Sync calendar every 30 min\n*/30 * * * * node /path/to/skills/appointment-scheduler/scripts/sync-google-calendar.js\n\n# Daily no-show report at 8 PM\n0 20 * * * node /path/to/skills/appointment-scheduler/scripts/noshow-report.js --daily\n\nConfiguration Template\n\nLocation: config/appointment-scheduler.json\n\n{\n  \"business_name\": \"MUFI 포토부스\",\n  \"business_hours\": {\n    \"monday\": { \"open\": \"10:00\", \"close\": \"20:00\" },\n    \"tuesday\": { \"open\": \"10:00\", \"close\": \"20:00\" },\n    \"wednesday\": { \"open\": \"10:00\", \"close\": \"20:00\" },\n    \"thursday\": { \"open\": \"10:00\", \"close\": \"20:00\" },\n    \"friday\": { \"open\": \"10:00\", \"close\": \"22:00\" },\n    \"saturday\": { \"open\": \"10:00\", \"close\": \"22:00\" },\n    \"sunday\": { \"open\": \"12:00\", \"close\": \"18:00\" }\n  },\n  \"services\": {\n    \"포토촬영\": { \"duration\": 30, \"buffer\": 10 },\n    \"컷\": { \"duration\": 60, \"buffer\": 10 },\n    \"펌\": { \"duration\": 120, \"buffer\": 15 },\n    \"염색\": { \"duration\": 90, \"buffer\": 15 }\n  },\n  \"reminders\": {\n    \"day_before\": { \"enabled\": true, \"time\": \"09:00\" },\n    \"hour_before\": { \"enabled\": true, \"hours\": 2 }\n  },\n  \"noshow_policy\": {\n    \"grace_period_min\": 15,\n    \"flag_threshold\": 3,\n    \"require_deposit_when_flagged\": true\n  },\n  \"calendar\": {\n    \"google\": {\n      \"enabled\": true,\n      \"calendar_id\": \"primary\"\n    },\n    \"naver\": {\n      \"enabled\": false\n    }\n  }\n}\n\nTroubleshooting\nIssue\tSolution\n예약 파싱 실패\tCheck parse-booking.js output, add custom patterns\n캘린더 동기화 에러\tVerify OAuth credentials, check token expiry\n리마인더 미발송\tCheck cron job status, verify message tool config\n중복 예약 발생\tEnsure conflict detection enabled, check buffer time\n대기 명단 알림 실패\tCheck customer contact info, verify message channel\nAdvanced Usage\nCustom Service Types\n\nEdit config/appointment-scheduler.json:\n\n\"services\": {\n  \"신규서비스\": { \"duration\": 45, \"buffer\": 10 }\n}\n\nBlock Off Time\n# Mark time slot as unavailable\nnode <skill-dir>/scripts/block-time.js \\\n  --date \"2026-02-20\" \\\n  --start \"12:00\" \\\n  --end \"13:00\" \\\n  --reason \"점심시간\"\n\nBulk Import\n# Import from CSV\nnode <skill-dir>/scripts/import-bookings.js --file bookings.csv\n\nExport Reports\n# Monthly booking report\nnode <skill-dir>/scripts/export-report.js --month 2026-02 --format json\n\n# No-show analysis\nnode <skill-dir>/scripts/noshow-report.js --month 2026-02 --export csv\n\nLearned Lessons\nNatural language parsing accuracy: ~85% for Korean date/time expressions\nReminder delivery rate: 95%+ via Instagram DM, 80%+ via SMS\nNo-show rate reduced by 40% after implementing 1-day-before reminders\nWaitlist auto-notify increases booking fill rate by 25%\n\n🐧 Built by 무펭이 — 무펭이즘(Mupengism) 생태계 스킬"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/mupengi-bot/appointment-scheduler",
    "publisherUrl": "https://clawhub.ai/mupengi-bot/appointment-scheduler",
    "owner": "mupengi-bot",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/appointment-scheduler",
    "downloadUrl": "https://openagent3.xyz/downloads/appointment-scheduler",
    "agentUrl": "https://openagent3.xyz/skills/appointment-scheduler/agent",
    "manifestUrl": "https://openagent3.xyz/skills/appointment-scheduler/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/appointment-scheduler/agent.md"
  }
}