diff --git a/.env b/.env index b9399f5..9814aef 100644 --- a/.env +++ b/.env @@ -2,7 +2,7 @@ # Configuração de horário de funcionamento (hora local) START_HOUR=7 -END_HOUR=22 +END_HOUR=20 DAYS_OF_WEEK=1,2,3,4,5,6,7 # Intervalo em minutos para gerar e enviar insights @@ -11,16 +11,17 @@ INTERVAL_MINUTES=3 # Assuntos (20 assuntos separados por vírgula) TOPICS=Marketing,Negócios,Pensamentos de Empresários Famosos,Lei da Atração,Lei do Triunfo (Autor: Napoleon Hill),Administração de Pequenos Negócios,CRM,Vendas,Compras para Empresas,Planejamento Estratégico Empresarial,Recursos Humanos,A Arte de Fazer Amigos,Inteligência Emocional,Produtividade,Liderança,Inovação,Experiência do Cliente,Networking,Marca Pessoal,Storytelling,As 36 Estratégias dos Chineses (Autores: Wee Chow Hou & Lan Luh Luh),Como garantir três vendas extras por dia (Autor: Evaldo Costa), 100 Segredos das Pessoas de Sucesso (Autor: David Niven),Como Fazer Amigos e Influenciar Pessoas(Autor: Dale Carnegie),Economia,Investimentos,Renda Passiva,A Arte de Vender(Autor: Paul W. Ivey),Educação Financeira,Planejamento Financeiro Pessoal,Planejamento Financeiro Empresarial,Fluxo de Caixa,Controle Financeiro Empresarial -# Modelo de IA padrão (opcional, se não usar provedores abaixo) -# DEFAULT_AI_MODEL=gpt-4o-mini +# Modelo de IA padrão +DEFAULT_AI_MODEL=inclusionai/ling-3.0-flash # OPENAI_API_KEY=sua_api_key_openai_aqui # Provedor OpenRouter OPENROUTER_API_KEY=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 -OPENROUTER_MODEL=poolside/laguna-xs-2.1:free +#OPENROUTER_MODEL=poolside/laguna-xs-2.1:free +OPENROUTER_MODEL=inclusionai/ling-3.0-flash # Provedor StepFun -STEPFUN_BASE_URL=https://api.stepfun.ai/step_plan/v1/ +STEPFUN_BASE_URL=https://api.stepfun.ai/v1 STEPFUN_API_KEY=4RJZ4kHTbMNqWNn7IgahHF1kzcTi8zzUMv7YLQqjChCH5DftV2bSbGif1HllC44nv STEPFUN_MODEL=step-3.7-flash @@ -30,8 +31,8 @@ LLAMACPP_API_KEY=not-needed LLAMACPP_MODEL=qwen2.5-coder-3b-instruct-q4_k_m.gguf # Configuração do Telegram -TELEGRAM_BOT_TOKEN=8638829617:AAEXTF0a7g66XRPcUb9gvw8t2StUPstX6VI -TELEGRAM_CHAT_ID=-1004366529212 +TELEGRAM_BOT_TOKEN=8903949501:AAGXMQOS1q3z4_w1tUhBZZbYCZ8F0fkbi7E +TELEGRAM_CHAT_ID=-1004317546152 # Idioma LANGUAGE=pt-BR diff --git a/README.md b/README.md index d8bcbf9..8349aee 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Sistema automatizado de envio de insights via Telegram, utilizando inteligência ## Funcionalidades - Gera insights profundos em português brasileiro sobre temas pré-definidos. -- Envia automaticamente os insights para um chat do Telegram. +- Envia automaticamente os insights para um **canal do Telegram**. - Opera em horários configuráveis (padrão: 07:00 às 22:00). - Funciona de segunda a domingo (dias configuráveis). - Intervalo entre envios configurável. @@ -48,7 +48,7 @@ LLAMACPP_MODEL=qwen2.5-coder-3b-instruct-q4_k_m.gguf 2. **Crie um bot no Telegram** via @BotFather e obtenha o token. -3. **Obtenha seu chat ID** enviando uma mensagem para o bot e consultando a API do Telegram ou usando um bot como @myidbot. +3. **Obtenha o identificador do canal** após adicionar o bot como administrador no canal. Use o username do canal no formato `@nome_do_canal` ou o ID numérico `-100xxxxxxxxxx`. Para descobrir o ID, consulte a seção "Descobrindo o chat ID do canal" abaixo. ## Instalação @@ -86,7 +86,7 @@ Para rodar como serviço em background no Linux, utilize `systemd` ou `screen`/` | `LLAMACPP_MODEL` | Modelo LlamaCPP | qwen2.5-coder-3b-instruct-q4_k_m.gguf | | `DEFAULT_AI_MODEL` | Modelo usado quando houver apenas OpenAI | gpt-4o-mini | | `TELEGRAM_BOT_TOKEN` | Token do bot Telegram | obrigatório | -| `TELEGRAM_CHAT_ID` | ID do chat Telegram | obrigatório | +| `TELEGRAM_CHAT_ID` | Username do canal (ex: `@nome_do_canal`) ou ID numérico (ex: `-100xxxxxxxxxx`) | obrigatório | | `INTERVAL_MINUTES` | Intervalo entre envios (minutos) | 60 | | `START_HOUR` | Hora inicial de funcionamento | 7 | | `END_HOUR` | Hora final de funcionamento | 22 | @@ -110,8 +110,35 @@ ThorAgenteIA/ └── README.md # Documentação ``` +## Descobrindo o chat ID do canal + +Após adicionar o bot como administrador no canal, use um dos métodos abaixo: + +### Método 1: Usando o username + +Se o canal tiver um username público, basta usar o formato `@nome_do_canal` em `TELEGRAM_CHAT_ID`. + +### Método 2: Usando o ID numérico + +1. Envie qualquer mensagem do canal para o bot ou adicione o bot ao canal. +2. Consulte as atualizações com: + +```bash +python3 -c " +import requests, os +from dotenv import load_dotenv +load_dotenv() +token = os.getenv('TELEGRAM_BOT_TOKEN') +r = requests.get(f'https://api.telegram.org/bot{token}/getUpdates', timeout=15) +print(r.text) +" +``` + +3. Procure por `"chat":{"id":-100xxxxxxxxxx` nas mensagens relacionadas ao canal. + ## Solução de Problemas - **Erro de API Key**: Verifique se pelo menos um provedor está configurado no `.env`. -- **Mensagem não enviada**: Confira o token do bot e o chat ID. +- **Mensagem não enviada**: Confira o token do bot e o identificador do canal. - **Horário incorreto**: Verifique o fuso horário do servidor Linux. +- **Bot sem permissão no canal**: Certifique-se de que o bot é administrador do canal com permissão para postar mensagens. diff --git a/TELEGRAM_SETUP.md b/TELEGRAM_SETUP.md index 0a008e3..53390dc 100644 --- a/TELEGRAM_SETUP.md +++ b/TELEGRAM_SETUP.md @@ -1,6 +1,6 @@ -# Como criar um Bot no Telegram e configurar um Grupo +# Como criar um Bot no Telegram e configurar um Canal -Este guia explica passo a passo como criar um bot no Telegram, criar um grupo, adicionar usuários e configurar tudo para que os membros do grupo recebam as mensagens do bot. +Este guia explica passo a passo como criar um bot no Telegram, configurar um canal, adicionar administradores e configurar tudo para que o canal receba as mensagens do bot. --- @@ -32,217 +32,226 @@ Token: 1234567890:ABCdefGhIJKlmNoPQRsTUVwxyz1234567890 --- -## 2. Criar um Grupo no Telegram +## 2. Criar um Canal no Telegram -### 2.1. Criar o grupo +### 2.1. Criar o canal -1. No Telegram, clique no ícone de **menu** (três linhas) e selecione **Novo grupo**. -2. Adicione pelo menos um contato inicial para criar o grupo (você pode removê-lo depois). -3. Defina um nome para o grupo (ex: `Insights ThorAgentIA`). -4. (Opcional) Adicione uma foto e descrição. +1. No Telegram, clique no ícone de **menu** (três linhas) e selecione **Novo canal**. +2. Defina um nome para o canal (ex: `Insights ThorAgentIA`). +3. (Opcional) Adicione uma descrição e foto. +4. Clique em **Criar**. -### 2.2. Tornar o grupo público ou privado +### 2.2. Tornar o canal público ou privado -- **Grupo público**: Qualquer pessoa pode encontrar e solicitar entrada. -- **Grupo privado**: Apenas usuários convidados podem entrar. +- **Canal público**: Qualquer pessoa pode encontrar o canal pelo username. +- **Canal privado**: Apenas usuários convidados podem acessar. -Recomenda-se usar grupo **privado** para maior controle. +Recomenda-se usar canal **público** se desejar que o bot envie mensagens usando apenas o username. Para canais privados, será necessário usar o ID numérico. -### 2.3. Configurar permissões do grupo +### 2.3. Configurar permissões do canal -1. Clique no nome do grupo no topo. -2. Clique em **Grupo** (ou **Editar grupo**). -3. Ajuste as permissões: - - **Enviar mensagens**: Permitido para todos os membros. - - **Enviar fotos/vídeos**: Conforme necessidade. - - **Adicionar membros**: Apenas administradores. +1. Clique no nome do canal no topo. +2. Clique em **Gerenciar canal** (ou **Editar canal**). +3. Ajuste as permissões conforme necessidade. + +Para canais, o foco principal é garantir que o bot possa publicar mensagens. --- -## 3. Adicionar o Bot ao Grupo +## 3. Adicionar o Bot ao Canal ### 3.1. Adicionar como administrador (recomendado) -1. Abra o grupo e clique no nome do grupo no topo. +1. Abra o canal e clique no nome do canal no topo. 2. Clique em **Administradores**. 3. Clique em **Adicionar administrador**. 4. Pesquise pelo username do bot (ex: `@thoragentia_bot`). 5. Selecione o bot e confirme. +> **Nota**: Para canais públicos, o bot também pode ser adicionado sem ser administrador, mas para enviar mensagens proativamente é necessário ser administrador com permissão de postar mensagens. + ### 3.2. Conceder permissões ao bot -Para que o bot possa enviar mensagens no grupo, ele precisa ter a permissão **Enviar mensagens**. +Para que o bot possa enviar mensagens no canal, ele precisa ter a permissão **Postar mensagens** ou **Enviar mensagens**. #### Como localizar essa permissão no Telegram **Telegram Desktop / Web** -1. Abra o grupo. -2. Clique no **nome do grupo** no topo para abrir as informações. +1. Abra o canal. +2. Clique no **nome do canal** no topo para abrir as informações. 3. Clique em **Administradores**. 4. Na lista, clique no nome do seu bot. 5. Role até a seção **Permissões de administrador**. -6. Ative a opção **Enviar mensagens**. +6. Ative a opção **Postar mensagens** (ou **Enviar mensagens**). 7. Clique em **Salvar** no final da tela. **Telegram Android / iOS** -1. Abra o grupo. -2. Toque no **nome do grupo** no topo para abrir as informações. +1. Abra o canal. +2. Toque no **nome do canal** no topo para abrir as informações. 3. Toque em **Administradores**. 4. Na lista, toque no seu bot. -5. Ative a opção **Enviar mensagens**. +5. Ative a opção **Postar mensagens** (ou **Enviar mensagens**). 6. Toque no ícone de **confirmar/check** no canto superior direito para salvar. -#### Importante sobre a permissão "Enviar mensagens" +#### Importante sobre a permissão "Postar mensagens" -Essa permissão controla se o administrador pode postar mensagens no grupo. Se estiver desativada, o bot será adicionado como administrador, mas não conseguirá enviar mensagens por conta própria. +Essa permissão controla se o administrador pode publicar mensagens no canal. Se estiver desativada, o bot será adicionado como administrador, mas não conseguirá enviar mensagens por conta própria. -> **Nota**: Se o bot não for administrador, ele só poderá responder a comandos ou mensagens enviadas diretamente para ele no grupo. Para enviar mensagens proativamente, ele precisa ser administrador com essa permissão ativada. - -#### Observação adicional: permissão padrão do grupo - -Além da permissão do bot, verifique também a permissão geral do grupo para mensagens: -1. Abra o grupo e clique no nome do grupo no topo. -2. Vá em **Permissões do grupo** (ou **Tipo de grupo / Permissões**). -3. Confira se **Enviar mensagens** está definida como **Todos os membros** ou, se for **Somente administradores**, certifique-se de que o bot está na lista de administradores. - -Isso também influencia se os usuários comuns conseguem ver e interagir com as mensagens do bot. +> **Nota**: Se o bot não for administrador, ele só poderá responder a comandos ou mensagens enviadas diretamente para ele. Para enviar mensagens proativamente, ele precisa ser administrador com essa permissão ativada. --- -## 4. Adicionar Usuários ao Grupo +## 4. Obter o Identificador do Canal -### 4.1. Convidar usuários diretamente +Para configurar o bot para enviar mensagens para o canal, você precisa do **identificador do canal**, que pode ser o username no formato `@nome_do_canal` ou o ID numérico `-100xxxxxxxxxx`. -1. Abra o grupo e clique no nome do grupo no topo. -2. Clique em **Adicionar membro**. -3. Pesquise pelo usuário (username ou nome). -4. Selecione o usuário e confirme. +### 4.1. Método 1: Usar o username do canal -### 4.2. Compartilhar link de convite +Se o canal for público e tiver um username definido, basta usar o formato `@nome_do_canal` em `TELEGRAM_CHAT_ID`. -1. Abra o grupo e clique no nome do grupo no topo. -2. Clique em **Convite para o grupo** (ou **Link do grupo**). -3. Clique em **Copiar link** ou **Convidar por link**. -4. Compartilhe o link com os usuários que deseja adicionar. +### 4.2. Método 2: Usar a API do Telegram -> **Dica**: Para grupos privados, você pode definir um link de convite com data de expiração ou limite de uso. - -### 4.3. Aprovar solicitações de entrada (grupos privados) - -Se o grupo for privado, os usuários receberão uma solicitação de entrada. Os administradores devem aprovar essas solicitações. - ---- - -## 5. Obter o Chat ID do Grupo - -Para configurar o bot para enviar mensagens para o grupo, você precisa do **Chat ID** do grupo. - -### 5.1. Método 1: Usando o BotFather - -1. Acesse o BotFather. -2. Clique no bot criado (ex: `@thoragentia_bot`). -3. O BotFather irá exibir as informações do bot, incluindo o chat ID do grupo se houver. - -### 5.2. Método 2: Usando a API do Telegram - -1. Adicione o bot ao grupo (veja seção 3). -2. Envie uma mensagem qualquer no grupo (ex: `/start`). +1. Adicione o bot ao canal (veja seção 3). +2. Envie uma mensagem do canal ou adicione o bot como administrador. 3. Acesse a seguinte URL no navegador (substitua `SEU_TOKEN` pelo token do bot): ``` https://api.telegram.org/botSEU_TOKEN/getUpdates ``` -4. Procure por `"chat":{"id":-100XXXXXXXXXX` na resposta JSON. O número negativo é o Chat ID do grupo. +4. Procure por `"chat":{"id":-100XXXXXXXXXX` na resposta JSON. O número negativo é o ID do canal. -### 5.3. Método 3: Usando um bot auxiliar +> **Dica**: Você também pode executar o comando abaixo no terminal para consultar os updates do bot: -1. Adicione o bot **@myidbot** ao grupo. +```bash +python3 -c " +import requests, os +from dotenv import load_dotenv +load_dotenv() +token = os.getenv('TELEGRAM_BOT_TOKEN') +r = requests.get(f'https://api.telegram.org/bot{token}/getUpdates', timeout=15) +print(r.text) +" +``` + +### 4.3. Método 3: Usar um bot auxiliar + +1. Adicione o bot **@myidbot** ao canal. 2. Envie o comando `/myid`. -3. O bot irá responder com o Chat ID do grupo. +3. O bot irá responder com o identificador do canal. --- -## 6. Configurar o BotThorAgentIA para o Grupo +## 5. Obter o Identificador do Canal + +Para configurar o bot para enviar mensagens para o canal, você precisa do **identificador do canal**, que pode ser o username no formato `@nome_do_canal` ou o ID numérico `-100xxxxxxxxxx`. + +### 5.1. Método 1: Usando o BotFather + +1. Acesse o BotFather. +2. Clique no bot criado (ex: `@thoragentia_bot`). +3. O BotFather irá exibir as informações do bot, incluindo o identificador do canal se houver. + +### 5.2. Método 2: Usando a API do Telegram + +1. Adicione o bot ao canal (veja seção 3). +2. Envie uma mensagem qualquer no canal ou adicione o bot como administrador. +3. Acesse a seguinte URL no navegador (substitua `SEU_TOKEN` pelo token do bot): + +``` +https://api.telegram.org/botSEU_TOKEN/getUpdates +``` + +4. Procure por `"chat":{"id":-100XXXXXXXXXX` na resposta JSON. O número negativo é o ID do canal. + +### 5.3. Método 3: Usando um bot auxiliar + +1. Adicione o bot **@myidbot** ao canal. +2. Envie o comando `/myid`. +3. O bot irá responder com o identificador do canal. + +--- + +## 6. Configurar o ThorAgentIA para o Canal ### 6.1. Configurar o arquivo `.env` -Edite o arquivo `.env` do projeto ThorAgentIA com o token e chat ID obtidos: +Edite o arquivo `.env` do projeto ThorAgentIA com o token e identificador do canal obtidos: ```env TELEGRAM_BOT_TOKEN=1234567890:ABCdefGhIJKlmNoPQRsTUVwxyz1234567890 -TELEGRAM_CHAT_ID=-100XXXXXXXXXX +TELEGRAM_CHAT_ID=@nome_do_canal ``` -> **Importante**: O Chat ID do grupo geralmente começa com `-100` (ex: `-1001234567890`). +> **Importante**: Para canais públicos, use o formato `@nome_do_canal`. Para canais privados, use o ID numérico `-100xxxxxxxxxx`. ### 6.2. Testar a conexão -Execute o script principal para verificar se o bot envia mensagens corretamente para o grupo: +Execute o script principal para verificar se o bot envia mensagens corretamente para o canal: ```bash source venv/bin/activate python3 main.py ``` -Se configurado corretamente, o bot começará a enviar insights automaticamente para o grupo nos horários definidos. +Se configurado corretamente, o bot começará a enviar insights automaticamente para o canal nos horários definidos. --- -## 7. Gerenciar Usuários e Permissões +## 7. Gerenciar Membros e Permissões -### 7.1. Adicionar novos usuários +### 7.1. Adicionar novos membros -- Use o link de convite do grupo (seção 4.2). -- Ou adicione diretamente pelo menu do grupo. +- Use o link de convite do canal (se o canal for privado). +- Ou adicione diretamente pelo menu do canal. -### 7.2. Remover usuários +### 7.2. Remover membros -1. Abra o grupo e clique no nome do grupo. +1. Abra o canal e clique no nome do canal. 2. Vá em **Membros**. -3. Clique no usuário que deseja remover. +3. Clique no membro que deseja remover. 4. Selecione **Remover membro**. -### 7.3. Promover usuários a administradores +### 7.3. Promover membros a administradores -1. Abra o grupo e clique no nome do grupo. +1. Abra o canal e clique no nome do canal. 2. Vá em **Administradores**. 3. Clique em **Adicionar administrador**. -4. Pesquise e selecione o usuário. +4. Pesquise e selecione o membro. 5. Defina as permissões desejadas. --- ## 8. Solução de Problemas -### O bot não envia mensagens para o grupo +### O bot não envia mensagens para o canal -1. Verifique se o bot é administrador do grupo. -2. Verifique se a permissão **Enviar mensagens** está ativada para o bot. +1. Verifique se o bot é administrador do canal. +2. Verifique se a permissão **Postar mensagens** está ativada para o bot. 3. Confirme se o `TELEGRAM_BOT_TOKEN` e `TELEGRAM_CHAT_ID` estão corretos no `.env`. 4. Verifique os logs do script para identificar erros. ### Usuários não recebem as mensagens -1. Certifique-se de que os usuários são membros do grupo. -2. Verifique se o grupo não está no modo "Somente administradores" para enviar mensagens. -3. Para grupos grandes, verifique se o bot não foi silenciado pelos usuários. +1. Certifique-se de que os usuários são membros do canal. +2. Para canais privados, verifique se os usuários foram convidados corretamente. +3. Para canais grandes, verifique se o bot não foi silenciado pelos usuários. -### O bot não responde a comandos no grupo +### O bot não responde a comandos no canal -1. Verifique se o bot está ativo no grupo. +1. Verifique se o bot está ativo no canal. 2. Confira se o token do bot está correto. -3. Verifique se há restrições de permissão no grupo. +3. Verifique se há restrições de permissão no canal. --- ## 9. Boas Práticas - Nunca compartilhe o token do bot publicamente. -- Revise regularmente os membros do grupo para manter a segurança. +- Revise regularmente os administradores do canal para manter a segurança. - Defina horários adequados para envio de mensagens (evite horários muito cedo ou tarde). -- Para grupos grandes, considere usar um plano de distribuição mais espaçado. -- Documente as configurações do grupo em um arquivo seguro (não no `.env`). +- Para canais grandes, considere usar um plano de distribuição mais espaçado. +- Documente as configurações do canal em um arquivo seguro (não no `.env`). --- diff --git a/main.py b/main.py index 85c1c7f..56ea83a 100644 --- a/main.py +++ b/main.py @@ -78,9 +78,12 @@ def generate_insight(topic): {"role": "user", "content": prompt}, ], temperature=0.7, - max_tokens=1500, + max_tokens=4000, ) - return response.choices[0].message.content.strip() + content = response.choices[0].message.content + if not content: + return "[Erro ao gerar insight: resposta vazia da API]" + return content.strip() except Exception as e: return f"[Erro ao gerar insight: {e}]" @@ -88,9 +91,10 @@ def generate_insight(topic): def send_telegram_message(text, topic): now = datetime.now() header = ( - f"🤖 *ThorAgentIA*\n" + f"🤖 *Syspanel Insights - by ThorAgentIA*\n" + f"🤖 *https://syspanel.com.br*\n" f"🕒 {now.strftime('%d/%m/%Y %H:%M:%S')}\n" - f"🧠 Modelo: `{DEFAULT_AI_MODEL}`\n" + # f"🧠 Modelo: `{DEFAULT_AI_MODEL}`\n" f"📌 Assunto: {topic}\n\n" ) message = header + text @@ -101,10 +105,35 @@ def send_telegram_message(text, topic): "text": message, "parse_mode": "Markdown", } + try: - response = requests.post(url, json=payload, timeout=30) - response.raise_for_status() - print(f"[{now.strftime('%Y-%m-%d %H:%M:%S')}] Mensagem enviada com sucesso.") + if len(message) <= 4096: + response = requests.post(url, json=payload, timeout=30) + response.raise_for_status() + print(f"[{now.strftime('%Y-%m-%d %H:%M:%S')}] Mensagem enviada com sucesso.") + else: + chunks = [] + current = header + parts = text.split("\n\n") + for part in parts: + candidate = current + part + if len(candidate) <= 4096: + current = candidate + "\n\n" + else: + chunks.append(current.strip()) + current = header + part + "\n\n" + if current.strip(): + chunks.append(current.strip()) + + for idx, chunk in enumerate(chunks, start=1): + chunk_payload = { + "chat_id": TELEGRAM_CHAT_ID, + "text": chunk, + "parse_mode": "Markdown", + } + response = requests.post(url, json=chunk_payload, timeout=30) + response.raise_for_status() + print(f"[{now.strftime('%Y-%m-%d %H:%M:%S')}] Mensagem enviada em {len(chunks)} parte(s).") except Exception as e: print(f"[{now.strftime('%Y-%m-%d %H:%M:%S')}] Erro ao enviar mensagem: {e}")