我正在使用Node.js telegram-bot-api.
理念:
这是我正在使用的代码:
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工作正常(使用后隐藏按钮),但即使在这种情况下它只是隐藏按钮,因此用户可以点击图标将其带回屏幕,这根本不是好事.如果我在这里做错了,请告诉我.谢谢
电报不会逃避某些降价字符,例如:
这很好用
_测试一下_
但是这个返回解析错误
*测试一下*
我做错了什么?
我想提及那些没有用户名的用户.
如果用户已设置用户名,则返回
Hi @username
Run Code Online (Sandbox Code Playgroud)
作为答案,但如果用户没有答案,我不能这样做.
我尝试使用唯一的用户ID,例如
@5642166
Run Code Online (Sandbox Code Playgroud)
但那没用.
我怎样才能做到这一点?
我已经开始使用这个模块为电报编写机器人逻辑
我可以像这样创建简单的问答逻辑:
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机器人会显示购买选项一样,在用户输入他想要购买的东西之后,机器人将显示所选产品的类型等等.
如何在用户和机器人之间创建链式对话?如何使机器人记住以前选择的命令并在时间重置它们?我需要保留在自己的数据库中才能这样做吗?
有什么方法可以在一对一聊天或机器人所属的群组中处理用户删除的消息?有编辑消息更新的方法,但没有删除消息的方法。
我正在尝试使用 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)
它发送消息但没有任何格式。有人知道为什么吗?谢谢
我尝试将付款集成到我的 telegram 机器人中。\n我使用 telegraf 库进行工作。\n因此我创建了一张发票
\n\nconst 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我在这里发送它
\n\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但它总是返回一个错误
\n\n(node:24476) UnhandledPromiseRejectionWarning: …Run Code Online (Sandbox Code Playgroud) 我开始开发一个与电报机器人相关的宠物项目。问题之一是,如何从机器人下载语音消息?
任务:需要从电报机器人下载音频文件并保存在项目文件夹中。
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
我正在尝试在电报聊天中发送消息。我希望电报设置只能通过官方 UI 完成,因为我希望它可能由最终用户完成。
这是我所做的电报设置:
XXXXXXX_bot通过获取令牌与 Botfather 创建了机器人:没问题TestChannelXXXXXXX_botTestChannelTestChannelChatTestChannelChatXXXXXXX_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)
一个简单的问题,由于机器人也用于广播消息,我缺少其设置的哪一部分?
我创建了一个电报机器人并将其添加到我的电报频道中。现在,当我的 python 程序中发生某些情况时,我想使用它向我的频道发送消息。例如,我有一个 python 程序,每 15 秒检查一次天气,当天气发生变化时,我希望我的机器人将新的天气信息发送到我的电报频道。
所以我的问题是,我该怎么做?我陷入困境,因为 python-telegram-bot 需要用户发送消息才能触发,或者需要预定订单,而我无法安排它,因为我不知道天气何时会发生变化。
telegram-bot ×10
telegram ×7
javascript ×3
node.js ×3
python ×3
bots ×1
markdown ×1
php ×1
telegraf ×1