آموزش قدم به قدم ساخت ربات تلگرام با جاوا
در این مقاله قصد داریم به آموزش ساخت ربات تلگرام با جاوا میپردازیم. API در جاوا بسیار عالی و ایده آل پیادهسازی شده است و برای ساخت رباتهای تلگرام بسیار خوب عمل میکند. ما در این پروژه از ابزار ساخت جاوا، Gradle، استفاده خواهیم کرد. همچنین کتاب کتابخانه ما برای ساخت ربات تلگرام با جاوا java-telegram-bot-api خواهد بود.
رباتی که ما قرار است آن را طراحی و پیادهسازی کنیم یک ربات پرداخت خواهد بود. این ربات پرداخت به شما کمک میکند که سفارشات را اتوماتیک دریافت کنید و مشتری از طریق رباتی که میسازیم پرداخت را انجام دهد. تلگرام اکنون یک API پرداخت را پیشنهاد میکند، بنابراین میتوانید مستقیماً از طریق تلگرام شروع به فروش کالا کنید. درحالیکه قسمت اول این فصل اصول اولیه را بازبینی میکند، سپس رباتی را پیادهسازی میکنیم که به چالشهای استفاده از API پرداخت تلگرام پاسخ میدهد و نمونهای از چرخه زندگی کامل پرداخت را ایجاد میکند.
نیازمندیها برای ساخت ربات تلگرام با جاوا
Apache Maven، Gradle ابزار اصلی ما برای ساخت ربات تلگرام با جاوا است. این درواقع ابزار ساخت اصلی برای ساخت برنامههای اندروید است.
میتوانید Gradle را بهصورت دستی بر روی دستگاه خود دانلود و نصب کنید. دانلود باینریها از طریق بستههای مختلف در دسترس است. وبسایت Gradle (https://gradle.org/install/) یک بخش گسترده در مورد نحوه نصب نرمافزار دارد.
ویدیوهای پییشنهادی : آموزش جاوا
ساختار پروژه ساخت ربات تلگرام با جاوا
یک پروژه جاوا با استفاده از Gradle بیشتر از فایل build.gradle ساختهشده است که حاوی ابر داده و اطلاعات ساختنی است که Gradle بتواند آن را درک کند و فایلهای منبع واقع در src/main/java (بهطور پیشفرض) هستند. بهصورت کلی ساختار فایل ربات تلگرام با جاوا بهصورت زیر است.
فایل build.gradle
Gradle کاملاً همهکاره است و تقریباً میتوانید هر چیزی را با آن بسازید. در این مقاله همانطور که گفتم قصد داریم یک پروژه ساخت تلگرام با جاوا بسازیم، بنابراین از پلاگین Gradle برای جاوا استفاده خواهیم کرد، با چند تنظیمات استاندارد که برای کامپایل استفاده میشود، مانند کدگذاری فایل و سازگاری کامپایل.
وابستگیها در بخش وابستگیها تعریف میشوند که هرکدام با فرمت زیر مشخص میشوند: شما میتوانید وابستگیها را در تصویر زیر مشاهده کنید.
<group>:<name>:<version>.
در اینجا محتوای فایل build.gradle آمده است:
apply plugin: 'java' sourceCompatibility = 1.8 targetCompatibility = 1.8 compileJava { options.encoding = "UTF-8" } repositories { jcenter() } dependencies { compile 'com.github.pengrad:java-telegram-bot-api:4.1.0' compile 'com.sparkjava:spark-core:2.2' compile 'org.jsoup:jsoup:1.8.3' compile 'io.reactivex:rxjava:1.0.16' } apply plugin: 'application' mainClassName = "com.hellonico.Simple"
دو خط آخر افزونه برنامه و mainClassName موردنیاز نیستند، اما اگر میخواهید برنامه خود را بهسادگی با استفاده از:
gradle run اجرا کنید طبق دستور پایین عمل کنید.
بهعنوانمثال، با توجه به کلاس و برنامه ساده جاوا زیر:
package com.hellonico;
public class Simple {
public static void main(String[] args) {
System.out.println("hello nico");
}
}
اگر دستور run را اجرا کنید، برنامه اجرا خواهد شد و خروجی زیر در ترمینال یا خط فرمان نشان داده میشود:
$ gradle run > Task :run hello nico BUILD SUCCESSFUL in 1s 2 actionable tasks: 2 executed
این روش ربات ساختهشده ما با جاوا com.helonico.Simple را اجرا میکند. کلاس اطلاعات بیشتر در مورد افزونه برنامه را میتوانید در وبسایت Gradle بیابید(https://docs.gradle.org/current/userguide/application_plugin.
html).
مقاله پییشنهادی : معرفی 12 تا از بهترین کتابهای آموزش جاوا
تنظیم کد ویژوال استودیو
ازآنجاییکه ما استفاده از Gradle را بهعنوان ابزار ساخت ربات تلگرام با جاوا را پیشنهاد کردهایم، Visual Studio Code میتواند ابزار ساخت را تشخیص دهد و پروژه را با یکپارچگی تقریباً کامل، با استفاده از ابزار جاوا راهاندازی کند. پلاگین اصلی جاوا در شکل زیر نشان دادهشده است و میتوان آن را از طریق بازار Visual Studio Code نصب کرد.
همان کلاس جاوا سادهای که در بالا نوشته شد، نتیجه نشان دادهشده در شکل را به دست میدهد.
اکنون دو آیکون میبینید که با آن کد خود یا کد ساخت ربات تلگرام با جاوا را اجرا و اشکالزدایی میکنید. این ابزارها هنگام نوشتن ربات تلگرام مفید خواهند بود. برای اینکه اکنون آن را امتحان کنید، روی Run کلیک کنید، که برنامه را اجرا میکند و خروجی مناسب را در کنسول Visual Studio Code نشان میدهد.
اولین ربات تلگرام با جاوا
اولین ربات تلگرام با جاوا ما متن و یک عکس ارسال میکند تا مطمئن شویم که راهاندازی ربات تلگرام با جاوا درستکار میکند. ربات با توکن بارگیری شده از یک فایل منابع/توکن مقداردهی اولیه میشود، که باید توکن ربات خود را در آن قرار دهید.
برای ساخت ربات و دریافت توکن کافی است که یک ربات تلگرام را با استفاده از @botfather راهاندازی کنید و توکن و مشخصات آن را برای مراحل بعدی ذخیره کنید.
در طول راه، احتمالاً متوجه خواهید شد که یافتن ایمپورترهای جاوا کمی سخت است، اما همانطور که در شکل نشان دادهشده است، میتوان آنها را با استفاده از Visual Studio Code Organize Imports بهصورت خودکار وارد کرد.
احتمالاً سختترین قسمت کد برای ساخت ربات تلگرام با جاوا خط زیر است:
bot.setUpdatesListener(new UpdatesListener() {..}
اینجا جایی است که به کد ما به ربات میگویید خودش را بهروز کند. در سادهترین شکل، کد ربات بهصورت زیر است:
package com.hellonico; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.List; import java.util.stream.Collectors; import com.pengrad.telegrambot.TelegramBot; import com.pengrad.telegrambot.UpdatesListener; import com.pengrad.telegrambot.model.Update; public class Main { public static String streamFile_Buffer(String file) throws Exception{ BufferedReader reader = new BufferedReader(new FileReader(file)); return reader .lines() .collect(Collectors.joining(System.lineSeparator())); } public static void main(String[] args) throws Exception { TelegramBot bot = new TelegramBot(streamFile_Buffer("resources/token")); bot.setUpdatesListener(new UpdatesListener() { @Override public int process(List updates) { System.out.println(updates.toString()); // DO SOMETHING HERE. return UpdatesListener.CONFIRMED_UPDATES_ALL; } }); } }
ویدیوهای پییشنهادی : ساخت برنامه اندروید با جاوا
ساخت ربات تلگرام با جاوا برای ارسال متن به چت
اولین تعامل ما در ساخت ربات تلگرام با جاوا ارسال متنی به چت خواهد بود. شما میتوانید مانند سایر زبانها از طریق پیامهای بهروزرسانی از تلگرام پیمایش کنید. شما پیامهای معمولی را با همان ساختاری که تابهحال دیدهشده است پیدا خواهید کرد.
[Update{update_id=573518674, message=Message{message_id=956, from=User{id=121843071, is_bot=false, first_name='Nico', last_ name='Nico', username='hellonico', language_code='en-JP'} , date=1537602748, chat=Chat{id=121843071,..
ازآنجا میتوانیم شناسه چت را دریافت کنیم
int id = updates.get(0).message().chat().id().intValue();
و دوباره به چت پیام ارسال کنید. توجه داشته باشید که ما از ربات استفاده میکنیم. با یک درخواست و یک فراخوان اجرا کنید، بنابراین نتیجه ناهمزمان است.
SendMessage requestText =
new SendMessage(id, "*hello from java*").parseMode(ParseMode.
Markdown);
bot.execute(requestText, new Callback<SendMessage, SendResponse>() {
@Override
public void onResponse(SendMessage request, SendResponse
response) {}
@Override
public void onFailure(SendMessage request, IOException e) {}
});
قبل از راهاندازی ربات، باید ایمپورترهای جاوا را سازماندهی کنید یا لیست را بهصورت دستی تکمیل کنید. لیست کامل در زیر نشان دادهشده است و باید در بالای فایل منبع قرار گیرد.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import com.pengrad.telegrambot.Callback;
import com.pengrad.telegrambot.TelegramBot;
import com.pengrad.telegrambot.UpdatesListener;
import com.pengrad.telegrambot.model.Update;
import com.pengrad.telegrambot.model.request.ParseMode;
import com.pengrad.telegrambot.request.SendMessage;
import com.pengrad.telegrambot.response.SendResponse;
ربات را با کلیک روی Run یا Debug راهاندازی کنید، که متنی با فرمت علامتگذاری شده در چت میدهد.
ساخت ربات تلگرام با جاوا برای ارسال تصویر
ارسال عکس بهآسانی ارسال متن در ساخت ربات تلگرام با جاوا است و این بار از نسخه همزمان ارسال درخواست به تلگرام استفاده میکنیم. ازآنجاییکه کد دیگر ناهمزمان نیست، خرابیها در پاسخ به تماس onFailure که در نسخه ناهمزمان موجود بود، کنترل نمیشوند. بنابراین، ایده خوبی است که درخواست را با یک بلوک try/catch احاطه کنیم.
SendPhoto requestPhoto = new SendPhoto(id, new File("resources/ cat.jpg")); try { SendResponse response = bot.execute(requestPhoto); } catch (Exception e) { e.printStackTrace(); }
و عکس گربه همانطور که در شکل نشان دادهشده است به چت ارسال میشود.
حالا بیایید سعی کنیم یک فاکتور تولید کنیم و با استفاده از ربات تلگرام جاوای ساختهشده سفارشها را ماشینی تحویل بگیریم.
ربات باقابلیت فاکتور
تلگرام یک API پرداخت اضافه کرده است تا پرداخت را مستقیماً از چت روم بپذیرد. اینیک راهاندازی واقعاً فوقالعاده برای ارسال پول است و تراکنشها درزمینهٔ خدمات از گسترش آن بسیار سود میبرند. در این مرحله از ساخت ربات تلگرام با جاوا قصد داریم این پیادهسازی را ارائه دهیم.
پیشنهاد مطالعه: آموزش مفهوم Final در جاوا + مثال عملی
درخواست مجوز
قبل از استفاده از این قابلیتها، باید با تغییر تنظیمات Payments ربات خود، مجدداً از ربات تلگرام BotFather مجوز دریافت کنید.
پس از بهروزرسانی تنظیمات پرداخت برای ربات، BotFather یک رمز پرداخت به شما میدهد، همانطور که در شکل نشان دادهشده است.
در اینجا توجه داشته باشید که رمز دیگری به شما داده میشود. این رمزی است که باید هنگام ارسال پیام فاکتور استفاده کنید.
در طول مسیر، باید یک حساب پرداخت با ارائهدهنده خدمات موردعلاقه خود راهاندازی کنید. در اینجا، همانطور که در شکلهای نشان دادهشده است، از Stripe استفاده میکنیم و قابلیتهای آن را آزمایش میکنیم. Stripe یک شرکت خدمات پرداخت خارجی است.
راهاندازی استریپ:
اگر تنظیمات بهدرستی تکمیلشده باشد، همانطور که در شکل نشان دادهشده است، تأییدیه را از ربات تست Stripe دریافت خواهید کرد.
اکنون ربات تلگرام شما میتواند پیامهای فاکتور ارسال کند و سعی کند از افرادی که با آن صحبت میکنند پول دریافت کند.
ارسال پیام فاکتور
همانند ارسال عکس یا متن، میتوانید با استفاده از پیام SendInvoice، فاکتورها را به چت ارسال کنید.
SendInvoice sendInvoice
= new SendInvoice(id, "Lemon", "desc", "hello","2846850
63:TEST:NDBlMjliMGM2YmQ0", "my_start_param", "JPY", new
LabeledPrice("label", 2000))
.needPhoneNumber(false)
.needShippingAddress(false)
.isFlexible(true)
.replyMarkup(new InlineKeyboardMarkup(new InlineKeyboardButton[]
{ new InlineKeyboardButton("just pay").pay(),
new InlineKeyboardButton("google it").url("www.google.com") }));
مجدداً میتوانید پرسوجو را بهصورت همزمان یا ناهمزمان اجرا کنید. توصیه میشود از مسدود کردن اجرا در رشته اصلی خودداری کنید.
// sync version
SendResponse response = bot.execute(sendInvoice);
// async version
bot.execute(sendInvoice, new Callback<SendInvoice, SendResponse>() {
@Override
public void onResponse(SendInvoice request, SendResponse
response) {}
@Override
public void onFailure(SendInvoice request, IOException e) {}});
در ساخت ربات تلگرام با جاوا ما پرداخت فقط با استفاده از نسخه موبایلی اپلیکیشن تلگرام امکانپذیر است که کاربران نیز باید کالای ارسالی خود را به آن ارائه دهند.
در این مرحله با کلیک بر روی فقط پرداخت، ربات پرداخت درخواست ارسال را ارسال میکند. (درواقع فقط درصورتیکه .isFlexible (true) تنظیمشده باشد.) در این مرحله میتوانیم چند گزینه برای ارسال کنیم و دوباره به چت ارسال کنیم.
ShippingQuery shipping= updates.get(0).shippingQuery();
if (shipping!= null) {
ShippingOption option =
new ShippingOption("fedex", "FedEx", new LabeledPrice("JOY", 2000));
AnswerShippingQuery query =
new AnswerShippingQuery(shipping.id(), option);
bot.execute(query);
return UpdatesListener.CONFIRMED_UPDATES_ALL;
}
همانطور که در شکل نشان دادهشده است، گزینههای حملونقل در چت نشان داده میشوند.
شکلهای بعدی روند پر کردن اطلاعات باقیمانده از فرآیند پرداخت را نشان میدهد.
درنهایت، ربات پرداخت، درخواستی را برای پیشپرداخت به ربات شما ارسال میکند، با تمام جزئیات پرداخت. شما باید تا جایی که میتوانید به این درخواست ربات پاسخ دهید و درواقع ده ثانیه حداکثر محدودیت زمانی است، در غیر این صورت پرداخت لغو میشود. تکمیل تراکنش با ارسال یک PreCheckoutQuery با شناسه query، زمانی که یک عنصر preCheckoutQuery دریافت میشود، انجام میشود.
PreCheckoutQuery query = updates.get(0).preCheckoutQuery();
if (query != null) {
AnswerPreCheckoutQuery apcq = new AnswerPreCheckoutQuery
(query.id());
bot.execute(apcq);
return UpdatesListener.CONFIRMED_UPDATES_ALL;
}
شکل بعد چت را پس از تکمیل پرداخت نشان میدهد.
در داشبورد Stripe، در قسمت پرداخت، پس از فعال کردن دادههای تست، همانطور که در شکل بعد نشان دادهشده است، میتوانید سفارشات مختلف با استفاده از ربات ساختهشده با جاوا را مشاهده کنید.
امیدوارم که از مقاله ما در رابطه با سات ربات تلگرام با جاوا لذت برده باشید و برای شما مفید واقعشده باشد.