PDA

View Full Version : ارسال پیام به کاربران سایت با تلگرام



hmahdavi921
پنج شنبه 15 تیر 1396, 12:10 عصر
سلام
میخوام به کاربران سایت با تلگرام پیام بفرستم.از Telegram.bot استفاده میکنم.


TelegramBotClient botClient = new TelegramBotClient("Token");
Task<Message> ddd = botClient.SendTextMessageAsync(324822242, "من روبات تلگرام هستم");

این کد باchatId دقیقا درست کار میکنه. اما با uaserNAme نه !!!!!
حالا مشکل اینجاست که شما باید chatId کاربر رو بدونین که خوب نمیدونین. حالا اگر به روشی بشه از طریق شماره موبایل کاربر chatId رو پیدا کرد مشکل حل میشه. البته این روشی هست که به ذهنم رسیده. دوستان اگر راهکار دیگری هم سراغ دارید لطفا راهنمایی کنید
با تشکر

parvizwpf
پنج شنبه 15 تیر 1396, 13:32 عصر
تا جایی که من میدونم نمیشه . مگر اینکه اول کاربران بیان و contact message برای شما بفرستند یعنی یه جورایی عضو بشن سپس شما میتونید chat id هر کاربر رو گرفته و به راحتی پیام بفرستید برای گرفتن اطلاعات contact:
SendContactAsync استفاده کنید.
در واقع تا کسی با شما توی بات درخواستی نداده باشه شما نمیتونید آی چتش رو بفهمید . یعنی شما باید به محض ورودش بهش درخواست بدید که شماره بفرسته در غیر اینصورت اون باید پیامی بفرسته تا چت آیدیش معلوم بشه

Moien Tajik
پنج شنبه 15 تیر 1396, 14:39 عصر
2 روش برای بدرست آوردن Chat ID بدون عضو شدن کاربر در بات و بدون اطلاع و درگیری اون کاربر وجود داره :
1- Import کردن شماره اون کاربر به لیست Contact هاتون که در Respond این عملیات تلگرام به شما یک Json برمیگردونه که شامل User ID اون کاربر هست .
2- استفاده از Send Contact در BOT API به این صورت که شما به یک کاربر اون شماره رو ارسال میکنید و Json Result اون شامل User ID هستش .

این لینک به تلگرام رو در نظر بگیرید :

https://api.telegram.org/bot{BOTTOKEN}/sendContact?chat_id=YOUROWNCHATID&phone_number=USERPHONENUMBER&first_name=MoienTajik


جای USERPHONENUMBER شماره شخصی که میخواید User ID اش رو بگیرید بزارید و جای YOUROWNCHATID هم Chat ID خودتون رو قرار بدید و جای BOTTOKEN هم بات توکن خودتون رو قرار بدید .
دقت کنید که از Delay استفاده کنید چون اگر پشت هم این درخواست رو به تلگرام بفرستید بلاک میشید .

hmahdavi921
شنبه 17 تیر 1396, 10:01 صبح
2 روش برای بدرست آوردن Chat ID بدون عضو شدن کاربر در بات و بدون اطلاع و درگیری اون کاربر وجود داره :
1- Import کردن شماره اون کاربر به لیست Contact هاتون که در Respond این عملیات تلگرام به شما یک Json برمیگردونه که شامل User ID اون کاربر هست .
2- استفاده از Send Contact در BOT API به این صورت که شما به یک کاربر اون شماره رو ارسال میکنید و Json Result اون شامل User ID هستش .

این لینک به تلگرام رو در نظر بگیرید :

https://api.telegram.org/bot{BOTTOKEN}/sendContact?chat_id=YOUROWNCHATID&phone_number=USERPHONENUMBER&first_name=MoienTajik


جای USERPHONENUMBER شماره شخصی که میخواید User ID اش رو بگیرید بزارید و جای YOUROWNCHATID هم Chat ID خودتون رو قرار بدید و جای BOTTOKEN هم بات توکن خودتون رو قرار بدید .
دقت کنید که از Delay استفاده کنید چون اگر پشت هم این درخواست رو به تلگرام بفرستید بلاک میشید .

