66 lines
1.9 KiB
Python
Executable File
66 lines
1.9 KiB
Python
Executable File
import json
|
|
import os
|
|
import sys
|
|
import requests
|
|
|
|
BASE_URL = os.getenv('SERVICEM8_BASE_URL', 'https://api.servicem8.com')
|
|
ENDPOINT = '/webhook_subscriptions'
|
|
ACCESS_TOKEN = os.getenv('SERVICEM8_ACCESS_TOKEN', 'smk-ac525b-99c4b96305a49c7c-fe4dd3e705b647ea')
|
|
OBJECT_NAME = os.getenv('SERVICEM8_OBJECT', 'job')
|
|
FIELDS = os.getenv('SERVICEM8_FIELDS', 'uuid,status,date,queue_uuid,queue_expiry_date,work_order_date,active,edit_date,generated_job_id')
|
|
CALLBACK_URL = os.getenv('SERVICEM8_CALLBACK_URL', 'https://webhook.naroomaplumbing.au/webhooks/servicem8-object')
|
|
UNIQUE_ID = os.getenv('SERVICEM8_UNIQUE_ID', 'au-dev-job-object')
|
|
|
|
|
|
def pretty_print_json(data):
|
|
print(json.dumps(data, indent=2, sort_keys=True))
|
|
|
|
|
|
def parse_fields(value):
|
|
return [field.strip() for field in value.split(',') if field.strip()]
|
|
|
|
|
|
def create_webhook():
|
|
if not ACCESS_TOKEN:
|
|
print('SERVICEM8_ACCESS_TOKEN is required')
|
|
sys.exit(1)
|
|
|
|
fields = parse_fields(FIELDS)
|
|
if not fields:
|
|
print('SERVICEM8_FIELDS must contain at least one field')
|
|
sys.exit(1)
|
|
|
|
url = f"{BASE_URL}{ENDPOINT}"
|
|
headers = {
|
|
'X-API-Key': ACCESS_TOKEN,
|
|
'Accept': 'application/json',
|
|
'Content-Type': 'application/x-www-form-urlencoded',
|
|
}
|
|
form_data = [
|
|
('type', 'object'),
|
|
('object', OBJECT_NAME),
|
|
('callback_url', CALLBACK_URL),
|
|
('unique_id', UNIQUE_ID),
|
|
]
|
|
|
|
for field in fields:
|
|
form_data.append(('fields', field))
|
|
|
|
response = requests.post(url, headers=headers, data=form_data, timeout=30)
|
|
print(f'HTTP {response.status_code}')
|
|
|
|
try:
|
|
response_json = response.json()
|
|
pretty_print_json(response_json)
|
|
except ValueError:
|
|
print('Response was not valid JSON:')
|
|
print(response.text)
|
|
sys.exit(1)
|
|
|
|
if not response.ok:
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
create_webhook()
|