botserver/templates/productivity/office.gbai/office.gbdialog/api-integration.bas
Rodrigo Rodriguez (Pragmatismo) 48c1ae0b51 , dt.month, dt.hour, dt.is_weekend, etc.)
- Add startup wizard module for first-run configuration
- Add white-label branding system with .product file support
- Add bot manager for lifecycle, MinIO buckets, and templates
- Add version tracking registry for component updates
- Create comparison doc: BASIC vs n8n/Zapier/Make/Copilot
- Add WhatsApp-style sample dialogs to template documentation
- Add data traceability SVG diagram ```
2025-11-30 15:07:29 -03:00

301 lines
9.6 KiB
QBasic

' API Integration Bot - Demonstrates HTTP & API operations keywords
' This template shows how to use POST, PUT, PATCH, DELETE HTTP, GRAPHQL, SOAP, and SET HEADER
' ============================================================================
' WEBHOOK: External systems can trigger API operations via HTTP POST
' Endpoint: /api/office/webhook/api-gateway
' ============================================================================
WEBHOOK "api-gateway"
TALK "API Integration Bot initialized..."
' ============================================================================
' EXAMPLE 1: Basic REST API calls with authentication
' ============================================================================
' Set up authentication headers (reused for subsequent requests)
api_key = GET BOT MEMORY("external_api_key")
SET HEADER "Authorization", "Bearer " + api_key
SET HEADER "Content-Type", "application/json"
SET HEADER "X-Client-ID", "office-bot"
' GET request (using existing GET keyword)
users = GET "https://api.example.com/users"
TALK "Retrieved " + UBOUND(users) + " users from API"
' ============================================================================
' EXAMPLE 2: POST - Create new resources
' ============================================================================
' Create a new customer
new_customer = #{
"name": "John Doe",
"email": "john.doe@example.com",
"phone": "+1-555-0123",
"company": "Acme Corp",
"tier": "enterprise"
}
create_response = POST "https://api.example.com/customers", new_customer
IF create_response.status = 201 THEN
TALK "Customer created successfully with ID: " + create_response.data.id
SET BOT MEMORY "last_customer_id", create_response.data.id
ELSE
TALK "Failed to create customer: " + create_response.data.error
END IF
' ============================================================================
' EXAMPLE 3: PUT - Full resource update
' ============================================================================
' Update entire customer record
customer_id = GET BOT MEMORY("last_customer_id")
updated_customer = #{
"name": "John Doe",
"email": "john.doe@newdomain.com",
"phone": "+1-555-9999",
"company": "Acme Corp International",
"tier": "enterprise",
"status": "active",
"updated_at": NOW()
}
put_response = PUT "https://api.example.com/customers/" + customer_id, updated_customer
IF put_response.status = 200 THEN
TALK "Customer fully updated"
END IF
' ============================================================================
' EXAMPLE 4: PATCH - Partial resource update
' ============================================================================
' Update only specific fields
partial_update = #{
"tier": "premium",
"notes": "Upgraded from enterprise plan"
}
patch_response = PATCH "https://api.example.com/customers/" + customer_id, partial_update
IF patch_response.status = 200 THEN
TALK "Customer tier upgraded to premium"
END IF
' ============================================================================
' EXAMPLE 5: DELETE_HTTP - Remove resources
' ============================================================================
' Delete a temporary resource
temp_resource_id = "temp-12345"
delete_response = DELETE HTTP "https://api.example.com/temp-files/" + temp_resource_id
IF delete_response.status = 204 OR delete_response.status = 200 THEN
TALK "Temporary resource deleted"
END IF
' ============================================================================
' EXAMPLE 6: Working with multiple APIs
' ============================================================================
' Clear headers and set new ones for different API
CLEAR HEADERS
' Stripe-style API authentication
SET HEADER "Authorization", "Basic " + GET BOT MEMORY("stripe_api_key")
SET HEADER "Content-Type", "application/x-www-form-urlencoded"
' Create a payment intent
payment_data = #{
"amount": 2999,
"currency": "usd",
"customer": "cus_abc123",
"description": "Order #12345"
}
payment_response = POST "https://api.stripe.com/v1/payment_intents", payment_data
IF payment_response.status = 200 THEN
payment_intent_id = payment_response.data.id
client_secret = payment_response.data.client_secret
TALK "Payment intent created: " + payment_intent_id
END IF
CLEAR HEADERS
' ============================================================================
' EXAMPLE 7: GraphQL API calls
' ============================================================================
' Query users with GraphQL
graphql_query = "query GetUsers($limit: Int!, $status: String) { users(first: $limit, status: $status) { id name email role createdAt } }"
graphql_vars = #{
"limit": 10,
"status": "active"
}
graphql_response = GRAPHQL "https://api.example.com/graphql", graphql_query, graphql_vars
IF graphql_response.status = 200 THEN
users = graphql_response.data.data.users
FOR EACH user IN users
TALK "User: " + user.name + " (" + user.email + ")"
NEXT user
END IF
' GraphQL mutation example
mutation_query = "mutation CreateTask($input: TaskInput!) { createTask(input: $input) { id title status assignee { name } } }"
mutation_vars = #{
"input": #{
"title": "Review quarterly report",
"description": "Review and approve Q4 financial report",
"assigneeId": "user-456",
"dueDate": FORMAT(DATEADD(TODAY(), "day", 7), "yyyy-MM-dd"),
"priority": "high"
}
}
mutation_response = GRAPHQL "https://api.example.com/graphql", mutation_query, mutation_vars
IF mutation_response.status = 200 THEN
task = mutation_response.data.data.createTask
TALK "Task created: " + task.title + " (assigned to " + task.assignee.name + ")"
END IF
' ============================================================================
' EXAMPLE 8: SOAP API calls (Legacy system integration)
' ============================================================================
' Call a SOAP web service for legacy ERP integration
soap_params = #{
"customerNumber": "CUST-001",
"orderDate": FORMAT(TODAY(), "yyyy-MM-dd"),
"productCode": "PRD-12345",
"quantity": 5
}
soap_response = SOAP "https://erp.legacy.example.com/OrderService.wsdl", "CreateOrder", soap_params
IF soap_response.status = 200 THEN
order_number = soap_response.data.raw
TALK "Legacy order created: " + order_number
END IF
' Another SOAP call - Get inventory status
inventory_params = #{
"warehouseCode": "WH-01",
"productCode": "PRD-12345"
}
inventory_response = SOAP "https://erp.legacy.example.com/InventoryService.wsdl", "GetStock", inventory_params
TALK "Current stock level retrieved from legacy system"
' ============================================================================
' EXAMPLE 9: Chained API calls (workflow)
' ============================================================================
TALK "Starting order fulfillment workflow..."
' Step 1: Create order in main system
SET HEADER "Authorization", "Bearer " + api_key
order_data = #{
"customer_id": customer_id,
"items": [
#{ "sku": "WIDGET-001", "quantity": 2, "price": 29.99 },
#{ "sku": "GADGET-002", "quantity": 1, "price": 49.99 }
],
"shipping_address": #{
"street": "123 Main St",
"city": "Anytown",
"state": "CA",
"zip": "90210"
}
}
order_response = POST "https://api.example.com/orders", order_data
order_id = order_response.data.id
' Step 2: Request shipping quote
shipping_request = #{
"origin_zip": "10001",
"destination_zip": "90210",
"weight_lbs": 5,
"dimensions": #{ "length": 12, "width": 8, "height": 6 }
}
shipping_response = POST "https://api.shipping.com/quotes", shipping_request
shipping_cost = shipping_response.data.rate
' Step 3: Update order with shipping info
shipping_update = #{
"shipping_method": shipping_response.data.service,
"shipping_cost": shipping_cost,
"estimated_delivery": shipping_response.data.estimated_delivery
}
PATCH "https://api.example.com/orders/" + order_id, shipping_update
' Step 4: Notify warehouse
warehouse_notification = #{
"order_id": order_id,
"priority": "standard",
"ship_by": FORMAT(DATEADD(TODAY(), "day", 2), "yyyy-MM-dd")
}
POST "https://api.warehouse.example.com/pick-requests", warehouse_notification
TALK "Order fulfillment workflow complete for order: " + order_id
CLEAR HEADERS
' ============================================================================
' EXAMPLE 10: Error handling and retries
' ============================================================================
' Attempt API call with error handling
max_retries = 3
retry_count = 0
success = false
WHILE retry_count < max_retries AND success = false
SET HEADER "Authorization", "Bearer " + api_key
health_check = GET "https://api.example.com/health"
IF health_check.status = 200 THEN
success = true
TALK "API health check passed"
ELSE
retry_count = retry_count + 1
TALK "API check failed, attempt " + retry_count + " of " + max_retries
WAIT 2
END IF
CLEAR HEADERS
WEND
IF success = false THEN
TALK "API is currently unavailable after " + max_retries + " attempts"
END IF
' ============================================================================
' Return webhook response with summary
' ============================================================================
result = #{
"status": "success",
"timestamp": NOW(),
"operations_completed": #{
"customers_created": 1,
"orders_processed": 1,
"api_calls_made": 12
},
"integrations_tested": ["REST", "GraphQL", "SOAP"]
}
TALK "API Integration examples completed!"