标签: telegram-bot

用户在Telegram Bot API中单击后如何隐藏ReplyKeyboardMarkup

我正在使用Node.js telegram-bot-api.

理念:

  1. 使用一个按钮显示自定义键盘 - "分享我的电话号码".
  2. 当用户单击此按钮时,应发送联系人并从屏幕上删除按钮.

这是我正在使用的代码:

bot.sendMessage({
    text: 'Please give us your phone number',
    reply_markup: JSON.stringify({
        keyboard: [
            [{
                text: 'Share my phone number',
                request_contact: true
            }]
        ],
        resize_keyboard: true,
        one_time_keyboard: true
    })
});
Run Code Online (Sandbox Code Playgroud)

问题:

  • 当用户点击"分享我的电话号码"按钮时,它会共享他的联系人,但即使在此之后按钮也可见.
  • 当我没有使用request_contact旗帜时,one_time_keyboard工作正常(使用后隐藏按钮),但即使在这种情况下它只是隐藏按钮,因此用户可以点击图标将其带回屏幕,这根本不是好事.

如果我在这里做错了,请告诉我.谢谢

javascript node.js telegram telegram-bot

8
推荐指数
2
解决办法
1万
查看次数

电报不会逃脱某些降价字符

电报不会逃避某些降价字符,例如:

  • 这很好用

    _测试一下_

  • 但是这个返回解析错误

    *测试一下*

我做错了什么?

markdown telegram-bot

8
推荐指数
4
解决办法
6136
查看次数

如何在没有用户名的情况下提及Telegram用户?

我想提及那些没有用户名的用户.

如果用户已设置用户名,则返回

Hi @username 
Run Code Online (Sandbox Code Playgroud)

作为答案,但如果用户没有答案,我不能这样做.

我尝试使用唯一的用户ID,例如

@5642166
Run Code Online (Sandbox Code Playgroud)

但那没用.

我怎样才能做到这一点?

php telegram telegram-bot php-telegram-bot

8
推荐指数
1
解决办法
2382
查看次数

Node Telegram bot api,在用户之间进行链接对话

我已经开始使用这个模块为电报编写机器人逻辑

我可以像这样创建简单的问答逻辑:

bot.onText(/\/start/, function(msg, match){
  bot.sendMessage(msg.chat.id, "Hello this is great bot");
});
Run Code Online (Sandbox Code Playgroud)

当用户输入时,/start他将收到此消息.

我想创建像bot和用户之间的链式对话.就像用户类型/buy机器人会显示购买选项一样,在用户输入他想要购买的东西之后,机器人将显示所选产品的类型等等.

如何在用户和机器人之间创建链式对话?如何使机器人记住以前选择的命令并在时间重置它们?我需要保留在自己的数据库中才能这样做吗?

javascript node.js telegram telegram-bot

7
推荐指数
1
解决办法
1938
查看次数

处理用户在电报机器人中删除的消息

有什么方法可以在一对一聊天或机器人所属的群组中处理用户删除的消息?有编辑消息更新的方法,但没有删除消息的方法。

python-telegram-bot telegram-bot

7
推荐指数
1
解决办法
1473
查看次数

我应该如何在电报 python bot 中使用 parse_mode='HTML'?

我正在尝试使用 Telegram API 的send_photo()方法在带有机器人的频道中发送消息。它需要一个标题参数(类型String),但我无法通过parse_mode='HTML'参数格式化它...

如果我使用这样的东西:

send_photo(chat_id, photo, caption="<b>Some text</b>", parse_mode='HTML') 
Run Code Online (Sandbox Code Playgroud)

它发送消息但没有任何格式。有人知道为什么吗?谢谢

python bots telegram python-telegram-bot telegram-bot

7
推荐指数
1
解决办法
3万
查看次数

在 Telegram 机器人中创建 INVOICE 返回错误

我尝试将付款集成到我的 telegram 机器人中。\n我使用 telegraf 库进行工作。\n因此我创建了一张发票

\n\n

\r\n
\r\n
const invoice = {\r\n    provider_token: payment_tocken,\r\n    start_parameter: \'online_conslutation\',\r\n    title: \'\xd0\x9e\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd \xd0\xba\xd0\xbe\xd0\xbd\xd1\x81\xd1\x83\xd0\xbb\xd1\x8c\xd1\x82\xd0\xb0\xd1\x86\xd0\xb8\xd1\x8f \xd0\x90\xd0\xb9\xd0\xb1\xd0\xbe\xd0\xbb\xd0\xb8\xd1\x82\',\r\n    description: \'\xd0\x9f\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb5\xd0\xb4\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\x9e\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd \xd0\xba\xd0\xbe\xd0\xbd\xd1\x81\xd1\x83\xd0\xbb\xd1\x8c\xd1\x82\xd0\xb0\xd1\x86\xd0\xb8\xd0\xb8 \xd1\x81 \xd0\xb2\xd1\x80\xd0\xb0\xd1\x87\xd0\xb5\xd0\xbc. \xd0\xa1\xd1\x82\xd0\xbe\xd0\xb8\xd0\xbc\xd0\xbe\xd1\x81\xd1\x82\xd1\x8c 1000 \xd1\x80\xd1\x83\xd0\xb1\xd0\xbb\xd0\xb5\xd0\xb9. \xd0\x94\xd0\xbb\xd0\xb8\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8c\xd0\xbd\xd0\xbe\xd1\x81\xd1\x82\xd1\x8c 1\xd1\x87\xd0\xb0\xd1\x81\',\r\n    currency: \'RUB\',\r\n    photo_url: \'https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcThWVMksAXRtRQJn3oHFWyz9FMusRty4pQX5Iobe8OfMEJmRzpD&usqp=CAU\',\r\n    need_shipping_address: false,\r\n    is_flexible: true,\r\n    prices: [\r\n        { label: \'\xd0\x9e\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd \xd0\xba\xd0\xbe\xd0\xbd\xd1\x81\xd1\x83\xd0\xbb\xd1\x8c\xd1\x82\xd0\xb0\xd1\x86\xd0\xb8\xd1\x8f\', amount: 100 }\r\n    ],\r\n    payload: {}\r\n\r\n};
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n\n

我在这里发送它

\n\n

\r\n
\r\n
    const stepHandlerBuy = new Composer()\r\n    stepHandlerBuy.action(\'buy\', (ctx) => {\r\n        ctx.replyWithInvoice(invoice);\r\n        return ctx.wizard.next();\r\n    })
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n\n

但它总是返回一个错误

\n\n
(node:24476) UnhandledPromiseRejectionWarning: …
Run Code Online (Sandbox Code Playgroud)

javascript node.js telegram-bot telegraf

7
推荐指数
1
解决办法
3497
查看次数

需要在 Python 上从 Telegram 下载语音消息

我开始开发一个与电报机器人相关的宠物项目。问题之一是,如何从机器人下载语音消息?

任务:需要从电报机器人下载音频文件并保存在项目文件夹中。

GetUpdates https://api.telegram.org/bot /getUpdates:

{"duration":2,"mime_type":"audio/ogg","file_id":"<file_id>","file_unique_id":"<file_unique_id>","file_size":8858}}}]}
Run Code Online (Sandbox Code Playgroud)


