<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Bots - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Bots - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 27 Jun 2026 13:59:11 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/tag/bots/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Como configurar notificações no teu bot do Telegram ]]>
                </title>
                <description>
                    <![CDATA[ > Traduzido em português europeu Escrito por: Nikita Kholin O Telegram é uma ótima plataforma com muitos utilizadores – eu próprio sou um utilizador do Telegram. Qual seria a melhor forma para os utilizadores do Telegram receberem notificações? Não podemos ter a certeza. Talvez gostem de receber por e-mail ou ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-configurar-notificacoes-no-teu-bot-do-telegram/</link>
                <guid isPermaLink="false">6527a277b73e2e03f70ce242</guid>
                
                    <category>
                        <![CDATA[ Bots ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Afonso Branco ]]>
                </dc:creator>
                <pubDate>Mon, 15 Apr 2024 05:50:27 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/03/0_mN13Q59wDCwvUWCF.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/telegram-push-notifications-58477e71b2c2/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to set up push notifications in your Telegram bot</a>
      </p><blockquote>Traduzido em português europeu</blockquote><p>Escrito por: Nikita Kholin</p><p>O Telegram é uma ótima plataforma com muitos utilizadores – eu próprio sou um utilizador do Telegram. Qual seria a melhor forma para os utilizadores do Telegram receberem notificações? Não podemos ter a certeza. Talvez gostem de receber por e-mail ou de outro forma, mas podemos supor que enviar notificações para o Telegram seria bastante conveniente.</p><p>Se gostarias de enviar notificações para o Telegram a partir da tua aplicação, vieste ao sítio certo. Adicionei esta funcionalidade à <a href="https://musicnotifier.com/" rel="noopener">minha aplicação</a> e adorei.</p><p>Uma pequena nota: neste artigo, forneci exemplos de código em Python. As ideias, contudo, não são específicas para o Python e podem ser traduzidas para outra linguagem sem qualquer problema.</p><p>Então, sem mais demoras, vamos ver como podemos fazê-lo.</p><h3 id="criar-um-bot-do-telegram"><strong>Criar um bot do Telegram</strong></h3><p>Em primeiro lugar, precisas criar um bot do Telegram. Para fazer isto, tens de utilizar outro bot do Telegram, o <a href="https://telegram.me/botfather" rel="noopener">BotFather</a>. Começa a falar com ele (clica em start).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/03/K0IHhahp6VR-IJDs8ohcZRxBBlUMaRWuUt4g.png" class="kg-image" alt="K0IHhahp6VR-IJDs8ohcZRxBBlUMaRWuUt4g" width="494" height="675" loading="lazy"></figure><p>Agora, podes ver o que ele pode fazer, mas o que nos interessa é criar um novo bot. Por isso, vamos escolher (<code>/newbot</code>).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/03/4TCF43Y1rArQcRQb-5F6XblOvTEMXUwWazrd.png" class="kg-image" alt="4TCF43Y1rArQcRQb-5F6XblOvTEMXUwWazrd" width="494" height="256" loading="lazy"></figure><p>Vamos descobrir rapidamente que o nome do bot deve terminar com "bot". E, visto que és como eu e chegaste à festa muito tarde, maior parte dos nomes de bot já estão ocupados.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/03/yRoEugA8JJ1ccppRU8g3kcy40mGsJqCalzRG.jpg" class="kg-image" alt="yRoEugA8JJ1ccppRU8g3kcy40mGsJqCalzRG" width="494" height="717" loading="lazy"></figure><p>Eventualmente, porém, vais encontrar um nome para o teu bot e receber um token de acesso de que vamos precisar.</p><p>Agora que tens um bot, os utilizadores do Telegram podem encontrá-lo e utilizá-lo, mas há um problema — não podes associar os utilizadores que vêm do Telegram aos utilizadores da tua aplicação. Permite-me mostrar-te a razão.</p><p>Assim que um utilizador clicar no botão "Start" no teu bot, vais receber uma "atualização". Podes verificar todas as atualizações do bot até mesmo no teu browser ao visitar o seguinte URL: <code>https://api.telegram.org/bot{bot_token}/getUpdates</code> (não te esqueças de utilizar o teu token de acesso no URL). Isto é o que obtive:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/03/AydGLffhxTaXFcqwj3untIxDVGf-AyGE26pc.png" class="kg-image" alt="AydGLffhxTaXFcqwj3untIxDVGf-AyGE26pc" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/03/AydGLffhxTaXFcqwj3untIxDVGf-AyGE26pc.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/03/AydGLffhxTaXFcqwj3untIxDVGf-AyGE26pc.png 800w" sizes="(min-width: 720px) 720px" width="800" height="43" loading="lazy"></figure><p>Não consegues ler nada? Não te preocupes. Podes corrigir isso ao instalar alguma extensão JSON <em>prettifier</em> no teu navegador. Eu utilizo o <a href="https://chrome.google.com/webstore/detail/json-formatter/mhimpmpmffogbmmkmajibklelopddmjf" rel="noopener">JSON Formatter</a> para o Chrome. Tem um aspeto muito melhor.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/03/iG2V6vR4rqS8Lmw-Cxg5FisuCHU9XAFEquzc.png" class="kg-image" alt="iG2V6vR4rqS8Lmw-Cxg5FisuCHU9XAFEquzc" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/03/iG2V6vR4rqS8Lmw-Cxg5FisuCHU9XAFEquzc.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/03/iG2V6vR4rqS8Lmw-Cxg5FisuCHU9XAFEquzc.png 800w" sizes="(min-width: 720px) 720px" width="800" height="1010" loading="lazy"></figure><p>Então, como podes ver, não recebemos grande informação sobre a pessoa. A partir dessa informação, podes obter o nome completo da pessoa. Seria, no entanto, uma sorte se o utilizador fornecesse o seu nome completo na tua aplicação, e não temos garantia que seja único. Por isso, não podemos utilizar isso para encontra um utilizador nas tuas aplicações.</p><p>Outra informação que obtemos é o nome de utilizador. Isto é mais útil porque é único entre todos os utilizadores do Telegram. O mais provável, porém, é que não tenhas isso disponível nas tuas aplicações. Então, teríamos de pedir ao utilizador para inserir o seu nome de utilizador algures na aplicação. É muito trabalho que não tenho a certeza se alguém o faria.</p><p>Outra opção para associar um utilizador seria pedir-lhes para fornecer o e-mail que utilizaram para o bot na tua aplicação. Ocorre que isso tem muitas falhas: o utilizador pode enganar-se ao escrever o e-mail, o utilizador pode inserir um e-mail de outro utilizador para se aproveitarem do sistema. Isso é muito mau.</p><p>Podemos fazer melhor?</p><h3 id="associar-um-utilizador"><strong>Associar um utilizador</strong></h3><p>Claro que podemos. Para associar o utilizador, vamos utilizar uma técnica chamada <a href="https://core.telegram.org/bots#deep-linking" rel="noopener">deep linking</a> (texto em inglês).</p><p>Primeiro, tens de criar um token aleatório único para cada utilizador. Utilizei o seguinte código para gerar o token, utilizando Python:</p><pre><code>from secrets import token_url
safetoken = token_urlsafe(8)
token
# =&gt; 'uEDbtJFHxKc'</code></pre><p>De seguida, precisas guardar esse token para ser possível encontrar um utilizador com o token mais tarde. Podes guardar o token na tua base de dados ou utilizar outro local, como por exemplo uma cache. Tenho um modelo <code>Notification</code>, por isso adicionei um campo a uma tabela do modelo.</p><pre><code>class Notification(models.Model):
	user = models.ForeignKey(User, on_delete=models.CASCADE)
    	# ...
    connect_token = models.CharField(max_length=64, null=True)</code></pre><p>Então, geramos o token <code>uEDbtJFHxKc</code> e guardamo-lo. Agora, vamos ter de utilizar este token num URL para o bot do Telegram, que o utilizador tem de clicar para fazer com que tudo funcione:</p><pre><code>telegram_url = 'https://www.telegram.me'
bot_name = 'music_notification_bot'
token = 'uEDbtJFHxKc'
url = f'{telegram_url}/{bot_name}?start={token}'</code></pre><p>Agora que temos o nosso URL, <code>'https://telegram.me/music_notification_bot?start=uEDbtJFHxKc'</code>, está na hora de o exibir ao utilizador. Exibe-o em qualquer sitio da tua aplicação e aguarda que o utilizador clique nele.</p><p>Assim que o utilizador morder o isco e clicar em “Start”, deves receber outra atualização:</p><pre><code>{
    "ok": true,
    "result": [
        // ...
        // atualizações anteriores
       	// ...
		{
			"update_id": 599162365,
			"message": {
                "message_id": 174,
                "from": { ... },
                "chat": { ... },
                "date": 1549788357,
                "text": "/start uEDbtJFHxKc",
                "entities": [ ... ]
        	}
        }
    ]
}</code></pre><p>Podemos, finalmente, identificar o nosso utilizador. O campo <code>text</code> contém agora o nosso token de utilizador. Vamos avançar e removê-lo deste campo:</p><pre><code>bot_token = 'your_bot_token'
updates_url = f'https://api.telegram.org/bot{bot_token}/getUpdates'

import requests
response = requests.get(updates_url).json()
text = response['result'][0]['message']['text']
text
# =&gt; '/start uEDbtJFHxKc'

splitted_text = text.split(' ')
# =&gt; ['/start', 'uEDbtJFHxKc']

token = splitted_text[-1]
# =&gt; 'uEDbtJFHxKc'</code></pre><p>Este token pode ser utilizado para encontrar o utilizador. A tua implementação depende da forma como guardaste o token inicialmente. Mas aqui fica como eu faço:</p><pre><code>notification = Notification.objects.get(channel='telegram', connect_token=token)
user = notification.user</code></pre><p>Então, o utilizador clicou no botão "Start", mas reparou que nada aconteceu. Vamos dar as boas vindas, pelo menos.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/03/t3LnDt2icX4drb1ZwOr4t0gd8rHaoNhuOxoR.jpg" class="kg-image" alt="t3LnDt2icX4drb1ZwOr4t0gd8rHaoNhuOxoR" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/03/t3LnDt2icX4drb1ZwOr4t0gd8rHaoNhuOxoR.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/03/t3LnDt2icX4drb1ZwOr4t0gd8rHaoNhuOxoR.jpg 800w" sizes="(min-width: 720px) 720px" width="800" height="534" loading="lazy"></figure><p>Para dar as boas vindas ao utilizador, precisamos de descobrir se o utilizador iniciou uma conversa com o nosso bot. Existem duas opções para como podemos fazer isso: <em>polling</em> e <em>webhooks</em>.</p><p>Já sabes o que é <em>polling</em>. Já o fizeste. Ou pelo menos já me viste a fazê-lo. Assim que consultamos a página <code>https://api.telegram.org/bot{bot_token}/getUpdates</code>, fizemos uma <em>poll</em>. <em>Polling</em> é verificar constantemente se existem atualizações, a cada 2 segundos, por exemplo. Desta forma podemos saber sempre quando alguém interagiu com o bot.</p><p>Os <em>Webhooks</em> vão numa direção um pouco diferente. Em vez de verificar a cada 2 segundos se existem atualizações, simplesmente esperamos que aconteça uma atualização. Quando acontecer, o Telegram enviará um pedido com a informação da atualização para um URL que especificamos. Deste modo, podemos dar algum descanso tanto aos nossos servidores como aos do Telegram, e simplesmente esperar que chegue alguma atualização.</p><p><em>Polling</em> pode ser melhor se tiveres um tráfego elevado mas, infelizmente, é uma exceção, por isso, decidimos utilizar o <em>webhook</em>.</p><h3 id="webhooks"><strong><em>Webhooks</em></strong></h3><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/03/nn4BJScN-LpTraRBdaaZ6--uBVl7Ikrlfj6E.jpg" class="kg-image" alt="nn4BJScN-LpTraRBdaaZ6--uBVl7Ikrlfj6E" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/03/nn4BJScN-LpTraRBdaaZ6--uBVl7Ikrlfj6E.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/03/nn4BJScN-LpTraRBdaaZ6--uBVl7Ikrlfj6E.jpg 800w" sizes="(min-width: 720px) 720px" width="800" height="571" loading="lazy"></figure><p>Configurar um <em>webhook</em> no Telegram é muito fácil. Só tens de enviar um pedido para <code>https://api.telegram.org/bot{bot_token}/setWebhook?url={your_server_url}</code>. Abrir este link no teu browser também funciona. <code>your_server_url</code> é o URL para onde o Telegram enviará as atualizações. Aqui está o que deves obter como resposta:</p><pre><code>{
    "ok": true,
    "result": true,
    "description": "Webhook was set"
}</code></pre><p>Se não confiares nas tuas capacidades, podes visitar <code>https://api.telegram.org/bot{bot_token}/getWebhookInfo</code> apenas para verificar que está tudo OK. Deves ver algo como isto:</p><pre><code>{
    "ok": true,
    "result": {
        "url": "https://example.com/your_server_endpoint",
        "has_custom_certificate": false,
        "pending_update_count": 0,
        "max_connections": 40
    }
}</code></pre><p>Agora, se algo não estiver OK (como teres colocado o URL errado), podes sempre remover o <em>webhook</em> ao visitar <a href="https://api.telegram.org/bot%7Bbot_token%7D/deleteWebhook" rel="noopener"><code>https://api.telegram.org/bot{bot_token}/deleteWebhook</code></a> e de seguida, configurar novamente o <em>webhook</em>.</p><h3 id="desenvolvimento-local"><strong>Desenvolvimento local</strong></h3><p>Antes de avançar, gostaria de partilhar algumas palavras sobre o desenvolvimento local. Os <em>webhooks</em> não são muito adequados para isto. Os <em>webhooks</em> são enviados para um URL e muito provavelmente não sabes qual é o URL do teu computador. Além disso, um <em>webhook</em> do Telegram requer que o URL seja seguro (HTTPS).</p><p>Existe, no entanto, uma solução para este problema: <em><a href="https://ngrok.com/" rel="noopener">ngrok</a></em>. <em>ngrok</em> é uma ferramenta que expõe o teu ambiente local ao mundo. <a href="https://ngrok.com/download" rel="noopener">Descarrega o </a><em><a href="https://ngrok.com/download" rel="noopener">ngrok</a></em>, faz a instalação e inicia-o com a porta em que o teu servidor está a executar. O meu servidor está a executar na porta <code>8000</code>, por isso, teria de executar o seguinte na consola</p><pre><code>/path/to/ngrok http 8000</code></pre><p>Depois, o <em>ngrok</em> deve fornecer-te um URL que podes utilizar para configurar um <em>webhook</em>.</p><h3 id="dar-as-boas-vindas-a-um-utilizador"><strong>Dar as boas vindas a um utilizador</strong></h3><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/03/g5chjEivn8kFMGCWNKvl1x5FmYxWRaXlfPgX.jpg" class="kg-image" alt="g5chjEivn8kFMGCWNKvl1x5FmYxWRaXlfPgX" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/03/g5chjEivn8kFMGCWNKvl1x5FmYxWRaXlfPgX.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/03/g5chjEivn8kFMGCWNKvl1x5FmYxWRaXlfPgX.jpg 800w" sizes="(min-width: 720px) 720px" width="800" height="533" loading="lazy"></figure><p>Agora que tens tudo pronto para o desenvolvimento, vamos dar as boas vindas ao nosso utilizador — está à espera disso.</p><p>Assim que o utilizador clicar em "Start", o teu Telegram enviará uma atualização para o URL do teu servidor. As partes interessantes da atualização devem ter este aspeto:</p><pre><code>{
    "message": {
        "chat": {
            "id": 457
        },
		"text": "/start uEDbtJFHxKc",
    }
}</code></pre><p>Esta é a altura ideal para associar o utilizador através de uma mensagem de texto. Também existe um pedaço de informação interessante, ID de Chat. O ID de Chat é o que precisamos para enviar uma mensagem a esse utilizador. O Telegram tem um <em>endpoint</em> de &nbsp;API para enviar uma mensagem, que tem este aspeto: <code>https://api.telegram.org/bot{bot_token}/sendMessage?chat_id={chat_id}&amp;text={text}</code>. Não tenho a certeza se preciso de explicar como utilizá-lo, mas aqui está como fica o meu código que processa o <em>webhook</em>:</p><pre><code>import json
import requests

