The main purpose of this webhook is to listen to Pipedrive deal's won update event, and if it is from a certain type of deal, send it as a card to Trello with custom fields.
Easy peasy lemon squeezy:
$ yarn
Or:
$ npm install
Was installed and configured the
eslintandprettierto keep the code clean and patterned.
For the fastest setup is recommended to use docker-compose, you just need to up all services:
$ docker-compose up -d
In this file you may configure your JWT settings, the environment, app's port, url to documentation (this will be returned with error responses, see error section) and Pipedrive and Trello's keys.
| key | description | default |
|---|---|---|
| APP_PORT | Port number where the app will run. | 3333 |
| NODE_ENV | App environment. | development |
| PIPEDRIVE_API_TOKEN | Pipedrive API's token. See How to find the API token for more information. | - |
| PIPEDRIVE_DOMAIN_NAME | Pipedrive domain name (company name), see How to get the company domain. | - |
| PIPEDRIVE_USER and PIPEDRIVE_PWD | Basic auth's user and password (respectively). Used to ensure that the deal's event is coming from Pipedrive webhook, see Webhook for more information about it. | - |
| TRELLO_API_KEY | Trello's api key. See Trello's api key section. | - |
| TRELLO_API_TOKEN | Trello's api token. See Trello's api token section. | - |
| TRELLO_LIST_ID | Trello's list id. - | |
| TRELLO_BOARD_ID | Trello's board id. - |
Instructions to configure the Pipedrive's webhook, custom fields and products.
Create a webhook to listen updated.deal event, remember to set a user (PIPEDRIVE_USER) and password (PIPEDRIVE_PWD), for more information see:
The webhook's url should be something like:
https://<your-domain>/v1/pipedrive/events
If you are running the application local I recommend you to use ngrok to export a url to access the application. (e.g.
https://25752eff.ngrok.io/v1/pipedrive/events)
To get a Trello's API key, go to trello app-key:
Then, click on gerar token or generate token.
To start up the app run:
$ yarn start
Or:
$ npm run start
Then create new deals, make it pass through your funnel, etc, when you mark that deal as won the magic will happens :)
Instead of only throw a simple message and HTTP Status Code this API return friendly errors:
{
"statusCode": 401,
"error": "Unauthorized",
"message": "You are not authorized!",
"code": 741,
"docs": "https://github.com/DiegoVictor/pipedeals#errors-reference"
}Errors are implemented with @hapi/boom. As you can see a url to errors docs are returned too. To configure this url update the
DOCS_URLkey from.envfile. In the next sub section (Errors Reference) you can see the errorscodedescription.
| code | message | description |
|---|---|---|
| 531 | An error occurred while trying to retrieve the deal from Pipedrive | An error occurred during the request to get the deal in Pipedrive API, look the details key for more information. |
| 532 | An error occurred while trying to retrieve the deal's custom fields from Pipedrive | The request to get custom fields from Pipedrive API throw an error. Look the details key for more information. |
| 533 | An error occurred while trying to retrieve the deal's products from Pipedrive | Occurred an error while trying to retrieve deal's products, in details key will be more information about the error. |
| 534 | An error occurred while trying to save the order at Bling | Something goes wrong when tried to send the opportunity to Bling. There are two steps here: payment method verification and buy order creation. For more information see the details key in the response. |
| 244 | Report not found | The id sent not references an existing report in the database. |
| 344 | Opportunity not found | The id sent not references an existing opportunity in the database. |
| 440 | User not exists | The email sent not references an existing user in the database. |
| 450 | User and/or password not match | User and/or password is incorrect. |
| 140 | Email already in use | Already exists an user with the same email. |
| 640 | Missing authorization | Pipedrive's webhook is not sending the Basic auth's user and password. |
| 641 | You are not authorized! | Pipedrive's webhook is sending wrong Basic credentials. |
| 740 | Missing authorization token | The Bearer Token was not sent. |
| 741 | You are not authorized! | The Bearer Token provided is invalid or expired. |
Another header returned in routes with pagination, this bring the total records amount.
All reports and oppotunities routes expect a Bearer Token in an Authorization header.
You can see these routes in the routes section.
GET http://localhost:3333/v1/pipedrive/events Authorization: Bearer <token>
To achieve this token you just need authenticate through the
/sessionsroute and it will return thetokenkey with a valid Bearer Token.
A simple versioning was made. Just remember to set after the host the /v1/ string to your requests.
GET http://localhost:3333/v1/pipedrive
| route | HTTP Method | pagination | params | description | auth method |
|---|---|---|---|---|---|
/pipedrive/events |
POST | ❌ | Body with event's event, current.id and current.status. |
Receive Piedrive deal's won event. | Basic |
Routes with
Beareras auth method expect anAuthorizationheader. See Bearer Token section for more information.Basicauthentication is a base64 encoding ofPIPEDRIVE_USERandPIPEDRIVE_PWDjoined by a:, but you should not make manual requests to this endpoint (this will be responsability of the Pipedrive's webhook).
POST /pipedrive/events
Request body:
{
"current": {
"id": 1,
"status": "won"
},
"event": "updated.deal"
}Jest was the choice to test the app, to run:
$ yarn test
Or:
$ npm run test
You can see the coverage report inside tests/coverage. They are automatically created after the tests run.


