Summary

You can automatically start a flow in your Flowingly system, when an OpenForms form is submitted. This guide will walk you through the necessary steps to complete an OpenForms and Flowingly integration. To achieve this we will be using:

  • An OpenForms data connector

  • A middleware tool like Microsoft Azure Logic Apps

  • Flowingly's Public API

Prerequisites

This integration guide is at an intermediate technical level so it would be good if you had:

  1. A basic understanding of HTTP and how to consume APIs.

  2. A basic understanding of MS Azure Logic Apps.

  3. Access to a MS Azure account to create and edit a Logic App.

  4. Admin access to OpenForms to add/update data connectors and forms.

  5. Admin access to Flowingly to create and edit a flow model.

  6. Some exposure to JSON.

  7. Understanding of basic programming logic (conditions, equality etc.).

A basic overview of the integration

  1. The user enters data in the relevant form in OpenForms and submits it

  2. An OpenForms data connector sends the form fields to an Azure Logic App

  3. The Azure Logic App gets an access token from the Flowingly Public API

  4. The Azure Logic App starts the Flowingly flow via the Flowingly Public API

  5. The Azure Logic App maps the OpenForms form fields to the Flowingly Flow's step fields

  6. The Azure Logic App sends the OpenForms data to the step fields in your Flowingly flow using Flowingly's Public API

Step 1 - Configure the OpenForms form and connector

To start choose the OpenForms form that you would like to integrate with Flowingly (using Azure logic Apps). In this example we are going use the New Customer (Debtor) Form.

In order for the forms to send data to the Azure Logic App you will need to:

1. Set external IDs on relevant form fields

Open the relevant form and set external IDs on all fields you want to send. In this example we followed a simple naming pattern for the external IDs {type}-{section}-{field} e.g. business-name, personal-address-street, etc.

2. Create a Data Connection

Go to Connectors and click on Add Connection.

Complete the following fields and save changes:

  • Connection name - add a meaningful name

  • Connection description

  • URL

  • Form fields to send

Please note:

We will be changing the URL to the Azure Logic App URL later. For now please use https://webhook.site/e2b22743-d149-484b-8942-7465d9149e64 for testing purposes.

The result of your tests can be viewed by clicking on this link: https://webhook.site/#!/e2b22743-d149-484b-8942-7465d9149e64/e16eee9c-df5d-4b70-9d92-b877b17d666b/1

3. Use added data connection when the form is submitted

Now go back to your form and update it to use the above added connection. To do this click on Settings in your form and then on Data connections.

Under 'When the form is submitted' select the connection that you just created and click on 'Save data connections'.

Now whenever your OpenForms form is submitted the above selected form fields will be sent out. You can test this out by submitting the form and going to this address to see the data that is sent through: https://webhook.site/#!/e2b22743-d149-484b-8942-7465d9149e64/e16eee9c-df5d-4b70-9d92-b877b17d666b/1

More information on OpenForms and Middleware integrations can be found here.

Step 2 - Create Azure Logic App

This is what the completed Logic App should look like:

Create a new Logic App in the appropriate Resource group in MS Azure. Go to MS Azure and click on 'Resource groups'

Select the relevant Resource group in which you will create your Logic App.

Please note that if no appropriate resource group exists you will need to get one created. More information on how to do this can be found here: Create automated workflows with Azure Logic Apps in the Azure portal - Azure Logic Apps

Click '+ Create'

Then search and select 'Logic App'

Click on 'Create'

Give your Logic App an appropriate name and select the relevant region. It is a good idea to select the same location as where your Flowingly system is hosted e.g. Australia East.

Also selecting Consumption will allow you to immediately edit the Logic App. It is a good idea to confirm this with your IT team.

'Click on review + create' then click on 'Create'.

Please note that deployment may take a few minutes. Once deployment is completed please click on 'Go to resource'.

Click on your Logic App to start configuring it.

Step 3 - Configure your Azure Logic App Trigger

Click on the 'When a HTTP request is received' trigger.

Click on 'Save'

You will notice a URL appear in your trigger. We will be copying this URL into our OpenForms connector later. This URL is where the OpenForms Data Connector will send form data to when the form is submitted. For now however nothing else is needed.

Generate Payload Sample

We are going to copy a sample message that OpenForms sends for your Logic App into the 'Use sample payload to generate schema' dialog. This will inform the Logic App what your OpenForms form data looks like and how to parse it.

