Marketplace
frappe-webhook-manager
Create webhook handlers for Frappe integrations. Use when implementing webhooks, event-driven integrations, or external system notifications.
$ Installer
git clone https://github.com/Venkateshvenki404224/frappe-apps-manager /tmp/frappe-apps-manager && cp -r /tmp/frappe-apps-manager/frappe-apps-manager/skills/frappe-webhook-manager ~/.claude/skills/frappe-apps-manager// tip: Run this command in your terminal to install the skill
SKILL.md
name: frappe-webhook-manager description: Create webhook handlers for Frappe integrations. Use when implementing webhooks, event-driven integrations, or external system notifications.
Frappe Webhook Manager
Generate secure webhook receivers and senders for Frappe integrations with external systems.
When to Use This Skill
Claude should invoke this skill when:
- User wants to receive webhooks from external services
- User needs to send webhooks to external systems
- User mentions webhook, event-driven integration, or external notifications
- User wants to integrate payment gateways, APIs, or third-party services
- User needs to handle real-time events from external systems
Capabilities
1. Webhook Receiver
Secure Webhook Endpoint:
import frappe
import hmac
import hashlib
@frappe.whitelist(allow_guest=True)
def webhook_receiver():
"""Receive webhook from external service"""
# Get signature
signature = frappe.get_request_header('X-Webhook-Signature')
# Verify signature
secret = frappe.conf.get('webhook_secret')
expected = hmac.new(
secret.encode(),
frappe.request.data,
hashlib.sha256
).hexdigest()
if not hmac.compare_digest(signature, expected):
frappe.throw(_('Invalid signature'), frappe.AuthenticationError)
# Parse payload
payload = frappe.parse_json(frappe.request.data)
# Process webhook
event = payload.get('event')
if event == 'payment.success':
handle_payment_success(payload)
elif event == 'customer.updated':
handle_customer_update(payload)
return {'status': 'success'}
2. Outgoing Webhook
Send Webhook on Document Event:
class SalesInvoice(Document):
def on_submit(self):
# Send webhook on submission
send_webhook('invoice.submitted', self.as_dict())
def send_webhook(event, data):
"""Send webhook to external system"""
webhook_url = frappe.conf.get('external_webhook_url')
payload = {
'event': event,
'data': data,
'timestamp': frappe.utils.now()
}
# Enqueue for async processing
frappe.enqueue(
'_send_webhook',
webhook_url=webhook_url,
payload=payload,
queue='short'
)
def _send_webhook(webhook_url, payload):
"""Send webhook with retry logic"""
import requests
for attempt in range(3):
try:
response = requests.post(
webhook_url,
json=payload,
headers={'Content-Type': 'application/json'},
timeout=10
)
if response.status_code == 200:
return True
except Exception as e:
if attempt == 2:
frappe.log_error(frappe.get_traceback(),
f"Webhook Failed: {webhook_url}")
return False
References
Frappe Webhook Implementation:
Repository

Venkateshvenki404224
Author
Venkateshvenki404224/frappe-apps-manager/frappe-apps-manager/skills/frappe-webhook-manager
1
Stars
1
Forks
Updated5d ago
Added1w ago