def callback(request):
    body = json.loads(request.body)
    text = body['message']['text']
    token = text.split(' ')[-1]
    associate_user_by_token(token)

    bot_key = os.environ.get('TELEGRAM_API_KEY')
    chat_id = body['message']['chat']['id']
	text = "Welcome!"

	send_message_url = f'https://api.telegram.org/bot{bot_key}/sendMessage?chat_id={chat_id}&amp;text={text}'
	requests.post(send_message_url)</code></pre><p>Se enviarmos uma mensagem de boas vindas depois do utilizador ter clicado no famoso botão de "Start", o utilizador não terá dúvidas sobre o funcionamento da aplicação.</p><h3 id="enviar-notifica-es"><strong>Enviar notificações</strong></h3><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/03/xfdeU5lYWIBYfeZ9wjFxW6x1zxjVNLnMvB2P.jpg" class="kg-image" alt="xfdeU5lYWIBYfeZ9wjFxW6x1zxjVNLnMvB2P" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/03/xfdeU5lYWIBYfeZ9wjFxW6x1zxjVNLnMvB2P.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/03/xfdeU5lYWIBYfeZ9wjFxW6x1zxjVNLnMvB2P.jpg 800w" sizes="(min-width: 720px) 720px" width="800" height="599" loading="lazy"></figure><p>Por fim, chegamos à razão pela qual estamos a fazer tudo isto — enviar notificações. Podes querer notificar o utilizador sobre algo que tenha acontecido na tua aplicação. Por exemplo, alguém colocou um gosto na publicação do utilizador, ou algo do género. Eu utilizo o Telegram para enviar notificações sobre <a href="https://musicnotifier.com/" rel="noopener">novos lançamentos de músicas</a> dos artistas favoritos do utilizador.</p><p>Já sabes como enviar notificações. Apenas precisas enviar uma mensagem utilizando <code><a href="https://api.telegram.org/bot%7Bbot_token%7D/sendMessage?chat_id={chat_id}&amp;text={notification_text}." rel="noopener">https://api.telegram.org/bot{bot_token}/sendMessage?chat_id={chat_id}&amp;text={notification_text}</a></code><a href="https://api.telegram.org/bot%7Bbot_token%7D/sendMessage?chat_id={chat_id}&amp;text={notification_text}." rel="noopener">.</a></p><p>Claro, se não estiveres a planear enviar notificações só quando o utilizador interage com o bot, vais ter de guardar o <code>chat_id</code> na tua base de dados.</p><p>Também podes querer incluir links ou outro tipo de formatações na tua mensagem. Neste caso, é necessário adicionares outro parâmetro ao URL de envio da mensagem, o <code>parse_mode</code>. Existem duas opções de <em>parsing</em>: <em>Markdown</em> ou HTML. Eu utilizei <em>Markdown</em> porque acho mais simples de utilizar. Se não estiveres à vontade com <em>Markdown,</em> podes utilizar HMTL, mas recomendo que leias <a href="https://www.markdownguide.org/basic-syntax" rel="noopener">quão fácil é realmente o <em>Markdown</em></a><em> (</em>texto em inglês<em>)</em>.</p><p>Aqui está o aspeto do URL de envio da mensagem com o parâmetro <code>parse_mode</code>: <code><a href="https://api.telegram.org/bot%7Bbot_token%7D/sendMessage?chat_id={chat_id}&amp;text={notification_text}&amp;parse_mode=markdown." rel="noopener">https://api.telegram.org/bot{bot_token}/sendMessage?chat_id={chat_id}&amp;text={notification_text}&amp;parse_mode=markdown</a></code><a href="https://api.telegram.org/bot%7Bbot_token%7D/sendMessage?chat_id={chat_id}&amp;text={notification_text}&amp;parse_mode=markdown." rel="noopener">.</a></p><p>Eu adiciono links para novas atualizações ao texto das notificações desta forma: <code>{release.date}: {release.artist.name} - [{release.title}]({release.url})</code>. Podes ler mais sobre como formatar as tuas mensagens <a href="https://core.telegram.org/bots/api#formatting-options" rel="noopener">aqui</a> (Link em Inglês).</p><p>Além disso, existem <a href="https://core.telegram.org/bots/api#sendmessage" rel="noopener">mais parâmetros disponíveis</a> para o URL de envio da mensagem, como por exemplo o <code>disable_notification</code>. Existe sempre algo a ser explorado.</p><h3 id="conclus-o"><strong>Conclusão</strong></h3><p>Agora, deves saber como:</p><ul><li>Criar um bot no Telegram utilizando o BotFather</li><li>Verificar se existem atualizações (e qual é a melhor forma de o fazer — <em>webhooks</em> ou <em>polling</em>)</li><li>Associar utilizadores utilizando <em>deep linking</em></li><li>Enviar uma mensagem de boas vindas e continuar a enviar notificações</li><li>Formatar as mensagens que envias</li></ul><p>Espero que este artigo tenha sido útil para ti. Esta é a quinta parte de uma série de artigos sobre o <a href="http://musicnotifier.com/" rel="noopener">MuN</a> (link em inglês). Fica atento/a à parte 6. Podes encontrar <a href="https://github.com/hmlON/mun" rel="noopener">o código deste projeto</a>, assim como os meus outros projetos na minha <a href="https://github.com/hmlON" rel="noopener">página do GitHub</a>. Segue o autor se tiveres gostado deste artigo.</p><p><em>Publicado originalmente em<em> <a href="https://kholinlabs.com/telegram-push-notifications" rel="noopener">https://kholinlabs.com/telegram-push-notifications</a></em>,<em> </em>a 12 de Fevereiro de<em> 2019.</em></em></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Aprenda a criar seu primeiro bot no Telegram com Python ]]>
                </title>
                <description>
                    <![CDATA[ Imagine ter um bot de mensagens que enviará uma imagem aleatória com um cachorro fofo sempre que você quiser. Parece legal, certo? Vamos fazer um bot desses! Para este tutorial, vamos usar o Python 3, a biblioteca python-telegram-bot [https://github.com/python-telegram-bot/python-telegram-bot] e a API pública  RandomDog [https://random.dog/]. Ao final deste tutorial, ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/aprenda-a-criar-seu-primeiro-bot-no-telegram-com-python/</link>
                <guid isPermaLink="false">63c54c7c91baea05fef7069a</guid>
                
                    <category>
                        <![CDATA[ Bots ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Isabel Cristina Nunes de Sousa ]]>
                </dc:creator>
                <pubDate>Tue, 14 Mar 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_vUK3nWPkSEJVAFRLLJbxHA.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/learn-to-build-your-first-bot-in-telegram-with-python-4c99526765e4/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Learn to build your first bot in Telegram with Python</a>
      </p><p>Imagine ter um bot de mensagens que enviará uma imagem aleatória com um cachorro fofo sempre que você quiser. Parece legal, certo? Vamos fazer um bot desses!</p><p>Para este tutorial, vamos usar o <strong><strong>Python 3</strong></strong>, a biblioteca<strong><strong> <a href="https://github.com/python-telegram-bot/python-telegram-bot" rel="noopener">python-telegram-bot</a> </strong></strong>e a API pública <a href="https://random.dog/" rel="noopener"><strong><strong>RandomDog</strong></strong></a><strong><strong>.</strong></strong></p><p>Ao final deste tutorial, você terá um bot para aliviar o estresse e que enviará imagens fofas de cachorros sempre que você precisar. 😀</p><h3 id="come-ando"><strong>Começando</strong></h3><p>Antes de começarmos a escrever o programa, precisamos gerar um token para nosso bot. O token é necessário para acessar a API do Telegram e instalar as dependências necessárias.</p><h4 id="1-crie-um-bot-no-botfather"><strong><strong>1. Cr</strong>i<strong>e </strong>um <strong>bot </strong>no<strong> BotFather</strong></strong></h4><p>Se você quiser criar um bot no Telegram, primeiro precisa "registrar" seu bot antes de usá-lo. Ao "registrarmos" nosso bot, obteremos o token para acessar a API do Telegram.</p><p>Acesse o <a href="https://telegram.me/BotFather" rel="noopener">BotFather</a> (se for abrir na área de trabalho, certifique-se de que possui o aplicativo do Telegram). Então, crie um bot enviando o comando <code>/newbot</code>. Siga as etapas até obter o nome de usuário e o token para seu bot. Você pode acessar seu bot por meio deste URL: <code><a href="https://telegram.me/YOUR_BOT_USERNAMEa" rel="noopener">https://telegram.me/NOME_DE_USUARIO_DO_SEU_BOT</a></code> e seu token deve ter esta aparência:</p><pre><code>704418931:AAEtcZ*************</code></pre><h4 id="2-instale-a-biblioteca"><strong><strong>2. </strong>Instale a biblioteca</strong></h4><p>Como vamos usar uma biblioteca para este tutorial, instale-a usando este comando:</p><pre><code>pip3 install python-telegram-bot</code></pre><p>Se a biblioteca for instalada com sucesso, estamos prontos.</p><h3 id="escreva-o-programa"><strong>Escreva o programa</strong></h3><p>Vamos fazer nosso primeiro bot. Ele deve retornar uma imagem de cachorro quando enviarmos o comando <code>/bop</code>. Para conseguirmos fazer isso, podemos usar a API pública do <a href="https://random.dog/" rel="noopener"><strong><strong>RandomDog</strong></strong></a><strong><strong> </strong></strong>para nos ajudar a gerar imagens aleatórias de cães.</p><p>O fluxo de trabalho do nosso bot é simples assim:</p><blockquote>acesse a API -&gt; obtenha o URL da imagem -&gt; envie a imagem</blockquote><h4 id="1-importe-as-bibliotecas"><strong><strong>1. Import</strong>e as bibliotecas</strong></h4><p>Primeiro, importamos todas as bibliotecas que precisaremos.</p><pre><code class="language-py">from telegram.ext import Updater, CommandHandler
import requests
import re</code></pre><h4 id="2-acesse-a-api-e-obtenha-o-url-da-imagem"><strong><strong>2. Ac</strong>esse a<strong> API </strong>e obtenha o<strong> URL</strong> da imagem</strong></h4><p>Vamos criar uma função para obter o URL. Usando a biblioteca <code>requests</code>, podemos acessar a API e obter os dados em json.</p><pre><code>contents = requests.get('https://random.dog/woof.json').json()</code></pre><p>Você pode conferir os dados json acessando, pelo seu navegador, este URL: <code>https://random.dog/woof.json</code>. Você verá algo assim em sua tela:</p><pre><code>{“url":"https://random.dog/*****.JPG"}</code></pre><p>Obtenha o URL da imagem, pois precisamos desse parâmetro para conseguir enviar a imagem.</p><pre><code>image_url = contents['url']</code></pre><p>Envolva o código em uma função chamada <code>get_url()</code> .</p><pre><code class="language-py">def get_url():
    contents = requests.get('https://random.dog/woof.json').json()    
    url = contents['url']
    return url</code></pre><h4 id="3-envie-a-imagem"><strong><strong>3. </strong>Envie a <strong>image</strong>m</strong></h4><p>Para enviar uma mensagem/imagem, precisamos de dois parâmetros, o URL da imagem e o ID do destinatário – pode ser o ID de um grupo ou o ID de um usuário.</p><p>Podemos obter o URL da imagem chamando nossa função <code>get_url()</code>.</p><pre><code>url = get_url()</code></pre><p>Obtenha o ID do destinatário usando este código:</p><pre><code>chat_id = update.message.chat_id</code></pre><p>Após conseguirmos o URL da imagem e o ID do destinatário, é hora de enviar a mensagem, que é uma imagem.</p><pre><code>bot.send_photo(chat_id=chat_id, photo=url)</code></pre><p>Envolva o código em uma função chamada <code>bop</code> e certifique-se de que seu código se pareça com isso:</p><pre><code class="language-py">def bop(bot, update):
    url = get_url()
    chat_id = update.message.chat_id
    bot.send_photo(chat_id=chat_id, photo=url)</code></pre><h4 id="4-programa-principal-main-"><strong><strong>4. </strong>Programa principal (<code>main</code>)</strong></h4><p>Por fim, crie outra função chamada <code>main</code> para executar nosso programa. <strong>Não se esqueça de alterar</strong> <code>SEU_TOKEN</code> pelo token que geramos anteriormente neste tutorial.</p><pre><code class="language-py">def main():
    updater = Updater('SEU_TOKEN')
    dp = updater.dispatcher
    dp.add_handler(CommandHandler('bop',bop))
    updater.start_polling()
    updater.idle()
    
if __name__ == '__main__':
    main()</code></pre><p>Ao final, seu código deve ficar assim:</p><pre><code class="language-py">from telegram.ext import Updater, InlineQueryHandler, CommandHandler
import requests
import re

def get_url():
    contents = requests.get('https://random.dog/woof.json').json()    
    url = contents['url']
    return url

def bop(bot, update):
    url = get_url()
    chat_id = update.message.chat_id
    bot.send_photo(chat_id=chat_id, photo=url)

def main():
    updater = Updater('SEU_TOKEN')
    dp = updater.dispatcher
    dp.add_handler(CommandHandler('bop',bop))
    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()</code></pre><h4 id="5-execute-o-programa"><strong><strong>5. </strong>Execute o<strong> program</strong>a</strong></h4><p>Incrível! Você terminou seu primeiro programa. Agora, vamos conferir se funciona. Salve o arquivo, chame-o de <code>main.py</code> e execute-o usando este comando:</p><pre><code>python3 main.py</code></pre><p>Vá até seu bot do telegram acessando este URL: <code><a href="https://telegram.me/YOUR_BOT_USERNAMEa" rel="noopener">https://telegram.me/NOME_DE_USUARIO_DO_SEU_BOT</a></code>. </p><p>Envie o comando <code>/bop</code>. Se tudo funcionar perfeitamente, o bot responderá com uma imagem de cachorro aleatória. Fofo, não é?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/cgojJGcVwIVamFkYrpcRzrOOBJ0xFB0cTkTP.jpg" class="kg-image" alt="cgojJGcVwIVamFkYrpcRzrOOBJ0xFB0cTkTP" width="300" height="532" loading="lazy"><figcaption>Uma imagem gerada aleatoriamente</figcaption></figure><h3 id="tratamento-de-erros"><strong>Tratamento de erros</strong></h3><p>Ótimo! Agora, você tem um bot que enviará uma imagem fofa de cachorro sempre que quiser.</p><p>Tem mais! A API <a href="https://random.dog/" rel="noopener"><strong><strong>RandomDog</strong></strong></a><strong><strong> </strong></strong>não gera apenas imagens, mas também vídeos e GIFs. Se acessarmos a API e obtivermos um vídeo ou GIF, haverá um erro e o bot não enviará a mensagem para você.</p><p>Vamos corrigir isso para que o bot envie apenas uma mensagem com um anexo de imagem. Se obtivermos um vídeo ou GIF, chamaremos a API novamente até obtermos uma imagem.</p><h4 id="1-encontre-a-correspond-ncia-da-extens-o-do-arquivo-usando-express-es-regulares"><strong><strong>1. </strong>Encontre a correspondência da extensão do arquivo usando<strong> </strong>expressões regulares</strong></h4><p>Vamos usar uma expressão regular, ou <em>regex</em>, para resolver esse problema.</p><p>Para distinguir uma imagem de um vídeo ou GIF, podemos dar uma olhada na extensão do arquivo. Precisamos somente da última parte do nosso URL.</p><pre><code>https://random.dog/*****.JPG</code></pre><p>Precisamos definir, primeiro, quais extensões de arquivo são permitidas em nosso programa.</p><pre><code>allowed_extension = ['jpg','jpeg','png']</code></pre><p>Em seguida, usamos a regex para extrair a extensão do arquivo do URL.</p><pre><code>file_extension = re.search("([^.]*)$",url).group(1).lower()</code></pre><p>Usando este código, crie uma função chamada <code>get_image_url()</code> para iterar o URL até obter a extensão de arquivo que queremos (jpg, jpeg ou png):</p><pre><code class="language-py">def get_image_url():
    allowed_extension = ['jpg','jpeg','png']
    file_extension = ''
    while file_extension not in allowed_extension:
        url = get_url()
        file_extension = re.search("([^.]*)$",url).group(1).lower()
    return url</code></pre><h4 id="2-modifique-seu-c-digo"><strong><strong>2. </strong>Modifique seu código</strong></h4><p>Ótimo! Agora, para a última parte, substitua a linha <code>url = get_url()</code> na função <code>bop()</code> por <code>url = get_image_url()</code> e seu código deve ficar assim:</p><pre><code class="language-py">from telegram.ext import Updater, InlineQueryHandler, CommandHandler
import requests
import re

def get_url():
    contents = requests.get('https://random.dog/woof.json').json()    
    url = contents['url']
    return url

def get_image_url():
    allowed_extension = ['jpg','jpeg','png']
    file_extension = ''
    while file_extension not in allowed_extension:
        url = get_url()
        file_extension = re.search("([^.]*)$",url).group(1).lower()
    return url

def bop(bot, update):
    url = get_image_url()
    chat_id = update.message.chat_id
    bot.send_photo(chat_id=chat_id, photo=url)

def main():
    updater = Updater('SEU_TOKEN')
    dp = updater.dispatcher
    dp.add_handler(CommandHandler('bop',bop))
    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()</code></pre><p>Legal! Tudo deve funcionar perfeitamente. Confira também a conta do GitHub do autor para obter o código.</p><p>Parabéns por terminar este tutorial. Você agora tem um bot legal para o Telegram.</p><p>Obrigado e boa sorte praticando! 😀</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