我检查了pyTelegramBotAPI文档,但没有找到确切如何下载文件的解释。

我根据文档创建了代码:

@bot.message_handler(content_types=['voice'])
def voice_processing(message):
    file_info = bot.get_file(message.voice.file_id)
    file = requests.get('https://api.telegram.org/file/bot{0}/{1}'.format(cfg.TOKEN, file_info.file_path))
Run Code Online (Sandbox Code Playgroud)
print(type(file), file)
------------------------------------------------------------
Output: <class 'requests.models.Response'>, <Response [200]>
Run Code Online (Sandbox Code Playgroud)


我还发现了一个例子,作者以块的形式下载音频。我不明白到底是怎么回事,但它使用了类似的功能

def read_chunks(chunk_size, bytes):
    while True:
        chunk = bytes[:chunk_size]
        bytes = bytes[chunk_size:]

        yield chunk

        if not bytes:
            break
Run Code Online (Sandbox Code Playgroud)

python python-requests telegram python-telegram-bot telegram-bot

7
推荐指数
1
解决办法
1万
查看次数

在电报上发送消息:“禁止:机器人不是超级群聊天的成员”或“禁止:机器人不是频道聊天的成员”

我正在尝试在电报聊天中发送消息。我希望电报设置只能通过官方 UI 完成,因为我希望它可能由最终用户完成。

这是我所做的电报设置:

  • XXXXXXX_bot通过获取令牌与 Botfather 创建了机器人:没问题
  • 我创建了一个频道:
    • 点击“新频道”
    • 频道名称:TestChannel
    • 点击下一步”
    • 选择“私人频道”
    • 点击“保存”
    • 添加我的机器人XXXXXXX_bot
    • 点击“设为管理员”
    • 点击“保存”
  • 我创建聊天:
    • 打开通道TestChannel
    • 在频道菜单上,选择“管理频道”
    • 在讨论中点击“添加群组”
    • 点击“创建新组”
    • 团队名字:TestChannelChat
    • 点击“创建”
    • 点击“保存”
  • 我将机器人添加到新组中:
    • 打开群组TestChannelChat
    • 在右侧面板上,我单击“添加成员”
    • 添加我的机器人XXXXXXX_bot
    • 点击“添加”
    • 右键单击聊天中新添加的用户,然后选择“晋升为管理员”
    • 点击“保存”

以下是频道管理员的设置:

在此输入图像描述

最终,电报 UI 中的聊天/群组设置如下:

在此输入图像描述

我进行以下 http 调用:

GET https://api.telegram.org/botXXXXXXTOKENXXXXXXX/sendMessage?chat_id=@TestChannelChat&text=coucou
Run Code Online (Sandbox Code Playgroud)

这给了我以下答案:

GET https://api.telegram.org/botXXXXXXTOKENXXXXXXX/sendMessage?chat_id=@TestChannelChat&text=coucou
Run Code Online (Sandbox Code Playgroud)

我还做了以下操作(绕过实际聊天并直接在频道中发布消息):

GET https://api.telegram.org/botXXXXXXTOKENXXXXXXX/sendMessage?chat_id=@TestChannel&text=coucou
Run Code Online (Sandbox Code Playgroud)

这给了我以下答案:

{
  "ok": false,
  "error_code": 403,
  "description": "Forbidden: bot is not a member of the supergroup chat"
}
Run Code Online (Sandbox Code Playgroud)

一个简单的问题,由于机器人也用于广播消息,我缺少其设置的哪一部分?

telegram telegram-bot

7
推荐指数
1
解决办法
1万
查看次数

如何使用 python-telegram-bot 向电报频道发送消息

我创建了一个电报机器人并将其添加到我的电报频道中。现在,当我的 python 程序中发生某些情况时,我想使用它向我的频道发送消息。例如,我有一个 python 程序,每 15 秒检查一次天气,当天气发生变化时,我希望我的机器人将新的天气信息发送到我的电报频道。

所以我的问题是,我该怎么做?我陷入困境,因为 python-telegram-bot 需要用户发送消息才能触发,或者需要预定订单,而我无法安排它,因为我不知道天气何时会发生变化。

python telegram python-telegram-bot telegram-bot

7
推荐指数
1
解决办法
2万
查看次数