81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
import sys
|
|
import os
|
|
import os
|
|
import sys
|
|
from dotenv import load_dotenv
|
|
|
|
# Load .env BEFORE importing SuperOfficeClient to ensure settings are correctly initialized
|
|
load_dotenv(os.path.join(os.path.dirname(__file__), "../.env"), override=True)
|
|
|
|
from superoffice_client import SuperOfficeClient
|
|
|
|
# Configuration
|
|
WEBHOOK_NAME = "Gemini Connector Production"
|
|
TARGET_URL = f"https://floke-ai.duckdns.org/connector/webhook?token={os.getenv('WEBHOOK_TOKEN')}"
|
|
EVENTS = [
|
|
"contact.created",
|
|
"contact.changed",
|
|
"person.created",
|
|
"person.changed"
|
|
]
|
|
|
|
def register():
|
|
print(f"🚀 Initializing SuperOffice Client for Production...")
|
|
try:
|
|
client = SuperOfficeClient()
|
|
except Exception as e:
|
|
print(f"❌ Failed to connect: {e}")
|
|
return
|
|
|
|
if not client.access_token:
|
|
print("❌ Auth failed. Check SO_CLIENT_ID and SO_REFRESH_TOKEN in .env")
|
|
return
|
|
|
|
print("🔎 Checking existing webhooks...")
|
|
webhooks = client._get("Webhook")
|
|
|
|
if webhooks and 'value' in webhooks:
|
|
for wh in webhooks['value']:
|
|
if wh['Name'] == WEBHOOK_NAME:
|
|
print(f"⚠️ Webhook '{WEBHOOK_NAME}' already exists (ID: {wh['WebhookId']}).")
|
|
|
|
# Check if URL matches
|
|
if wh['TargetUrl'] != TARGET_URL:
|
|
print(f" ⚠️ URL Mismatch!")
|
|
print(f" Existing: {wh['TargetUrl']}")
|
|
print(f" New: {TARGET_URL}")
|
|
print(" Please delete it manually via API or extend client.")
|
|
else:
|
|
print(f" ✅ Webhook is up to date.")
|
|
return
|
|
|
|
print(f"✨ Registering new webhook: {WEBHOOK_NAME}")
|
|
|
|
webhook_secret = os.getenv('WEBHOOK_SECRET')
|
|
if not webhook_secret:
|
|
print("❌ Error: WEBHOOK_SECRET missing in .env")
|
|
return
|
|
|
|
payload = {
|
|
"Name": WEBHOOK_NAME,
|
|
"Events": EVENTS,
|
|
"TargetUrl": TARGET_URL,
|
|
"Secret": webhook_secret, # Used for signature calculation by SO
|
|
"State": "Active",
|
|
"Type": "Webhook"
|
|
}
|
|
|
|
try:
|
|
# Note: _post is defined in your client, returns JSON
|
|
res = client._post("Webhook", payload)
|
|
if res and "WebhookId" in res:
|
|
print(f"✅ SUCCESS! Webhook created with ID: {res['WebhookId']}")
|
|
print(f" Target: {res['TargetUrl']}")
|
|
else:
|
|
print(f"❌ Creation failed. Response: {res}")
|
|
except Exception as e:
|
|
print(f"❌ Error during registration: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
register()
|