PDA

View Full Version : حرفه ای: نحوه خواندن اطلاعات از telegram Webhook



malloc
جمعه 02 مرداد 1394, 00:52 صبح
سلام دوستان ..... من یه چند روزیه درگیر این ربات های تلگرام شدم یسری چیزها متوجه شدم اما توی یه مساله موندم.....

تا اونجا که فهمیدم باید سایتمون که ssl هم باید باشه رو توی آدرس زیر ثبت کنیم :
https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://name.com (https://api.telegram.org/bot%3CTOKEN%3E/setWebhook?url=https://name.com)

که توی آدرس بالا بعد از url میشه آدرس سایتی که قراره اون متن تایپ شده تلگرام به اون صفحه بره که اون متن هم در قالب جیسون میره./.

اما من نمیدونم که توی سایتم چطور اون جیسون رو پیدا کنم و بخونم و پردازش کنم و به چه لینکی نییجه رو برگزدونم .... اصلا با چه قالبی برگردونم

هر کس هر نظری داره ممنون میشم کمکم کنه .... ضمنا موارد بالا هم شاید اشتباه متوجه شدم که اگه اینجوریه لطفا راهنماییم کنید

malloc
جمعه 02 مرداد 1394, 21:34 عصر
دوستان حرفه ای .... نبود کسی ؟ لطف میکنید اگه اطلاعاتتون رو به اشتراک بزارید

saman-arsenal
یک شنبه 04 مرداد 1394, 15:16 عصر
http://amirh.ir/how-to-build-telegram-bot/#sthash.PlkC1MYl.dpbs

milad.biroonvand
دوشنبه 24 آبان 1395, 09:43 صبح
سلام
من دنبال همین هستم.

kamranetemadi
دوشنبه 24 آبان 1395, 20:37 عصر
اگر از وب فرم استفاده میکنی پیشنهاد می کنم که صفحه ای که قراره درخواست های webhook رو پردازش کنه صفحه ashx یا همون هندلر باشه

json رو یک استرینگ معمولی فرض کن که شبیه queryString به صفحه ارسال میشه و میتونی با JsonDeserializer اونو تبدیل به کلاس متناظر کنی(که البته باید کلاس رو از قبل تعریف کنی- مثل model در MVC)

هر پیامی که روبات دریافت کنه به صفحه شما ارسال میشه(میتونی تعیین کنی فقط دستور های از قبل تعریف شده برات ارسال بشه - دستورایی که با / شروع میشه)
حالا بسته به نوع اطلاعات(متن، عکس و صوت و ویدئو و ...) فرمت داده ها متفاوته(نه خیلی)

بعد دریافت اطلاعات هر کاری که دوست داری میتونی انجام بدی...

برای تست(روی لوکال هاست) اینکه تلگرام اطلاعات رو به چه شکلی برات میفرسته میتونی از ngrok استفاده کنی
یکم کار باهاش سختی داره ولی اینو بگم که ngrok میتونه پیام های webhook رو به لوکال هاست شما ارسال کنه

milad.biroonvand
دوشنبه 24 آبان 1395, 22:18 عصر
اگر از وب فرم استفاده میکنی پیشنهاد می کنم که صفحه ای که قراره درخواست های webhook رو پردازش کنه صفحه ashx یا همون هندلر باشه

json رو یک استرینگ معمولی فرض کن که شبیه queryString به صفحه ارسال میشه و میتونی با JsonDeserializer اونو تبدیل به کلاس متناظر کنی(که البته باید کلاس رو از قبل تعریف کنی- مثل model در MVC)

هر پیامی که روبات دریافت کنه به صفحه شما ارسال میشه(میتونی تعیین کنی فقط دستور های از قبل تعریف شده برات ارسال بشه - دستورایی که با / شروع میشه)
حالا بسته به نوع اطلاعات(متن، عکس و صوت و ویدئو و ...) فرمت داده ها متفاوته(نه خیلی)

بعد دریافت اطلاعات هر کاری که دوست داری میتونی انجام بدی...

برای تست(روی لوکال هاست) اینکه تلگرام اطلاعات رو به چه شکلی برات میفرسته میتونی از ngrok استفاده کنی
یکم کار باهاش سختی داره ولی اینو بگم که ngrok میتونه پیام های webhook رو به لوکال هاست شما ارسال کنه


