Azure Bot Builder从电报UserName获取telegramID

时间:2018-06-15 12:01:16

标签: c# azure botframework bots telegram

我正在创建一个电报机器人,根据电报ID(唯一编号)跟踪组中的用户。

我想使用azure bot构建器执行命令,当我键入/ ShowUserActivityByUserName @ [UserName]时,我将从用户名中获取电报ID并从数据库中提取具有此电报ID的所有数据

无论如何我可以查询电报并获取用户ID吗?

我正在使用azure bot maker的基础模板

public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
{
    var message = await argument;

    if (message.Text.StartsWith("/"))
    {
        if (message.Text.StartsWith("/ShowUserActivityByUserName "))
        {
            // do database things
            string userID = getTelegramIDFromUserName(getStringAfter(message.Text, "/ShowUserActivityByUserName "));
            await context.PostAsync("UserID: " + username);
            context.Wait(MessageReceivedAsync);
        }
    }
}

public string getTelegramIDFromUserName(string username)
{
    return username;
}

1 个答案:

答案 0 :(得分:0)

您需要使用用户名和用户ID将来自机器人用户的消息存储在表中。这比第二次调用查找ID号更容易,特别是因为电报允许多个相同的用户名。这些与每条消息一起发送,但电报也不包括用于区分同一聊天中“冲突”名称的端点。

这是一个在返回消息中回显电报userID和名字的实现。这里的关键是从消息中获取ID本身,这是使用

完成的
message.ChannelData.message.from.id

message.ChannelData.message.from.first_name

这些字段包含在从电报发送到您的机器人的所有消息中。您可以在有权访问消息的地方使用这些消息来存储用户ID或使用它进行调用。

完整方法如下所示:

public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
        {
            var message = await argument;

            if (message.ChannelId == "telegram")
            {
                await context.PostAsync($"Your userid is {message.ChannelData.message.from.id} and your name is {message.ChannelData.message.from.first_name}");
            }
            else { 
                await context.PostAsync($"You said {message.Text}"); //non-telegram stuff
            }
            context.Wait(MessageReceivedAsync);

        }

电报的if检查不一定是分离通道功能的最佳方式,但它代表了这是仅电报代码。您可以在调用机器here.

时找到有关电报API包含的内容的更多信息