如何在 C# 中使用 Telegram API 发送消息

Posted

技术标签:

【中文标题】如何在 C# 中使用 Telegram API 发送消息【英文标题】:How to use Telegram API in C# to send a message 【发布时间】:2015-07-07 14:25:03 【问题描述】:

我想在 C# 中使用 Telegram API 向一个号码发送一条简单的消息。我在 GitHub 上找到了一些库,但我无法使用它们。

谁能给个简单的代码?我可以简单地进行 HTTP 调用吗?

【问题讨论】:

如果你想让别人帮助你,你应该在你的问题上付出更多的努力。阅读How to ask a good question 指南。 当我们从 codeplex 或 codeproject 等其他网站下载和使用非常容易时,使用 github 项目的问题非常奇怪,但是 android 项目和 github 中的一些 c# 库以及所需库的关系对学生来说是非常困难的事情.以及从 github 开始使用的入门用户 您最终在项目中使用了什么? 【参考方案1】:
    安装包 Telegram.Bot 使用botfather创建机器人 使用 /token 命令获取 api 密钥(仍在botfather中) 使用此代码:
var bot = new Api("your api key here");
var t = await bot.SendTextMessage("@channelname or chat_id", "text message");

您现在可以传递频道用户名(格式为@channelusername) 在所有方法中代替 chat_id(而不是 from_chat_id 在 转发信息)。为此,机器人必须是管理员 频道。

https://core.telegram.org/bots/api

【讨论】:

我正在尝试你的代码,但它什么也没做。我创建了一个机器人,我需要做其他事情来使用它吗? 你把 Telegram Bot Api 库搞糊涂了。他想使用 Telegram API 问题的主题是关于 Telegram API 而不是 Telegram Bot API。 我收到此错误:无效的令牌格式。我的令牌如“3bd8d2839afbb0ba2cf566678b7b0bc2” @hmahdavi ,你必须得到你的令牌表格@BotFather,然后你可以在任何电报机器人库中使用它:)【参考方案2】:

这是迄今为止我发现的最简单的方法。我在这里找到了,感谢 Paolo Montalto https://medium.com/@xabaras/sending-a-message-to-a-telegram-channel-the-easy-way-eb0a0b32968

通过 BotFather 创建 Telegram 机器人并获取您的目标 ID 后 通过https://api.telegram.org/bot[YourApiToken]/getUpdates 您可以使用以下 URL https://api.telegram.org/bot[YourApiToken]/sendMessage?chat_id=[DestitationID]&text=[MESSAGE_TEXT] 向 Telegram BOT API 发出 HTTP GET 请求,向您的 ID 发送消息

可以在此处找到有关创建机器人和获取 ID 的简单方法的详细信息:https://programmingistheway.wordpress.com/2015/12/03/send-telegram-messages-from-c/

您甚至可以直接在浏览器中测试这些 url 字符串。 这是我在 C# 中用于发送消息的一种简单方法,不依赖于任何与 bot api 相关的 dll 和异步调用复杂性:

using System.Net;
...
public string TelegramSendMessage(string apilToken, string destID, string text)

   string urlString = $"https://api.telegram.org/botapilToken/sendMessage?chat_id=destID&text=text";

   WebClient webclient = new WebClient();

   return webclient.DownloadString(urlString);

【讨论】:

非常简洁的答案,无需安装包 我最近用了半年,完全没问题,简单稳定 感谢您的回答。需要生成聊天 ID。使用 @ChannelName 不起作用。【参考方案3】:

使用此代码 :) https://github.com/sochix/TLSharp

 using TeleSharp.TL;
 using TLSharp;
 using TLSharp.Core;

 namespace TelegramSend
 

    public partial class Form1 : Form
    
      public Form1()
     
         InitializeComponent();
     


    TelegramClient client;

    private async void button1_Click(object sender, EventArgs e)
    
        client = new TelegramClient(<your api_id>,  <your api_key>);
        await client.ConnectAsync();
    

    string hash;

    private async void button2_Click(object sender, EventArgs e)
    
        hash = await client.SendCodeRequestAsync(textBox1.Text);
        //var code = "<code_from_telegram>"; // you can change code in debugger


    

    private async void button3_Click(object sender, EventArgs e)
    
        var user = await client.MakeAuthAsync(textBox1.Text, hash, textBox2.Text);
    

    private async void button4_Click(object sender, EventArgs e)
    

        //get available contacts
        var result = await client.GetContactsAsync();

        //find recipient in contacts
        var user = result.users.lists
            .Where(x => x.GetType() == typeof(TLUser))
            .Cast<TLUser>()
            .Where(x => x.first_name == "ZRX");
        if (user.ToList().Count != 0)
        
            foreach (var u in user)
            
                if (u.phone.Contains("3965604"))
                
                    //send message
                    await client.SendMessageAsync(new TLInputPeerUser()  user_id = u.id , textBox3.Text);
                
            
        

    
 

