К основному содержанию
скилл CX Codex

Webhook Automation — скилл для Claude Code: вебхуки и события

Скилл для сборки вебхук-интеграций: приём событий, проверка подписи, маршрутизация и преобразование payload. Пригодится, когда нужно связать платежи, GitHub или Slack с внутренними сервисами.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add claude-office-skills/skills --skill webhook-automation -a claude-code
Открыть на GitHub

Что делает Webhook Automation

Скилл описывает, как устроен поток вебхука: источник отправляет событие на endpoint, дальше срабатывает логика обработчика и цепочка действий. Внутри есть схемы для входящих и исходящих вебхуков, примеры endpoint с проверкой подписи HMAC-SHA256 и разбор ошибок по кодам ответа.

Отдельный блок — маршрутизация событий. Роутер сопоставляет тип события (payment.succeeded, customer.created, subscription.cancelled) с обработчиком и списком действий, а нераспознанные события уходят в лог. Для преобразования данных приведены маппинги вида stripe_to_internal и github_to_slack, включая пересчёт суммы из центов в доллары и шаблон сообщения.

Готовые примеры есть для Stripe, GitHub и Slack. Скилл опирается на MCP-сервер integration-mcp с инструментами webhook_create, webhook_receive, http_request и transform_data — без него вызовы инструментов не сработают. Секреты в конфигурациях подставляются из переменных окружения (WEBHOOK_SECRET, STRIPE_WEBHOOK_SECRET, GITHUB_WEBHOOK_SECRET), так что проверьте, что они заданы до запуска обработчика.

Какие задачи решает

  • принять событие от Stripe и обновить статус заказа
  • проверить подпись входящего вебхука перед обработкой
  • разложить события по обработчикам через роутер
  • переложить поля из payload Stripe во внутреннюю модель заказа
  • отправить уведомление в Slack о новом pull request

Примеры запросов агенту

  • настрой endpoint для вебхуков Stripe с проверкой подписи
  • добавь маршрут для события customer.created и три действия
  • сделай маппинг из github_webhook в сообщение Slack

Как установить Webhook Automation

1Через Skills CLI (Vercel)

npx skills add claude-office-skills/skills --skill webhook-automation -a claude-code

2Вручную: положить файлы

~/.claude/skills/webhook-automation/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/webhook-automation/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о Webhook Automation

Как установить Webhook Automation в Claude?

Выполните npx skills add claude-office-skills/skills --skill webhook-automation -a claude-code. После этого файл скилла появится по пути ~/.claude/skills/webhook-automation/SKILL.md.

Что делает Webhook Automation?

Помогает собирать вебхук-интеграции: описывает endpoint, проверку подписи, маршрутизацию событий и преобразование payload. Внутри есть готовые примеры для Stripe, GitHub и Slack.

Что нужно для работы скилла?

Нужен MCP-сервер integration-mcp с инструментами webhook_create, webhook_receive, http_request и transform_data. Секреты для проверки подписи задаются через переменные окружения.

Исходный текст

SKILL.md · MIT
---
name: Webhook Automation
description: Build and manage webhook-based integrations for real-time event processing and API connections
version: 1.0.0
author: Claude Office Skills
category: integration
tags:
  - webhook
  - api
  - integration
  - automation
  - events
department: engineering
models:
  - claude-3-opus
  - claude-3-sonnet
  - gpt-4
mcp:
  server: integration-mcp
  tools:
    - webhook_create
    - webhook_receive
    - http_request
    - transform_data
capabilities:
  - Webhook endpoint creation
  - Event processing
  - Data transformation
  - Multi-service orchestration
input:
  - Webhook payloads
  - API configurations
  - Transformation rules
  - Routing logic
output:
  - Processed events
  - API responses
  - Transformed data
  - Audit logs
languages:
  - en
related_skills:
  - etl-pipeline
  - api-integration
  - zapier-automation
---

# Webhook Automation

Comprehensive skill for building webhook-based integrations and real-time event processing.

## Core Concepts

### Webhook Architecture

