A microservice application that automates the interaction between different SaaS applications that expose a public API . Works similar to Zapier, you have a “producer” and a “consumer”.

The web application exposes the following services:

To act on behalf of the user, the application has to store OAuth tokens from the third-party SaaS application.

It manages the producer and consumer. Below you can see how a call to the endpoint must look like.


"Producer": {

                        "Service": "GitHub",    

                        "Task": "GetAllIssues",

                        "Args": [4, 2]


              "Consumer": {

                        "Service": "Slack",        

                        "Task": "ConversationWrite",

                       "Args": ["C02HQ6KPL4E"],

                        "JSON": "",

                       "Language": "{{User.Login}} a adaugat un nou issue cu titlul {{Title}} la    repository-ul {{Repository.HtmlUrl}}. Vezi detalii: {{HtmlUrl}}"



The producer defines what service it targets (GitHub), what you want the application to look for (GetAllIssues), and the arguments that the task takes (in this case these are some options the app sends to GitHub when it calls the issues API).

Consumer works the same but it has two extra fields. The JSON field is going to contain the JSON returned by the “producer” API (in this case the GitHub issues API).

Language will contain the message to be posted by the consumer (in this case the message is going to be published on the Slack channel). The application implements a very basic template engine. It has only one role, to let you replace the variables contained between {{ }} with values from the JSON field.

The Task API uses a message queue (RabbitMQ) to communicate with workers.

The workers are the ones that execute the tasks (GetAllIssues, ConversationWrite).

It listens and sends data through a message queue. When nothing is available on the queues they just idle.

           Everything works in a Docker environment.