ZapGPT
Asistente de propósito general DeepSeek Reasoner con 7 herramientas respaldadas por workflows: búsqueda web, búsqueda de imágenes + envío, descargas de medios (yt-dlp), búsqueda de noticias GDELT + extracción de contenido, comportamientos persistentes por cliente y limpieza de memoria de conversación.
agent llm deepseek web-search images media-download news workflows portuguese tools error-handling
Qué está incluido
| Campo | Valor |
|---|---|
| Nombre | ZapGPT |
| Tipo | Agent |
| Tipo de Assistant | llm |
| Plataforma | deepseek |
| Modelo | deepseek-reasoner |
| Herramientas | 8 |
Dependencias Incluidas
El ZIP descargable incluye todas las dependencias listadas a continuación. Todas las referencias cruzadas se vinculan automáticamente durante la importación.
Workflows: Zapgpt Environment
Los 6 workflows que respaldan las herramientas de este agente. Después de insertarlos, sustituya cada placeholder <...-workflow-id> en las acciones de herramienta del agente por el _id del workflow correspondiente.
| # | Nombre |
|---|---|
| 1 | SearXNG Search |
| 2 | SearXNG Image Search |
| 3 | Image URL To Storage |
| 4 | GDELT News Search |
| 5 | GDELT News Content |
| 6 | yt-dlp Media Download To Storage |
JSON Completo
Clic para expandir
{
"description": "General-purpose DeepSeek Reasoner assistant with 7 tools backed by workflows: web search, image search + send, media downloads (yt-dlp), GDELT news search + content extraction, persistent per-client behaviors, and conversation memory clearing.",
"tags": [
"agent",
"llm",
"deepseek",
"web-search",
"images",
"media-download",
"news",
"workflows",
"portuguese",
"tools",
"error-handling"
],
"linkedExamples": [
{
"type": "workflows",
"variant": "zapgpt-environment",
"relationship": "The 6 workflows that back this agent's tools. After seeding them, replace each <...-workflow-id> placeholder in the agent's tool actions with the corresponding workflow _id."
}
],
"document": {
"name": "ZapGPT",
"assistantType": "llm",
"platformType": "deepseek",
"options": {
"log_level": "info"
},
"platform": {
"openAi": {
"model": "deepseek-reasoner",
"temperature": 1,
"maxCharsPerMessage": 1024,
"preActions": [],
"systemRoleMessages": [
{
"expr": "\"You are ZapGPT, a virtual assistant built on the AutoTalk platform (https://autotalk.io). You are chatting with \" + client.name + \". The current time is \" + now()",
"onFailure": "keep"
},
{
"expr": "present(trim(coalesce(get(client.customAttributes, \"zapgptBehaviors\", \"\"), \"\"))) ? \"Persistent behaviors defined by \" + client.name + \": \" + trim(coalesce(get(client.customAttributes, \"zapgptBehaviors\", \"\"), \"\")) + \". Follow these preferences in future responses unless they conflict with higher-priority instructions.\" : \"\"",
"onFailure": "keep"
},
{
"expr": "\"When the image_search tool returns relevant options and the user wants to receive an image, pick a URL from its results and call the send_image_url tool. Never invent image URLs.\"",
"onFailure": "keep"
}
],
"actions": [],
"toolChoiceType": "auto",
"tools": [
{
"type": "function",
"function": {
"name": "set_behaviors",
"description": "Saves persistent ZapGPT behaviors for this client in client.customAttributes.zapgptBehaviors. Use when the user asks the assistant to behave a specific way going forward. Pass an empty string to clear.",
"parameters": [
{
"name": "behaviors",
"type": "string",
"description": "Persistent behavior instruction for this client. Pass empty string to remove.",
"isRequired": true
}
],
"actions": [
{
"condition": {
"expr": "true",
"onFailure": "throw"
},
"action": {
"actionType": "actions/data/company/resource/advanced/update_with_filter",
"actions/data/company/resource/advanced/update_with_filter": {
"dynadataItemType": "clients",
"filter": {
"expr": "{\"_id\": client._id}",
"onFailure": "throw"
},
"payload": {
"expr": "{\"customAttributes.zapgptBehaviors\": present(behaviors) ? trim(behaviors) : \"\"}",
"onFailure": "throw"
},
"upsert": false
}
}
}
],
"output": {
"main": {
"expr": "present(trim(behaviors)) ? \"Behaviors saved for this client\" : \"Behaviors removed for this client\"",
"onFailure": "throw"
},
"execute_extra_completion": true
}
}
},
{
"type": "function",
"function": {
"name": "web_search",
"description": "Searches the internet and returns results.",
"parameters": [
{
"name": "query",
"type": "string",
"description": "Search query"
}
],
"actions": [
{
"condition": {
"expr": "true",
"onFailure": "throw"
},
"action": {
"actionType": "actions/data/company/automation/execute_workflow_manual",
"actions/data/company/automation/execute_workflow_manual": {
"workflowId": "<searxng-search-workflow-id>",
"args": {
"expr": "{\"query\": query}",
"onFailure": "throw"
}
}
}
},
{
"condition": {
"expr": "!(step_ok(0) && step_data(0, \"result.result.ok\", false) == true)",
"onFailure": "throw"
},
"action": {
"actionType": "actions/messaging/conversation/response/compose",
"actions/messaging/conversation/response/compose": {
"messages": [
{
"type": "text",
"payload": {
"text": {
"expr": "coalesce(step_data(0, \"result.result.error.user_message\"), get(step_error(0), \"user_message\"), \"Could not complete the search.\") + (coalesce(step_data(0, \"result.result.error.retryable\"), get(step_error(0), \"retryable\", false)) ? \" You can try again shortly.\" : \"\")",
"onFailure": "throw"
}
}
}
]
}
}
}
],
"output": {
"main": {
"expr": "toon_encode(step_data(0, \"result.result\") != null ? step_data(0, \"result.result\") : {\"ok\": false, \"error\": defaults(step_error(0), {\"code\": \"workflow_execution_failed\", \"user_message\": \"Could not complete the search.\", \"retryable\": false})})",
"onFailure": "throw"
},
"execute_extra_completion": true,
"enable_tools_in_extra_completion": true
}
}
},
{
"type": "function",
"function": {
"name": "image_search",
"description": "Searches for images on the internet and returns URLs and metadata. To send one in the conversation, use the send_image_url tool with a URL from this search.",
"parameters": [
{
"name": "query",
"type": "string",
"description": "Image search query",
"isRequired": true
},
{
"name": "language",
"type": "string",
"description": "Optional language code, e.g. pt-BR or en-US."
},
{
"name": "limit",
"type": "number",
"description": "Optional number of images to return. Default 10, max 25."
},
{
"name": "pageno",
"type": "string",
"description": "Optional results page number."
}
],
"actions": [
{
"condition": {
"expr": "true",
"onFailure": "throw"
},
"action": {
"actionType": "actions/data/company/automation/execute_workflow_manual",
"actions/data/company/automation/execute_workflow_manual": {
"workflowId": "<searxng-image-search-workflow-id>",
"args": {
"expr": "{\"query\": query, \"language\": coalesce(language, null), \"limit\": coalesce(limit, null), \"pageno\": coalesce(pageno, null)}",
"onFailure": "throw"
}
}
}
}
],
"output": {
"main": {
"expr": "toon_encode(step_data(0, \"result.result\") != null ? step_data(0, \"result.result\") : {\"ok\": false, \"error\": defaults(step_error(0), {\"code\": \"workflow_execution_failed\", \"user_message\": \"Could not search for images.\", \"retryable\": false})})",
"onFailure": "throw",
"fallback": "{}"
},
"execute_extra_completion": true,
"enable_tools_in_extra_completion": true
}
}
},
{
"type": "function",
"function": {
"name": "send_image_url",
"description": "Downloads and sends an image in the conversation from a direct URL. Preferably use a URL returned by the image_search tool.",
"parameters": [
{
"name": "url",
"type": "string",
"description": "Direct image URL to send.",
"isRequired": true
},
{
"name": "caption",
"type": "string",
"description": "Optional caption to accompany the image."
}
],
"actions": [
{
"condition": {
"expr": "true",
"onFailure": "throw"
},
"action": {
"actionType": "actions/data/company/automation/execute_workflow_manual",
"actions/data/company/automation/execute_workflow_manual": {
"workflowId": "<image-url-to-storage-workflow-id>",
"args": {
"expr": "{\"url\": url}",
"onFailure": "throw"
}
}
}
},
{
"condition": {
"expr": "step_has_content(0, \"result.result.stored_file\")",
"onFailure": "throw"
},
"action": {
"actionType": "actions/messaging/conversation/response/compose",
"actions/messaging/conversation/response/compose": {
"messages": [
{
"type": "image",
"payload": {
"use_file_expression": true,
"fileExpression": {
"expr": "step_data(0, \"result.result.stored_file\")",
"onFailure": "throw"
},
"text": {
"expr": "present(caption) ? trim(caption) : \"\"",
"onFailure": "throw"
}
}
}
]
}
}
},
{
"condition": {
"expr": "!step_has_content(0, \"result.result.stored_file\") || get(step(1), \"executionContext.status\") == \"failed\"",
"onFailure": "throw"
},
"action": {
"actionType": "actions/messaging/conversation/response/compose",
"actions/messaging/conversation/response/compose": {
"messages": [
{
"type": "text",
"payload": {
"text": {
"expr": "coalesce(step_data(0, \"result.result.error.user_message\"), get(step_error(0), \"user_message\"), \"Could not send the image from this URL.\") + (coalesce(step_data(0, \"result.result.error.retryable\"), get(step_error(0), \"retryable\", false)) ? \" You can try again shortly.\" : \"\")",
"onFailure": "throw"
}
}
}
]
}
}
}
],
"output": {
"main": {
"expr": "step_has_content(0, \"result.result.stored_file\") && get(step(1), \"executionContext.status\") != \"failed\" ? \"Image sent\" : coalesce(get(step(1), \"executionContext.safeError.userMessage\"), step_data(0, \"result.result.error.user_message\"), get(step_error(0), \"user_message\"), \"Could not send the image from this URL.\")",
"onFailure": "throw"
},
"execute_extra_completion": false
}
}
},
{
"type": "function",
"function": {
"name": "download_media",
"description": "Downloads video or extracts audio from a yt-dlp-supported URL (YouTube, Instagram, TikTok, X/Twitter, Facebook, Vimeo, Reddit, SoundCloud, etc.) and sends it as a message.",
"parameters": [
{
"name": "url",
"type": "string",
"description": "yt-dlp-supported URL.",
"isRequired": true
},
{
"name": "media_type",
"type": "string",
"description": "Media type: video or audio. Default video.",
"enableEnums": true,
"enumValues": [
"video",
"audio"
]
},
{
"name": "quality",
"type": "string",
"description": "Video quality, e.g. 720 or 1080. Ignored for audio."
},
{
"name": "audio_format",
"type": "string",
"description": "Audio format when media_type is audio. Default mp3."
}
],
"actions": [
{
"condition": {
"expr": "true",
"onFailure": "throw"
},
"action": {
"actionType": "actions/data/company/automation/execute_workflow_manual",
"actions/data/company/automation/execute_workflow_manual": {
"workflowId": "<yt-dlp-media-download-workflow-id>",
"args": {
"expr": "{\"url\": url, \"media_type\": present(media_type) ? trim(media_type) : \"video\", \"quality\": quality, \"audio_format\": audio_format}",
"onFailure": "throw"
}
}
}
},
{
"condition": {
"expr": "step_has_content(0, \"result.result.stored_file\") && step_data(0, \"result.result.media_type\", \"video\") == \"video\"",
"onFailure": "throw"
},
"action": {
"actionType": "actions/messaging/conversation/response/compose",
"actions/messaging/conversation/response/compose": {
"messages": [
{
"type": "video",
"payload": {
"use_file_expression": true,
"fileExpression": {
"expr": "step_data(0, \"result.result.stored_file\")",
"onFailure": "throw"
}
}
}
]
}
}
},
{
"condition": {
"expr": "step_has_content(0, \"result.result.stored_file\") && step_data(0, \"result.result.media_type\", \"video\") == \"audio\"",
"onFailure": "throw"
},
"action": {
"actionType": "actions/messaging/conversation/response/compose",
"actions/messaging/conversation/response/compose": {
"messages": [
{
"type": "audio",
"payload": {
"use_file_expression": true,
"fileExpression": {
"expr": "step_data(0, \"result.result.stored_file\")",
"onFailure": "throw"
}
}
}
]
}
}
},
{
"condition": {
"expr": "!step_has_content(0, \"result.result.stored_file\") || get(step(1), \"executionContext.status\") == \"failed\" || get(step(2), \"executionContext.status\") == \"failed\"",
"onFailure": "throw"
},
"action": {
"actionType": "actions/messaging/conversation/response/compose",
"actions/messaging/conversation/response/compose": {
"messages": [
{
"type": "text",
"payload": {
"text": {
"expr": "coalesce(step_data(0, \"result.result.error.user_message\"), get(step_error(0), \"user_message\"), \"Could not download the media.\") + (coalesce(step_data(0, \"result.result.error.retryable\"), get(step_error(0), \"retryable\", false)) ? \" You can try again shortly.\" : \"\")",
"onFailure": "throw"
}
}
}
]
}
}
}
],
"output": {
"main": {
"expr": "!step_has_content(0, \"result.result.stored_file\") || get(step(1), \"executionContext.status\") == \"failed\" || get(step(2), \"executionContext.status\") == \"failed\" ? coalesce(get(step(1), \"executionContext.safeError.userMessage\"), get(step(2), \"executionContext.safeError.userMessage\"), step_data(0, \"result.result.error.user_message\"), get(step_error(0), \"user_message\"), \"No media sent\") : (step_data(0, \"result.result.media_type\", \"video\") == \"audio\" ? \"Audio sent\" : \"Video sent\")",
"onFailure": "throw"
},
"execute_extra_completion": false
}
}
},
{
"type": "function",
"function": {
"name": "search_news_gdelt",
"description": "Searches GDELT news and returns articles or timeline data based on the specified mode.",
"parameters": [
{
"name": "query",
"type": "string",
"description": "Main news search query.",
"isRequired": true
},
{
"name": "mode",
"type": "string",
"description": "GDELT DOC mode: ArtList, TimelineVol, or TimelineTone.",
"enableEnums": true,
"enumValues": [
"ArtList",
"TimelineVol",
"TimelineTone"
]
},
{
"name": "timespan",
"type": "string",
"description": "Relative time window like 15min, 3h, 7d, 2w, or 1m."
},
{
"name": "maxrecords",
"type": "string",
"description": "Maximum number of results to request."
},
{
"name": "sort",
"type": "string",
"description": "Result sort order.",
"enableEnums": true,
"enumValues": [
"datedesc",
"dateasc",
"tonedesc",
"toneasc"
]
},
{
"name": "domain",
"type": "string",
"description": "Source domain, e.g. reuters.com."
},
{
"name": "sourcelang",
"type": "string",
"description": "Source language filter."
}
],
"actions": [
{
"condition": {
"expr": "true",
"onFailure": "throw"
},
"action": {
"actionType": "actions/data/company/automation/execute_workflow_manual",
"actions/data/company/automation/execute_workflow_manual": {
"workflowId": "<gdelt-news-search-workflow-id>",
"args": {
"expr": "{\"query\": query, \"mode\": coalesce(mode, null), \"timespan\": coalesce(timespan, null), \"maxrecords\": coalesce(maxrecords, null), \"sort\": coalesce(sort, null), \"domain\": coalesce(domain, null), \"sourcelang\": coalesce(sourcelang, null)}",
"onFailure": "throw"
}
}
}
},
{
"condition": {
"expr": "!(step_ok(0) && step_data(0, \"result.result.ok\", false) == true)",
"onFailure": "throw"
},
"action": {
"actionType": "actions/messaging/conversation/response/compose",
"actions/messaging/conversation/response/compose": {
"messages": [
{
"type": "text",
"payload": {
"text": {
"expr": "coalesce(step_data(0, \"result.result.error.user_message\"), get(step_error(0), \"user_message\"), \"Could not search for news.\") + (coalesce(step_data(0, \"result.result.error.retryable\"), get(step_error(0), \"retryable\", false)) ? \" You can try again shortly.\" : \"\")",
"onFailure": "throw"
}
}
}
]
}
}
}
],
"output": {
"main": {
"expr": "toon_encode(step_data(0, \"result.result\") != null ? step_data(0, \"result.result\") : {\"ok\": false, \"error\": defaults(step_error(0), {\"code\": \"workflow_execution_failed\", \"user_message\": \"Could not search for news.\", \"retryable\": false})})",
"onFailure": "throw",
"fallback": "{}"
},
"execute_extra_completion": true,
"enable_tools_in_extra_completion": true
}
}
},
{
"type": "function",
"function": {
"name": "get_news_content_gdelt",
"description": "Downloads and extracts the full content of a news article from its URL using GDELT.",
"parameters": [
{
"name": "url",
"type": "string",
"description": "News article URL to extract.",
"isRequired": true
}
],
"actions": [
{
"condition": {
"expr": "true",
"onFailure": "throw"
},
"action": {
"actionType": "actions/data/company/automation/execute_workflow_manual",
"actions/data/company/automation/execute_workflow_manual": {
"workflowId": "<gdelt-news-content-workflow-id>",
"args": {
"expr": "{\"url\": url}",
"onFailure": "throw"
}
}
}
},
{
"condition": {
"expr": "!(step_ok(0) && step_data(0, \"result.result.ok\", false) == true)",
"onFailure": "throw"
},
"action": {
"actionType": "actions/messaging/conversation/response/compose",
"actions/messaging/conversation/response/compose": {
"messages": [
{
"type": "text",
"payload": {
"text": {
"expr": "coalesce(step_data(0, \"result.result.error.user_message\"), get(step_error(0), \"user_message\"), \"Could not extract the article content.\") + (coalesce(step_data(0, \"result.result.error.retryable\"), get(step_error(0), \"retryable\", false)) ? \" You can try again shortly.\" : \"\")",
"onFailure": "throw"
}
}
}
]
}
}
}
],
"output": {
"main": {
"expr": "toon_encode(step_data(0, \"result.result\") != null ? step_data(0, \"result.result\") : {\"ok\": false, \"error\": defaults(step_error(0), {\"code\": \"workflow_execution_failed\", \"user_message\": \"Could not extract the article content.\", \"retryable\": false})})",
"onFailure": "throw",
"fallback": "{}"
},
"execute_extra_completion": true,
"enable_tools_in_extra_completion": true
}
}
},
{
"type": "function",
"function": {
"name": "clear_memory",
"description": "Clears the conversation history.",
"parameters": [],
"actions": [
{
"condition": {
"expr": "true",
"onFailure": "throw"
},
"action": {
"actionType": "actions/ai/openai/memory/conversation/clear"
}
},
{
"condition": {
"expr": "true",
"onFailure": "throw"
},
"action": {
"actionType": "actions/messaging/conversation/response/compose",
"actions/messaging/conversation/response/compose": {
"messages": [
{
"type": "text",
"payload": {
"text": {
"expr": "\"My memory has been cleared\"",
"onFailure": "throw"
}
}
}
]
}
}
}
],
"output": {
"main": {
"expr": "get(step(0), \"executionContext.status\") != \"failed\" ? \"Memory cleared\" : coalesce(get(step(0), \"executionContext.safeError.userMessage\"), \"Could not clear memory.\")",
"onFailure": "throw"
},
"execute_extra_completion": false
}
}
}
]
}
}
}
}
Como Importar
- Descargue el archivo ZIP usando el botón de arriba
- Navegue a Configuración de la Empresa → Transferencia de Datos en su panel de AutoTalk
- Haga clic en Importar y seleccione el archivo ZIP descargado
- Revise el resumen de importación y confirme
- Todos los IDs de documentos se remapean automáticamente — no se necesita edición manual de IDs
Este paquete incluye tanto el agente como sus dependencias. Todas las referencias cruzadas (IDs de workflow en acciones de herramientas) se vinculan automáticamente durante la importación.