```
WEBHOOK FLOW:
┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   Source    │────▶│   Webhook   │────▶│   Handler   │
│   System    │     │   Endpoint  │     │   Logic     │
└─────────────┘     └─────────────┘     └──────┬──────┘
                                               │
                    ┌──────────────────────────┼───────┐
                    │                          │       │
                    ▼                          ▼       ▼
              ┌──────────┐              ┌──────────┐ ┌──────────┐
              │  Action  │              │  Action  │ │  Action  │
              │    A     │              │    B     │ │    C     │
              └──────────┘              └──────────┘ └──────────┘
```

### Webhook Types

```yaml
webhook_types:
  incoming:
    description: "Receive events from external services"
    use_cases:
      - Payment notifications (Stripe, PayPal)
      - Form submissions
      - CRM updates
      - CI/CD events
      
  outgoing:
    description: "Send events to external services"
    use_cases:
      - Notify external systems
      - Trigger workflows
      - Sync data
      - Alert integrations
```

## Webhook Endpoint Setup

### Basic Endpoint

```yaml
webhook_endpoint:
  url: "https://api.example.com/webhooks/incoming"
  method: POST
  
  authentication:
    type: signature
    header: "X-Signature-256"
    algorithm: "HMAC-SHA256"
    secret: "${WEBHOOK_SECRET}"
    
  validation:
    required_headers:
      - "Content-Type"
      - "X-Request-ID"
    content_types:
      - "application/json"
      - "application/x-www-form-urlencoded"
      
  response:
    success:
      status: 200
      body: { "received": true }
    error:
      status: 400
      body: { "error": "Invalid payload" }
```

### Signature Verification

```javascript
// Verify webhook signature
function verifySignature(payload, signature, secret) {
  const hmac = crypto.createHmac('sha256', secret);
  const digest = 'sha256=' + hmac.update(payload).digest('hex');
  
  return crypto.timingSafeEqual(
    Buffer.from(digest),
    Buffer.from(signature)
  );
}

// Usage
app.post('/webhook', (req, res) => {
  const signature = req.headers['x-signature-256'];
  const payload = JSON.stringify(req.body);
  
  if (!verifySignature(payload, signature, process.env.WEBHOOK_SECRET)) {
    return res.status(401).json({ error: 'Invalid signature' });
  }
  
  // Process webhook...
  processWebhook(req.body);
  res.status(200).json({ received: true });
});
```

## Event Processing

### Event Router

```yaml
event_router:
  routes:
    - event_type: "payment.succeeded"
      handler: processPayment
      actions:
        - update_order_status
        - send_confirmation_email
        - notify_fulfillment
        
    - event_type: "customer.created"
      handler: processNewCustomer
      actions:
        - create_crm_contact
        - send_welcome_email
        - assign_to_sales
        
    - event_type: "subscription.cancelled"
      handler: processChurn
      actions:
        - update_subscription_status
        - trigger_retention_flow
        - notify_customer_success
        
    - event_type: "*"
      handler: logUnhandled
      actions:
        - log_to_monitoring
```

### Payload Transformation

```yaml
transformations:
  - name: stripe_to_internal
    source: stripe_webhook
    target: internal_order
    mapping:
      id: "data.object.id"
      amount: "data.object.amount / 100"  # Cents to dollars
      currency: "data.object.currency | uppercase"
      customer_email: "data.object.receipt_email"
      created_at: "data.object.created | timestamp"
      metadata: "data.object.metadata"
      
  - name: github_to_slack
    source: github_webhook
    target: slack_message
    mapping:
      text: |
        *{{action | capitalize}} {{repository.name}}*
        {{#if pull_request}}
        PR: {{pull_request.title}}
        By: {{pull_request.user.login}}
        {{/if}}
      channel: "{{repository.name}}-notifications"
```

## Common Integrations

### Stripe Webhooks

```yaml
stripe_webhooks:
  endpoint_secret: "${STRIPE_WEBHOOK_SECRET}"
  
  events:
    - type: "checkout.session.completed"
      handler: |
        async function(event) {
          const session = event.data.object;
          await fulfillOrder(session);
          await sendReceipt(session.customer_email);
        }
        
    - type: "invoice.payment_failed"
      handler: |
        async function(event) {
          const invoice = event.data.object;
          await notifyCustomer(invoice);
          await createDunningTask(invoice);
        }
        
    - type: "customer.subscription.updated"
      handler: |
        async function(event) {
          const subscription = event.data.object;
          await syncSubscriptionStatus(subscription);
        }
```

