The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"name": "Exemplo Z-API",
"nodes": [
{
"parameters": {},
"name": "Start",
"type": "n8n-nodes-base.start",
"typeVersion": 1,
"position": [
-1880,
1800
],
"id": "009f0dac-4c9e-4035-9202-f075af0d9e34"
},
{
"parameters": {
"content": "## Start n\u00e3o pode ser apagado\n\nPor isso ele fica ai no canto isolado. N\u00e3o usaremos ele neste exemplo e sim o Webhook para receber as mensagens.",
"height": 201.21912275758433,
"width": 360
},
"name": "Note",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1900,
1964.0597619718499
],
"id": "0e0ff514-7ed9-45f5-a3b5-67c4a9d7864c"
},
{
"parameters": {
"httpMethod": "POST",
"path": "zapi",
"options": {}
},
"name": "Recebe mensagem da Z-API",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [
-1460,
2220
],
"id": "74c80777-a1a6-4fe4-bd65-a5c9e17c8fa3"
},
{
"parameters": {
"requestMethod": "POST",
"url": "={{$node[\"Constantes\"].json[\"endpointSendOptionList\"]}}",
"options": {},
"bodyParametersUi": {
"parameter": [
{
"name": "phone",
"value": "={{$node[\"Recebe mensagem da Z-API\"].json[\"body\"][\"phone\"]}}"
},
{
"name": "message",
"value": "={{$node[\"Monta lista\"].json[\"message\"]}}"
},
{
"name": "optionList",
"value": "={{$node[\"Monta lista\"].json[\"optionList\"]}}"
}
]
},
"headerParametersUi": {
"parameter": [
{
"name": "Client-Token",
"value": "={{$node[\"Constantes\"].json[\"clientTokenHeaderZapi\"]}}"
}
]
}
},
"name": "Envia lista",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 2,
"position": [
-560,
2400
],
"id": "24f86593-1bc2-4800-82f6-8f9b5f74526e"
},
{
"parameters": {
"conditions": {
"boolean": [
{
"value1": "={{$node[\"Constantes\"].json[\"listResponse\"]}}",
"value2": true
}
]
}
},
"name": "\u00c9 resposta de lista?",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [
-1020,
2220
],
"id": "38135099-67fd-4df0-8d55-f1c1f062cfa4"
},
{
"parameters": {
"dataType": "string",
"value1": "={{$node[\"Recebe mensagem da Z-API\"].json[\"body\"][\"listResponseMessage\"][\"title\"]}}",
"rules": {
"rules": [
{
"value2": "send-text",
"output": 1
},
{
"value2": "send-link",
"output": 2
},
{
"value2": "send-audio",
"output": 3
}
]
},
"fallbackOutput": 0
},
"name": "Resposta lista 1",
"type": "n8n-nodes-base.switch",
"typeVersion": 1,
"position": [
-800,
2040
],
"id": "a76fe89a-ea67-4ab2-9be8-85b6b6ac1ee7"
},
{
"parameters": {
"dataType": "string",
"value1": "={{$node[\"Recebe mensagem da Z-API\"].json[\"body\"][\"listResponseMessage\"][\"title\"]}}",
"rules": {
"rules": [
{
"value2": "send-contact"
},
{
"value2": "send-video",
"output": 1
},
{
"value2": "send-image",
"output": 2
},
{
"value2": "send-document",
"output": 3
}
]
}
},
"name": "Resposta lista 2",
"type": "n8n-nodes-base.switch",
"typeVersion": 1,
"position": [
-560,
1740
],
"id": "1718abc7-edeb-43cc-b068-f69e52c82811"
},
{
"parameters": {
"requestMethod": "POST",
"url": "={{$node[\"Constantes\"].json[\"endpointSendText\"]}}",
"options": {},
"bodyParametersUi": {
"parameter": [
{
"name": "phone",
"value": "={{$node[\"Recebe mensagem da Z-API\"].json[\"body\"][\"phone\"]}}"
},
{
"name": "message",
"value": "={{$node[\"Constantes\"].json[\"message\"]}}"
}
]
},
"headerParametersUi": {
"parameter": [
{
"name": "Client-Token",
"value": "={{$node[\"Constantes\"].json[\"clientTokenHeaderZapi\"]}}"
}
]
}
},
"name": "Envia mensagem",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 2,
"position": [
-560,
1900
],
"id": "c858305f-cd45-4ee6-bcb8-d71ad88f6dc6"
},
{
"parameters": {
"requestMethod": "POST",
"url": "={{$node[\"Constantes\"].json[\"endpointSendLink\"]}}",
"options": {},
"bodyParametersUi": {
"parameter": [
{
"name": "phone",
"value": "={{$node[\"Recebe mensagem da Z-API\"].json[\"body\"][\"phone\"]}}"
},
{
"name": "linkUrl",
"value": "https://z-api.io"
},
{
"name": "message",
"value": "Aqui voc\u00ea coloca um texto sobre o site. Mas Aten\u00e7\u00e3o! Esse texto preciso ter o link que ser\u00e1 enviado no final da mensagem! Assim: https://z-api.io"
},
{
"name": "image",
"value": "https://firebasestorage.googleapis.com/v0/b/zaap-messenger-web.appspot.com/o/logo.png?alt=media"
},
{
"name": "title",
"value": "Z-API"
},
{
"name": "linkDescription",
"value": "Integra\u00e7\u00e3o com o WhatsApp"
}
]
},
"headerParametersUi": {
"parameter": [
{
"name": "Client-Token",
"value": "={{$node[\"Constantes\"].json[\"clientTokenHeaderZapi\"]}}"
}
]
}
},
"name": "Envia link",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 2,
"position": [
-560,
2060
],
"id": "7e567976-0a41-47c9-b65d-b53e301985d5"
},
{
"parameters": {
"requestMethod": "POST",
"url": "={{$node[\"Constantes\"].json[\"endpointSendAudio\"]}}",
"options": {},
"bodyParametersUi": {
"parameter": [
{
"name": "phone",
"value": "={{$node[\"Recebe mensagem da Z-API\"].json[\"body\"][\"phone\"]}}"
},
{
"name": "audio",
"value": "={{$node[\"Constantes\"].json[\"urlAudio\"]}}"
}
]
},
"headerParametersUi": {
"parameter": [
{
"name": "Client-Token",
"value": "={{$node[\"Constantes\"].json[\"clientTokenHeaderZapi\"]}}"
}
]
}
},
"name": "Envia audio",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 2,
"position": [
-560,
2220
],
"id": "69f95ddc-c5fd-489b-a55d-f433fc44161a"
},
{
"parameters": {
"requestMethod": "POST",
"url": "={{$node[\"Constantes\"].json[\"endpointSendVideo\"]}}",
"options": {},
"bodyParametersUi": {
"parameter": [
{
"name": "phone",
"value": "={{$node[\"Recebe mensagem da Z-API\"].json[\"body\"][\"phone\"]}}"
},
{
"name": "video",
"value": "={{$node[\"Constantes\"].json[\"urlVideo\"]}}"
}
]
},
"headerParametersUi": {
"parameter": [
{
"name": "Client-Token",
"value": "={{$node[\"Constantes\"].json[\"clientTokenHeaderZapi\"]}}"
}
]
}
},
"name": "Envia video",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 2,
"position": [
-180,
1720
],
"id": "e07e72c9-2895-4a52-8395-ea87b91e5f43"
},
{
"parameters": {
"requestMethod": "POST",
"url": "={{$node[\"Constantes\"].json[\"endpointSendImage\"]}}",
"options": {},
"bodyParametersUi": {
"parameter": [
{
"name": "phone",
"value": "={{$node[\"Recebe mensagem da Z-API\"].json[\"body\"][\"phone\"]}}"
},
{
"name": "image",
"value": "={{$node[\"Constantes\"].json[\"urlImage\"]}}"
}
]
},
"headerParametersUi": {
"parameter": [
{
"name": "Client-Token",
"value": "={{$node[\"Constantes\"].json[\"clientTokenHeaderZapi\"]}}"
}
]
}
},
"name": "Envia imagem",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 2,
"position": [
-180,
1880
],
"id": "f86ebe33-abf9-40cf-9b45-ab73d7d5dd93"
},
{
"parameters": {
"requestMethod": "POST",
"url": "={{$node[\"Constantes\"].json[\"endpointSendDocument\"]}}",
"options": {},
"bodyParametersUi": {
"parameter": [
{
"name": "phone",
"value": "={{$node[\"Recebe mensagem da Z-API\"].json[\"body\"][\"phone\"]}}"
},
{
"name": "document",
"value": "={{$node[\"Constantes\"].json[\"urlDocument\"]}}"
},
{
"name": "fileName",
"value": "={{$node[\"Constantes\"].json[\"nameDocument\"]}}"
}
]
},
"headerParametersUi": {
"parameter": [
{
"name": "Client-Token",
"value": "={{$node[\"Constantes\"].json[\"clientTokenHeaderZapi\"]}}"
}
]
}
},
"name": "Envia documento",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 2,
"position": [
-180,
2040
],
"id": "ece4fc77-6609-4e16-84e0-be9dca1702cc"
},
{
"parameters": {
"content": "## Node Webhook\n\nTudo come\u00e7a aqui. Este \u00e9 o node de **Webhook** onde voc\u00ea deve configurar o endpoint dado aqui pelo pr\u00f3prio node e colocar ele na parte de webhook **Ao receber** da Z-API\n\nRepare que durante a execu\u00e7\u00e3o de testes, o webhook \u00e9 **Test URL**, e com o workflow ativo \u00e9 o **Production URL**, se atente a isso.",
"height": 360.8658159910907,
"width": 360
},
"name": "Note1",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1900,
2200
],
"id": "5cf12117-079d-4f35-a87d-150da26e93c1"
},
{
"parameters": {
"content": "## Worfklow Exemplo Z-API\n\nEste Workflow pode ser encontrado no seu [reposit\u00f3rio oficial](https://github.com/Z-API/z-api-n8n-example) no GitHub. Siga-o para updates.\n\nAqui \u00e9 demonstrado de forma simples o recebimento de mensagens, al\u00e9m do envio de lista, mensagem, audio, video, imagem, documento e contato.\n\nO fluxo poderia ter sido feito de forma mais eficaz, mas tentei deixar o mais simples poss\u00edvel pois o objetivo \u00e9 que um leigo consiga entender o funcionamento b\u00e1sico.\n\nOutros coment\u00e1rios foram adicionados no c\u00f3digo dos nodes **Code** que est\u00e3o com os nomes de **Constantes** e **Monta lista**\n\nWorkflow desenvolvido por **Kim Tiago Baptista**\n \n[Meu GitHub](https://github.com/kimtiago)\n[Meu LinkedIn](https://www.linkedin.com/in/kimtiagobaptista/)\n",
"height": 359.18241758241766,
"width": 639.28685478136
},
"name": "Note2",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1680,
1560
],
"id": "26127a32-fd85-47a0-a608-c503d576d264"
},
{
"parameters": {
"content": "## O n8n\nO **n8n** \u00e9 uma ferramenta de **Low-Code**, ou seja, voc\u00ea consegue fazer muita coisa sem programar, mas n\u00e3o tudo. Para utilizar voc\u00ea vai precisar de um conhecimento pr\u00e9vio de **L\u00f3gica de Programa\u00e7\u00e3o** e **APIs**.\n\nTem integra\u00e7\u00e3o nativa com diversas APIs do mercado. Consulte a documenta\u00e7\u00e3o para mais detalhes.",
"height": 202.72556454534478,
"width": 535.8241758241757
},
"name": "Note3",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1500,
1963.768605509265
],
"id": "64dc3396-2d9a-419e-b445-a3528b89e87f"
},
{
"parameters": {
"content": "## Node Switch\n\nPara cada resposta que o cliente enviar ser\u00e1 encaminhado para uma determinada rota. Ele sabe para qual rota enviar baseado nas configura\u00e7\u00f5es que voc\u00ea realiza nele.",
"height": 180,
"width": 360
},
"name": "Note4",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1020,
1740
],
"id": "c653fe2e-5f15-4507-9b1d-d0204dce0567"
},
{
"parameters": {
"content": "## Node HTTP Request\n\nS\u00e3o esses nodes que fazem as chamadas aos endpoints da **Z-API** de acordo com a documenta\u00e7\u00e3o.\n\nNeste exemplo, o Client-Token que deve ser enviado, foi inserido atrav\u00e9s de uma constante no node **Constantes**. Mas o ideal \u00e9 que voc\u00ea utilize o cadastro de chaves de autentica\u00e7\u00e3o do pr\u00f3prio **n8n**.\n\nPara cadastrar especificamente a da Z-API, v\u00e1 em **Credentials** -> **Add Credentials** -> Busque por **Header Auth** -> **Name** \u00e9 Client-Token e **Value** \u00e9 o seu token. N\u00e3o esque\u00e7a de colocar um nome para esta credencial no topo da dela, ao lado do s\u00edmbolo.\n\nDepois, utilize-a no node **HTTP Request** nas op\u00e7\u00f5es internas dele, ele estar\u00e1 dispon\u00edvel na lista em **Authentication** -> **Generic Credential Type** -> **Header Auth**",
"height": 364.5045123374794,
"width": 459.8680459955185
},
"name": "Note5",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-360,
2200
],
"id": "30215755-408c-47bb-8126-465238b3f137"
},
{
"parameters": {
"content": "## Node Code\n\nEsse node permite voc\u00ea a manipular os dados com c\u00f3digo **JavaScript** ou **Python**.",
"height": 178.89822753559008,
"width": 354.44346764346756
},
"name": "Note6",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1502.944223054113,
2380
],
"id": "2dfdd40b-ec3c-49d4-b460-43f6064d94d7"
},
{
"parameters": {
"content": "## Node If\n\nDiferente do node **Swtich** que tem at\u00e9 4 rotas, o **If** somente tem duas.\n\nUsamos ele aqui para definir se \u00e9 a resposta de uma lista ou n\u00e3o.",
"height": 180.10671282319623,
"width": 362.4551141166524
},
"name": "Note7",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1120,
2380
],
"id": "a408b9af-ea7c-42f1-a097-c464f5bb5a2f"
},
{
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "// o n8n tem um \u00f3timo controle de credenciais,\n// mas no caso da Z-API, da forma que \u00e9 constru\u00edda via URL\n// n\u00e3o \u00e9 poss\u00edvel utilizar esta funcionalidade,\n// por isso faremos esse tratamento por JavaScript\n\n// voc\u00ea pode utilizar os parametros como texto direto no node do HTTP Request\n// mas se tiver uma mudan\u00e7a de id e token da instancia ou outra coisa\n// vai precisar alterar um por um, ent\u00e3o \u00e9 melhor concentrar aqui\n\n// !!!! N\u00c3O ESQUE\u00c7A DE SUBSTITUIR AS VARIAVEIS ABAIXO COM !!!!\n// !!!! O ID, TOKEN E CLIENT TOKEN CORRETO DA SUA INSTANCIA !!!!\n\nconst idInstanceZapi = \"11111111111111111111\";\nconst tokenInstanceZapi = \"1111111111111111111\";\nconst clientTokenHeaderZapi = \"11111111111111111111\";\nconst endpointZapi = \"https://api.z-api.io/instances/\" + idInstanceZapi + \"/token/\" + tokenInstanceZapi;\nconst extensionDocument = \"pdf\";\n\n// definindo parametros que serao utilizados posteriormente no workflow\nitem.json.message = \"Teste de mensagem com Z-API e n8n\"\nitem.json.urlLink = \"https://app.z-api.io/\";\nitem.json.urlAudio = \"https://freetestdata.com/wp-content/uploads/2021/09/Free_Test_Data_100KB_MP3.mp3\";\nitem.json.urlVideo = \"https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4\";\nitem.json.urlImage = \"https://www.learningcontainer.com/wp-content/uploads/2020/07/Sample-JPEG-Image-File-Download-scaled.jpg\";\nitem.json.urlDocument = \"https://www.learningcontainer.com/wp-content/uploads/2019/09/sample-pdf-file.pdf\";\nitem.json.nameDocument = \"teste\"\nitem.json.clientTokenHeaderZapi = clientTokenHeaderZapi;\nitem.json.endpointSendOptionList = endpointZapi + \"/send-option-list\";\nitem.json.endpointSendText = endpointZapi + \"/send-text\";\nitem.json.endpointSendLink = endpointZapi + \"/send-link\";\nitem.json.endpointSendAudio = endpointZapi + \"/send-audio\";\nitem.json.endpointSendVideo = endpointZapi + \"/send-video\";\nitem.json.endpointSendImage = endpointZapi + \"/send-image\";\nitem.json.endpointSendDocument = endpointZapi + \"/send-document/\" + extensionDocument;\nitem.json.endpointSendContact = endpointZapi + \"/send-contact\";\n\n// checa se a mensagem \u00e9 uma resposta de lista\n// esse atributo listResponseMessage somente vem no objeto\n// se for resposta de lista\n// essa informa\u00e7\u00e3o \u00e9 importante para o fluxo do workflow\nif ($node[\"Recebe mensagem da Z-API\"].json[\"body\"][\"listResponseMessage\"]) {\n item.json.listResponse = true;\n} else {\n item.json.listResponse = false;\n}\n\n// voc\u00ea pode usar express\u00f5es para referenciar dados e outras coisas mais\n// como por exemplo acima $node[\"nome que voc\u00ea deu ao node\"]\n// seguido de .json[\"nome do atributo\"]\n// consulte a documenta\u00e7\u00e3o para mais detalhes\n\nreturn item;"
},
"id": "68f33117-2c80-4236-a70c-fee2501f6722",
"name": "Constantes",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-1240,
2220
]
},
{
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "// alguns parametros \u00e9 melhor montar com javascript,\n// facilita o entendimento e manuten\u00e7\u00e3o \n\n// nao confundir montagem de objetos javascript com mensagens json\n// tem diferen\u00e7as, mas o n8n converte automaticamente para json\n\nitem.json.message = \"Teste da Z-API com o n8n\";\n\nitem.json.optionList = {\n title: \"Seleciona a op\u00e7\u00e3o desejada para testar\",\n buttonLabel: \"SELECIONE A OP\u00c7\u00c3O\",\n options: [\n {\n id: \"1\",\n description: \"Envia mensagem\",\n title: \"send-text\"\n },\n {\n id: \"2\",\n description: \"Envia link\",\n title: \"send-link\"\n },\n {\n id: \"3\",\n description: \"Envia audio\",\n title: \"send-audio\"\n },\n {\n id: \"4\",\n description: \"Envia video\",\n title: \"send-video\"\n },\n {\n id: \"5\",\n description: \"Envia imagem\",\n title: \"send-image\"\n },\n {\n id: \"6\",\n description: \"Envia documento\",\n title: \"send-document\"\n },\n {\n id: \"7\",\n description: \"Envia contato\",\n title: \"send-contact\"\n },\n ]\n}\n\nreturn item;"
},
"id": "70b74b1a-b2a1-4726-9120-932eb59185cf",
"name": "Monta lista",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-740,
2240
]
},
{
"parameters": {
"requestMethod": "POST",
"url": "={{$node[\"Constantes\"].json[\"endpointSendContact\"]}}",
"options": {},
"bodyParametersUi": {
"parameter": [
{
"name": "phone",
"value": "={{$node[\"Recebe mensagem da Z-API\"].json[\"body\"][\"phone\"]}}"
},
{
"name": "contactName",
"value": "Z-API Contato"
},
{
"name": "contactPhone",
"value": "554498398733"
}
]
},
"headerParametersUi": {
"parameter": [
{
"name": "Client-Token",
"value": "={{$node[\"Constantes\"].json[\"clientTokenHeaderZapi\"]}}"
}
]
}
},
"name": "Envia contato",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 2,
"position": [
-180,
1560
],
"id": "56b486df-8779-4dad-a0b5-62df0819a9a0"
}
],
"connections": {
"Recebe mensagem da Z-API": {
"main": [
[
{
"node": "Constantes",
"type": "main",
"index": 0
}
]
]
},
"\u00c9 resposta de lista?": {
"main": [
[
{
"node": "Resposta lista 1",
"type": "main",
"index": 0
}
],
[
{
"node": "Monta lista",
"type": "main",
"index": 0
}
]
]
},
"Resposta lista 1": {
"main": [
[
{
"node": "Resposta lista 2",
"type": "main",
"index": 0
}
],
[
{
"node": "Envia mensagem",
"type": "main",
"index": 0
}
],
[
{
"node": "Envia link",
"type": "main",
"index": 0
}
],
[
{
"node": "Envia audio",
"type": "main",
"index": 0
}
]
]
},
"Resposta lista 2": {
"main": [
[
{
"node": "Envia contato",
"type": "main",
"index": 0
}
],
[
{
"node": "Envia video",
"type": "main",
"index": 0
}
],
[
{
"node": "Envia imagem",
"type": "main",
"index": 0
}
],
[
{
"node": "Envia documento",
"type": "main",
"index": 0
}
]
]
},
"Constantes": {
"main": [
[
{
"node": "\u00c9 resposta de lista?",
"type": "main",
"index": 0
}
]
]
},
"Monta lista": {
"main": [
[
{
"node": "Envia lista",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Exemplo Z-API. Uses start, httpRequest. Webhook trigger; 23 nodes.
Source: https://github.com/Z-API/z-api-n8n-example/blob/7652680e1b23228493a9dd98dbe314526d7531ef/exemplo_zapi_n8n.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
DOMAIN EXTRACTION EXAMPLE. Uses start, httpRequest. Webhook trigger; 4 nodes.
This n8n template provides enterprise-level version control for your workflows using GitHub integration. Stop losing hours to broken workflows and manual exports – get proper commit history, visual di
This flow creates dummy files for every item added in your *Arrs (Radarr/Sonarr) with the tag .
This workflow acts as a central API gateway for all technical indicator agents in the Binance Spot Market Quant AI system. It listens for incoming webhook requests and dynamically routes them to the c
Sign PDF documents with legally-compliant digital signatures using X.509 certificates. Supports multiple PAdES signature levels (B, T, LT, LTA) with optional visible stamps.