【问题标题】:Send text message via python to the Telegram Bot通过 python 向 Telegram Bot 发送短信
【发布时间】:2022-01-06 00:22:47
【问题描述】:

我从早上就一直在尝试,但早些时候出现了错误,所以我有了方向,但现在没有错误,甚至也没有警告..

代码的样子:

import requests

def send_msg(text):
token = "TOKEN"
chat_id = "CHATID"
url_req = "https://api.telegram.org/bot" + token + "/sendMessage" + "?chat_id=" + chat_id + "&text=" + text 
results = requests.get(url_req)
print(results.json())

send_msg("hi there 1234")

预期输出: 它应该发送一条短信

当前输出是多少: 它什么也不打印

如果有人帮忙,那就太好了,谢谢大家

编辑:2

由于未安装以下依赖项,因此无法发送文本。

$ pip install flask
$ pip install python-telegram-bot
$ pip install requests

现在有人可以帮我发送照片吗?我认为它无法通过 URL 发送图像,谢谢大家

**编辑 3 **

我从here 找到了一个图片或视频分享网址,但我的图片是本地图片,而不是来自远程服务器

【问题讨论】:

  • 尝试bot.sendPhoto(chat_id, 'URL')发送照片。

标签: python telegram python-telegram-bot


【解决方案1】:

您的代码没有任何问题。您需要做的就是适当的缩进。

这个错误主要是因为有空格或制表符错误 你的代码。由于 Python 使用过程语言,您可能会遇到 如果您没有正确放置制表符/空格,则会出现此错误。

运行以下代码。它会正常工作:

import requests

def send_msg(text):
   token = "your_token"
   chat_id = "your_chatId"
   url_req = "https://api.telegram.org/bot" + token + "/sendMessage" + "?chat_id=" + chat_id + "&text=" + text 
   results = requests.get(url_req)
   print(results.json())

send_msg("Hello there!")

使用机器人库可能更容易发送图片bot.sendPhoto(chat_id, 'URL')

注意:最好将编辑器配置为使制表符和空格可见以避免此类错误。

【讨论】:

  • 请再次查看已编辑的问题,如果可能,请提供帮助
  • your_tokenyour_chatId 替换为您正在使用的那个,它将起作用。如果您在尝试后仍然遇到问题,请告诉我。要发送照片,请尝试:bot.sendPhoto(chat_id, 'URL')
  • 我成功地能够发送短信,但不知道如何更改它以便能够发送照片,因为我正在使用 url_req 并且实际上不希望它基于 url
  • 参考这个:core.telegram.org/bots/api#sendphoto。这应该可以帮助你。
  • 我看到了官方的 sendPhoto 参数描述.. 我没有通过 python 获得基本实现
【解决方案2】:

这项工作适合我

导入电报 可以在电报上与@BotFather 交谈生成的#token my_token = ''

def send(msg, chat_id, token=my_token): """ 向 chatId 上指定的电报用户发送消息 chat_id 必须是数字! """ 机器人=电报.Bot(令牌=令牌) bot.sendMessage(chat_id=chat_id, text=msg)

【讨论】:

  • 所有代码行以 4 个空格开头以保留格式。
【解决方案3】:

这是一个使用流行的requests 库正确编码 URL 参数的示例。如果您只是想发送纯文本或 Markdown 格式的警报消息,这是一种简单的方法。

import requests


def send_message(text):
    token = config.TELEGRAM_API_KEY
    chat_id = config.TELEGRAM_CHAT_ID

    url = f"https://api.telegram.org/bot{token}/sendMessage"
    params = {
       "chat_id": chat_id,
       "text": text,
    }
    resp = requests.get(url, params=params)

    # Throw an exception if Telegram API fails
    resp.raise_for_status()

For full example and more information on how to set up a Telegram bot for a group chat, see README here.

下面同样使用 asyncio 和 aiohttp 客户端,通过捕获 HTTP 代码 429 来限制消息。如果您没有正确限制,Telegram 将踢出机器人。

import asyncio
import logging

import aiohttp

from order_book_recorder import config


logger = logging.getLogger(__name__)


def is_enabled() -> bool:
    return config.TELEGRAM_CHAT_ID and config.TELEGRAM_API_KEY


async def send_message(text, throttle_delay=3.0):
    token = config.TELEGRAM_API_KEY
    chat_id = config.TELEGRAM_CHAT_ID

    url = f"https://api.telegram.org/bot{token}/sendMessage"
    params = {
       "chat_id": chat_id,
       "text": text,
    }

    attempts = 10

    while attempts >= 0:
        async with aiohttp.ClientSession() as session:
            async with session.get(url, params=params) as resp:
                if resp.status == 200:
                    return
                elif resp.status == 429:
                    logger.warning("Throttling Telegram, attempts %d", attempts)
                    attempts -= 1
                    await asyncio.sleep(throttle_delay)
                    continue
                else:
                    logger.error("Got Telegram response: %s", resp)
                    raise RuntimeError(f"Bad HTTP response: {resp}")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 2016-05-09
    • 2021-09-14
    • 2019-08-23
    • 1970-01-01
    相关资源
    最近更新 更多