This workflow corresponds to n8n.io template #13218 — we link there as the canonical source.
This workflow follows the Agent → HTTP Request recipe pattern — see all workflows that pair these two integrations.
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 →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "88b9b8bf-5fa2-4621-8e23-72ad53a61a10",
"name": "Send message",
"type": "n8n-nodes-base.whatsApp",
"position": [
832,
-416
],
"parameters": {
"textBody": "={{ $json.output }}",
"operation": "send",
"phoneNumberId": "871225226084214",
"additionalFields": {
"previewUrl": false
},
"recipientPhoneNumber": "={{ $('WhatsApp Trigger').item.json.contacts[0].wa_id }}"
},
"credentials": {
"whatsAppApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.1
},
{
"id": "81cf463e-571b-403c-8533-5a4b2be010cb",
"name": "WhatsApp Trigger",
"type": "n8n-nodes-base.whatsAppTrigger",
"position": [
-2480,
-320
],
"parameters": {
"options": {},
"updates": [
"messages"
]
},
"credentials": {
"whatsAppTriggerApi": {
"name": "<your credential>"
}
},
"retryOnFail": true,
"typeVersion": 1
},
{
"id": "0ddbd104-3d04-42b6-b848-d58414d4cb8e",
"name": "Download Image",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1808,
-96
],
"parameters": {
"url": "={{ $json.url }}",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "whatsAppApi"
},
"credentials": {
"whatsAppApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "15e5cb6f-fc5f-4949-bfbb-c0c5e96e31e7",
"name": "Download Voicemail",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1456,
-384
],
"parameters": {
"url": "={{ $json.url }}",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "whatsAppApi"
},
"credentials": {
"whatsAppApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "69f83f89-97ee-45c4-9df0-187dba520da0",
"name": "Gets WhatsApp Image Source URL",
"type": "n8n-nodes-base.whatsApp",
"position": [
-2032,
-96
],
"parameters": {
"resource": "media",
"operation": "mediaUrlGet",
"mediaGetId": "={{ $json.messages[0].image.id }}"
},
"credentials": {
"whatsAppApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "2d86a56e-42fd-4b6b-87ab-3f067314fc02",
"name": "Gets WhatsApp Voicemail Source URL",
"type": "n8n-nodes-base.whatsApp",
"position": [
-1680,
-384
],
"parameters": {
"resource": "media",
"operation": "mediaUrlGet",
"mediaGetId": "={{ $json.messages[0].audio.id}}"
},
"credentials": {
"whatsAppApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "422ab20f-c3f0-4487-bd04-e2a65fb73ea6",
"name": "Map text prompt",
"type": "n8n-nodes-base.set",
"position": [
-1328,
-704
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "38aec976-a32c-4b0e-85f4-c90adc16abc9",
"name": "text",
"type": "string",
"value": "={{ $json.messages[0].text.body }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "05ce0499-0dad-4fc6-ae03-79f2912e1e96",
"name": "Map image prompt",
"type": "n8n-nodes-base.set",
"position": [
-1360,
-96
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "48af2dcc-4ce9-45fc-abfc-54f803930092",
"name": "text",
"type": "string",
"value": "=User image description: {{ $json.content }}\n\nUser image caption: {{ $('Route input Types').item.json.messages[0].image.caption }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "ead3c3e0-cc41-447a-9351-09a91db433fd",
"name": "OpenAI1",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
-1584,
-96
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {
"detail": "auto"
},
"resource": "image",
"inputType": "base64",
"operation": "analyze"
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.8
},
{
"id": "d61ecaf8-78b9-48f1-b1f1-a0ab52cedef4",
"name": "OpenAI",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
-1232,
-384
],
"parameters": {
"options": {},
"resource": "audio",
"operation": "translate"
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.8
},
{
"id": "287b566a-db3c-4ae1-91e3-bc755d6a753f",
"name": "Simple Memory",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
-832,
-80
],
"parameters": {
"sessionKey": "=memory_{{ $('WhatsApp Trigger').item.json.contacts[0].wa_id }}",
"sessionIdType": "customKey",
"contextWindowLength": 20
},
"typeVersion": 1.3
},
{
"id": "716d232b-b5fa-46e4-9a2d-280fc42e5e79",
"name": "Get_boxes_details",
"type": "n8n-nodes-streak-crm.streakTool",
"position": [
-704,
-80
],
"parameters": {
"resource": "box",
"returnAll": true,
"pipelineKey": {
"__rl": true,
"mode": "list",
"value": "agxzfm1haWxmb29nYWVyPQsSDE9yZ2FuaXphdGlvbiIWbWVzaGFja2FnbzI0QGdtYWlsLmNvbQwLEghXb3JrZmxvdxiAgKXBtavECww",
"cachedResultUrl": "https://www.streak.com/pipeline/agxzfm1haWxmb29nYWVyPQsSDE9yZ2FuaXphdGlvbiIWbWVzaGFja2FnbzI0QGdtYWlsLmNvbQwLEghXb3JrZmxvdxiAgKXBtavECww",
"cachedResultName": "Delta40 Sandbox Pipeline (agxzfm1haWxmb29nYWVyPQsSDE9yZ2FuaXphdGlvbiIWbWVzaGFja2FnbzI0QGdtYWlsLmNvbQwLEghXb3JrZmxvdxiAgKXBtavECww)"
},
"searchQuery": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Search_Query', ``, 'string') }}",
"stageKeyFilter": {
"__rl": true,
"mode": "id",
"value": "="
}
},
"credentials": {
"streakApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "f5974608-8e36-49d5-a7f0-dd810a100f66",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-1072,
-64
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini",
"cachedResultName": "gpt-4.1-mini"
},
"options": {},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "9cdf9d12-eda5-4c90-8387-7f8a59e064cc",
"name": "Comment tag",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
976,
-80
],
"parameters": {
"url": "={{ $fromAI('URL', ``, 'string') }}",
"method": "POST",
"options": {},
"jsonBody": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('JSON', ``, 'json') }}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBasicAuth"
},
"credentials": {
"httpBasicAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.3
},
{
"id": "6d7b187c-812a-425b-8cbf-7610b1b808df",
"name": "Update_box_in_Streak",
"type": "n8n-nodes-streak-crm.streakTool",
"position": [
-544,
-80
],
"parameters": {
"boxKey": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Box_Key', ``, 'string') }}",
"resource": "box",
"operation": "updateBox",
"updateFields": {
"notes": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Notes', ``, 'string') }}",
"stageKey": {
"mode": "list",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Stage', ``, 'string') }}"
},
"assignedToTeamKeyOrUserKey": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Assigned_To__Team_User_Key_', ``, 'string') }}"
},
"descriptionType": "manual",
"toolDescription": "Update a box in Streak"
},
"credentials": {
"streakApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "91588af1-fc9a-4a67-98f3-faa4cc931c82",
"name": "Create a contact",
"type": "n8n-nodes-streak-crm.streakTool",
"position": [
-384,
-80
],
"parameters": {
"teamKey": "agxzfm1haWxmb29nYWVyEQsSBFRlYW0YgIClwavU9ggM",
"resource": "contact",
"givenName": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Given_Name', ``, 'string') }}",
"operation": "createContact",
"familyName": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Family_Name', ``, 'string') }}",
"emailAddresses": [
"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('emailAddresses0_Email_Addresses', ``, 'string') }}"
],
"additionalFields": {}
},
"credentials": {
"streakApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "70e2d4f8-2a05-43ed-8fa7-f693a678051a",
"name": "Update a contact",
"type": "n8n-nodes-streak-crm.streakTool",
"position": [
-240,
-80
],
"parameters": {
"resource": "contact",
"operation": "updateContact",
"contactKey": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Contact_Key', ``, 'string') }}",
"updateFields": {}
},
"credentials": {
"streakApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "e5672191-8940-41b9-9fbd-954155a91ceb",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-944,
-80
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "335cbacf-bddf-481c-b3b9-334e506bc737",
"name": "Create a box in a pipeline in Streak",
"type": "n8n-nodes-streak-crm.streakTool",
"position": [
-96,
-96
],
"parameters": {
"boxName": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Box_Name', ``, 'string') }}",
"resource": "box",
"stageKey": {
"__rl": true,
"mode": "id",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Stage', ``, 'string') }}"
},
"operation": "createBox",
"pipelineKey": {
"__rl": true,
"mode": "list",
"value": "agxzfm1haWxmb29nYWVyPQsSDE9yZ2FuaXphdGlvbiIWbWVzaGFja2FnbzI0QGdtYWlsLmNvbQwLEghXb3JrZmxvdxiAgKXBtavECww",
"cachedResultUrl": "https://www.streak.com/pipeline/agxzfm1haWxmb29nYWVyPQsSDE9yZ2FuaXphdGlvbiIWbWVzaGFja2FnbzI0QGdtYWlsLmNvbQwLEghXb3JrZmxvdxiAgKXBtavECww",
"cachedResultName": "Delta40 Sandbox Pipeline (agxzfm1haWxmb29nYWVyPQsSDE9yZ2FuaXphdGlvbiIWbWVzaGFja2FnbzI0QGdtYWlsLmNvbQwLEghXb3JrZmxvdxiAgKXBtavECww)"
},
"additionalFields": {
"notes": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Notes', ``, 'string') }}",
"assignedToTeamKeyOrUserKey": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Assigned_To__Team_User_Key_', ``, 'string') }}"
}
},
"credentials": {
"streakApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "dfcca289-0deb-43b1-a315-8aa46a1657b5",
"name": "Streak_Doc",
"type": "@tavily/n8n-nodes-tavily.tavilyTool",
"position": [
368,
-80
],
"parameters": {
"query": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Query', `Use this tool to research on how to approach any streak api endpoint`, 'string') }}",
"options": {
"include_domains": [
"https://streak.readme.io/reference"
]
}
},
"credentials": {
"tavilyApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "378ef331-9188-48fb-88d5-6b5dddbf0e90",
"name": "Get_user_in_Streak",
"type": "n8n-nodes-streak-crm.streakTool",
"position": [
48,
-96
],
"parameters": {},
"credentials": {
"streakApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "ce0e5036-d909-42eb-8ea5-3dac32948146",
"name": "Get_pipeline-fileds",
"type": "n8n-nodes-streak-crm.streakTool",
"position": [
224,
-96
],
"parameters": {
"resource": "field",
"returnAll": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Return_All', ``, 'boolean') }}",
"pipelineKey": {
"__rl": true,
"mode": "list",
"value": "agxzfm1haWxmb29nYWVyPQsSDE9yZ2FuaXphdGlvbiIWbWVzaGFja2FnbzI0QGdtYWlsLmNvbQwLEghXb3JrZmxvdxiAgKXBtavECww",
"cachedResultUrl": "https://www.streak.com/pipeline/agxzfm1haWxmb29nYWVyPQsSDE9yZ2FuaXphdGlvbiIWbWVzaGFja2FnbzI0QGdtYWlsLmNvbQwLEghXb3JrZmxvdxiAgKXBtavECww",
"cachedResultName": "Delta40 Sandbox Pipeline (agxzfm1haWxmb29nYWVyPQsSDE9yZ2FuaXphdGlvbiIWbWVzaGFja2FnbzI0QGdtYWlsLmNvbQwLEghXb3JrZmxvdxiAgKXBtavECww)"
}
},
"credentials": {
"streakApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "a94b7cf0-2cd8-47b2-88dd-55daae16c9e8",
"name": "Get_Custom_Operation",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
496,
-80
],
"parameters": {
"url": "={{ 'https://api.streak.com/api/v1/search?query=' + encodeURIComponent($fromAI('searchQuery', 'Extract the contact name or email to search for. Examples: \"Riki Yamauchi\" or \"riki@example.com\"', 'string')) + '&type=contact' }}",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpBasicAuth"
},
"credentials": {
"httpBasicAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.3
},
{
"id": "05434e95-41e3-4171-8161-1b349848ca3c",
"name": "POST_Custom_Operation",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
672,
-80
],
"parameters": {
"url": "={{ 'https://api.streak.com/api/v1/boxes/' + $fromAI('boxKey', 'Extract the boxKey from the previous GET operation result. It looks like a long encoded string starting with agxz', 'string') }}",
"method": "POST",
"options": {},
"jsonBody": "={{ '{\"contactKeys\": [\"' + $fromAI('contactKey', 'Extract the contactKey from the previous search result. It is the key field from the contact object', 'string') + '\"]}' }}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBasicAuth"
},
"credentials": {
"httpBasicAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.3
},
{
"id": "7c735147-f649-41b8-a4b9-2d47ab68e334",
"name": "Link_contact_to_box",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
832,
-80
],
"parameters": {
"url": "={{ 'https://api.streak.com/api/v1/boxes/' + $fromAI('boxKey', 'The boxKey of the box you want to link the contact to', 'string') }}",
"method": "POST",
"options": {},
"jsonBody": "={{ JSON.stringify({ contacts: [{ key: $fromAI('contactKey', 'The contactKey of the contact to link to the box', 'string') }] }) }}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBasicAuth"
},
"credentials": {
"httpBasicAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.3
},
{
"id": "10acde70-20ff-4acb-beca-22502742f5b1",
"name": "Create_task_in_box_Streak",
"type": "n8n-nodes-streak-crm.streakTool",
"position": [
1264,
-96
],
"parameters": {
"text": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Task_Text', `Use this tool to create a task in a box, you must have the pipeline key, box id and the task to accurately create a task.`, 'string') }}",
"boxKey": {
"__rl": true,
"mode": "id",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Box', ``, 'string') }}"
},
"resource": "task",
"operation": "createTask",
"pipelineKey": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Pipeline_Key', ``, 'string') }}",
"additionalFields": {}
},
"credentials": {
"streakApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "dc78b5b9-11b1-4694-9243-90c6414bfb4e",
"name": "Get a task in Streak",
"type": "n8n-nodes-streak-crm.streakTool",
"position": [
1104,
-96
],
"parameters": {
"taskKey": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Task_Key', `Call this tool to get the tasks in the boxes`, 'string') }}",
"resource": "task"
},
"credentials": {
"streakApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "edb8e4a8-4c77-4b54-baf6-2d6cce8d94e7",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1456,
-768
],
"parameters": {
"color": 7,
"width": 368,
"height": 192,
"content": "## text media type"
},
"typeVersion": 1
},
{
"id": "82e3ae68-e3d9-4351-bbc2-74d6890416e1",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2064,
-176
],
"parameters": {
"color": 7,
"width": 816,
"height": 256,
"content": "## image media type\nUpload job cards, or media that could be used to enrich contacts"
},
"typeVersion": 1
},
{
"id": "9e2201d9-5087-457b-95b6-4c02f5183523",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1712,
-480
],
"parameters": {
"color": 7,
"width": 592,
"height": 256,
"content": "## Upload Audio files\nTo quickly chat with your CRM"
},
"typeVersion": 1
},
{
"id": "8b6ce946-6eb4-4ecd-8b90-e48bc1edb825",
"name": "Route input Types",
"type": "n8n-nodes-base.switch",
"position": [
-2256,
-352
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "Text",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "2fc5c912-629b-4cbe-b5e3-7e3f0651c628",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.messages[0].type }}",
"rightValue": "text"
}
]
},
"renameOutput": true
},
{
"outputKey": "Audio",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "26a3d85c-0815-48ff-85ce-713129a1107c",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.messages[0].type }}",
"rightValue": "audio"
}
]
},
"renameOutput": true
},
{
"outputKey": "Image",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "840b95b8-6559-4fb7-b32c-651451d6d0d2",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.messages[0].type }}",
"rightValue": "image"
}
]
},
"renameOutput": true
},
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "3e7a07f9-b785-450c-8c68-f6b276838503",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.messages[0].type }}",
"rightValue": "document"
}
]
}
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "128e7484-eac8-4b07-a673-c2589c9dbf83",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2896,
-880
],
"parameters": {
"width": 432,
"height": 544,
"content": "### How it works\nThis AI agent manages your Streak CRM via WhatsApp. Send messages to create contacts, add boxes to pipelines, update stages, link contacts to boxes, and retrieve information, add and get tasks all through natural conversation.\n\n### Setup steps\n\nConnect your Streak API credentials (Basic Auth)\nConfigure WhatsApp Business integration\nAdd your Streak pipeline keys to the workflow\nTest with a simple command like \"create contact John Doe\"\n\n### Customization tips\n\nAdd custom Streak fields to the AI's tool descriptions\nModify pipeline stages to match your workflow\nAdjust AI prompts to recognize your team's terminology\nEnable additional Streak operations (comments, tasks, files)\n\nThe agent worked perfectly when you give it access to streak API documentation, to attain even more complex tasks"
},
"typeVersion": 1
},
{
"id": "235fa007-f280-4eb1-9156-16e5c985d131",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
608,
112
],
"parameters": {
"color": 3,
"width": 272,
"content": "## Note\non every http node use streak API version1 V1 endpoint unless the resources you need are only served on version 2\n\n"
},
"typeVersion": 1
},
{
"id": "c76241bb-e3d8-47b8-ab08-68945594d62b",
"name": "Chat with Streak CRM",
"type": "@n8n/n8n-nodes-langchain.agent",
"onError": "continueRegularOutput",
"maxTries": 2,
"position": [
-192,
-400
],
"parameters": {
"text": "={{ $json.text }}",
"options": {
"systemMessage": "You are a Streak CRM assistant that helps users update contact records via WhatsApp.\n\nAVAILABLE OPERATIONS:\n1. Add comments/notes to contacts\n2. Move contacts to different pipeline stages\n3. Update contact information\n4. Create a contact\n5. Link contacts to boxes in pipelines\n\nTOOLS YOU HAVE:\n- \"Streak_Doc\": Search Streak API reference documentation\n- \"Get_boxes_details\": Find contact box and get boxKey\n- \"Get_Custom_Operation\": Perform any GET/Fetch request - Super Admin GET tool. Can fetch ANY Streak API endpoint:\n - Search contacts: https://api.streak.com/api/v1/search?query=NAME&type=contact\n - Get a specific box: https://api.streak.com/api/v1/boxes/BOXKEY\n - Get a specific contact: https://api.streak.com/api/v2/contacts/CONTACTKEY\n - List pipelines: https://api.streak.com/api/v1/pipelines\n - The tool accepts full URLs, so construct the complete endpoint you need\n- \"POST_Custom_Operation\": Perform any custom POST operation - Super Admin POST tool\n- \"Comment_tag\": Add comments/notes to a box timeline\n- \"Update_box_in_Streak\": Move box to different pipeline stage\n- \"Create a box in a pipeline in Streak\": Create boxes or perform box operations\n- \"Create a contact\": Create new contacts in Streak. Collect all necessary details/fields before creating.\n- \"Get_user_in_Streak\": Get Streak user keys for task assignment\n- \"Get_pipeline-fields\": Get pipeline fields for accurate mapping\n- \"Link_contact_to_box\": Links a contact to a box. Requires boxKey and contactKey. This is the ONLY tool to use for linking - do not use POST_Custom_Operation for this.\n-Create_task_in_box_Streak -Used for adding/creating tasks into the box\n-Get a task in Streak -for fetching available tasks, use Get_Custom_Operation tool to get the task keys...\n\nPIPELINE STAGES:\n- New Contact: 5001\n- Engaged: 5002\n- Follow-up: 5003\n\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nCRITICAL: LINKING CONTACTS TO BOXES\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nThe ONLY correct way to link a contact to a box is:\n- Tool: \"Link_contact_to_box\"\n- It requires exactly TWO things: boxKey and contactKey\n- The correct API format is: {\"contacts\": [{\"key\": \"CONTACT_KEY\"}]}\n- Do NOT use {\"contactKeys\": [\"...\"]} - this does NOT work\n- After a successful link, the response will contain a \"contacts\" array with the linked contact key\n- To verify success, check for \"contacts\" array in the response (NOT \"contactKeys\", NOT \"linkedBoxKeys\")\n\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nWORKFLOWS\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\nFOR LINKING AN EXISTING CONTACT TO AN EXISTING BOX:\n1. Use \"Get_Custom_Operation\" to search for the contact \u2192 get contactKey\n - URL: https://api.streak.com/api/v1/search?query=NAME_OR_EMAIL&type=contact\n2. Use \"Get_boxes_details\" or \"Get_Custom_Operation\" to find the box \u2192 get boxKey\n3. Use \"Link_contact_to_box\" with the boxKey and contactKey\n4. Confirm: \"\u2705 Linked [contact name] to [box name]\"\n\nFOR CREATING A NEW CONTACT + ADDING TO PIPELINE:\n1. Use \"Create a contact\" to create the contact \u2192 get contactKey\n2. Ask user if they want the contact added to a pipeline\n3. Use \"Create a box in a pipeline in Streak\" to create box \u2192 get boxKey\n4. Use \"Link_contact_to_box\" with boxKey and contactKey\n5. Confirm: \"\u2705 Created [contact name] and linked to [pipeline name]\"\n6. It is important when adding a contact to a pipeline to create a box and add the very contact to the box...this help in easy tracking and prevents duplicates\n\nFOR ADDING AN EXISTING CONTACT TO A NEW BOX:\n1. Use \"Get_Custom_Operation\" to search for contact \u2192 get contactKey\n2. Use \"Create a box in a pipeline in Streak\" to create box \u2192 get boxKey\n3. Use \"Link_contact_to_box\" with boxKey and contactKey\n4. Confirm: \"\u2705 Added [contact name] to [pipeline name]\"\n\nFOR COMMENTS:\n1. Use \"Get_boxes_details\" to find the box \u2192 get boxKey\n2. Use \"Comment_tag\" with boxKey and message\n - URL format: https://api.streak.com/api/v2/boxes/{boxKey}/comments\n - Body: {\"message\": \"your comment here\"}\n - boxKey is a long encoded string starting with \"agxz\"\n\nFOR STAGE CHANGES:\n1. Use \"Get_boxes_details\" to find the box \u2192 get boxKey\n2. Use \"Update_box_in_Streak\" with the new stageKey\n\nFOR UPDATING CONTACT DETAILS:\n1. Use \"Get_boxes_details\" or \"Get_Custom_Operation\" to find the contact \u2192 get contactKey\n2. Counter-check details with the user before updating\n3. Use the appropriate update tool with the contactKey\n\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nIMPORTANT RULES\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n- Always search for contacts BEFORE performing any operation\n- Search_Query must be unique and specific (e.g., \"Brian\" not \"name Brian\")\n- If multiple matches found, ask user to clarify which contact\n- Always counter-check contact details before updating CRM\n- If unsure about an action, ask for confirmation first\n- Operation is complete once you confirm success or report a challenge\n- Do NOT just add names into the pipeline - make sure they are actual contacts first using \"Get_pipeline-fields\"\n\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nRESPONSE STYLE\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n- Keep responses brief and friendly\n- Confirm actions clearly: \"\u2705 Linked Riki to Sales Pipeline\" or \"Added comment to Nick's box\"\n- If operation fails, explain what went wrong simply\n- Do not over-explain API details to the user - just confirm the result"
},
"promptType": "define",
"needsFallback": true
},
"retryOnFail": true,
"typeVersion": 3,
"alwaysOutputData": true
}
],
"connections": {
"OpenAI": {
"main": [
[
{
"node": "Chat with Streak CRM",
"type": "main",
"index": 0
}
]
]
},
"OpenAI1": {
"main": [
[
{
"node": "Map image prompt",
"type": "main",
"index": 0
}
]
]
},
"Streak_Doc": {
"ai_tool": [
[
{
"node": "Chat with Streak CRM",
"type": "ai_tool",
"index": 0
}
]
]
},
"Comment tag": {
"ai_tool": [
[
{
"node": "Chat with Streak CRM",
"type": "ai_tool",
"index": 0
}
]
]
},
"Simple Memory": {
"ai_memory": [
[
{
"node": "Chat with Streak CRM",
"type": "ai_memory",
"index": 0
}
]
]
},
"Download Image": {
"main": [
[
{
"node": "OpenAI1",
"type": "main",
"index": 0
}
]
]
},
"Map text prompt": {
"main": [
[
{
"node": "Chat with Streak CRM",
"type": "main",
"index": 0
}
]
]
},
"Create a contact": {
"ai_tool": [
[
{
"node": "Chat with Streak CRM",
"type": "ai_tool",
"index": 0
}
]
]
},
"Map image prompt": {
"main": [
[
{
"node": "Chat with Streak CRM",
"type": "main",
"index": 0
}
]
]
},
"Update a contact": {
"ai_tool": [
[
{
"node": "Chat with Streak CRM",
"type": "ai_tool",
"index": 0
}
]
]
},
"WhatsApp Trigger": {
"main": [
[
{
"node": "Route input Types",
"type": "main",
"index": 0
}
]
]
},
"Get_boxes_details": {
"ai_tool": [
[
{
"node": "Chat with Streak CRM",
"type": "ai_tool",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Chat with Streak CRM",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Route input Types": {
"main": [
[
{
"node": "Map text prompt",
"type": "main",
"index": 0
}
],
[
{
"node": "Gets WhatsApp Voicemail Source URL",
"type": "main",
"index": 0
}
],
[
{
"node": "Gets WhatsApp Image Source URL",
"type": "main",
"index": 0
}
]
]
},
"Download Voicemail": {
"main": [
[
{
"node": "OpenAI",
"type": "main",
"index": 0
}
]
]
},
"Get_user_in_Streak": {
"ai_tool": [
[
{
"node": "Chat with Streak CRM",
"type": "ai_tool",
"index": 0
}
]
]
},
"Get_pipeline-fileds": {
"ai_tool": [
[
{
"node": "Chat with Streak CRM",
"type": "ai_tool",
"index": 0
}
]
]
},
"Link_contact_to_box": {
"ai_tool": [
[
{
"node": "Chat with Streak CRM",
"type": "ai_tool",
"index": 0
}
]
]
},
"Chat with Streak CRM": {
"main": [
[
{
"node": "Send message",
"type": "main",
"index": 0
}
]
]
},
"Get a task in Streak": {
"ai_tool": [
[
{
"node": "Chat with Streak CRM",
"type": "ai_tool",
"index": 0
}
]
]
},
"Get_Custom_Operation": {
"ai_tool": [
[
{
"node": "Chat with Streak CRM",
"type": "ai_tool",
"index": 0
}
]
]
},
"Update_box_in_Streak": {
"ai_tool": [
[
{
"node": "Chat with Streak CRM",
"type": "ai_tool",
"index": 0
}
]
]
},
"POST_Custom_Operation": {
"ai_tool": [
[
{
"node": "Chat with Streak CRM",
"type": "ai_tool",
"index": 0
}
]
]
},
"Google Gemini Chat Model": {
"ai_languageModel": [
[
{
"node": "Chat with Streak CRM",
"type": "ai_languageModel",
"index": 1
}
]
]
},
"Create_task_in_box_Streak": {
"ai_tool": [
[
{
"node": "Chat with Streak CRM",
"type": "ai_tool",
"index": 0
}
]
]
},
"Gets WhatsApp Image Source URL": {
"main": [
[
{
"node": "Download Image",
"type": "main",
"index": 0
}
]
]
},
"Gets WhatsApp Voicemail Source URL": {
"main": [
[
{
"node": "Download Voicemail",
"type": "main",
"index": 0
}
]
]
},
"Create a box in a pipeline in Streak": {
"ai_tool": [
[
{
"node": "Chat with Streak CRM",
"type": "ai_tool",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
googlePalmApihttpBasicAuthopenAiApistreakApitavilyApiwhatsAppApiwhatsAppTriggerApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This AI agent manages your Streak CRM via WhatsApp. Send messages to create contacts, add boxes to pipelines, update stages, link contacts to boxes, and retrieve information, add and get tasks all through natural conversation.
Source: https://n8n.io/workflows/13218/ — 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.
Transform your salon/service business with this streamlined WhatsApp automation system featuring Claude integration, zero-setup database management, and intelligent conversation handling. Claude MCP I
This automation is designed to help you generate AI-powered music tracks, cover art, and fully rendered music videos — all triggered from a simple Telegram chat and managed via Google Sheets.
This n8n workflow is designed for Facebook Page administrators, social media managers, and community moderators who want to automate comment management on their Facebook Pages. It's perfect for busine
This n8n workflow creates an intelligent WhatsApp customer support bot that can handle text, image, audio, and document messages. The workflow automatically processes incoming messages through differe
This workflow creates a complete AI-powered restaurant ordering system through WhatsApp. It receives customer messages, processes multimedia content (text, voice, images, PDFs, location), uses GPT-4 t