ZapGPT
Assistente de uso geral DeepSeek Reasoner com 7 ferramentas suportadas por workflows: busca na web, busca de imagens + envio, downloads de mídia (yt-dlp), busca de notícias GDELT + extração de conteúdo, comportamentos persistentes por cliente e limpeza de memória de conversa.
agent llm deepseek web-search images media-download news workflows portuguese tools error-handling
O que está incluído
| Campo | Valor |
|---|---|
| Nome | ZapGPT |
| Tipo | Agent |
| Tipo de Assistant | llm |
| Plataforma | deepseek |
| Modelo | deepseek-reasoner |
| Ferramentas | 8 |
Dependências Incluídas
O ZIP para download inclui todas as dependências listadas abaixo. Todas as referências cruzadas são vinculadas automaticamente durante a importação.
Workflows: Zapgpt Environment
Os 6 workflows que suportam as ferramentas deste agente. Após inseri-los, substitua cada placeholder <...-workflow-id> nas ações de ferramenta do agente pelo _id do workflow correspondente.
| # | Nome |
|---|---|
| 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
Clique 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
- Baixe o arquivo ZIP usando o botão acima
- Navegue até Configurações da Empresa → Transferência de Dados no seu painel AutoTalk
- Clique em Importar e selecione o arquivo ZIP baixado
- Revise o resumo da importação e confirme
- Todos os IDs de documentos são remapeados automaticamente — nenhuma edição manual de IDs é necessária
Este pacote inclui tanto o agente quanto suas dependências. Todas as referências cruzadas (IDs de workflow nas ações de ferramentas) são vinculadas automaticamente durante a importação.