You can get this sample message by completing and submitting the OpenForms form you chose to integrate in the above step.

Complete and submit your OpenForms form.

The OpenForms connector we set up in this step, which we configured to be used every time our OpenForms form was submitted (done in this step) would have ensured that our form fields data was sent out to the test website URL.

Go to the test site URL: https://webhook.site/#!/e2b22743-d149-484b-8942-7465d9149e64/e16eee9c-df5d-4b70-9d92-b877b17d666b/1. The top result on the left will contain the form data that you just submitted.

Highlight and copy all the code that appears under 'Raw content'

Go back to your Logic App and click on 'Use payload sample to generate schema'

Paste the above raw content code in here then click 'Done'

Your Logic App now knows what your data looks like and how to parse it. Click 'Save' to save your progress.

Please note:

Each OpenForms form will have different form data (due to having different fields and logic) so you will need to do this for each new form.

Update OpenForms connection URL

Copy the URL of your trigger.

Open the OpenForms connection you created in this step and paste the Logic App trigger URL, make sure you save your changes.

Step 4 - Authorize Flowingly's Public API

We are now going to authorize Flowingly's Public API by instructing our Logic App to get an access token.

Get API Access Token

Click on '+ New step' and add a HTTP step to do a POST to the Flowingly Public API authorise endpoint to get an API access token.

  • Method : POST

  • URL : https://publicapi.flowingly.net/public/authorise

Set Queries:

  • password - The password for the Flowingly account.

  • username - Email address of the Flowingly account. Must be a Flowingly Business Administrator.

Parse API Access Token

Click on '+ New step' and add a Data operation. Select the Parse JSON data operation. Set the content to the body of the previous step. This step will now parse the HTTP response from the previous step to be in a format acceptable by Flowingly's Public API.

Copy and paste the following schema code under 'Schema'. This is the definition of what the response looks like from the authorise API.

{
"properties": {
"accessToken": {
"type": "string"
},
"expiresIn": {
"type": "integer"
},
"idToken": {
"type": "string"
},
"refreshToken": {},
"tokenType": {
"type": "string"
}
},
"type": "object"
}

Step 5 - Start a Flowingly flow with Flowingly's Public API

We are now going to tell our Logic App the necessary information to be able to start a Flowingly flow using the Public API.

Configure start flow POST request

Click on '+New step' and add a HTTP step to do a POST to the start flow Flowingly Public API

  • Method : POST

  • URL : https://publicapi.flowingly.net/public/startflow

Add a HTTP header to contain the bearer access token from the previous step.

  • Key : Authorization

  • Value: Bearer {accessToken from the previous Parse JSON step}

