Skip to main content

shade-plugins-telegram

Envia mensagem e documento pela Bot API do Telegram, de dentro de um robô do shade-sdk. Só a biblioteca padrão do Python: nenhuma dependência além do shade-sdk.

No shade.toml do robô, o host da API vai em [hosts] permitidos e o token do bot em [credenciais]:

[hosts]
permitidos = ["api.telegram.org"]

[credenciais]
nomes = ["TELEGRAM_BOT_TOKEN"]

[plugins]
telegram = "0.1.0"
import shade_plugins_telegram as telegram

# Escrita: só dentro de item.efetivar() (no ensaio não roda).
with item.efetivar("avisar o time"):
    telegram.enviar_mensagem(config["telegram_chat"], f"Pedido {item['pedido']} conferido.")

with item.efetivar("mandar o comprovante"):
    telegram.enviar_documento(
        config["telegram_chat"],  # o número do chat, ou @canal
        "saida/comprovante.pdf",  # um arquivo do diretório de trabalho do robô
        legenda="Segue o comprovante.",
    )

A conta

  • Token: o token que o @BotFather entrega ao criar o bot. Guarde-o como a credencial TELEGRAM_BOT_TOKEN; o plugin o lê só por segredo().
  • chat_id: o número do chat (positivo para conversa com uma pessoa, -100... para grupo e canal) ou @canal_publico. Não é segredo, mas identifica uma pessoa: guarde-o no [config] do robô e não o ponha em log. O bot só escreve a quem já falou com ele (/start) e nos grupos e canais em que foi adicionado.
  • Texto puro: a mensagem e a legenda vão sem parse_mode, então *, _ e < aparecem como são. Formatação (Markdown, HTML) não é suportada nesta versão, nem botão, foto, áudio ou resposta a outra mensagem.
  • Documento: até 50 MB, do diretório de trabalho do robô (caminho relativo). nome troca o nome que aparece no chat (sem aspas, barras nem controle: o que não serve é recusado, não escapado), legenda leva até 1024 caracteres.

O que o plugin garante

  • Nunca envia duas vezes. A Bot API não reconhece repetição: não há chave de idempotência, e um segundo pedido é uma segunda mensagem no chat. Por isso o plugin não repete depois do despacho, em nenhum erro:
    • A conexão que não chegou a abrir (recusada, nome que não resolve, rede inalcançável) é tentada de novo, dentro do timeout=, porque nada saiu.
    • A API que recusou (4xx) é TelegramNaoSaiu: nenhuma mensagem saiu. O codigo vem em erro.codigo e, no limite de envio (429), o retry_apos em segundos. O plugin não espera nem repete sozinho: a espera é decisão do robô.
    • O que sobra é TelegramIncerto: o timeout, a conexão que cai depois do envio, o 5xx e a resposta de sucesso sem o message_id. A mensagem pode estar no chat. O item fica retido para uma pessoa conferir no chat e, só se a mensagem não chegou, mandar refazer. O plugin não reenvia sozinho, e uma nova execução do robô também não.
  • O token não aparece em lugar nenhum. A Bot API o põe no caminho da URL (/bot<token>/sendMessage), então a URL é um segredo: ela só existe dentro do envio. Mensagem de erro, evento e relatório mostram o endpoint como /bot<token>/sendMessage, e o erro do urllib (que guarda a URL inteira) nunca é a causa de um erro do plugin.
  • Só dentro de item.efetivar(). Fora dele, a operação é um erro de contrato antes de qualquer byte; no ensaio, o bloco é pulado e nada é enviado.
  • Host e prazo: só api.telegram.org, com o certificado verificado, sem seguir redirecionamento; toda chamada aceita timeout= (30 s por padrão), que vale para a chamada inteira.
  • Sem dado pessoal em evento nem em erro: cada chamada emite um evento com a operação, o host, a duração e o status. Nunca o texto, o chat_id, o nome do arquivo nem o corpo da resposta; o erro da API chega só pelo código numérico e por uma explicação escrita no plugin.

Operações

Operação Efeito O que faz
enviar_mensagem(chat_id, texto, *, previa_de_link=False) sim Mensagem de texto de até 4096 caracteres.
enviar_documento(chat_id, documento, *, nome=None, legenda=None, tipo=None) sim Arquivo do diretório de trabalho como documento.

As duas devolvem {"mensagem_id": 1234}.

Testes

A suíte de contrato do shade_sdk.testing.plugins e um servidor falso da Bot API (TLS de uma CA de teste, com o token no caminho como na de verdade) acompanham o código-fonte em tests/. O servidor falso não reconhece repetição, como a API de verdade.

Metadata

Release files for shade-plugins-telegram 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for shade-plugins-telegram 0.1.0
File Interpreter ABI Platform
shade_plugins_telegram-0.1.0-py3-none-any.whl Python 3 none any Details

Release files / shade_plugins_telegram-0.1.0-py3-none-any.whl

Download URL shade_plugins_telegram-0.1.0-py3-none-any.whl
Size 17.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
760aa2e7aafd7b33ded5c3fbbce878afe4fe2d1bc796194709b7d8a978888d50
BLAKE2b-256 checksum
How to use checksums
c173511cfced7c9d1ade40c8753c879d48c64d8f5f818632775f3d50a6b691e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Security for shade-plugins-telegram 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

1 release file No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page