【讨论】:

我无法使用 Nuget 安装 TLSharp,因为模块 DotNetZip 与 Android 不兼容 TLSharp 好用,Telegram.Bot 好用 :) 直接使用Phone 号码而不是first_name 像x.Phone == "91987...."【参考方案4】:

1-首先在电报中创建一个频道(例如@mychanel)

2-创建一个电报机器人(例如@myTestBot)并获取下一步的api令牌

3-将@myTestBot 作为管理员用户添加到您的频道(@mychanel)

4-使用以下代码发送消息:

   var bot = new TelegramBotClient("api_token_bot");
        var s = await bot.SendTextMessageAsync("@mychanel", "your_message");

【讨论】:

问题的主题是关于 Telegram API 而不是 Telegram Bot API。 这对于某些用例来说是一个很好的答案,例如无需创建应用即可自动发布 @mychanel 不工作。我们需要输入聊天 ID。【参考方案5】:

这段代码对我有用:

using System.Net;

public class TelegramBot

    static readonly string token = "123456789:AAHsxzvZLfFAsfAY3f78b8t6MXw3";
    static readonly string chatId = "123456789";

    public static string SendMessage(string message)
    
        string retval = string.Empty;
        string url = $"https://api.telegram.org/bottoken/sendMessage?chat_id=chatId&text=message";

        using(var webClient = new WebClient())
        
            retval = webClient.DownloadString(url);
        

        return retval;
    

【讨论】:

在将消息放入 url 变量之前对其进行编码是个好主意,但代码对我来说效果很好。【参考方案6】:

现在有WTelegramClient,使用最新的 Telegram Client API 协议(以用户身份连接,而不是机器人)。

该库非常完整,但也非常易于使用。关注README on GitHub简单介绍。

向某人发送消息可以很简单:

using TL;

using var client = new WTelegram.Client(); // or Client(Environment.GetEnvironmentVariable)
await client.LoginUserIfNeeded();
var result = await client.Contacts_ResolveUsername("USERNAME");
await client.SendMessageAsync(result.User, "Hello");

//or by phone number:
//var result = await client.Contacts_ImportContacts(new[]  new InputPhoneContact  phone = "+PHONENUMBER"  );
//client.SendMessageAsync(result.users[result.imported[0].user_id], "Hello");

【讨论】:

【参考方案7】:

我编写了一个用于访问 Telegram 机器人 API 的客户端库,其源代码可在 Github 中找到。您可以浏览到 Telebot.cs 文件以查看如何向机器人 API 发送消息的示例。

Github 网址:github.com/mrtaikandi/Telebot

Nuget 网址:nuget.org/packages/Telebot

【讨论】:

如果我没记错的话,我见过一个叫 ArzoBot 的机器人。似乎工作得很好! 这个 API 似乎没有接收到内联查询?我使用了“如何使用它?”部分中提供的代码 问题的主题是关于 Telegram API 而不是 Telegram Bot API。【参考方案8】:

同样的莫名其妙的错误。 解决方案:将框架 dastination 提升到最低 4.6;错误消失。 也许官方支持页面在

https://telegrambots.github.io/book/1/quickstart.html

有点令人困惑的说法是:“...一个针对 4.5+ 版本的 .NET 项目”

再见

【讨论】:

【参考方案9】:

只需查看并了解如何使用您最喜欢的语言发出 POST HTTP 请求。

然后通过文档了解如何使用 Telegram Bot API:

https://core.telegram.org/bots https://core.telegram.org/bots/api

【讨论】:

问题不在于机器人,而在于电报 API 本身(用于编写客户端应用程序) 肯定不是机器人。但使用机器人是实现“向号码发送简单消息”目标的简单方法。 Telegram 机器人无法使用用户的电话号码甚至用户 ID 直接向用户发送消息。机器人只能向chat_ids(代表用户或组)发送消息。因此,用户需要在机器人向他们发送任何内容之前开始对话。 完全正确。机器人可用于从系统接收更新,甚至可以通过 webhook 控制某些东西。也许这就是用户想要的。无需创建帐户,无需乱用电报客户端api,更难管理。也许不是每个人都知道这种可能性,在我看来,最好将某人转向未知存在的事物,而不是不给出答案。 问题不在于机器人,而在于电报 API 本身

以上是关于如何在 C# 中使用 Telegram API 发送消息的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Telegram Bot API 在消息中发送嵌入图像和文本

如何与 Telegram API 交互

如何使用 Telegram API 接收图像?

如何在 C# 中处理 Telegram bot 上的多个用户?

如何使用 Telegram API 实现授权?

如何使用 Telegram Bot API 发送表情符号?