# Contextual Skills Inventory

#### (BASIC) Understanding Flow Editor and Flow Structure

* UI-1: Navigating the Flow Editor: Familiarity with the workspace, toolbar, and palette.
* UI-2: Creating and Managing Flows: Understanding how to create, import/export, and organize flows.

#### (BASIC) Flow Types:

* FLOW-1: HTTP-Flow: Creating an HTTP-Flow and understanding the structural requirements.
* FLOW-2: HTTP-Flow: Creating an HTTP-Flow and understanding the structural requirements.

#### (BASIC) Working with Core Nodes

* CORE-1: Inject Node: Manually trigger messages to start flows.
* CORE-2: Debug Node: Display messages and flow output for troubleshooting.
* CORE-3: Function Node: Writing custom JavaScript code to process message objects.
* CORE-4: Change Node: Modify properties of the message payload.
* CORE-5: Switch Node: Implement conditional logic to route messages based on their content.
* CORE-6: Template Node: Generate dynamic content using templates (e.g., HTML).

#### (BASIC) Real-Time Monitoring and Logging

* LOG-1: Log Management (e.g., logtap nodes): Use log nodes to capture real-time flow activity.
* LOG-2: Log Viewing: Using the Agent log viewer and the central log viewer to view and analyze agent logs messages.
* LOG-3: Debugging:: Effective testing in the flow editor using log nodes and node.warn or node.error in functions along with the debug pane.

#### (BASIC) Handling HTTP Requests

* HTTP-1: HTTP Nodes: Handling incoming requests using HTTP-IN.
* HTTP-2: HTTP Nodes: Responding to a request using HTTP-RESPONSE.

#### (BASIC) Managing and Using Data in Messages (msg)

* MSG-1: Message Structure: Understanding the msg object and its components (payload, topic, headers, etc.).
* MSG-1A: Understanding the incoming msg structure from triggers (Insert, Update)
* MSG-1B: Understanding the msg metaData and how it can be used
* MSG-2: Accessing and Modifying Payloads: Retrieve and manipulate the data within a message.
* MSG-3: Using Context Variables: Utilize flow and global context to store and share data between nodes.

#### (BASIC) Error Handling

* ERROR-1: Try/Catch in Function Nodes: Use JavaScript’s error handling within function nodes.
* ERROR-2: CATCH Node: Capture and manage errors occurring within the flow.
* ERROR-3: Logtap Node: Logging events at different levels (debug, info, warn, error) for better tracking and debugging.

#### (BASIC) Flow Control and Logic

* CTL-1: Conditional Routing: Direct messages based on conditions using switch and function nodes.
* CTL-2: Loops and Timers: Implement loops for repeated actions and use delay/timer nodes for time-based logic.

#### (BASIC) Working with Native Objects

* NO-1: Creating and editing object-type schemas.
* NO-2: Native Object Nodes: Create a record using a NO node.
* NO-3: Native Object Nodes: Get a record using the NO GET node.
* NO-4: Native Object Nodes: Update a record using a NO PUT node.
* NO-5: Native Object Nodes: Patch a record using a NO PATCH node.
* NO-6: Native Object Nodes: Delete a record using a NO DELETE node.

#### (BASIC) Triggers & Actions

* TRIGGER-1: POST-INSERT Trigger SendToAgent
* TRIGGER-2: POST-UPDATE Trigger SendToAgent
* ACTION-1: Using SendToAgent in an Action

#### (ADVANCED) Connecting to APIs and Web Services

* API-1: HTTP Request Node: Make outbound HTTP requests to external APIs.
* API-2: Processing API Responses: Extract and manipulate data returned from external services.
* API-3: Handling Authentication: Creating different connection types for use in flows.

#### (ADVANCED) Advanced Native Objects

* NO-7: Native Object Nodes: Query for records using a NO SEARCH node.
* NO-8: Native Object Nodes: Pagination of Query Results

#### (ADVANCED) Advanced HTTP Request

* HTTP-3: HTTP Nodes: Using msg properties with HTTP nodes for headers and other parameters

#### (ADVANCED) Using External Databases

* DATA-1: Working with Databases: Interact with external databases using relevant nodes (e.g., MySQL, MongoDB).

#### (ADVANCED) Handling and Processing Events

* EVT-1: Event-Driven Programming: Trigger flows based on events, such as data changes or external input.
* EVT-2: Webhooks: Set up flows that respond to external services via webhooks.

#### (ADVANCED) Using Timers and Scheduling

* TIMER-1: Inject Node (for time-based actions): Set up flows to trigger at intervals or specific times.
* TIMER-2: Scheduled Actions:

#### (ADVANCED) Integrating with IoT Devices

* IOT-1: MQTT Node: Set up communication with IoT devices using the MQTT protocol.
* IOT-2: WebSocket Node: Handle real-time communications between client and server.

#### (ADVANCED) Security and Authentication

* SEC-1: Securing Flows: Implement flow-level security (e.g., requiring authentication for HTTP endpoints).
* SEC-2: Handling Authentication Mechanisms: Manage OAuth, API keys, JWT tokens, or basic authentication in flows.

#### (ADVANCED) Customizing NPM Packages

* NPM-1: Installing NPM Packages: Understand how to install NPM packages within the Flow Editor to extend functionality, including packages that add new capabilities within function nodes.
* NPM-2: Requiring NPM Packages in Function Nodes: Learn to use access packages within function nodes to incorporate external NPM modules into flows.
* NPM-3: Creating a custom Flow image that includes the custom npm packages for use with an Agent.

#### (ADVANCED) Custom (Contrib) Nodes

* NODE-1: Installing Custom Nodes: Learn to install custom Flow nodes from the open source community or npm using the flow editor.
* NODE-2: Creating a custom Flow image that includes the custom npm packages for use with an Agent.

#### (ADVANCED) Developing Custom Nodes

* NODE-3: Creating Custom Nodes: Learn the basics of developing custom Flow nodes to meet specific project requirements.
* NODE-4: Testing and Debugging Custom Nodes: Gain the ability to test and debug custom Flow nodes locally before deploying.
* NODE-5: Publishing Custom Nodes: Understand the process of publishing custom nodes to the Flow library or npm for others to use.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.contextual.io/documentation-and-resources/training/contextual-skills-inventory.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