### GitHub Webhooks

```yaml
github_webhooks:
  secret: "${GITHUB_WEBHOOK_SECRET}"
  
  events:
    - type: "push"
      branches: ["main", "develop"]
      handler: |
        async function(event) {
          await triggerCI(event.repository, event.ref);
          await notifyTeam(event.commits);
        }
        
    - type: "pull_request"
      actions: ["opened", "synchronize"]
      handler: |
        async function(event) {
          await runTests(event.pull_request);
          await requestReview(event.pull_request);
        }
        
    - type: "issues"
      actions: ["opened"]
      handler: |
        async function(event) {
          await triageIssue(event.issue);
          await assignOwner(event.issue);
        }
```

### Slack Webhooks

```yaml
slack_webhooks:
  incoming:
    # Receive slash commands and interactions
    signing_secret: "${SLACK_SIGNING_SECRET}"
    
    events:
      - type: "slash_command"
        command: "/deploy"
        handler: handleDeployCommand
        
      - type: "interactive_message"
        callback_id: "approval_*"
        handler: handleApproval
        
  outgoing:
    # Send messages to Slack
    webhook_url: "${SLACK_WEBHOOK_URL}"
    
    templates:
      alert:
        blocks:
          - type: section
            text: "🚨 *Alert:* {{message}}"
          - type: context
            elements:
              - type: mrkdwn
                text: "Source: {{source}} | Time: {{timestamp}}"
```

## Error Handling

### Retry Strategy

```yaml
retry_config:
  enabled: true
  
  policy:
    max_attempts: 5
    initial_delay: 1000  # ms
    max_delay: 60000  # ms
    backoff_multiplier: 2
    
  retry_on:
    status_codes: [408, 429, 500, 502, 503, 504]
    exceptions: ["ECONNRESET", "ETIMEDOUT"]
    
  dead_letter:
    enabled: true
    destination: "failed_webhooks_queue"
    retention_days: 7
```

### Error Logging

```yaml
error_handling:
  logging:
    level: error
    include:
      - request_id
      - event_type
      - payload_hash
      - error_message
      - stack_trace
      - retry_count
      
  alerting:
    on_failure:
      - type: slack
        channel: "#webhook-alerts"
        threshold: 5  # failures per minute
        
    on_dead_letter:
      - type: pagerduty
        severity: warning
```

## Webhook Testing

### Test Payload Generator

```yaml
test_payloads:
  stripe_payment:
    type: "checkout.session.completed"
    data:
      object:
        id: "cs_test_123"
        amount_total: 2000
        currency: "usd"
        customer_email: "[email protected]"
        payment_status: "paid"
        
  github_push:
    ref: "refs/heads/main"
    repository:
      name: "my-repo"
      full_name: "org/my-repo"
    commits:
      - id: "abc123"
        message: "Test commit"
        author:
          name: "Test User"
```

### Webhook Debugging

```yaml
debugging:
  tools:
    - name: "Request Bin"
      url: "https://requestbin.com"
      use: "Capture and inspect payloads"
      
    - name: "ngrok"
      command: "ngrok http 3000"
      use: "Expose local server"
      
    - name: "Webhook.site"
      url: "https://webhook.site"
      use: "Quick webhook testing"
      
  logging:
    enabled: true
    log_payloads: true
    log_headers: true
    mask_secrets: true
```

## Security Best Practices

### Security Checklist

```yaml
security:
  authentication:
    - Verify webhook signatures
    - Use HTTPS only
    - Rotate secrets regularly
    
  validation:
    - Validate payload schema
    - Check timestamp freshness
    - Verify source IP if possible
    
  processing:
    - Idempotent handlers
    - Rate limiting
    - Timeout protection
    
  storage:
    - Encrypt secrets at rest
    - Audit logging
    - No sensitive data in URLs
```

### IP Allowlisting

```yaml
ip_allowlist:
  stripe:
    - "3.18.12.63"
    - "3.130.192.231"
    # ... more IPs
    
  github:
    - "192.30.252.0/22"
    - "185.199.108.0/22"
    # ... more ranges
    
  slack:
    - "54.159.240.0/22"
    # ... more ranges
```

## Monitoring

### Metrics Dashboard

