Webhook Integration
Introductionβ
Webhooks allow you to receive real-time event notifications from the I Hate PPT system, enabling automatic integration and responses between systems.
π Configure Webhooks NowHow It Worksβ
- Configure Webhook - Configure the URL to receive events in the console
- Event Trigger - When specific events occur, the system sends HTTP POST requests
- Handle Events - Your server receives and processes event data
- Response Confirmation - Return HTTP 200 status code to confirm receipt
Supported Eventsβ
PPT Generation Eventsβ
ppt.generation.started- PPT generation startedppt.generation.completed- PPT generation completedppt.generation.failed- PPT generation failedppt.generation.cancelled- PPT generation cancelled
Edit Eventsβ
ppt.edit.started- PPT editing startedppt.edit.completed- PPT editing completedppt.edit.failed- PPT editing failed
File Eventsβ
file.uploaded- File upload completedfile.processed- File processing completedfile.deleted- File deleted
User Eventsβ
user.registered- User registrationuser.subscribed- User subscriptionuser.unsubscribed- User unsubscribed
Configure Webhookβ
1. Create Webhookβ
curl -X POST https://api.ihateppt.com/v1/webhooks \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-domain.com/webhook",
"events": ["ppt.generation.completed", "ppt.generation.failed"],
"secret": "your_webhook_secret"
}'
2. Verify Webhookβ
The system will send a verification request to your URL:
POST https://your-domain.com/webhook
Content-Type: application/json
{
"type": "webhook.verification",
"data": {
"challenge": "verification_challenge_string"
}
}
Your server needs to return the challenge value:
{
"challenge": "verification_challenge_string"
}
Event Formatβ
Request Headersβ
POST https://your-domain.com/webhook
Content-Type: application/json
X-Webhook-Signature: sha256=signature
X-Webhook-Timestamp: 1640995200
X-Webhook-Event: ppt.generation.completed
Ready to integrate with your app?
Get started with our powerful API and SDK. Build amazing presentation features into your own applications.
View API DocsEvent Dataβ
{
"id": "evt_123456789",
"type": "ppt.generation.completed",
"created": "2024-01-15T10:30:00Z",
"data": {
"ppt_id": "ppt_123456",
"user_id": "user_789",
"title": "AI Development Trends",
"pages": 8,
"download_url": "https://api.ihateppt.com/v1/ppt/ppt_123456/download",
"generation_time": 25.5,
"cost": 30
}
}
Signature Verificationβ
Calculate Signatureβ
import hmac
import hashlib
import time
def verify_webhook_signature(payload, signature, secret, timestamp):
# Build signature string
message = f"{timestamp}.{payload}"
# Calculate HMAC-SHA256 signature
expected_signature = hmac.new(
secret.encode('utf-8'),
message.encode('utf-8'),
hashlib.sha256
).hexdigest()
# Verify signature
return hmac.compare_digest(f"sha256={expected_signature}", signature)
Verification Exampleβ
from flask import Flask, request, jsonify
import hmac
import hashlib
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def webhook():
# Get request headers
signature = request.headers.get('X-Webhook-Signature')
timestamp = request.headers.get('X-Webhook-Timestamp')
event_type = request.headers.get('X-Webhook-Event')
# Get request body
payload = request.get_data(as_text=True)
# Verify signature
if not verify_webhook_signature(payload, signature, WEBHOOK_SECRET, timestamp):
return jsonify({'error': 'Invalid signature'}), 400
# Handle event
event_data = request.get_json()
handle_webhook_event(event_type, event_data)
return jsonify({'status': 'success'}), 200
def handle_webhook_event(event_type, event_data):
if event_type == 'ppt.generation.completed':
# Handle PPT generation completed event
ppt_id = event_data['data']['ppt_id']
download_url = event_data['data']['download_url']
# Execute follow-up operations...
elif event_type == 'ppt.generation.failed':
# Handle PPT generation failed event
error_message = event_data['data']['error']
# Log error...
Retry Mechanismβ
Retry Strategyβ
- Retry Count: Maximum 3 times
- Retry Intervals: 1 second, 5 seconds, 30 seconds
- Timeout: 30 seconds
- Retry Conditions: Non-200 HTTP status codes
Retry Eventβ
{
"id": "evt_123456789",
"type": "webhook.retry",
"created": "2024-01-15T10:30:00Z",
"data": {
"original_event_id": "evt_123456788",
"retry_count": 2,
"next_retry_at": "2024-01-15T10:30:30Z"
}
}
Best Practicesβ
Securityβ
- Verify Signatures - Always verify webhook signatures
- Use HTTPS - Ensure webhook URLs use HTTPS
- Limit Access - Restrict access to webhook endpoints
- Log Events - Log all webhook events
Reliabilityβ
- Idempotency - Ensure processing logic is idempotent
- Fast Response - Return response within 5 seconds
- Error Handling - Properly handle various error scenarios
- Monitoring Alerts - Monitor webhook processing status
Performanceβ
- Async Processing - Use queues for asynchronous event processing
- Batch Processing - Batch process similar events
- Cache Data - Cache frequently accessed data
- Optimize Database - Optimize database queries and updates
Testing Webhooksβ
Using ngrok for Testingβ
# Install ngrok
npm install -g ngrok
# Start local server
python app.py
# Start ngrok in another terminal
ngrok http 3000
# Configure webhook with ngrok URL
curl -X POST https://api.ihateppt.com/v1/webhooks \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://abc123.ngrok.io/webhook",
"events": ["ppt.generation.completed"]
}'
Using Test Toolsβ
# Send test event
curl -X POST https://api.ihateppt.com/v1/webhooks/test \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"webhook_id": "wh_123456",
"event_type": "ppt.generation.completed"
}'
Frequently Asked Questionsβ
Q: What to do if webhook doesn't receive events?β
A:
- Check if webhook URL is accessible
- Verify signature verification logic is correct
- Check if webhook configuration is correct
- Check server logs for errors
Q: How to handle duplicate events?β
A:
- Use event ID for deduplication
- Implement idempotent processing logic
- Record processed event IDs
Q: What to do if webhook response times out?β
A:
- Optimize processing logic to reduce response time
- Use asynchronous processing mechanisms
- Increase server resources
Q: How to monitor webhook status?β
A:
- View webhook event logs
- Set up monitoring alerts
- Regularly check webhook configuration
Ready to integrate with your app?
Get started with our powerful API and SDK. Build amazing presentation features into your own applications.
View API DocsGet Started with Webhooks - Check out API Reference for detailed API interface documentation.