← Blog

Parallel bridge integrations: Odoo and Listmonk

In today’s digital ecosystem, organizations often rely on multiple platforms to manage different aspects of their operations. For example, you might use Odoo as your CRM to handle customer relationships and sales, while Listmonk manages your email marketing and newsletters. The challenge arises when you want to streamline data collection—such as quotation requests—so that submissions are automatically sent to both systems without manual intervention.

With Forms Bridge, you can connect one form to multiple backends, allowing your submissions to be sent to multiple places simultaneously.

Let’s explore how to set up this integration step by step, using Contact Form 7 as the form builder, Odoo as the CRM, and Listmonk as the newsletter service.

Quotation form

The first step is to build the quotation form. For this, we’ll use Contact Form 7 as the form builder and the Odoo Quotation template as a starting point. Go to the Odoo add-on, open the template wizard, select the Quotations template, and follow the wizard steps. At the end, Forms Bridge will have created a new form, a backend connection, and a bridge.

Odoo add-on template wizard with the templates dropdown expanded and the quotations option focused.

To the resulting form, we need to add one more field named listmonk as an acceptance checkbox. This allows visitors to subscribe to our newsletter.

After this small change, the form will look like this:

Screenshot of the quotation form rendered inside a page.

Odoo

Since we used the wizard template to create the bridge, the backend connection to Odoo is already configured. This connection consists of two components:

  1. RPC Credential: An authorization credential with three fields: the user’s email, its password and the name of the target database.
  2. Backend: A backend connection with the base URL of our Odoo instance, some HTTP headers, and the link to the RPC credential.
Screenshot of the backend connection configured to point to our Odoo instance and linked with the RPC credential.
Screenshot of the RPC credential configuration form.

In the Odoo tab of the settings page, we’ll find the bridge. Because we added a new field to the form, we need to use mappers to ignore it. After this, the bridge should look like this:

Screenshot of the odoo bridge configuration after the addition of the new mapper to ignore the listmonk field.

Listmonk

To set up the Listmonk integration, we need to configure the backend connection. The first step is to create an API user in Listmonk and obtain its token.

The Listmonk API uses authorization tokens, so the next step is to register a new Token credential. Use the username and token as the client id and client secret values.

Screenshot of the Token credential with the listmonk api user credentials.

Once registered, we have to configure the backend connection using the base URL of our Listmonk instance and the Token credential we created.

Screenshot of the backend connection configuration to point to our listmonk instance.

Next, go the the Listmonk tab and register a new bridge. This bridge should include the following fields:

  • Name: Quotation subscriptions
  • Form: Quotations
  • Backend: Listmonk
  • Endpoint: /api/subscribers
  • Method: POST

And the following custom fields:

  • attribs.locale: $browser_locale
  • preconfirm_subscriptions: 1
  • lists[0]: 1 (this is the ID of the list we want our visitors to be subscribed)

Use mappers to ignore unrelated fields (e.g. vat, street, etc.) and to format the payload to match the Listmonk subscribers endpoint interface. Here’s the result:

Screenshot of the listmonk bridge configuration.

The final step is to add the Skip subscription job to the bridge workflow. This job will skip bridge submissions if the listmonk field is not set to true in the payload. With this job, the bridge will skip subscription requests for users who haven’t accepted the subscription.

Conclusion

After all this work, we have one form built with Contact Form 7 and two bridges: one for our CRM and another for our mailing list service.

With this setup, each submission from the quotation form will trigger two simultaneous requests:

  • An RPC call to Odoo to create a new contact and quotation
  • An REST request to Listmonk to create a new subscriber for our mailing list.

This examples covers a dual form integration, but it can scale up to any number of parallel integrations.