چطور به تلگرام بگم که آدرس وب هوک من فلان صفحه است؟ آیا اینکار را باید با استفاده از دستورات asp.net بهش بگم یا با خود تلگرام هم میشه؟

kamranetemadi
دوشنبه 24 آبان 1395, 23:41 عصر
همینطور که دوستمون گفتن ...

تا اونجا که فهمیدم باید سایتمون که ssl هم باید باشه رو توی آدرس زیر ثبت کنیم :
https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://name.com

milad.biroonvand
سه شنبه 25 آبان 1395, 08:21 صبح
همینطور که دوستمون گفتن ...

تا اونجا که فهمیدم باید سایتمون که ssl هم باید باشه رو توی آدرس زیر ثبت کنیم :
https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://name.com

سلام


آره یک صفحه اس اس ال دار هم دارم فقط میخوام بدونم چطور دستورات را با ای اس پی دات نت بفرستم و چطوری آنها را بگیرم.
کلا میخام بدون کتابخونه این ای پی آی ها را بفرستم

kamranetemadi
سه شنبه 25 آبان 1395, 13:06 عصر
برای ارسال نیاز به ssl نیست فقط کافیه درخواست به api بفرستید
هم Get پشتیبانی میکنه و هم Set یعنی به طور مثال برای متد sendMessage اگر
api.telegram.org/bot<Token>/sendMessage?chat_id=آی دی کانال یا کد شناسه فرد&text=متن&parse_mode=html
رو توی آدرس مرورگرتون بزنید متن به کانال یا فردی که شناسشو گذاشتید ارسال میشه
اگر با استفاده از فرم هم این اطلاعات رو به اون آدرس بفرستید هم بدون مشکل انجام میشه
(شناسه افراد متفاوت از اون شناسه ای هست که به صورت @ketemadi تعریف میشه)

2 نمونه ارسال با C# برات میذارم یکی برای ارسال عکس
یکی ارسال متن

ارسال عکس

WebRequest req = WebRequest.Create("https://api.telegram.org/bot" + _botKey + "/sendPhoto?chat_id=" + chat_id + "&photo=" + photo + "&caption=" + text);
req.UseDefaultCredentials = true;
req.Method = "Post";


var result = req.GetResponse();
req.Abort();

photo آدرس URL عکس هست
text متنی که قراره زیر عکس نشون بده


ارسال متن

WebRequest req = WebRequest.Create("https://api.telegram.org/bot" + _botKey + "/sendMessage?chat_id=" + chat_id + "&text=" + text);
req.UseDefaultCredentials = true;
req.Method = "Post";


var result = req.GetResponse();
req.Abort();

text متن پیام هست

خود تلگرام همه متد ها و پارامتر های ارسالی رو توضیح داده
https://core.telegram.org/bots/api#sendmessage

amir_T_2008
سه شنبه 25 آبان 1395, 15:00 عصر
برای ارسال نیاز به ssl نیست فقط کافیه درخواست به api بفرستید
هم Get پشتیبانی میکنه و هم Set یعنی به طور مثال برای متد sendMessage اگر
api.telegram.org/bot<Token>/sendMessage?chat_id=آی دی کانال یا کد شناسه فرد&text=متن&parse_mode=html
رو توی آدرس مرورگرتون بزنید متن به کانال یا فردی که شناسشو گذاشتید ارسال میشه
اگر با استفاده از فرم هم این اطلاعات رو به اون آدرس بفرستید هم بدون مشکل انجام میشه
(شناسه افراد متفاوت از اون شناسه ای هست که به صورت @ketemadi تعریف میشه)

2 نمونه ارسال با C#‎ برات میذارم یکی برای ارسال عکس
یکی ارسال متن

ارسال عکس

WebRequest req = WebRequest.Create("https://api.telegram.org/bot" + _botKey + "/sendPhoto?chat_id=" + chat_id + "&photo=" + photo + "&caption=" + text);
req.UseDefaultCredentials = true;
req.Method = "Post";


var result = req.GetResponse();
req.Abort();

photo آدرس URL عکس هست
text متنی که قراره زیر عکس نشون بده


ارسال متن

WebRequest req = WebRequest.Create("https://api.telegram.org/bot" + _botKey + "/sendMessage?chat_id=" + chat_id + "&text=" + text);
req.UseDefaultCredentials = true;
req.Method = "Post";


