ارسال پیام به کانال تلگرام توسط C#.NET

به منظور آنکه پیام موردنظر را به کانال تلگرام ارسال نماییم، نیازمند ایجاد یک ربات و استفاده از API ارائه شده توسط تلگرام هستیم. در ادامه این مقاله تمام مراحل و همچنین قطعه کدهای مورد نیاز برای انجام این کار را شرح می دهیم.

1- ایجاد ربات

ابتدا از طریق BotFather@ یک بات ایجاد می نماییم. BotFather@ دستورات متعددی دارد که پس از اولین start/ خود این بات لیست دستورات را به شما نمایش می دهد. ما فقط نیازمند دو دستور از مجموعه دستورات این بات هستیم.

  • دستور /newbot که پس از اجرای آن شناسه بات را نیز باید وارد نماییم.
  • دستور /token برای بدست آوردن token بات ایجاد شده به منظور استفاده در برنامه

همچنین می توانید توسط دستور /setname نام بات خود را تغییر دهید. پس از آنکه ربات مورد نظر را ایجاد کردیم اکنون باید این ربات را به عنوان مدیر کانال به آن اضافه نماییم.

ارسال و دریافت در تلگرام به دو روش GetUpdates و Webhook انجام می شود. در GetUpdates برای اینکه متوجه شویم درخواستی به ربات ما ارسال شده است باید این کار را از طریق برنامه کنترل کنیم و وضعیت درخواست های ارسال شده را بررسی نماییم اما در روش Webhook این کار بصورت خودکار انجام می شود و پس از هرخواست به ربات این درخواست به سروری که مشخص کرده ایم ارسال می گردد. البته این سرور حتما باید دارای گواهی SSL باشد. از آنجایی که ما در این برنامه فقط نیازمند ارسال اطلاعات به کانال هستیم و هیچ دریافت اطلاعاتی نداریم از روش GetUpdates استفاده می نمایید. برای اطلاعات بیشتر می توانید بخش دریافت بروزرسانی وب سایت تلگرام را مطالعه نمایید.

2-  استفاده از ربات

در GitHub تلگرام کتابخانه ای برای تعامل با APIهای موجود در تلگرام ارائه شده است اما در اینجا قصد داریم بطور مستقیم از APIهای فراهم شده توسط تلگرام استفاده نماییم و از کتابخانه موجود استفاده نمی کنیم.

ارسال متن به کانال:

برای ارسال متن به کانال از متد زیر استفاده می نماییم.

1
2
3
4
5
6
7
8
        public static void SendTextMessageToChannel(string botToken, string channelId, string message)
        {
            var address = string.Format("https://api.telegram.org/bot{0}/sendMessage?chat_id={1}&text={2}", botToken, channelId, message);
            using (var webClient = new System.Net.WebClient())
            {
                webClient.DownloadString(address);
            }
        }

پارامترهای موردنیاز عبارتند از

  • botToken: Token روبات کانال
  • channeIId: شناسه کانال (مثل @TestChannel)
  • message: متن پیام

ارسال فایل، صوت، تصویر و ویدئو به کانال:

متد زیر برای ارسال فایل استفاده می شود.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
        public static void SendFileToChannel(string botToken, string channelId, string filePath)
        {
            var fileName = System.IO.Path.GetFileName(filePath);
            var file = System.IO.File.ReadAllBytes(filePath);

            using (var httpClient = new System.Net.Http.HttpClient())
            {
                var api = string.Format("https://api.telegram.org/bot{0}/sendDocument?chat_id={1}", botToken, channelId);
                using (var multipartFormDataContent = new System.Net.Http.MultipartFormDataContent())
                {
                    var streamContent = new System.Net.Http.StreamContent(new System.IO.MemoryStream(file));
                    streamContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
                    streamContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
                    {
                        FileName = fileName,
                        Name = "document"
                    };

                    multipartFormDataContent.Add(streamContent, "document", fileName);
                    using (var messageFile = httpClient.PostAsync(api, multipartFormDataContent))
                    {
                        messageFile.Result.Content.ReadAsStringAsync();
                    }
                }
            }
        }

پارامترهای این متد عبارتند از

  • پارامتر botToken: شناسه Token روبات کانال
  • پارامتر channelId: شناسه کانال
  • پارامتر filePath: مسیر فایل انتخاب شده

این متد یک فایل ارسال می نماید. اما در تلگرام می توان صوت، تصاویر و فایل های ویدئویی (و...) را نیز بطور مشخص که نیاز به دانلود نداشته باشند و بطور خودکار در برنامه اجرا شوند، نیز ارسال کرد. برای مثال کد زیر برای ارسال تصاویر قابل استفاده است.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
        public static void SendPhotoToChannel(string botToken, string channelId, string filePath, string caption = "")
        {
            var fileName = System.IO.Path.GetFileName(filePath);
            var file = System.IO.File.ReadAllBytes(filePath);
            var captionParemater = !string.IsNullOrEmpty(caption) ? string.Format("&caption={0}", caption) : string.Empty;

            using (var httpClient = new System.Net.Http.HttpClient())
            {
                var api = string.Format("https://api.telegram.org/bot{0}/sendPhoto?chat_id={1}{2}", botToken, channelId, captionParemater);
                using (var multipartFormDataContent = new System.Net.Http.MultipartFormDataContent())
                {
                    var streamContent = new System.Net.Http.StreamContent(new System.IO.MemoryStream(file));
                    streamContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
                    streamContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
                    {
                        FileName = fileName,
                        Name = "photo"
                    };

                    multipartFormDataContent.Add(streamContent, "photo", fileName);
                    using (var messageFile = httpClient.PostAsync(api, multipartFormDataContent))
                    {
                        messageFile.Result.Content.ReadAsStringAsync();
                    }
                }
            }
        }
همانطور که مشخص است این متد نسبت به متد ارسال فایل تفاوت های اندکی دارد. علاوه بر پارامترهای قبلی پارامتری با عنوان caption افزوده شده است و در صورتی که مقدار متنی در آن ارسال گردد تصویر مورد نظر دارای کپشن می گردد و در غیر اینصورت تصویر بدون کپشن ارسال می گردد. همچنین باید پارامتر دوم متد Add از آبجکت multipartFormDataContent را به photo تغییر دهید و آدرس API را به sendPhoto تغییر دهید. به این ترتیب تصاویر به گونه ای ارسال می شوند که بصورت درون برنامه ای نیز قابل اجرا هستند.
براحتی می توانید این متد را برای audio ،video و سایر فرمتهای موجود پیاده سازی کنید و با توجه به فرمت فایل ارسالی متد موردنظر را فراخوانی نمایید.
برای دریافت اطلاعات تکمیلی و نحوه ارسال پارامترهای دیگر به APIهای عنوان شده می توانید از وب سایت تلگرام استفاده نمایید.


آخرین بروزرسانی
۱۶ اسفند ۱۴۰۲ 
تعداد کلیک
۷,۱۶۲

فهرست نظرها و ارسال نظر جدید

نام را وارد کنید
ایمیل را وارد کنید
تعداد کاراکتر باقیمانده: 1000
نظر خود را وارد کنید