我可以通过 Telegram Bot API 通过用户 ID 获取 phone 号码吗?
Can I get a phone number by user id via Telegram Bot API?
我正在使用 Telegram Bot API
向用户发送即时消息。
我已经安装了 nuget package. This package is recommend by telegram developers.
我创建了一个电报机器人,并使用代码成功访问了它。当我向机器人发送消息时,机器人会得到一些关于发件人的信息。
我需要 phone 个用户来在我们的系统中识别他们并将信息发回给他们。
我的问题是我可以通过 telegramUserId
获得用户 phone 号码吗?
我这样做是为了方便用户。如果我能得到一个用户 phone 号码,我就不必向用户索要它了。
现在我的命令是这样的:
debt 9811201243
我要
debt
不,不幸的是 Telegram Bot API
没有 return phone 号码。您应该改用 Telegram API methods 或向用户明确询问。您也无法获得用户的 "friends"。
您一定会检索到以下信息:
userid
first_name
content
(无论是什么:文字、照片等)
date
(unixtime)
chat_id
如果用户配置了它,你也会得到last_name
和username
。
使用机器人 2.0 可以查看机器人 api 文档。
https://core.telegram.org/bots/2-0-intro#locations-and-numbers
https://core.telegram.org/bots/api#keyboardbutton
使用Telegram Bot API,只有向用户请求才能得到phone号码,但用户不必写号码,他只需按一个对话中的按钮,号码将发送给您。
当用户点击 /myNumber
用户必须确认:
你会得到他的号码
这个。是控制台输出:
看看这个 Simple console application,但是你需要做一些改变来处理这个数字:
在 Handler.ch
中将以下行添加到 BotOnMessageReceived
if (message.Type == MessageType.Contact && message.Contact != null)
{
Console.WriteLine($"Phone number: {message.Contact.PhoneNumber}");
}
如果某天存储库被删除,这是需要的一段代码:
Program.cs
public static class Program
{
private static TelegramBotClient? bot;
public static async Task Main()
{
bot = new TelegramBotClient(/*TODO: BotToken hier*/);
User me = await bot.GetMeAsync();
Console.Title = me.Username ?? "My awesome bot";
using var cts = new CancellationTokenSource();
ReceiverOptions receiverOptions = new() { AllowedUpdates = { } };
bot.StartReceiving(Handlers.HandleUpdateAsync,
Handlers.HandleErrorAsync,
receiverOptions,
cts.Token);
Console.WriteLine($"Start listening for @{me.Username}");
Console.ReadLine();
cts.Cancel();
}
}
Handlers.cs
internal class Handlers
{
public static Task HandleErrorAsync(ITelegramBotClient botClient, Exception exception, CancellationToken cancellationToken)
{
var errorMessage = exception switch
{
ApiRequestException apiRequestException => $"Telegram API Error:\n[{apiRequestException.ErrorCode}]\n{apiRequestException.Message}",
_ => exception.ToString()
};
Console.WriteLine(errorMessage);
return Task.CompletedTask;
}
public static async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
{
var handler = update.Type switch
{
UpdateType.Message => BotOnMessageReceived(botClient, update.Message!),
_ => UnknownUpdateHandlerAsync(botClient, update)
};
try
{
await handler;
}
catch (Exception exception)
{
await HandleErrorAsync(botClient, exception, cancellationToken);
}
}
private static async Task BotOnMessageReceived(ITelegramBotClient botClient, Message message)
{
Console.WriteLine($"Receive message type: {message.Type}");
if (message.Type == MessageType.Contact && message.Contact != null)
{
// TODO: save the number...
Console.WriteLine($"Phone number: {message.Contact.PhoneNumber}");
}
if (message.Type != MessageType.Text)
return;
var action = message.Text!.Split(' ')[0] switch
{
"/myNumber" => RequestContactAndLocation(botClient, message),
_ => Usage(botClient, message)
};
Message sentMessage = await action;
Console.WriteLine($"The message was sent with id: {sentMessage.MessageId}");
static async Task<Message> RequestContactAndLocation(ITelegramBotClient botClient, Message message)
{
ReplyKeyboardMarkup requestReplyKeyboard = new(
new[]
{
// KeyboardButton.WithRequestLocation("Location"), // this for the location if you need it
KeyboardButton.WithRequestContact("Send my phone Number"),
});
return await botClient.SendTextMessageAsync(chatId: message.Chat.Id,
text: "Could you please send your phone number?",
replyMarkup: requestReplyKeyboard);
}
static async Task<Message> Usage(ITelegramBotClient botClient, Message message)
{
const string usage = "/myNumber - to send your phone number";
return await botClient.SendTextMessageAsync(chatId: message.Chat.Id,
text: usage,
replyMarkup: new ReplyKeyboardRemove());
}
}
private static Task UnknownUpdateHandlerAsync(ITelegramBotClient botClient, Update update)
{
Console.WriteLine($"Unknown update type: {update.Type}");
return Task.CompletedTask;
}
}
我正在使用 Telegram Bot API
向用户发送即时消息。
我已经安装了 nuget package. This package is recommend by telegram developers.
我创建了一个电报机器人,并使用代码成功访问了它。当我向机器人发送消息时,机器人会得到一些关于发件人的信息。
我需要 phone 个用户来在我们的系统中识别他们并将信息发回给他们。
我的问题是我可以通过 telegramUserId
获得用户 phone 号码吗?
我这样做是为了方便用户。如果我能得到一个用户 phone 号码,我就不必向用户索要它了。
现在我的命令是这样的:
debt 9811201243
我要
debt
不,不幸的是 Telegram Bot API
没有 return phone 号码。您应该改用 Telegram API methods 或向用户明确询问。您也无法获得用户的 "friends"。
您一定会检索到以下信息:
userid
first_name
content
(无论是什么:文字、照片等)date
(unixtime)chat_id
如果用户配置了它,你也会得到last_name
和username
。
使用机器人 2.0 可以查看机器人 api 文档。
https://core.telegram.org/bots/2-0-intro#locations-and-numbers https://core.telegram.org/bots/api#keyboardbutton
使用Telegram Bot API,只有向用户请求才能得到phone号码,但用户不必写号码,他只需按一个对话中的按钮,号码将发送给您。
当用户点击 /myNumber
用户必须确认:
你会得到他的号码
这个。是控制台输出:
看看这个 Simple console application,但是你需要做一些改变来处理这个数字:
在 Handler.ch
中将以下行添加到 BotOnMessageReceived
if (message.Type == MessageType.Contact && message.Contact != null)
{
Console.WriteLine($"Phone number: {message.Contact.PhoneNumber}");
}
如果某天存储库被删除,这是需要的一段代码:
Program.cs
public static class Program
{
private static TelegramBotClient? bot;
public static async Task Main()
{
bot = new TelegramBotClient(/*TODO: BotToken hier*/);
User me = await bot.GetMeAsync();
Console.Title = me.Username ?? "My awesome bot";
using var cts = new CancellationTokenSource();
ReceiverOptions receiverOptions = new() { AllowedUpdates = { } };
bot.StartReceiving(Handlers.HandleUpdateAsync,
Handlers.HandleErrorAsync,
receiverOptions,
cts.Token);
Console.WriteLine($"Start listening for @{me.Username}");
Console.ReadLine();
cts.Cancel();
}
}
Handlers.cs
internal class Handlers
{
public static Task HandleErrorAsync(ITelegramBotClient botClient, Exception exception, CancellationToken cancellationToken)
{
var errorMessage = exception switch
{
ApiRequestException apiRequestException => $"Telegram API Error:\n[{apiRequestException.ErrorCode}]\n{apiRequestException.Message}",
_ => exception.ToString()
};
Console.WriteLine(errorMessage);
return Task.CompletedTask;
}
public static async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
{
var handler = update.Type switch
{
UpdateType.Message => BotOnMessageReceived(botClient, update.Message!),
_ => UnknownUpdateHandlerAsync(botClient, update)
};
try
{
await handler;
}
catch (Exception exception)
{
await HandleErrorAsync(botClient, exception, cancellationToken);
}
}
private static async Task BotOnMessageReceived(ITelegramBotClient botClient, Message message)
{
Console.WriteLine($"Receive message type: {message.Type}");
if (message.Type == MessageType.Contact && message.Contact != null)
{
// TODO: save the number...
Console.WriteLine($"Phone number: {message.Contact.PhoneNumber}");
}
if (message.Type != MessageType.Text)
return;
var action = message.Text!.Split(' ')[0] switch
{
"/myNumber" => RequestContactAndLocation(botClient, message),
_ => Usage(botClient, message)
};
Message sentMessage = await action;
Console.WriteLine($"The message was sent with id: {sentMessage.MessageId}");
static async Task<Message> RequestContactAndLocation(ITelegramBotClient botClient, Message message)
{
ReplyKeyboardMarkup requestReplyKeyboard = new(
new[]
{
// KeyboardButton.WithRequestLocation("Location"), // this for the location if you need it
KeyboardButton.WithRequestContact("Send my phone Number"),
});
return await botClient.SendTextMessageAsync(chatId: message.Chat.Id,
text: "Could you please send your phone number?",
replyMarkup: requestReplyKeyboard);
}
static async Task<Message> Usage(ITelegramBotClient botClient, Message message)
{
const string usage = "/myNumber - to send your phone number";
return await botClient.SendTextMessageAsync(chatId: message.Chat.Id,
text: usage,
replyMarkup: new ReplyKeyboardRemove());
}
}
private static Task UnknownUpdateHandlerAsync(ITelegramBotClient botClient, Update update)
{
Console.WriteLine($"Unknown update type: {update.Type}");
return Task.CompletedTask;
}
}