Example: Using advanced mode with a Slack Request node

Discovery connector request nodes provide an advanced mode capability that you can use during create actions. In the default edit view for an action, some applications have fields that are hidden because they are not needed for general use cases. For more advanced use cases, you can switch to advanced mode editing, which provides extra capabilities for editing flows. This topic provides a worked example of how to use advanced mode with a Slack Request node.

Before you begin

Install IBM® App Connect Enterprise 12.0.11.0 or later to use the advanced mode capability.

Watch the following video, which demonstrates how to use the Slack Request node in IBM App Connect Enterprise: Using the Slack Request node in IBM App Connect Enterprise 12.0.6.

About this task

IBM App Connect Enterprise communicates synchronously with Slack through the Slack Request node, which is available on Windows, AIX, and Linux® systems.

You can use the Slack Request node to connect to Slack and perform actions on objects in the Slack system, including the following:
Channels
Retrieve channels
Files
Add, retrieve, or delete files
Groups
Retrieve groups
Messages
Send or retrieve messages
User groups
Update or retrieve user groups
Users
Retrieve users

For more information about configuring the Slack Request node, see Slack Request node.

Procedure

  1. In the IBM App Connect Enterprise Toolkit, create a message flow that contains a Slack Request node. For example, the following message flow contains an HTTPInput node, a Slack Request node, and an HTTPReply node.
    This image shows a flow containing an HTTP Input node, a Slack Request node, and an HTTP Reply node..
  2. Select the Slack Request node in the flow to show the node properties in the editor.
  3. On the Basic tab, click Launch Connector Discovery.
    A panel is displayed in which you specify the name of the policy project and vault details to be used during connector discovery.
  4. Specify the details of the policy project and vault to be used during connector discovery:
    1. In the Policy Project field, specify the policy project that is used to store the policies that are created during connector discovery.
      Alternatively, you can create a new policy project by clicking New and then specifying the name of the new policy project. Then click Finish.
    2. Specify the vault to be used during connector discovery. By default, credentials that are used during connector discovery are stored in an external directory vault, which is an App Connect Enterprise vault that can be used by any integration server. Alternatively, you can store the credentials in an integration server vault, which is created in the integration server's work directory and can be used only by that specific integration server.
      To specify the vault to be used for storing the credentials, complete the steps in the Using the Connector Discovery wizard section of one of the following topics:
    3. In the Vault key field, enter the vault key that is used to access the credentials stored in the vault. The vault key must be at least 8 characters in length.
    4. Optional: By default, the specified vault location and vault key are saved as preferences in the Toolkit so that the values are preset when you launch Connector Discovery. If you do not want the preferences to be saved, deselect Save in vault preferences.
  5. Click Launch Connector Discovery to start the Connector Discovery wizard for the Slack connector.
    The Connector Discovery window is displayed. If existing Slack connections (accounts) are available, a list of those connections is displayed. If there are no existing connections, the status of the Slack connector is shown as Not connected.
    • If one or more Slack connections (accounts) are available, complete the following steps:
      1. Select the connection (account) that you want to use by clicking it.
      2. Click the required object type and then select the action that you want to perform on the object. For example, to send a message click Messages and then Send message.
    • If there are no existing connections (accounts), complete the following steps:
      1. Click the required object type and then select the action that you want to perform on that object. For example, to send a message, click Messages and then Send message .
      2. Click Connect.

        A window is displayed in which you enter the basic access token to be used to authenticate IBM App Connect Enterprise with your Slack account. If you do not have an access token, you can find information about how to obtain one in How to use IBM App Connect with Slack in the IBM App Connect Enterprise as a Service documentation.

      3. Click Connect.

        The credential is then stored in the vault, and the other connection details are saved in the Slack policy.

  6. In the wizard, set the required connector properties and any optional connector properties that you want to use during connector discovery:
    1. Optional: If you want to use Advanced mode, create a JSON schema file by completing the following steps:
      1. Exit the Connector Discovery wizard by clicking the X in the upper-right corner of the window.
      2. In the Properties view of the input node for your message flow, select the Basic tab. In the Path suffix for URL field, enter a value for the path suffix, for example /slack. (In this worked example, the input node is an HTTPInput node.)
      3. In the Properties view of the input node for your message flow, select the Input message parsing tab. In the Message domain field, select JSON : For JavaScript Object Notation messages from the drop-down menu.
      4. Create a blank JSON schema as described in Creating a JSON schema file. Populate the JSON file with entries that relate to the action that you are performing in Connector Discovery. For example, slackmessage.schema.json:
        
        {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "type": "object",
          "properties": {
            "destinationType": {
              "type": "string"
            },
            "objectId": {
              "type": "string"
            },
            "text": {
              "type": "string"
            },
            "parse": {
              "type": "string"
            },
            "messageAttachment": {
              "type": "object",
              "properties": {
                "messageText": {
                  "type": "string"
                },
                "preText": {
                  "type": "string"
                },
                "id": {
                  "type": "integer"
                },
                "fallBack": {
                  "type": "string"
                },
                "extracts": {
                  "type": "string"
                }
              },
              "required": [
                "messageText",
                "preText",
                "id",
                "fallBack",
                "extracts"
              ]
            },
            "unfurlLinks": {
              "type": "boolean"
            },
            "unfurlMedia": {
              "type": "boolean"
            },
            "username": {
              "type": "string"
            },
            "asUser": {
              "type": "boolean"
            },
            "iconUrl": {
              "type": "string"
            },
            "iconEmoji": {
              "type": "string"
            },
            "threadTimestamp": {
              "type": "string"
            },
            "replyBroadcast": {
              "type": "boolean"
            }
          },
          "required": [
            "destinationType",
            "objectId",
            "text",
            "parse",
            "messageAttachment",
            "unfurlLinks",
            "unfurlMedia",
            "username",
            "asUser",
            "iconUrl",
            "iconEmoji",
            "threadTimestamp",
            "replyBroadcast"
          ]
        }

        For more information about creating JSON schemas, see json-schema.org.

      5. In the Properties view of the Slack Request node, select the Request tab. Click Add to open the Add Map inputs entry wizard.
      6. Complete the following fields:
        • Input name: Choose a unique name for the Map Inputs table, for example HTTP_Input.
        • Input location: Click Browse and select $InputRoot/JSON/Data from the XPath Expression Builder.
        • Schema location: Click Browse to open the JSON Schema Selection wizard. Select the schema that you created in step 6.a.iv and click OK.
        • Schema root: The location in the schema file that describes the message structure. This value is only required if the JSON schema is not at the root of the schema document.
      7. Click OK to save the entries.
      8. Click Launch Connector Discovery to start the Connector Discovery wizard for the Slack connector.
      In the "Send message" section, the field Destination type is displayed. The pre-defined options Channel, User, and Group are available from the drop-down menu.
    2. Click Map options menu and select Switch to advanced mode.
      This image shows the icon for Map options menu and the menu option "Switch to advanced mode."
      In the "Send message" section, the fields Destination type, and Object ID are displayed.
    3. Optional: In the Controls section of the wizard, decide how you want to populate the target fields in Slack by selecting either Use input message unchanged or Define mappings below from the menu.
      The default setting is Define mappings below. If you select Define mappings below, additional target fields are available. The link Auto match fields is displayed. If you click Auto match fields, the fields are automatically populated with mappings that are derived from the entries in the JSON schema file that you created in step 6.a.iv and referenced from the Slack Request node in step 6.a.vi .
    4. Populate the required fields by placing the cursor in the input field, clicking Insert a mapping, and selecting a mapping from the Available mappings table. The available mappings in the table are derived from the schema that you created in step 6.a.iv and referenced from the Slack Request node in step 6.a.vi.

      Optionally, you can populate the fields manually by typing in the required values. For example, you can type the value channel in Destination type.

      Optionally, you can insert a function by clicking Insert a function and selecting a function from the Functions menu.
      This image shows the icon for inserting a function.
      For example, if you type HELLO WORLD in the Text field, you can select Insert a function > Functions > String functions > $lower case(). The text HELLO WORLD{{$lowercase(«string»)}} appears in the Text field. The incoming message HELLO WORLD is converted to hello world when it is sent to the destination.
      This image shows the functions menu.
      This image shows the functions menu.
      The required fields are:
      1. Destination type:
      2. Object ID:
      3. Text: A message text to be sent.
    5. Optional: Optionally filter the target fields by inputting text into the search field. For example, if you type the text "User" into the search field, only the fields Username and As user appear in the list of target fields.
    6. Populate any optional target fields that you want to include by placing the cursor in the target field. Text is displayed after the field to describe the purpose of the target field. Complete the target fields as described in the following list. The mappings in the Available mappings table are derived from the schema that you created in step 6.a.iv and referenced from the Slack Request node in step 6.a.vi.

      Optionally, you can populate the fields manually by typing in the required values. For example, you can type the value FRED in Username.

      Optionally, you can insert a function by clicking Insert a function and selecting a function from the Functions menu.
      This image shows the icon for inserting a function.
      For example, if you type FRED in the Username field, you can select Insert a function > Functions > String function > $lower case(). The text FRED{{$lowercase(«string»)}} appears in the Username field. The incoming message FRED is converted to fred when it is sent to the destination.
      1. Parse: Specifies how the message is parsed. By default, it is set to none. Click Insert a mapping, and select a mapping from the Available mappings table.
      2. Link names: Indicates whether to link channel names and usernames. Select True, False, or Custom. If you select Custom, click Insert a mapping, and select a mapping from the Available mappings table.
      3. Message attachments: The structured message attachments.
        The mapping for the Message attachments field must include child mappings for the fields Message text, Pre-text, ID, Fallback, and Extracts. In this example, the JSON schema that you created in step 6.a.iv, includes the following section:
        
        "messageAttachment": {
              "type": "object",
              "properties": {
                "messageText": {
                  "type": "string"
                },
                "preText": {
                  "type": "string"
                },
                "id": {
                  "type": "integer"
                },
                "fallBack": {
                  "type": "string"
                },
                "extracts": {
                  "type": "string"
                }
             
        The following mappings are generated in the Available mappings table from the above section of the JSON schema file:
        This image shows the message attachment child mappings in the available mappings table.
        Click Insert a mapping, and select a mapping from the Available mappings table. For this example, select the mapping messageAttachment.
      4. Message text: The attachment text to be sent. Click Insert a mapping, and select a mapping from the Available mappings table. For this example, select the child mapping messageText.
      5. Pre-text: The optional text that appears above the attachment block. Click Insert a mapping, and select a mapping from the Available mappings table. For this example, select the child mapping preText.
      6. ID: The identifier of an attachment. Click Insert a mapping, and select a mapping from the Available mappings table. For this example, select the child mapping iD.
      7. Fallback: The plain-text summary of the attachment. Click Insert a mapping, and select a mapping from the Available mappings table. For this example, select the child mapping fallBack.
      8. Extracts: The extracts for an attachment. Click Insert a mapping, and select a mapping from the Available mappings table. For this example, select the child mapping extracts.
      9. Unfurl links: Select True, False, or Custom. Select True to enable the unfurling of primarily text-based content. If you select Custom, click Insert a mapping, and select a mapping from the Available mappings table.
      10. Unfurl media: Select True, False, or Custom. Select False if you want to disable the unfurling of media content. If you select Custom, click Insert a mapping, and select a mapping from the Available mappings table.
      11. Username: The bot's username. This property is only applicable when you set the value of As user property to False. Click Insert a mapping, and select a mapping from the Available mappings table.
      12. As user: Select True, False, or Custom. Select True to post the message as the authenticated user, instead of as a bot. By default the value is set to False. If you select Custom, click Insert a mapping, and select a mapping from the Available mappings table.
      13. Icon URL: The URL for an image to use as the icon for the message. This property is only applicable when you set the value of As user property to False. Otherwise, it is ignored. Click Insert a mapping, and select a mapping from the Available mappings table.
      14. Icon emoji: The emoji to use as the icon for the message. If you set this value, it overrides the icon URL. This property is only applicable when you set the value of As user property to False. Click Insert a mapping, and select a mapping from the Available mappings table.
      15. Thread timestamp: Specify another message's timestamp value to make this message a reply. Click Insert a mapping, and select a mapping from the Available mappings table.
      16. Reply broadcast: The value in this field indicates whether a reply is made visible to everyone in the channel or conversation. The default value is false. You must use this property along with the Thread timestamp property. Select True, False, or Custom. If you select Custom, click Insert a mapping, and select a mapping from the Available mappings table.
      Optionally, you can edit the data that is associated with a mapping and preview your changes by completing the following steps:
      1. Place the cursor in a target field, for example, Username. By default, the text "SampleUsername" is displayed after the target field.
      2. Click Insert a mapping, and select a mapping from the Available mappings table, for example, username.
      3. In the "Send message" section, click the pencil icon to view available mappings and edit your sample data.
        This image shows the pencil icon to view available mappings and edit your sample data.
        The table "Map inputs and sample data" is displayed.
      4. In the table, select the mapping username and change the data "Sampleusername" to "Fred". The text "Fred" will be displayed after the Username target field.
        This image shows map inputs and sample data table.
      5. Close the Map inputs and sample data table by clicking the X in the upper-right corner of the table.
      6. To preview your changes, click Map options menu and select Switch to preview mode . The text "Advanced and preview mode" is displayed next to the Map options menu control. Scroll down the page to preview your change. The value "Fred" is now displayed as the data for the mapping Username.
        This image shows the view in preview mode.
      For more information about Advanced mode, see Using Advanced mode editing in the IBM App Connect Enterprise as a Service documentation.
  7. When you have finished specifying the properties in the Connector Discovery wizard, click Save.
    The values of the properties that you set in the wizard are returned to the Slack Request node in the IBM App Connect Enterprise Toolkit.
  8. When you have finished discovery and saved the property values, exit the Connector Discovery wizard by clicking the X in the upper-right corner of the window.
  9. Return to editing the Slack Request node in the IBM App Connect Enterprise Toolkit.
    The connector properties that were set in the Connector Discovery wizard (in step 6) are now visible on the Slack Request node. The Basic tab shows the values of the Action and Object properties that you set in the wizard. For example, if you selected Messages > Send message in the wizard, the following properties are visible on the Basic tab of the node:
    • Action - CREATE
    • Object - message

    The values of the Action and Object properties are displayed in read-only format. If you want to change these values, you can do so by clicking Launch Connector Discovery again and setting new values in the Connector Discovery wizard. You can modify other properties by clicking Edit next to the property.

    The Schema base name property specifies the base name of the schema files that describe the format of the request and response messages that are sent and received from the Slack connector. The schema base name is set automatically the first time that you run discovery for the node, and it is based on the current flow name and node name. If you set this property manually before you run discovery for the first time, the value that you set is used. If you rename the schemas after discovery, you must edit this property so that it matches the schema base name that is used by the renamed schemas in the project. If you change this property after discovery, you must either rename the schema names to match or run discovery again.

    Depending on the action that was selected during discovery, the Connector Discovery wizard generates either a request schema and a response schema, or a response schema only. A request schema is generated only if the selected action and object require a request message. The generated request schema is used for validation of the request message. If the action was RETRIEVE or DELETE, only the response schema is returned by the connector.

    The generated schema files are added to the project and can be used by a Mapping node for transforming input or output data. The full filename of the schema is derived from the schema base name, suffixed with either response.schema.json or request.schema.json. You can open the schema by clicking Open request schema or Open response schema.

  10. Check that the property settings on the Slack Request node are correct and then save the message flow.
  11. On the Connection tab of the Slack Request node, the Policy property shows the name of the policy that contains the details of the security identity to be used for the connection. The policy has a type of Slack.
  12. Optional: Set the Timeout property on the Connection tab to specify the time (in seconds) that the node waits for Slack to process the operation.
  13. The Filter tab of the Slack Request node contains properties that control the way in which the message flow selects data. The initial values of these properties are taken from the property values that were set for the Slack connector in the Connector Discovery wizard, including the filter options properties and any conditions that were specified (as described in step 6 ). If you subsequently return to the Connector Discovery wizard and change the values of any properties (by adding new conditions, for example) those updates are reflected in the properties set on the node.

    The Filter Options properties control which objects are to be operated upon when the Slack Request node executes. The Filter Limit properties control the maximum number of items to be retrieved and the action to be taken if the limit is exceeded.

    You can modify the values by clicking Edit next to the value that you want to modify in the Filter Options section, and by changing the property values that have been set in the Filter Limit section.

    The property values can be either text values or ESQL or XPATH expressions that are resolved from the contents of the message that is passed to the Slack Request node as it executes.

  14. On the Request tab, set the Data location property to specify the location in the incoming message tree that contains the object data to be created in Slack. This data forms the request that is sent from the Slack Request node to the Slack system.
  15. On the Result tab, set the Output data location property to specify the location in the output message tree that will contain the data of the record that is created in Slack.
  16. By default, request messages are validated against the request schema that was generated during connector discovery. You can turn off request validation or change the validation settings by using the Validation properties of the Slack Request node.
  17. Save the message flow.