我正在使用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)
但那没用.
我怎样才能做到这一点?
我写了下面的代码,用于向我的机器人发送照片,但在我的信息流中,我有两个例外的读写,我的照片没有发送.
我想也许原因是这个错误,但我无法解决它:
stream.ReadTimeout抛出了'System.InvalidOperationException'类型的异常
using (var stream = System.IO.File.Open("a.jpg", FileMode.Open))
{
var fileToSend = new FileToSend("a.jpg", stream);
Task.Run(() => bot.SendPhotoAsync(u.Message.Chat.Id, fileToSend).ConfigureAwait(false));
}
Run Code Online (Sandbox Code Playgroud) 使用Telegram第三方授权的唯一记录方法是使用https://core.telegram.org/widgets/login提供的脚本
这个脚本(正如我所挖掘的)以非常奇怪的方式工作
iframe带有另一个附加功能script,该按钮可加载要使用的某些电报实体(例如TWidgetLogin,TSticker (?),TVideo (??),TAudio (???)和其他一些)。iframe将打开正在执行授权的新窗口。iframe再次检查授权。如果操作正确,则iframe检索所有共享的用户信息,并取决于授权结束调用的类型,data-onauth或将请求发送到data-auth-url。对于我来说,这种行为确实无法使用,因为我们也在附近使用Google,Github和Facebook OAuths,它们都提供了正常可用的API来手动打开授权窗口并重定向到指定的url。
我的意思是,例如,这就是我们的Google授权的工作方式:
https://hostname/some/path/to/auth?and_some_params=here/some/path/to/completed_authorization/some/path/to/success_authorization具有脚本的窗口重定向到window.postMessage具有授权信息的父窗口。到此为止。由于打开的窗口是由应用程序打开的,因此可以在不使用该窗口时对其进行控制和关闭(例如,当打开另一个身份验证窗口或关闭应用程序选项卡时)。
电报中的“用电报登录”按钮不合适的是:
现在,我可以使用Telegram OAuth屏幕打开一个窗口
// some code above
this.popup = window.open("https://oauth.telegram.org/auth?bot_id=<my_bot_id>&origin=http%3A%2F%2F<mydevorigin>&request_access=write, "authWindow", <some window params>)
// some code below
Run Code Online (Sandbox Code Playgroud)
但是由于授权已完成,因此我无法设置任何内容让服务器知道它应该检索用户数据并使用以下命令重定向到我的页面 window.postMessage
没有其“使用电报登录”按钮,是否有任何方法可以实现电报授权?非常感谢您的帮助。
我希望我的 Telegram 机器人根据机器人提出的最后一个问题来处理用户输入。基本上,流程是这样的:
问题是:我如何知道用户正在回答此流程中的特定机器人问题?
我想了两种方法:
发送带有强制回复选项的消息,以便用户必须回复机器人问题。这将向我发回用户正在响应的消息,以便我可以比较机器人消息字符串以查看答案是什么。
将最后一条机器人消息存储在某处,然后当消息到达时,检查最后一条机器人消息是什么,并假设用户消息是响应。
有没有更好的办法?我正在使用 Java 和telegrambots 库。
遇到问题,当我尝试将 GIF 发送到我的机器人时,但机器人无法访问图像的原始大小。似乎电报服务器将其转换为 mp4(这是个好主意,看起来不错),当我尝试下载它时 - 它总是看起来像一个最大 320 像素的缩略图。
看起来,它是一个api 错误,因为例如这里:
它描述为 600x473px,但实际下载的 mp4 大小是:
所以,试图理解 - 我在这里错了,因为我的项目需要原始 gif 大小......也许这里存在任何解决方法?
附:如果手动将 gif 转换为 mp4 并保存质量和大小,然后提交给 bot - 它工作得很棒,没有任何额外的压缩等,但在使用 bot 之前要求使用它是不可接受的。
更新 :
要重现(您需要 bot/bot_token 并且还需要能够使用 json 接收 webhook):
1)通过 Windows 10 电报客户端 (v2.1.10)将此 gif ( https://c2n.me/47Y3H37.gif ) 发送到机器人。使用“无压缩发送”。Gif 大小:600x473,3.35MB
2) Bot 接收和 Telegram 发送 webhook :
{
"update_id": 290360893,
"message": {
"message_id": 21,
"from": {
"id": 101483786,
"is_bot": false,
"first_name": "edited",
"last_name": "edited", …Run Code Online (Sandbox Code Playgroud) 我正在使用python-telegram-bot库在 Python 中编写一个机器人,该机器人将 URL 发送到该机器人是管理员的通道中。
现在,我想让机器人读取最后 5 条消息(我并不关心数字,因为我只需要阅读聊天中的消息)并将它们存储到代码中的列表中进一步阐述。
我已经让我的机器人使用:
bot = telegram.Bot(token='mytoken')
bot.sendMessage(chat_id='@mychatid', text=entry.link)
Run Code Online (Sandbox Code Playgroud)
但我在 python-telegram-bot 库中找不到一个bot.getLastMessage或某种类。bot.getMessage
如果还没有书面类可以做到这一点,我如何通过 Telegram API 来实现它,因为我在 API 实现方面还是个初学者?
谢谢。
python telegram python-telegram-bot telegram-bot telegram-api
我正在尝试创建一个电报机器人。我试图执行的代码是:
from telegram import ParseMode
Run Code Online (Sandbox Code Playgroud)
但它抛出了这个错误:
ImportError: cannot import name 'ParseMode' from 'telegram'
(C:\ProgramData\Anaconda3\lib\site-packages\telegram\__init__.py)
Run Code Online (Sandbox Code Playgroud)
您能告诉我如何修复这个错误吗?
我已经尝试解决这个问题三天了,但我在网上找到的解决方案似乎都不起作用,所以我不得不寻求帮助。
我想创建一个 Telegram“群聊”,供我所在俱乐部的成员使用。我创建了以俱乐部首字母缩写命名的聊天,例如:“ABCD”并添加了一些成员。现在我想自动向群组发送偶尔的消息以供所有成员查看。天气预报、我们图库中的随机照片等。
我使用 @BotFather 创建了一个名为“ABCDbot”的机器人,并记下了该机器人的令牌。现在我的浏览器左侧面板上有两个“ABCD”。选择一个给我“ABCD 机器人”,选择另一个给我“ABCD 123 成员”。
使用 perl 脚本和 LWP 我可以使用发送照片
#!/usr/bin/perl -w
use feature 'say';
use LWP;
my $api = LWP::UserAgent->new ();
my $chat_id = '1234567890';
my $photo = '/home/user/gallery/photo999.jpg';
my $response = $api->post(
"https://api.telegram.org/bot<ABCDbot's token>/sendPhoto",
[ 'chat_id' => $chat_id,
'caption' => 'Photo Randomly Selected by the gallery',
'photo' => $photo,
],
'Content_Type' => 'form-data',
);
if ($response->is_success) {
say "Response..... Success!";
} else {
say "Response..... Failure!";
}
Run Code Online (Sandbox Code Playgroud)
如果我给它一个合法的 chat_id 和一个要发送的合法文件,这是可行的。但麻烦的是:我找不到123人的群聊的chat_id!我现在尝试过的每种方法都被证明已过时,或者根本无法返回 ABCD 群聊所需的 …
telegram-bot ×10
telegram ×9
javascript ×2
python ×2
telegram-api ×2
bots ×1
c# ×1
java ×1
markdown ×1
node.js ×1
oauth ×1
php ×1
python-3.x ×1
reactjs ×1