Перейти к основному содержанию

Documentation Index

Fetch the complete documentation index at: https://docs.runblob.io/llms.txt

Use this file to discover all available pages before exploring further.

Webhooks доставляют мгновенные уведомления о завершении, ошибке или таймауте задач генерации. Без polling!

Руководство по настройке

1

Создайте webhook-эндпоинт

Поднимите HTTPS-эндпоинт, принимающий POST-запросы.
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/webhook/chatgpt-images', methods=['POST'])
def handle_webhook():
    data = request.json
    
    if data['status'] == 'completed':
        print(f"Image ready: {data['result_image_url']}")
    else:
        print(f"Generation failed: {data.get('message')}")
        
    return jsonify({'status': 'received'}), 200
2

Передайте URL webhook

Укажите URL вашего webhook при создании задачи.
curl -X POST https://platform.runblob.io/v1/chatgpt-images/generate -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{
  "prompt": "A beautiful landscape",
  "callback_url": "https://your-app.com/webhook/chatgpt-images"
}'
3

Обработайте уведомления

Ваш эндпоинт получит мгновенное уведомление по готовности задачи.

Структура payload

Отправляется при успешной генерации.
{
  "task_uuid": "dc62d83d-1953-4bca-8554-222679a7a4a9",
  "status": "completed",
  "prompt": "cat and dog",
  "result_image_url": "https://cdn.example.com/images/dc62d83d.png",
  "message": null
}
status
string
Всегда "completed" при успехе
task_uuid
string
UUID завершённой задачи
result_image_url
string
Прямая ссылка для скачивания изображения
prompt
string
Исходный промпт для генерации
message
null
Всегда null при успехе

Возможности надёжности

Политика повторов: до 5 попыток с интервалом 30 секундСтратегия задержки: линейнаяОбработка отказа: после 5 попыток webhook помечается как failed
Тайм-аут запроса: 30 секундТайм-аут соединения: 10 секундРекомендация: быстро отвечайте кодом 200
HTTPS обязателен: URL webhook должен использовать HTTPSIP allowlist: рассмотрите ограничение по IP RunBlobВалидация: всегда проверяйте task_uuid

Примеры реализации

from flask import Flask, request, jsonify
import logging

app = Flask(__name__)
logging.basicConfig(level=logging.INFO)

@app.route('/webhook/chatgpt-images', methods=['POST'])
def chatgpt_images_webhook():
    try:
        data = request.json
        task_uuid = data.get('task_uuid')
        status = data.get('status')
        
        if status == 'completed':
            image_url = data.get('result_image_url')
            logging.info(f"Image ready for {task_uuid}: {image_url}")
            # Process successful generation
            process_image(task_uuid, image_url)
        else:
            error_code = data.get('message')
            logging.error(f"Generation failed for {task_uuid}: {error_code}")
            # Handle failure
            handle_failure(task_uuid, error_code)
        
        return jsonify({'status': 'received'}), 200
    except Exception as e:
        logging.error(f"Webhook error: {str(e)}")
        return jsonify({'error': 'Internal error'}), 500

def process_image(task_uuid, image_url):
    # Your image processing logic here
    pass

def handle_failure(task_uuid, error_code):
    # Your error handling logic here
    pass
Важно: всегда быстро возвращайте код 200, чтобы подтвердить получение. Тяжёлую обработку выполняйте асинхронно.