Back to Skills
    🦞

    clawver-reviews

    Handle Clawver customer reviews.

    By @nwang783
    View on GitHub
    SKILL.md
    ---
    name: clawver-reviews
    description: Handle Clawver customer reviews. Monitor ratings, craft responses, track sentiment trends. Use when asked about customer feedback, reviews, ratings, or reputation management.
    version: 1.0.0
    homepage: https://clawver.store
    metadata: {"openclaw":{"emoji":"⭐","homepage":"https://clawver.store","requires":{"env":["CLAW_API_KEY"]},"primaryEnv":"CLAW_API_KEY"}}
    ---
    
    # Clawver Reviews
    
    Manage customer reviews on your Clawver store. Monitor ratings, respond to feedback, and maintain your store's reputation.
    
    ## Prerequisites
    
    - `CLAW_API_KEY` environment variable
    - Active store with completed orders
    
    ## List Reviews
    
    ### Get All Reviews
    
    ```bash
    curl https://api.clawver.store/v1/stores/me/reviews \
      -H "Authorization: Bearer $CLAW_API_KEY"
    ```
    
    **Response:**
    ```json
    {
      "success": true,
      "data": {
        "reviews": [
          {
            "id": "rev_abc123",
            "orderId": "ord_xyz789",
            "productId": "prod_456",
            "productName": "AI Art Pack Vol. 1",
            "rating": 5,
            "title": "Amazing quality!",
            "body": "The wallpapers are stunning.",
            "reviewerName": "John D.",
            "reviewerEmail": "john@example.com",
            "createdAt": "2024-01-15T10:30:00Z",
            "updatedAt": "2024-01-15T10:30:00Z",
            "response": null
          },
          {
            "id": "rev_def456",
            "orderId": "ord_abc123",
            "productId": "prod_789",
            "rating": 3,
            "body": "Good quality but shipping took longer than expected.",
            "reviewerName": "Jane S.",
            "reviewerEmail": "jane@example.com",
            "createdAt": "2024-01-14T08:15:00Z",
            "updatedAt": "2024-01-14T09:00:00Z",
            "response": {
              "body": "Thank you for your feedback! We're working with our shipping partner to improve delivery times.",
              "createdAt": "2024-01-14T09:00:00Z"
            }
          }
        ]
      },
      "meta": {
        "pagination": {
          "cursor": "next_page_id",
          "hasMore": false,
          "limit": 20
        }
      }
    }
    ```
    
    ### Pagination
    
    ```bash
    curl "https://api.clawver.store/v1/stores/me/reviews?limit=20&cursor=abc123" \
      -H "Authorization: Bearer $CLAW_API_KEY"
    ```
    
    ### Filter Unanswered Reviews
    
    ```python
    response = api.get("/v1/stores/me/reviews")
    reviews = response["data"]["reviews"]
    unanswered = [r for r in reviews if r["response"] is None]
    print(f"Unanswered reviews: {len(unanswered)}")
    ```
    
    ## Respond to Reviews
    
    ```bash
    curl -X POST https://api.clawver.store/v1/reviews/{reviewId}/respond \
      -H "Authorization: Bearer $CLAW_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "body": "Thank you for your kind review! We appreciate your support."
      }'
    ```
    
    **Response:**
    ```json
    {
      "success": true,
      "data": {
        "review": {
          "id": "rev_abc123",
          "response": {
            "body": "Thank you for your kind review! We appreciate your support.",
            "createdAt": "2024-01-15T11:00:00Z"
          }
        }
      }
    }
    ```
    
    **Response requirements:**
    - Maximum 1000 characters
    - One response per review (cannot edit)
    - Professional tone recommended
    
    ## Review Webhook
    
    Get notified when new reviews are posted:
    
    ```bash
    curl -X POST https://api.clawver.store/v1/webhooks \
      -H "Authorization: Bearer $CLAW_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "url": "https://your-server.com/webhook",
        "events": ["review.received"],
        "secret": "your-secret-min-16-chars"
      }'
    ```
    
    **Webhook payload:**
    ```json
    {
      "event": "review.received",
      "timestamp": "2024-01-15T10:30:00Z",
      "data": {
        "reviewId": "rev_abc123",
        "orderId": "ord_xyz789",
        "rating": 5
      }
    }
    ```
    
    **Signature format:**
    ```
    X-Claw-Signature: sha256=abc123...
    ```
    
    **Verification (Node.js):**
    ```javascript
    const crypto = require('crypto');
    
    function verifyWebhook(body, signature, secret) {
      const expected = 'sha256=' + crypto
        .createHmac('sha256', secret)
        .update(body)
        .digest('hex');
      return crypto.timingSafeEqual(
        Buffer.from(signature),
        Buffer.from(expected)
      );
    }
    ```
    
    ## Response Templates
    
    ### Positive Reviews (4-5 stars)
    
    **Generic thank you:**
    ```
    Thank you for your wonderful review! We're thrilled you love the product. Your support means everything to us!
    ```
    
    **For repeat customers:**
    ```
    Thank you for another great review! We truly appreciate your continued support.
    ```
    
    **For detailed reviews:**
    ```
    Thank you for taking the time to write such a thoughtful review! Feedback like yours helps other customers and motivates us to keep creating.
    ```
    
    ### Neutral Reviews (3 stars)
    
    **Acknowledge and improve:**
    ```
    Thank you for your honest feedback! We're always looking to improve. If there's anything specific we can do better, please reach out—we'd love to hear from you.
    ```
    
    ### Negative Reviews (1-2 stars)
    
    **Apologize and offer solution:**
    ```
    We're sorry to hear about your experience. This isn't the standard we aim for. Please contact us at [email] so we can make this right.
    ```
    
    **For shipping issues (POD):**
    ```
    We apologize for the shipping delay. We're working with our fulfillment partner to improve delivery times. Thank you for your patience and feedback.
    ```
    
    **For product issues:**
    ```
    We're sorry the product didn't meet your expectations. We'd like to understand more about what went wrong. Please reach out to us so we can resolve this for you.
    ```
    
    ## Analytics
    
    ### Overall Rating from Store Analytics
    
    ```bash
    curl https://api.clawver.store/v1/stores/me/analytics \
      -H "Authorization: Bearer $CLAW_API_KEY"
    ```
    
    Top products in the response include `averageRating` and `reviewsCount`.
    
    ### Rating Distribution
    
    ```python
    response = api.get("/v1/stores/me/reviews")
    reviews = response["data"]["reviews"]
    
    distribution = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0}
    for review in reviews:
        distribution[review["rating"]] += 1
    
    total = len(reviews)
    for rating, count in distribution.items():
        pct = (count / total * 100) if total > 0 else 0
        print(f"{rating} stars: {count} ({pct:.1f}%)")
    ```
    
    ## Automated Review Management
    
    ### Daily Review Check
    
    ```python
    def check_and_respond_to_reviews():
        response = api.get("/v1/stores/me/reviews")
        reviews = response["data"]["reviews"]
        
        for review in reviews:
            # Skip if already responded
            if review["response"]:
                continue
            
            # Auto-respond based on rating
            if review["rating"] >= 4:
                response_text = "Thank you for your wonderful review! We're thrilled you love the product."
            elif review["rating"] == 3:
                response_text = "Thank you for your feedback! We're always looking to improve."
            else:
                # Flag for manual review
                print(f"Negative review needs attention: {review['id']}")
                continue
            
            api.post(f"/v1/reviews/{review['id']}/respond", {
                "body": response_text
            })
            print(f"Responded to review {review['id']}")
    ```
    
    ### Sentiment Monitoring
    
    ```python
    def check_sentiment_trend():
        response = api.get("/v1/stores/me/reviews")
        reviews = response["data"]["reviews"]
        
        # Get last 10 reviews (already sorted by date)
        recent = reviews[:10]
        
        if not recent:
            return
        
        avg_rating = sum(r["rating"] for r in recent) / len(recent)
        negative_count = sum(1 for r in recent if r["rating"] <= 2)
        
        if avg_rating < 3.5:
            print("Warning: Recent review sentiment is declining")
        
        if negative_count >= 3:
            print("Warning: Multiple negative reviews in recent batch")
    ```
    
    ## Best Practices
    
    1. **Respond quickly** - Aim to respond within 24 hours
    2. **Be professional** - Avoid defensive or argumentative responses
    3. **Take it offline** - For complex issues, invite customers to email
    4. **Thank everyone** - Even negative reviewers deserve acknowledgment
    5. **Learn from feedback** - Use recurring themes to improve products
    6. **Don't incentivize** - Never offer discounts for positive reviews
    
    ## Impact on Store
    
    - Reviews display on product pages
    - Average rating shows on store profile
    - Higher ratings improve marketplace visibility
    - Responding to reviews builds trust with future buyers