Skip to content

Commit

Permalink
Merge pull request #2 from Pasindu599/main
Browse files Browse the repository at this point in the history
Generate Client using OpenAPI spec tool, Update Sanitations, Update Overview, Setup Guide and Quickstart, Add Test Cases and Add Examples
  • Loading branch information
ThisaruGuruge authored Jan 10, 2025
2 parents 4877ce9 + bc619bc commit 8c317df
Show file tree
Hide file tree
Showing 38 changed files with 6,251 additions and 42 deletions.
284 changes: 279 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,295 @@

## Overview

[//]: # (TODO: Add overview mentioning the purpose of the module, supported REST API versions, and other high-level details.)
[HubSpot ](https://www.hubspot.com/) is an AI-powered customer relationship management (CRM) platform.

The "hubspot.marketing.forms" offers APIs to connect and interact with the [Marketing Forms](https://developers.hubspot.com/docs/reference/api/marketing/forms) endpoints, specifically based on the [HubSpot REST API](https://developers.hubspot.com/docs/reference/api/overview).

> **Note:** This package may be changed in the future based on the HubSpot API changes, since it is currently under development and is subject to change based on testing and feedback. By using this package, you are agreeing to accept any future changes that might occur and understand the risk associated with testing an unstable API.
> Refer to the [HubSpot Developer Terms](https://legal.hubspot.com/developer-terms) & [Developer Beta Terms](https://legal.hubspot.com/developerbetaterms) for more information.
## Setup guide

[//]: # (TODO: Add detailed steps to obtain credentials and configure the module.)
To use the HubSpot Marketing Forms connector, you must have access to the HubSpot API through a HubSpot developer account and a HubSpot App under it. Therefore you need to register for a developer account at HubSpot if you don't have one already.

### Step 1: Create/Login to a HubSpot Developer Account

If you have an account already, go to the [HubSpot developer portal](https://app.hubspot.com/)

If you don't have a HubSpot Developer Account you can sign up to a free account [here](https://developers.hubspot.com/get-started)

### Step 2 (Optional): Create a Developer Test Account
Within app developer accounts, you can create [developer test account](https://developers.hubspot.com/beta-docs/getting-started/account-types#developer-test-accounts) under your account to test apps and integrations without affecting any real HubSpot data.

> **Note:** These accounts are only for development and testing purposes. In production you should not use Developer Test Accounts.
1. Go to Test accounts section from the left sidebar.

![Hubspot Developer Portal](https://raw.githubusercontent.com/ballerina-platform/module-ballerinax-hubspot.marketing.forms/main/docs/setup/resources/test-account.png)

2. Click on the "Create developer test account" button on the top right corner.

![Hubspot Developer Test Account](https://raw.githubusercontent.com/ballerina-platform/module-ballerinax-hubspot.marketing.forms/main/docs/setup/resources/create-test-account.png)

3. In the pop-up window, provide a name for the test account and click on the "Create" button.

![Hubspot Developer Test Account](https://raw.githubusercontent.com/ballerina-platform/module-ballerinax-hubspot.marketing.forms/main/docs/setup/resources/create-account.png)

### Step 3: Create a HubSpot App

1. Now navigate to the "Apps" section from the left sidebar and click on the "Create app" button on the top right corner.

![Hubspot Create App](https://raw.githubusercontent.com/ballerina-platform/module-ballerinax-hubspot.marketing.forms/main/docs/setup/resources/create-app.png)

2. Provide a public app name and description for your app.

![Hubspot Create App](https://raw.githubusercontent.com/ballerina-platform/module-ballerinax-hubspot.marketing.forms/main/docs/setup/resources/app-name-desc.png)

### Step 4: Configure the Authentication Flow

1. Move to the "Auth" tab.

![Hubspot Developer Config Auth](https://raw.githubusercontent.com/ballerina-platform/module-ballerinax-hubspot.marketing.forms/main/docs/setup/resources/config-auth.png)

2. In the "Scopes" section, add the following scopes for your app using the "Add new scopes" button.
- `forms`

![Hubspot Developer App Add Scopes](https://raw.githubusercontent.com/ballerina-platform/module-ballerinax-hubspot.marketing.forms/main/docs/setup/resources/add-scopes.png)

3. In the "Redirect URL" section, add the redirect URL for your app. This is the URL where the user will be redirected after the authentication process. You can also use `localhost` addresses for local development purposes. Then click the "Create App" button.

![Hubspot Create Developer App](https://raw.githubusercontent.com/ballerina-platform/module-ballerinax-hubspot.marketing.forms/main/docs/setup/resources/redirect-url.png)

### Step 5: Get the Client ID and Client Secret

Navigate to the "Auth" tab and you will see the `Client ID` and `Client Secret` for your app. Make sure to save these values.

![Hubspot Get Credentials](https://raw.githubusercontent.com/ballerina-platform/module-ballerinax-hubspot.marketing.forms/main/docs/setup/resources/client-id-secret.png)

### Step 6: Setup Authentication Flow

Before proceeding with the Quickstart, ensure you have obtained the Access Token using the following steps:

1. Create an authorization URL using the following format:

```
https://app.hubspot.com/oauth/authorize?client_id=<YOUR_CLIENT_ID>&scope=<YOUR_SCOPES>&redirect_uri=<YOUR_REDIRECT_URI>
```

Replace the `<YOUR_CLIENT_ID>`, `<YOUR_REDIRECT_URI>` and `<YOUR_SCOPES>` with your specific value.

> **Note:** If you are using a `localhost` redirect url, make sure to have a listener running at the relevant port before executing the next step.
2. Paste it in the browser and select your developer test account to intall the app when prompted.

![Hubspot Get Auth Code](https://raw.githubusercontent.com/ballerina-platform/module-ballerinax-hubspot.marketing.forms/main/docs/setup/resources/account-select.png)

3. A code will be displayed in the browser. Copy the code.

4. Run the following curl command. Replace the `<YOUR_CLIENT_ID>`, `<YOUR_REDIRECT_URI`> and `<YOUR_CLIENT_SECRET>` with your specific value. Use the code you received in the above step 3 as the `<CODE>`.

- Linux/macOS

```bash
curl --request POST \
--url https://api.hubapi.com/oauth/v1/token \
--header 'content-type: application/x-www-form-urlencoded' \
--data 'grant_type=authorization_code&code=<CODE>&redirect_uri=<YOUR_REDIRECT_URI>&client_id=<YOUR_CLIENT_ID>&client_secret=<YOUR_CLIENT_SECRET>'
```

- Windows

```bash
curl --request POST ^
--url https://api.hubapi.com/oauth/v1/token ^
--header 'content-type: application/x-www-form-urlencoded' ^
--data 'grant_type=authorization_code&code=<CODE>&redirect_uri=<YOUR_REDIRECT_URI>&client_id=<YOUR_CLIENT_ID>&client_secret=<YOUR_CLIENT_SECRET>'
```

This command will return the access token necessary for API calls.

```json
{
"token_type": "bearer",
"refresh_token": "<Refresh Token>",
"access_token": "<Access Token>",
"expires_in": 1800
}
```

5. Store the access token securely for use in your application.

## Quickstart

[//]: # (TODO: Add a quickstart guide to demonstrate a basic functionality of the module, including sample code snippets.)
To use the "HubSpot Marketing Forms" connector in your Ballerina application, update the `.bal` file as follows:

### Step 1: Import the module

Import the `hubspot.marketing.forms` module and `oauth2` module.

```ballerina
import ballerinax/hubspot.marketing.forms as hsmforms;
import ballerina/oauth2;
```

### Step 2: Instantiate a new connector

1. Create a `Config.toml` file and, configure the obtained credentials in the above steps as follows:

```toml
clientId = <Client Id>
clientSecret = <Client Secret>
refreshToken = <Refresh Token>
```

2. Instantiate a `hsmforms:ConnectionConfig` with the obtained credentials and initialize the connector with it.

```ballerina
configurable string clientId = ?;
configurable string clientSecret = ?;
configurable string refreshToken = ?;
final hsmforms:ConnectionConfig hsmformsConfig = {
auth : {
clientId,
clientSecret,
refreshToken,
credentialBearer: oauth2:POST_BODY_BEARER
}
};
final hsmforms:Client hsmformsClient = check new (hsmformsConfig);
```

### Step 3: Invoke the connector operation

Now, utilize the available connector operations. A sample usecase is shown below.

#### Create a Marketing Form

```ballerina
public function main() returns error? {
hsforms:FormDefinitionCreateRequestBase inputFormDefinition = {
formType: "hubspot",
name: "for",
createdAt: "2024-12-23T07:13:28.102Z",
updatedAt: "2024-12-23T07:13:28.102Z",
archived: false,
fieldGroups: [
{
groupType: "default_group",
richTextType: "text",
fields: [
{
objectTypeId: "0-1",
name: "email",
label: "Email",
required: true,
hidden: false,
fieldType: "email",
validation: {
blockedEmailDomains: [],
useDefaultBlockList: false
}
}
]
},
{
groupType: "default_group",
richTextType: "text",
fields: [
{
objectTypeId: "0-1",
name: "firstname",
label: "First name",
required: true,
hidden: false,
fieldType: "single_line_text"
},
{
objectTypeId: "0-1",
name: "lastname",
label: "Last name",
required: true,
hidden: false,
fieldType: "single_line_text"
}
]
},
{
groupType: "default_group",
richTextType: "text",
fields: [
{
objectTypeId: "0-1",
name: "message",
label: "Message",
required: true,
hidden: false,
fieldType: "multi_line_text"
}
]
}
],
configuration: {
language: "en",
createNewContactForNewEmail: true,
editable: true,
allowLinkToResetKnownValues: true,
lifecycleStages: [],
postSubmitAction: {
'type: "thank_you",
value: "Thank you for subscribing!"
},
prePopulateKnownValues: true,
cloneable: true,
notifyContactOwner: true,
recaptchaEnabled: false,
archivable: true,
notifyRecipients: ["example@example.com"]
},
displayOptions: {
renderRawHtml: false,
cssClass: "hs-form stacked",
theme: "default_style",
submitButtonText: "Submit",
style: {
labelTextSize: "13px",
legalConsentTextColor: "#33475b",
fontFamily: "arial, helvetica, sans-serif",
legalConsentTextSize: "14px",
backgroundWidth: "100%",
helpTextSize: "11px",
submitFontColor: "#ffffff",
labelTextColor: "#33475b",
submitAlignment: "left",
submitSize: "12px",
helpTextColor: "#7C98B6",
submitColor: "#ff7a59"
}
},
legalConsentOptions: {
'type: "none"
}
};
hsforms:FormDefinitionBase response = check baseClient->/.post(
inputFormDefinition
);
}
```
## Examples
The `HubSpot Marketing Forms` connector provides practical examples illustrating usage in various scenarios. Explore these [examples](https://github.com/module-ballerinax-hubspot.marketing.forms/tree/main/examples/), covering the following use cases:
The "HubSpot Marketing Forms" connector provides practical examples illustrating usage in various scenarios. Explore these [examples](https://github.com/ballerina-platform/module-ballerinax-hubspot.marketing.forms/tree/main/examples), covering the following use cases:
1. [Contact Us Form Integration](https://github.com/ballerina-platform/module-ballerinax-hubspot.marketing.forms/tree/main/examples/contact-us-form) - Build dynamic 'Contact Us' forms to handle customer inquiries efficiently, enabling seamless communication and accurate data collection.
[//]: # (TODO: Add examples)
2. [Sign Up Form Integration](https://github.com/ballerina-platform/module-ballerinax-hubspot.marketing.forms/tree/main/examples/sign-up-form) - Create, update, and manage user registration forms with customizable fields such as name, email, and consent checkboxes to streamline user onboarding.
## Build from the source
Expand Down
10 changes: 6 additions & 4 deletions ballerina/Ballerina.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,17 @@
distribution = "2201.10.0"
org = "ballerinax"
name = "hubspot.marketing.forms"
version = "1.0.0"
version = "0.1.0"
license = ["Apache-2.0"]
authors = ["Ballerina"]
keywords = []
# icon = "icon.png" # TODO: update icon.png
keywords = ["hubspot", "crm", "marketing", "forms"]
icon = "icon.png"
repository = "https://github.com/ballerina-platform/module-ballerinax-hubspot.marketing.forms"

[build-options]
observabilityIncluded = true

[platform.java21]
[platform.java17]
graalvmCompatible = true


Loading

0 comments on commit 8c317df

Please sign in to comment.