Copy the following code (this is Flowingly's start flow API request) and paste it in the body of this HTTP Post request.

{
"Name": "string",
"Subject": "string",
"ActorsToStartFlowFor": [
{
"UserEmail": "string",
"Team": "string"
}
],
"CCActors": [
{
"UserEmail": "string",
"Team": "string"
}
],
"AssignedActor": "string",
"FlowInitiator": "string"
}

Configure this further with the following information:

  • Name - Flow model name which is used to uniquely identify a flow model in Flowingly.

  • Subject - Flow instance subject which is required to start a flow.

  • ActorsToStartFlowFor - Array of either

  • UserEmail - User email to start the flow for.

  • Team- Name of the team if starting the flow for a team.

  • CCActors - (Optional) Array of either

  • UserEmail - User email to start the flow for.

  • Team- Name of the team if starting the flow for a team.

  • FlowInitiator - Email of the user who initiate the flow.

  • AssignedActor - (Optional) Email of the user to assign the first step of the flow while starting a new flow. Only required in case when the flow’s first step requires approvers to be selected.

For example: if I want to start a Flowingly flow called 'Set-up New Customer (Debtor) - Integrated' and I want the subject to be 'New customer to set up', and I want the initiator to be the myself, and I want the first step to be assigned to myself, then this is what the body of the post request should look like:

Note that you may have to delete some items such as Team, if the actor to start the flow for is a person and not a team. If you delete Team, please don't forget to delete the ',' otherwise you will get an error.

Parse the flow POST request

We are now going to add a parse JSON step to parse the HTTP response from the start flow API. Set the content to the body of the previous step (HTTP step to start the flow).

Click on '+ New step' and add a Data operation. Select the Parse JSON data operation. Set the content to the body of the previous step (HTTP step to start the flow).

Copy and paste the following schema code in the Schema. This is the definition of what the response looks like from the start flow API.

{
"properties": {
"dataModel": {
"items": {
"properties": {
"flowIdentifier": {
"type": "string"
},
"stepIdentifier": {
"type": "string"
}
},
"required": [
"flowIdentifier",
"stepIdentifier"
],
"type": "object"
},
"type": "array"
},
"errorCode": {},
"errorMessage": {},
"success": {
"type": "boolean"
}
},
"type": "object"
}

So far this is what you Logic App should look like:

Add meaningful names to your Logic App steps

At this point it is a good idea to add some meaningful names to your Logic App steps. Click Rename and add appropriate names to the steps.

For example:

Step 6 - Add a conditional step to your Logic App

Add a conditional step to determine if the OpenForm data is for a business or person (individual). The data to determine this condition is provided from OpenForms. In this example the external ID of this field is 'account-information'.

The condition will enable the Logic App to have a clear separation of business and personal (individual) data.

  • True : Business

  • False : Individual

Click on '+ New step' and under 'Built-in', look and select 'Condition'

Click on 'Choose a value' and scroll down in the list of Dynamic content to find the 'account-information' value which we retrieved in the first step of the Logic App (under When a HTTP request is received' heading.

Type in 'I am a business'

Add HTTP steps for the true and false cases (business and individual) to do a HTTP POST to the update step fields API.

Each HTTP step should be configured

  • Method : POST

  • URL : https://publicapi.flowingly.net/public/flow/{flowIdentifier}/step/{stepIdentifier}

Add a HTTP header to contain the bearer access token from the Parse JSON - authorise API response step.

  • Key : Authorization

  • Value: Bearer {AccessToken}

This is what the True and False conditions should look like:

You can rename your True and False steps to have more meaningful names. For example: 'Update business step fields for first step with Flowingly Public API'

Step 7 - Map OpenForms form fields to Flowingly step fields

The final part of the Logic App configuration is the mapping of the OpenForm form fields to the Flowingly step fields.

Flowingly has a Public API which can return all the fields for a step. The response body of this GET API can then be used in the body of the HTTP POST Logic App steps above (the True and False steps) to save data captured in the OpenForms form fields into the Flowingly step fields.

Get the step fields from Flowingly

In Flowingly start the flow and note the flow identifier and first step name. E.g. ‘FLOW-604' and ‘New Customer (Debtor) Form’

Perform a HTTP POST to the authorise the Flowingly Public API to get an access token. The access token is required in order to call the GET step fields Public API.

To do this open up command prompt and type in:

curl --location --request POST "https://publicapi.flowingly.net/public/authorise?username={YourEmailAddress}&password={YourPassword}" --header "Content-Type: application/x-www-form-urlencoded" --header "Content-Length: 0"

Replace {YourEmailAddress} and {YourPassword} with your Flowingly user account credentials. The user account must be a Flowingly Business Administrator.

For example:

https://publicapi.flowingly.net/public/authorise?username=khasha@testflowingly.co.nz&password=testflowingly123" --header "Content-Type: application/x-www-form-urlencoded" --header "Content-Length: 0

Please note: using a tool such as Postman is a lot more use friendly than command prompt.

When you press enter command prompt should retrieve the access token. It will look something like this:

Please note: the word "test" is used here for demonstrational purposes. Your access token will have a variety of letters and numbers in it.

If formatted the response looks like this:

{
"accessToken": "TheAccessTokenValue",
"refreshToken": null,
"idToken": "",
"tokenType": "Bearer",
"expiresIn": 0
}

The next step is to copy TheAccessTokenValue and add it into the HTTP header of the request to the get all step fields from the Public API.

HTTP Header

  • Key : authorization

  • Value : Bearer {TheAccessTokenValue}

Copy the access token value highlighted in blue (in between the quotation marks):

To do this, open command prompt again and type in:

curl --location --request GET "https://publicapi.flowingly.net/public/flow/{The Flow Identifier}/step/{The Step Name}" --header "authorization: Bearer {TheAccessTokenValue}" --header "Content-Length: 0"

Replace {The Flow Identifier} and {The Step Name} with the Flow identifier and step name that you retrieved in the above step.

For example:

curl --location --request GET "https://publicapi.flowingly.net/public/flow/FLOW-604/step/New Customer (Debtor) Form" --header "authorization: Bearer {TheAccessTokenValue}" --header "Content-Length: 0"

Then replace {TheAccessTokenValue} with the access token that you retrieved above.

For example:

curl --location --request GET "https://publicapi.flowingly.net/public/flow/FLOW-604/step/New Customer (Debtor) Form" --header "authorization: Bearer testesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestesttestesttestestestest" --header "Content-Length: 0"

When you press Enter the Flowingly API will return all the step fields of the requested step. It's a good idea to copy the output into a text editor such as Notepad or Notepad++ . This should then look something like this and will make editing easier.


{
"name": "Instruction",
"type": "Instruction",
"order": 0,
"identifier": "field34013909921",
"value": "",
"options": null
},
{
"name": "Account Information",
"type": "RadioButtonList",
"order": 1,
"identifier": "field61540081012",
"value": "",
"options": [
{
"key": "1",
"value": "I am a business",
"isSelected": false
},
{
"key": "2",
"value": "I am an individual",
"isSelected": false
}
]
},
{
"name": "Instruction",
"type": "Instruction",
"order": 2,
"identifier": "field79236534398",
"value": "",
"options": null
},
{
"name": "Business Name or Full Name if Individual (required)",
"type": "Text",
"order": 3,
"identifier": "field79236534394",
"value": "",
"options": null
},
{
"name": "Contact Name, if different to above",
"type": "Text",
"order": 4,
"identifier": "field79236534396",
"value": "",
"options": null
},
{
"name": "Business Address",
"type": "Text",
"order": 5,
"identifier": "field79236534469",
"value": "",
"options": null
},
{
"name": "Having trouble finding your address?",
"type": "CheckBox",
"order": 6,
"identifier": "field79236534471",
"value": "",
"options": null
},
{
"name": "Number (House, unit, or lot)",
"type": "Text",
"order": 7,
"identifier": "field79236534473",
"value": "",
"options": null
},
{
"name": "Street",
"type": "Text",
"order": 8,
"identifier": "field79236534475",
"value": "",
"options": null
},
{
"name": "Suburb",
"type": "Text",
"order": 9,
"identifier": "field79236534477",
"value": "",
"options": null
},
{
"name": "Postcode",
"type": "Text",
"order": 10,
"identifier": "field79236534479",
"value": "",
"options": null
},
{
"name": "Do you have a different postal address?",
"type": "RadioButtonList",
"order": 11,
"identifier": "field79236534481",
"value": "",
"options": [
{
"key": "1",
"value": "No, same as above.",
"isSelected": false
},
{
"key": "2",
"value": "I have a different postal address",
"isSelected": false
}
]
},
{
"name": "Post Address Number (House, unit, lot or PO Box)",
"type": "Text",
"order": 12,
"identifier": "field79236534483",
"value": "",
"options": null
},
{
"name": "Postal Address Street",
"type": "Text",
"order": 13,
"identifier": "field79236534485",
"value": "",
"options": null
},
{
"name": "Postal Address Suburb",
"type": "Text",
"order": 14,
"identifier": "field79236534489",
"value": "",
"options": null
},
{
"name": "Postal Address Postcode",
"type": "Text",
"order": 15,
"identifier": "field79236534492",
"value": "",
"options": null
},
{
"name": "Landline",
"type": "Text",
"order": 16,
"identifier": "field79236534494",
"value": "",
"options": null
},
{
"name": "Mobile",
"type": "Text",
"order": 17,
"identifier": "field79236534496",
"value": "",
"options": null
},
{
"name": "Email",
"type": "Email",
"order": 18,
"identifier": "field79236534498",
"value": "",
"options": null
},
{
"name": "Website",
"type": "Text",
"order": 19,
"identifier": "field79236534500",
"value": "",
"options": null
},
{
"name": "Do you have a ABN/ACN?",
"type": "RadioButtonList",
"order": 20,
"identifier": "field79236534502",
"value": "",
"options": [
{
"key": "1",
"value": "Yes",
"isSelected": false
},
{
"key": "2",
"value": "No",
"isSelected": false
}
]
},
{
"name": "Instruction",
"type": "Instruction",
"order": 21,
"identifier": "field79236534504",
"value": "",
"options": null
},
{
"name": "First Name",
"type": "Text",
"order": 22,
"identifier": "field61540081014",
"value": "",
"options": null
},
{
"name": "Last Name",
"type": "Text",
"order": 23,
"identifier": "field61540081018",
"value": "",
"options": null
},
{
"name": "Residential Address",
"type": "Text",
"order": 24,
"identifier": "field61540081020",
"value": "",
"options": null
},
{
"name": "Personal - Having trouble finding your address?",
"type": "CheckBox",
"order": 25,
"identifier": "field79236534575",
"value": "",
"options": null
},
{
"name": "Personal Postal Address Number (House, unit, lot or PO Box)",
"type": "Text",
"order": 26,
"identifier": "field79236534577",
"value": "",
"options": null
},
{
"name": "Personal Postal Address Street",
"type": "Text",
"order": 27,
"identifier": "field79236534579",
"value": "",
"options": null
},
{
"name": "Personal Postal Address Suburb",
"type": "Text",
"order": 28,
"identifier": "field79236534581",
"value": "",
"options": null
},
{
"name": "Personal Postal Address Postcode",
"type": "Text",
"order": 29,
"identifier": "field79236534583",
"value": "",
"options": null
},
{
"name": "Personal Phone number (home, mobile or work - whichever is best for you)",
"type": "Text",
"order": 30,
"identifier": "field61540081130",
"value": "",
"options": null
},
{
"name": "Personal Email",
"type": "Email",
"order": 31,
"identifier": "field61540081138",
"value": "",
"options": null
},
{
"name": "Instruction",
"type": "Instruction",
"order": 32,
"identifier": "field61540081094",
"value": "",
"options": null
},
{
"name": "Signature",
"type": "RadioButtonList",
"order": 33,
"identifier": "field79236534589",
"value": "",
"options": [
{
"key": "1",
"value": "Draw signature",
"isSelected": false
},
{
"key": "2",
"value": "Upload photo of signature",
"isSelected": false
}
]
},
{
"name": "Upload photo of signature",
"type": "FileUpload",
"order": 34,
"identifier": "field79236534587",
"value": "",
"options": null
},
{
"name": "Signature",
"type": "Signature",
"order": 35,
"identifier": "field61540081088",
"value": "",
"options": null
},
{
"name": "Date",
"type": "Date",
"order": 36,
"identifier": "field61540081056",
"value": "",
"options": null
},
{
"name": "Instruction",
"type": "Instruction",
"order": 37,
"identifier": "field61540081054",
"value": "",
"options": null
}

]

Your output may look somewhat different because you may have different form fields in your Flowingly step.

Edit the output of the GET API request

At this point you will need to create two separate JSON arrays: one for the business fields and one for the personal fields. You can use a spreadsheet to help with this, for example:

Edit the above output file into two separate JSON files by copying and pasting the relevant business fields and personal fields.

You will also need to remove all the instruction, file upload and signature fields from the API response from the get step fields API. They are currently not supported by the update step fields API at present.

Business fields fields:

[
{
"name": "Account Information",
"type": "RadioButtonList",
"order": 1,
"identifier": "field61540081012",
"value": {
"key": "1",
"value": "I am a business",
"isSelected": true
}
},
{
"name": "Business Name or Full Name if Individual (required)",
"type": "Text",
"order": 3,
"identifier": "field79236534394",
"value": "",
"options": null
},
{
"name": "Contact Name, if different to above",
"type": "Text",
"order": 4,
"identifier": "field79236534396",
"value": "",
"options": null
},
{
"name": "Business Address",
"type": "Text",
"order": 5,
"identifier": "field79236534469",
"value": "",
"options": null
},
{
"name": "Having trouble finding your address?",
"type": "CheckBox",
"order": 6,
"identifier": "field79236534471",
"value": "",
"options": null
},
{
"name": "Number (House, unit, or lot)",
"type": "Text",
"order": 7,
"identifier": "field79236534473",
"value": "",
"options": null
},
{
"name": "Street",
"type": "Text",
"order": 8,
"identifier": "field79236534475",
"value": "",
"options": null
},
{
"name": "Suburb",
"type": "Text",
"order": 9,
"identifier": "field79236534477",
"value": "",
"options": null
},
{
"name": "Postcode",
"type": "Text",
"order": 10,
"identifier": "field79236534479",
"value": "",
"options": null
},
{
"name": "Do you have a different postal address?",
"type": "RadioButtonList",
"order": 11,
"identifier": "field79236534481",
"value": "",
"options": null
},
{
"name": "Post Address Number (House, unit, lot or PO Box)",
"type": "Text",
"order": 12,
"identifier": "field79236534483",
"value": "",
"options": null
},
{
"name": "Postal Address Street",
"type": "Text",
"order": 13,
"identifier": "field79236534485",
"value": "",
"options": null
},
{
"name": "Postal Address Suburb",
"type": "Text",
"order": 14,
"identifier": "field79236534489",
"value": "",
"options": null
},
{
"name": "Postal Address Postcode",
"type": "Text",
"order": 15,
"identifier": "field79236534492",
"value": "",
"options": null
},
{
"name": "Landline",
"type": "Text",
"order": 16,
"identifier": "field79236534494",
"value": "",
"options": null
},
{
"name": "Mobile",
"type": "Text",
"order": 17,
"identifier": "field79236534496",
"value": "",
"options": null
},
{
"name": "Email",
"type": "Email",
"order": 18,
"identifier": "field79236534498",
"value": "",
"options": null
},
{
"name": "Website",
"type": "Text",
"order": 19,
"identifier": "field79236534500",
"value": "",
"options": null
},
{
"name": "Do you have a ABN/ACN?",
"type": "RadioButtonList",
"order": 20,
"identifier": "field79236534502",
"value": "",
"options": null
},
{
"name": "Date",
"type": "Date",
"order": 36,
"identifier": "field61540081056",
"value": "",
"options": null
}
]

Personal step fields:

[
{
"name": "Account Information",
"type": "RadioButtonList",
"order": 1,
"identifier": "field61540081012",
"value": "", {
"key": "2",
"value": "I am an individual",
"isSelected": true
}
},
{
"name": "First Name",
"type": "Text",
"order": 22,
"identifier": "field61540081014",
"value": "",
"options": null
},
{
"name": "Last Name",
"type": "Text",
"order": 23,
"identifier": "field61540081018",
"value": "",
"options": null
},
{
"name": "Residential Address",
"type": "Text",
"order": 24,
"identifier": "field61540081020",
"value": "",
"options": null
},
{
"name": "Personal - Having trouble finding your address?",
"type": "CheckBox",
"order": 25,
"identifier": "field79236534575",
"value": "",
"options": null
},
{
"name": "Personal Postal Address Number (House, unit, lot or PO Box)",
"type": "Text",
"order": 26,
"identifier": "field79236534577",
"value": "",
"options": null
},
{
"name": "Personal Postal Address Street",
"type": "Text",
"order": 27,
"identifier": "field79236534579",
"value": "",
"options": null
},
{
"name": "Personal Postal Address Suburb",
"type": "Text",
"order": 28,
"identifier": "field79236534581",
"value": "",
"options": null
},
{
"name": "Personal Postal Address Postcode",
"type": "Text",
"order": 29,
"identifier": "field79236534583",
"value": "",
"options": null
},
{
"name": "Personal Phone number (home, mobile or work - whichever is best for you)",
"type": "Text",
"order": 30,
"identifier": "field61540081130",
"value": "",
"options": null
},
{
"name": "Personal Email",
"type": "Email",
"order": 31,
"identifier": "field61540081138",
"value": "",
"options": null
},
{
"name": "Date",
"type": "Date",
"order": 36,
"identifier": "field61540081056",
"value": "",
"options": null
},
]

Copy and paste the step fields JSON arrays into the Body of the appropriate HTTP step for the business and for the personal.

Map OpenForms fields Flowingly step fields

The final step is to then map the values from OpenForms into the correct Flowingly step fields for both the business and personal HTTP steps in the Logic App. In essence we are going to tell the Logic App to look at the values that came through from the OpenForms form in the step 'When a HTTP request is received', and put the relevant values into the relevant Flowingly fields.

To do this you will be editing the above JSON arrays of the business and personal fields again. This time you will be adding the OpenForms form values under each Flowingly field.

It is important to note that Flowingly's API needs to have the data in an acceptable format, so we may need to do some data manipulation to make it work.

More on supported field types for the Flowingly API can be found in this article.

Mapped OpenForms fields to Flowingly step fields - for business

[
{
"name": "Account Information",
"type": "RadioButtonList",
"order": 1,
"identifier": "field61540081012",
"value": {
"key": "1",
"value": "I am a business",
"isSelected": true
}
},

{
"name": "Business Name or Full Name if Individual (required)",
"type": "Text",
"order": 3,
"identifier": "field79236534394",
"value": "@{triggerBody()?['SendFields']?['business-name']?['value']}",
"options": null
},
{
"name": "Contact Name, if different to above",
"type": "Text",
"order": 4,
"identifier": "field79236534396",
"value": "@{triggerBody()?['SendFields']?['business-contact-name']?['value']}",
"options": null
},
{
"name": "Business Address",
"type": "Text",
"order": 5,
"identifier": "field79236534469",
"value": "@{triggerBody()?['SendFields']?['business-address']?['locationAddressFull']}",
"options": null
},
{
"name": "Having trouble finding your address?",
"type": "CheckBox",
"order": 6,
"identifier": "field79236534471",
"value": "@{equals(triggerBody()?['SendFields']?['business-cannot-find-address']?['multiValues']?[0], 'I cannot find my address.')}",
"options": null
},
{
"name": "Number (House, unit, or lot)",
"type": "Text",
"order": 7,
"identifier": "field79236534473",
"value": "@{triggerBody()?['SendFields']?['business-address-number']?['value']}",
"options": null
},
{
"name": "Street",
"type": "Text",
"order": 8,
"identifier": "field79236534475",
"value": "@{triggerBody()?['SendFields']?['business-address-street']?['value']}",
"options": null
},
{
"name": "Suburb",
"type": "Text",
"order": 9,
"identifier": "field79236534477",
"value": "@{triggerBody()?['SendFields']?['business-address-suburb']?['value']}",
"options": null
},
{
"name": "Postcode",
"type": "Text",
"order": 10,
"identifier": "field79236534479",
"value": "@{triggerBody()?['SendFields']?['business-address-postcode']?['value']}",
"options": null
},
{
"name": "Do you have a different postal address?",
"type": "RadioButtonList",
"order": 11,
"identifier": "field79236534481",
"value": @{if(equals(triggerBody()?['SendFields']?['business-address-different-postal-address']?['value'], 'I have a different postal address'),json('{key:"2",value:"I have a different postal address",isSelected:true}'),json('{key:"1",value:"No, same as above.",isSelected:true}'))},
"options": null
},
{
"name": "Post Address Number (House, unit, lot or PO Box)",
"type": "Text",
"order": 12,
"identifier": "field79236534483",
"value": "@{triggerBody()?['SendFields']?['business-address-post-address-number']?['value']}",
"options": null
},
{
"name": "Postal Address Street",
"type": "Text",
"order": 13,
"identifier": "field79236534485",
"value": "@{triggerBody()?['SendFields']?['business-address-post-address-street']?['value']}",
"options": null
},
{
"name": "Postal Address Suburb",
"type": "Text",
"order": 14,
"identifier": "field79236534489",
"value": "@{triggerBody()?['SendFields']?['business-address-post-address-suburb']?['value']}",
"options": null
},
{
"name": "Postal Address Postcode",
"type": "Text",
"order": 15,
"identifier": "field79236534492",
"value": "@{triggerBody()?['SendFields']?['business-address-post-postcode']?['value']}",
"options": null
},
{
"name": "Landline",
"type": "Text",
"order": 16,
"identifier": "field79236534494",
"value": "@{triggerBody()?['SendFields']?['business-landline']?['value']}",
"options": null
},
{
"name": "Mobile",
"type": "Text",
"order": 17,
"identifier": "field79236534496",
"value": "@{triggerBody()?['SendFields']?['business-mobile']?['value']}",
"options": null
},
{
"name": "Email",
"type": "Email",
"order": 18,
"identifier": "field79236534498",
"value": "@{triggerBody()?['SendFields']?['business-email']?['value']}",
"options": null
},
{
"name": "Website",
"type": "Text",
"order": 19,
"identifier": "field79236534500",
"value": "@{triggerBody()?['SendFields']?['business-website']?['value']}",
"options": null
},
{
"name": "Do you have a ABN/ACN?",
"type": "RadioButtonList",
"order": 20,
"identifier": "field79236534502",
"value": @{if(equals(triggerBody()?['SendFields']?['business-abn-acn']?['value'], 'Yes'),json('{key:"1",value:"Yes",isSelected:true}'),json('{key:"2",value:"No",isSelected:true}'))},
"options": null
},

{
"name": "Date",
"type": "Date",
"order": 36,
"identifier": "field61540081056",
"value": "@{triggerBody()?['SendFields']?['signature-data']?['value']}",
"options": null

}
]

Mapped OpenForms fields to Flowingly step fields - for personal

[
{
"name": "Account Information",
"type": "RadioButtonList",
"order": 1,
"identifier": "field61540081012",
"value": {
"key": "2",
"value": "I am an individual",
"isSelected": true
}
},

{
"name": "First Name",
"type": "Text",
"order": 22,
"identifier": "field61540081014",
"value": "@{triggerBody()?['SendFields']?['personal-first-name']?['value']}",
"options": null
},
{
"name": "Last Name",
"type": "Text",
"order": 23,
"identifier": "field61540081018",
"value": "@{triggerBody()?['SendFields']?['personal-last-name']?['value']}",
"options": null
},
{
"name": "Residential Address",
"type": "Text",
"order": 24,
"identifier": "field61540081020",
"value": "@{triggerBody()?['SendFields']?['personal-residential-address']?['locationAddressFull']}",
"options": null
},
{
"name": "Personal - Having trouble finding your address?",
"type": "CheckBox",
"order": 25,
"identifier": "field79236534575",
"value": "@{equals(triggerBody()?['SendFields']?['personal-cannot-find-address']?['multiValues']?[0], 'I cannot find my address. ')}",
"options": null
},
{
"name": "Personal Postal Address Number (House, unit, lot or PO Box)",
"type": "Text",
"order": 26,
"identifier": "field79236534577",
"value": "@{triggerBody()?['SendFields']?['personal-address-number']?['value']}",
"options": null
},
{
"name": "Personal Postal Address Street",
"type": "Text",
"order": 27,
"identifier": "field79236534579",
"value": "@{triggerBody()?['SendFields']?['personal-address-street']?['value']}",
"options": null
},
{
"name": "Personal Postal Address Suburb",
"type": "Text",
"order": 28,
"identifier": "field79236534581",
"value": "@{triggerBody()?['SendFields']?['personal-address-suburb']?['value']}",
"options": null
},
{
"name": "Personal Postal Address Postcode",
"type": "Text",
"order": 29,
"identifier": "field79236534583",
"value": "@{triggerBody()?['SendFields']?['personal-address-postcode']?['value']}",
"options": null
},
{
"name": "Personal Phone number (home, mobile or work - whichever is best for you)",
"type": "Text",
"order": 30,
"identifier": "field61540081130",
"value": "@{triggerBody()?['SendFields']?['personal-phone-number']?['value']}",
"options": null
},
{
"name": "Personal Email",
"type": "Email",
"order": 31,
"identifier": "field61540081138",
"value": "@{triggerBody()?['SendFields']?['personal-email']?['value']}",
"options": null
},
{
"name": "Date",
"type": "Date",
"order": 36,
"identifier": "field61540081056",
"value": "@{triggerBody()?['SendFields']?['signature-data']?['value']}",
"options": null
}

]

Here is a table of useful expressions used to map the above OpenForm form fields to Flowingly step fields:

Section

Type

OpenForms Field

Flowingly Field

Business

Text

@{triggerBody()?['SendFields']?['business-name']?['value']}

Business Name or Full Name if Individual (required)

Business

Text

@{triggerBody()?['SendFields']?['business-address']?['locationAddressFull']}

Business Address

Business

CheckBox

@{equals(triggerBody()?['SendFields']?['business-cannot-find-address']?['multiValues']?[0], 'I cannot find my address.')}

Having trouble finding your address?

Business

Date

@{triggerBody()?['SendFields']?['signature-data']?['value']}

Date

Business

RadioButtonList

@{if(equals(triggerBody()?['SendFields']?['business-address-different-postal-address']?['value'], 'I have a different postal address'),json('{key:"2",value:"I have a different postal address",isSelected:true}'),json('{key:"1",value:"No, same as above.",isSelected:true}'))}

Do you have a different postal address?

Personal

Text

@{triggerBody()?['SendFields']?['personal-last-name']?['value']}

Last Name

Personal

Email

@{triggerBody()?['SendFields']?['personal-email']?['value']}

Personal Email

Personal

CheckBox

@{equals(triggerBody()?['SendFields']?['personal-cannot-find-address']?['multiValues']?[0], 'I cannot find my address. ')}

Personal - Having trouble finding your address?

Test by submitting the Form in OpenForms and checking a Flowingly flow was started and the first step was populated in Flowingly.

Did this answer your question?