var result = req.GetResponse();
req.Abort();

text متن پیام هست

خود تلگرام همه متد ها و پارامتر های ارسالی رو توضیح داده
https://core.telegram.org/bots/api#sendmessage

شما سمپل دارید ؟

milad.biroonvand
سه شنبه 25 آبان 1395, 16:28 عصر
برای ارسال نیاز به ssl نیست فقط کافیه درخواست به api بفرستید
هم Get پشتیبانی میکنه و هم Set یعنی به طور مثال برای متد sendMessage اگر
api.telegram.org/bot<Token>/sendMessage?chat_id=آی دی کانال یا کد شناسه فرد&text=متن&parse_mode=html
رو توی آدرس مرورگرتون بزنید متن به کانال یا فردی که شناسشو گذاشتید ارسال میشه
اگر با استفاده از فرم هم این اطلاعات رو به اون آدرس بفرستید هم بدون مشکل انجام میشه
(شناسه افراد متفاوت از اون شناسه ای هست که به صورت @ketemadi تعریف میشه)

2 نمونه ارسال با C#‎ برات میذارم یکی برای ارسال عکس
یکی ارسال متن

ارسال عکس

WebRequest req = WebRequest.Create("https://api.telegram.org/bot" + _botKey + "/sendPhoto?chat_id=" + chat_id + "&photo=" + photo + "&caption=" + text);
req.UseDefaultCredentials = true;
req.Method = "Post";


var result = req.GetResponse();
req.Abort();

photo آدرس URL عکس هست
text متنی که قراره زیر عکس نشون بده


ارسال متن

WebRequest req = WebRequest.Create("https://api.telegram.org/bot" + _botKey + "/sendMessage?chat_id=" + chat_id + "&text=" + text);
req.UseDefaultCredentials = true;
req.Method = "Post";


var result = req.GetResponse();
req.Abort();

text متن پیام هست

خود تلگرام همه متد ها و پارامتر های ارسالی رو توضیح داده
https://core.telegram.org/bots/api#sendmessage

عالی بود، خروجی request ای که میده بصورت json هست، آیا میتونی نمونه کدی بزاری که بتونم این خروجی را تحلیل کنم و باهاش کار کنم؟
تشکر

milad.biroonvand
پنج شنبه 27 آبان 1395, 09:01 صبح
من الان دیگه مشکلی با ارسال ندارم و نتیجه رو هم میتونم دریافت کنم، حالا مشکل من اینجاست که من یک یو آر ال دارای اس اس ال از طریق وب هوک به تلگرام معرفی کردم و تلگرام هم درخواست ها رو به اون صفحه میفرسته چطور بتونم کاری کنم که اطلاعات را که به صفحه میفرسته بگیرم؟ با استفاده از چه دستوری میشه اینکارو بکنم؟

kamranetemadi
پنج شنبه 27 آبان 1395, 22:35 عصر
با یک فرم html چطور برخورد میکنی و اطلاعاتش رو میگیری؟
querystring رو چطوری میگیری؟
پارامتر هایی که به handler ارسال میشه چطور دریافت میکنی؟؟
اینم مثل اونا...

milad.biroonvand
پنج شنبه 27 آبان 1395, 22:37 عصر
بلاخره تونستم خروجی رو بگیرم ولی بصورت زیر میده و وقتی میخوام دیسریالیزش با json خطا میده. خروجی که الان گرفتم بصورت زیر هست.
jason=%7B%22update_id%22%3A493008258%2C%0A%22messa ge%22%3A%7B%22message_id%22%3A24%2C%22from%22%3A%7 B%22id%22%3A151235239%2C%22first_name%22%3A%22aban %22%2C%22last_name%22%3A%22rayan%22%7D%2C%22chat%2 2%3A%7B%22id%22%3A151235239%2C%22first_name%22%3A% 22aban%22%2C%22last_name%22%3A%22rayan%22%2C%22typ e%22%3A%22private%22%7D%2C%22date%22%3A1479411082% 2C%22text%22%3A%22%5Cu0633%5Cu0644%5Cu0627%5Cu0645 %22%7D%7D

milad.biroonvand
پنج شنبه 27 آبان 1395, 22:48 عصر
با یک فرم html چطور برخورد میکنی و اطلاعاتش رو میگیری؟
querystring رو چطوری میگیری؟
پارامتر هایی که به handler ارسال میشه چطور دریافت میکنی؟؟
اینم مثل اونا...