مرسی Moien Tajik (http://barnamenevis.org/member.php?302441-Moien-Tajik)
من با روش اول متن ، لینک و فایل فرستادم فقط برای گرفتن chatId کاربر هر بار حتما باید اول از SendContactAsync استفاده کنم تا در نتیجه chatId رو بهم برگردونه بعد ازش استفاده کنم . چطوری میتونم لیست تمام contact ها رو بدست بیارم تا در دفعات بعد لازم نباشه کاربر رو add نکنم ؟

Moien Tajik
شنبه 17 تیر 1396, 17:36 عصر
نیازی نیست هربار این کار رو کنید ، یکبار ChatID رو بگیرید ، Response رو تبدیل به JSON کنید و ChatID رو جدا کنید و داخل دیتابیس ذخیرش کنید ، به این شکل ChatID رو داخل دیتابیس دارید و دیگه نیاز ندارید به تلگرام Request بفرستید .
روش دوم بهتر از روش اول هست ، چون روش اول Limitation زمانی بیشتری از سمت تلگرام داره و حداقل 10 ثانیه باید بین هر Request برای افزودن Contact صبر کنید و این روش محدودیت هم داره چون Contact های شما نمیتونن بیشتر از 250 باشن و کتابخونه TLSharp هم متاسفانه TLDeleteContact رو بدرستی ایجاد نشده و نمیشه ازش استفاده کرد .

در هر صورت اگر نیاز داشتید تمام Contact هاتون رو بگیرید ، به این شکل عمل کنید :

await client.ConnectAsync();
var result = await client.GetContactsAsync();


//find recipient in contacts
var user = result.users.lists
.Where(x => x.GetType() == typeof (TLUser))
.Cast<TLUser>();

hmahdavi921
یک شنبه 18 تیر 1396, 08:30 صبح
نیازی نیست هربار این کار رو کنید ، یکبار ChatID رو بگیرید ، Response رو تبدیل به JSON کنید و ChatID رو جدا کنید و داخل دیتابیس ذخیرش کنید ، به این شکل ChatID رو داخل دیتابیس دارید و دیگه نیاز ندارید به تلگرام Request بفرستید .
روش دوم بهتر از روش اول هست ، چون روش اول Limitation زمانی بیشتری از سمت تلگرام داره و حداقل 10 ثانیه باید بین هر Request برای افزودن Contact صبر کنید و این روش محدودیت هم داره چون Contact های شما نمیتونن بیشتر از 250 باشن و کتابخونه TLSharp هم متاسفانه TLDeleteContact رو بدرستی ایجاد نشده و نمیشه ازش استفاده کرد .

در هر صورت اگر نیاز داشتید تمام Contact هاتون رو بگیرید ، به این شکل عمل کنید :

await client.ConnectAsync();
var result = await client.GetContactsAsync();


//find recipient in contacts
var user = result.users.lists
.Where(x => x.GetType() == typeof (TLUser))
.Cast<TLUser>();




من از telgram.bot استفاده میکنم و چنین متدی نداره !

Moien Tajik
یک شنبه 18 تیر 1396, 10:02 صبح
از TLSharp استفاده کنید ، داخل Nuget هم موجود هستش .
https://github.com/sochix/TLSharp

hmahdavi921
یک شنبه 18 تیر 1396, 11:46 صبح
از TLSharp استفاده کنید ، داخل Nuget هم موجود هستش .
https://github.com/sochix/TLSharp

نمونه کد دارید برام بفرستید؟

Moien Tajik
یک شنبه 18 تیر 1396, 15:37 عصر
خیر نمونه کد ندارم ، Documentation داخل Github کامل هستش و میتونید راحت باهاش کار کنید .
برای ارسال پیام به کسانی که تو بات شما عضو نیستن تنها راه استفاده از TLSharp و ایجاد Session از اکانتتون هست و با Telegram.bot نمیتونید این کار رو انجام بدید .