Spaces:
Sleeping
title: Gungfi Webhook BE
colorFrom: blue
colorTo: green
sdk: docker
pinned: false
Gungfi Webhook BE
FastAPI backend pengganti workflow n8n IniBukanBuatHackathon.json.
Flow yang dipertahankan:
- Terima Cloudinary webhook di
POST /cloudinary-trigger. - Parse
body.context.custommenjadiid,latitude,longitude,description, danbefore_img_url. - Jalankan loop protection: kalau
Idkosong, tidak meneruskan proses. - Download image dari Cloudinary, lalu kirim multipart form-data ke BE AI Pipeline
POST /process. - Update Supabase tabel
reportsdengandestruct_class,location_score,total_score, danstatus=complete.
Setup
uv venv
uv sync
Copy-Item .env.example .env
Isi .env, terutama SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY, dan CLOUDINARY_API_SECRET.
Run
uv run uvicorn app.main:app --host 0.0.0.0 --port 8000
Cloudinary notification URL:
https://your-domain/cloudinary-trigger
Set URL tersebut sebagai global webhook Notification URL di Cloudinary Console, atau di upload preset yang dipakai aplikasi. Dengan begitu aplikasi upload tidak perlu mengirim parameter notification_url pada setiap request.
Test
uv run pytest
CI/CD ke Hugging Face Spaces
Repository ini siap dideploy sebagai Docker Space. Buat Space di Hugging Face dengan SDK Docker, lalu tambahkan secret berikut di GitHub repository:
HF_USERNAME=your-huggingface-username
HF_TOKEN=hf_...
HF_SPACE_ID=your-huggingface-username/your-space-name
Tambahkan juga environment variable aplikasi di Hugging Face Space settings:
APP_NAME=gungfi-webhook-be
LOG_LEVEL=INFO
WEBHOOK_PATH=/cloudinary-trigger
AI_PIPELINE_URL=https://be-aipipeline.bluecoast-4238dc8b.eastasia.azurecontainerapps.io
AI_PIPELINE_TIMEOUT_SECONDS=60
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_ROLE_KEY=replace-me
SUPABASE_TABLE=reports
CLOUDINARY_API_SECRET=replace-me
CLOUDINARY_SIGNATURE_REQUIRED=true
CLOUDINARY_SIGNATURE_TOLERANCE_SECONDS=7200
Setiap push ke branch main akan menjalankan test, lalu melakukan force-push isi repo ke Hugging Face Space.
Test Upload Cloudinary
Tambahkan ini ke .env:
CLOUDINARY_CLOUD_NAME=...
CLOUDINARY_API_KEY=...
CLOUDINARY_API_SECRET=...
Untuk test upload file img/DSC06041.JPG ke Cloudinary:
uv run python scripts/upload_cloudinary_test.py
Kalau ingin Cloudinary memanggil FastAPI lokal, expose dulu server lokal ke HTTPS publik:
uv run uvicorn app.main:app --host 127.0.0.1 --port 8000
ngrok http 8000
Setelah dapat URL HTTPS dari tunnel, set global webhook Notification URL atau upload preset Notification URL di Cloudinary ke https://your-tunnel-url/cloudinary-trigger, lalu jalankan lagi script upload Cloudinary.