شما باید مدیر این بخش میشدی که خوب جواب میدی، خواهشا یک نمونه کد بزار که بتونه اینکار رو بکنه.

milad.biroonvand
پنج شنبه 27 آبان 1395, 22:51 عصر
من تا این سطح هم رسیدم و تونستم دی سریالایزشم بکنم ولی نمیدونم چرا پیام های فارسی درست نشون داده نمیشه.
{"update_id":493008261, "message":{"message_id":27,"from":{"id":151235239,"first_name":"aban","last_name":"rayan"},"chat":{"id":151235239,"first_name":"aban","last_name":"rayan","type":"private"},"date":1479412003,"text":"\u0633\u0644\u0627\u0645"}}

milad.biroonvand
جمعه 28 آبان 1395, 08:25 صبح
سلام
فارسیش هم درست شد، حالا چکار کنم که اگر چند کاربر پیام داد بتونم شناسایشون بکنم؟ مثلا به اولی میگم نام را وارد کنید، نامش را وارد میکنه (مثلا علی) بعد بگم نام خانوادگی را وارد کنه و کاربر هم میزنه (رضایی) حالا بهش بگم مشخصات شما علی رضایی می باشد. یعنی چطور اطلاعاتش را حفظ کنم و بدونم با کدوم کاربر حرف می زنم. بنظرم درست هم نیست برای هر کاربری یک رکورد در دیتابیس باز کنم.

kamranetemadi
جمعه 28 آبان 1395, 12:01 عصر
این چیزیه که دریافت کردی



{"update_id":493008261, "message":{"message_id":27,"from":{"id":151235239, "first_name":"aban","last_name":"rayan"},"chat":{" id":151235239,"first_name":"aban","last_name":"ray an","type":"private"},"date":1479412003,"text":"\u 0633\u0644\u0627\u0645"}}

این هم چت آی دی و اسم و فامیل اون فرد توی تلگرام
"id":151235239, "first_name":"aban","last_name":"rayan"
id برای هر کاربر متفاوت و ثابته. برای شناسایی باید از اون استفاده کنی
اسم و فامیل دست خود کاربره و میتونه هر زمان عوض کنه(بهتره شما هم از همون اسم و فامیل استفاده کنید)



این که بخوای اطلاعات یا چت ها رو ذخیره کنی بسته به کاری هست که میخوای انجام بدی

یه وقت میخوای چت آی دی ها رو داشته باشی و هر وقت خواستی پیام بدی یا تبلیغی بکنی که باید ذخیره کنی
یه وقت هست به ازای هر پیامی که میدن یا دستوری که وارد میکنن میخوای جواب خاصی بدی که نیازی به ذخیره نیست



شما باید مدیر این بخش میشدی که خوب جواب میدی، خواهشا یک نمونه کد بزار که بتونه اینکار رو بکنه.
حوصله کد ندارم

milad.biroonvand
جمعه 28 آبان 1395, 14:40 عصر
این چیزیه که دریافت کردی



{"update_id":493008261, "message":{"message_id":27,"from":{"id":151235239, "first_name":"aban","last_name":"rayan"},"chat":{" id":151235239,"first_name":"aban","last_name":"ray an","type":"private"},"date":1479412003,"text":"\u 0633\u0644\u0627\u0645"}}

این هم چت آی دی و اسم و فامیل اون فرد توی تلگرام
"id":151235239, "first_name":"aban","last_name":"rayan"
id برای هر کاربر متفاوت و ثابته. برای شناسایی باید از اون استفاده کنی
اسم و فامیل دست خود کاربره و میتونه هر زمان عوض کنه(بهتره شما هم از همون اسم و فامیل استفاده کنید)



این که بخوای اطلاعات یا چت ها رو ذخیره کنی بسته به کاری هست که میخوای انجام بدی

یه وقت میخوای چت آی دی ها رو داشته باشی و هر وقت خواستی پیام بدی یا تبلیغی بکنی که باید ذخیره کنی
یه وقت هست به ازای هر پیامی که میدن یا دستوری که وارد میکنن میخوای جواب خاصی بدی که نیازی به ذخیره نیست



حوصله کد ندارم

بنظرت بهترین راه برای اینکه کاری کنیم کاری کنیم که کاربر در دو مرحله یکبار نامش رو وارد کنه و دفعه بعد نام خانوادگیشو و سپس تایید کنه و ما در نهایت بهش پیام بدیم سلام علی رضایی چیه؟

mobtaker61
شنبه 25 دی 1395, 14:12 عصر
سلام
فارسیش هم درست شد، حالا چکار کنم که اگر چند کاربر پیام داد بتونم شناسایشون بکنم؟ مثلا به اولی میگم نام را وارد کنید، نامش را وارد میکنه (مثلا علی) بعد بگم نام خانوادگی را وارد کنه و کاربر هم میزنه (رضایی) حالا بهش بگم مشخصات شما علی رضایی می باشد. یعنی چطور اطلاعاتش را حفظ کنم و بدونم با کدوم کاربر حرف می زنم. بنظرم درست هم نیست برای هر کاربری یک رکورد در دیتابیس باز کنم.


خسته نباشی
کارت عالی بوده تا اینجا
من هم همین مشکل رو چند وقتیه دارم
ولی انقدر ور رفتم که دیگه هنگ کردم.. انگار مغزم رو این مورد قفل کرده
اگه کدهایی که نوشتی تا به این مرحله رسیده رو بفرستی ممنون میشم
یا همینجا یا به تلگرامم @mobtaker61

:گریه::گریه::گریه::گریه:

ممنون

sg.programmer
شنبه 25 دی 1395, 15:03 عصر
سلام میتونید کدتون را به اشتراک بزارید؟

male_violet
پنج شنبه 12 اسفند 1395, 13:03 عصر
سلام
چه کار کردین فارسیش درست شد؟
من هر چی فارسی می فرستم بهمریز بهم تحویل می ده

Helpco
جمعه 13 اسفند 1395, 09:06 صبح
سلام اگه بشه کد تون به اشتراک بزارید عالی
بعد من دو تا سوال دارم
1- با این ngrok چطوری روی لوکال تست کنم کد هام رو
2- این خطا مال چی؟CodeBlock.Bot.Engine.Controllers.webhookCont roller.<Post>d__23.MoveNext()
بعد من تا اینجا پیش رفتم TEst9009_bot@

Helpco
شنبه 12 فروردین 1396, 15:12 عصر
uppp.....................

reza1357
شنبه 11 شهریور 1396, 07:38 صبح
من تا این سطح هم رسیدم و تونستم دی سریالایزشم بکنم ولی نمیدونم چرا پیام های فارسی درست نشون داده نمیشه.
{"update_id":493008261, "message":{"message_id":27,"from":{"id":151235239,"first_name":"aban","last_name":"rayan"},"chat":{"id":151235239,"first_name":"aban","last_name":"rayan","type":"private"},"date":1479412003,"text":"\u0633\u0644\u0627\u0645"}}

سلام

منم این مشکل رو دارم پیام ها فارسی دریافت نمیشن هر کاری کردم Encoding به utf-8 نمیشه کسی کد دریافت پیام از webhook داره؟

reza1357
سه شنبه 14 شهریور 1396, 09:39 صبح
{"update_id":493008261, "message":{"message_id":27,"from":{"id":151235 239, "first_name":"aban","last_name":"rayan"},"chat ":{" id":151235239,"first_name":"aban","last_name":"r ay an","type":"private"},"date":1479412003,"text":" \u 0633\u0644\u0627\u0645"}}


سلام کسی میتونه کمک کنه پیام رو به شکل بالا نتونستم بگیرم ولی فارسی به این شکل نشون میده فارسی نمیشه:
"text":" \u 0633\u0644\u0627\u0645

Tekyegah
جمعه 17 شهریور 1396, 03:21 صبح
سلام
من تو این زمینه تحقیقی نکردم ...
متاسفانه دوستان وقتی به نتیجه رسیدن ، دست آوردشون رو به بقیه ارائه نمیکنن !!!

همینطوری یه سرچی زدم و به این پروژه برخورد کردم ... ( Open Source )

تست کردم و دیدم جواب هم میده ... فارسی هم جواب میده !

( سایت مبدا : https://github.com/zhukov/webogram )

لینک دانلود (http://upload-free.ir/MediaUploader/hamed/ASP/webogram-master.rar)