```
WEBHOOK METRICS - LAST 24 HOURS
═══════════════════════════════════════

Received:      12,456
Processed:     12,398 (99.5%)
Failed:           58 (0.5%)
Retried:         123

BY SOURCE:
Stripe     ████████████░░░░ 5,230
GitHub     ██████████░░░░░░ 4,120
Slack      ████░░░░░░░░░░░░ 1,850
Other      ███░░░░░░░░░░░░░ 1,256

LATENCY (p99):
Processing: 245ms
Response:   52ms

ERROR BREAKDOWN:
Timeout:       25
Invalid Sig:   18
Parse Error:   10
Rate Limited:   5
```

## Best Practices

1. **Respond Quickly**: Return 200 immediately, process async
2. **Idempotency**: Handle duplicate events gracefully
3. **Verify Signatures**: Always validate webhook authenticity
4. **Log Everything**: Maintain audit trail
5. **Retry Logic**: Implement exponential backoff
6. **Dead Letters**: Don't lose failed events
7. **Rate Limiting**: Protect against flood attacks
8. **Monitoring**: Alert on failures and latency

© Claude Office Skills · MIT · claude-office-skills/skills

Похожие скиллы

Все скиллы по теме «Автоматизация и no-code: n8n, Zapier, Make» →
notion-api intellectronica Скилл для взаимодействия с Notion API через REST-запросы. Даёт агенту полный доступ к страницам, базам данных, блокам и комментариям — читать, создавать, обновлять и удалять контент. CX Codex +1 94 900установок building-tools celigo Скилл для сборки переиспользуемых ресурсов Celigo: логика поиска, импорта и ветвления за одним контрактом входа и выхода. CX Codex +1 2 900установок n8n-workflow-patterns czlonkowski Даёт шесть архитектурных паттернов для n8n-воркфлоу: webhook, API, база данных, AI-агент, расписание, пакетная обработка. Подсказывает, какой паттерн выбрать и какие ноды нужны. CX Codex +1 11 700установок planetscale-webhook-automation-recommendations planetscale Подбирает подписки на вебхуки PlanetScale и безопасные сценарии автоматизации для алертов, аномалий и миграций. Помогает настроить оповещения без риска для продакшена. CX Codex +1 1 700установок webhook-platform-design Samuel Berthe Помогает спроектировать платформу исходящих вебхуков: таксономию событий, подпись HMAC, повторные доставки и журнал отладки. CX Codex +1 8 100установок configuring-exports celigo Скилл для настройки экспортов в Celigo: подключение к внешней системе, выбор адаптора, дельта-выгрузки, вебхуки и lookup-шаги. CX Codex +1 3 000установок

Из того же набора109

template-engine Автоматически заполняет шаблоны документов Word, Excel и PowerPoint данными из списков или таблиц. Упрощает рассылки и массовую генерацию отчётов. CX Codex +1 4 600установок Security Monitoring Скилл для автоматизации мониторинга безопасности: правила детекта, алерты, разбор инцидентов и проверки на соответствие требованиям. CX Codex +1 4 600установок Applicant Screening Скилл оценивает резюме по матрице требований вакансии и выставляет балл. Пригодится, когда откликов много, а смотреть их надо быстро. CX Codex +1 4 600установок Lead Qualification Оценивает и скорит лиды по фреймворкам BANT, MEDDIC и GPCTBA/C&I. Помогает приоритизировать потенциальных клиентов и проверять стоп-факторы сделки. CX Codex +1 4 600установок skill-name Шаблон скилла из набора Claude Office Skills: задаёт структуру метаданных и разделов для скиллов по документам и юридическим задачам. CX Codex +1 4 500установок Suspicious Email Analyzer Скилл проверяет подозрительные электронные письма на фишинг, мошеннические схемы и опасные ссылки. Помогает оценить надёжность отправителя перед переходом по адресу. CX Codex +1 4 500установок Offer Letter Generator Собирает формальное письмо-оффер с должностью, зарплатой, бонусами и дедлайном ответа. Пригодится, когда нанимаете и нужен аккуратный документ без юриста под рукой. CX Codex +1 4 500установок lead-routing Скилл распределяет входящие лиды между менеджерами: скоринг, территории, round-robin и контроль загрузки. Пригодится, когда лиды приходят быстрее, чем их успевают разбирать вручную. CX Codex +1 4 500установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой