webhook و ساخت ربات تلگرام در لاراول - بخش دوم

زمان قرارگیری : 21 تیر 1396
زمان این قسمت : 49:47
برای دسترسی به این دوره نیاز است بصورت نقدی این دوره را خریداری کنید و این دوره بخشی از دوره های اعضای ویژه نمیباشد

تعداد شرکت کنندگان 1181 نفر
قیمت دوره 125000 تومان
وضعیت دوره تکمیل شده
زمان کل دوره 30:19:42
تعداد قسمت‌ها 51
نوع دسترسی نقدی

در این جلسه قصد دارم روش تعامل با ربات تلگرامی رو با استفاده از webhook به شما آموزش بدم یعنی اینکه چطور دستوری در ربات وارد کنید و جوابش رو از طریق اپلیکیشنتون بگیرید البته یک روبات برای این پروژه هم ایجاد میکنیم که کار نمایش اطلاعات سایت رو بر عهده داره در این قسمت بخش های مثل Command تلگرام و Keyboard تلگرام رو بصورت کامل براتون میگم وشمارو اماده میکنم که ربات های پیشرفته ایجاد کنید . 

رایگان 04:34
برای دسترسی به این دوره نیاز است بصورت نقدی این دوره را خریداری کنید و این دوره بخشی از دوره های اعضای ویژه نمیباشد

تعداد شرکت کنندگان 1181 نفر
قیمت دوره 125000 تومان
وضعیت دوره تکمیل شده
زمان کل دوره 30:19:42
تعداد قسمت‌ها 51
نوع دسترسی نقدی

آفلاین
user-avatar
مدرس دوره حسام موسوی

اول داستان، طراح گرافیک بودم و ۲ سالی به عنوان طراح مشغول بودم، بعد به برنامه‌نویسی علاقمند شدم و الان بیشتر از ۱۰ ساله که عاشق کدزنی و چالش‌های پروژه‌های مختلفم. به تدریس علاقه خاصی دارم و دوست دارم دانشی که در این راه بدست آوردم را در اختیار دیگران هم قرار بدم. 

سوالات و گفتگو‌ها

سوالات و گفتگو‌ها

اگر سوال و مشکلی یا حتی بحثی در یکی از حوزه‌های برنامه‌نویسی دارید این بخش به شما کمک ویژه‌ای خواهد کرد

دورهای پیشنهادی

مشاهده همه دوره ها
آشنایی با امکانات جدید لاراول 7

آشنایی با امکانات جدید لاراول 7

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

ساخت Restful Api با Laravel و Lumen

ساخت Restful Api با Laravel و Lumen

به زبان ساده، APIها (مخفف Application Programming Interface) رابط‌هایی نرم‌افزاری هستند که ارتباط بین نرم‌افزارهای مختلف را پیاده‌سازی می‌کنند. در دنی...

آشنایی با امکانات جدید لاراول 5.5

آشنایی با امکانات جدید لاراول 5.5

در همین ابتدای این دوره باید بگم کسانی میتونن این دوره رو مشاهده کنند که با لاراول آشنا باشن پس اگر هنوز نمی دونید که لاراول چطور کار میکنه ، لطف ابتد...

آشنایی با امکانات جدید لاراول 5.3

آشنایی با امکانات جدید لاراول 5.3

لاراول ۵.۳ بزودی به طور رسمی ارائه میشه اما نسخه develop اون چند وقتی میشه که در اختیار کاربران قرار گرفته در این دوره آموزشی سعی میکنیم که امکانات و...

دسترسی رایگان برای اعضای ویژه

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر لازم است ابتدا وارد سایت شوید
آفلاین
user-avatar
ali2173
4 ماه پیش

سلام خسته نباشید
من زمانیکه کامند help/ رو در ربات اجرا کردم ، تو صفحه http://127.0.0.1:4040/inspect/http اروری که می گرفت این بود:

Symfony\Component\Debug\Exception\FatalThrowableError: Call to undefined function Telegram\Bot\Commands\studly_case() in file C:\Users\Ali1\Desktop\new\laravel\vendor\irazasyed\telegram-bot-sdk\src\Commands\Command.php on line 182

یعنی منظورش این بوده که متد studly_case رو پیدا نکرده ... من از فایل پروژه ای که شما ارسال کردید، نگا کردم دیدم این متد تو هسمت helpers موجوده ، این متد رو بصورت دستی از پروژه شما کپی و در هلپر فانکشن هام پیست کردم و ارور برطرف شد!
می خواستم بپرسم چرا این متد studly_case تو فایل helper من وجود نداشت؟

آفلاین
user-avatar
حسام موسوی
4 ماه پیش

این باگ مربوط به ورژن php میشه احتمالا ورژن php شما از ۷.۳ بالاتر هست از ورژن‌های جدید این پکیج استفاده کنید یا ورژن پایین‌تر php در پروژه‌اتون

آفلاین
user-avatar
jaber
5 ماه پیش

سلام من وب هوک رو روی هاست و دامنه ست کردم دامنم ssl داره و هاست المانم هست اما الان وقتی روت رو اجرا میکنم و به طور مثال چت ای دی رو دستی میدم پیام ارسال میشه اما وقتی با ربات تلگرام میخوام کار کنم هیچ واکنشی نشون نمیده و انگار وب هوک ست نشده میخاستم بدونم ایا جایی هست من بتونم تست کنم ببینم این رباتم دقیقا به چه اروری میخوره که رفع کنم

آفلاین
user-avatar
حسام موسوی
5 ماه پیش

از طریق لاگ لاراول و از طریق لاگی که بهتون نشون دادیم در استفاده از نرم افزار مورد نظر میتونید چک کنید در حالت توسعه
لیست هوک‌ها رو هم میتونید بر گردونید و ببینید .

آفلاین
user-avatar
اسماعیل
1 سال پیش

با سلام
چرا من این روت را فراخوانی میکنم http://localhost:8888/telegram
این ارور میدهد
Unauthorized

آفلاین
user-avatar
حسام موسوی
1 سال پیش

سلام ارور Unauthorized برای اجازه دسترسی نداشتن نمایش داده میشه
چه زمانی این اتفاق می افته از طرف تلگرام این ارور داده میشه یا در برنامه اتون بوجود میاد

Sorena
1 سال پیش

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

آفلاین
user-avatar
حسام موسوی
1 سال پیش

سلام پیام های که در چت نشون میده رو نمیشه پاک کرد اما اگر منظورتون اینکه چطوری keyboard ها رو با هر پاسخ تغییر بدید که قبلا توضیح دادیم در موردش

Sorena
1 سال پیش

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

آفلاین
user-avatar
حسام موسوی
1 سال پیش

خوب به همین مورد که در هین جلسات اشاره کردیم .

Sorena
1 سال پیش

نه استاد...
کیبورد اصلی رو شما فرمودید...
کیبوردهای اینلاین اصلا در این دو ویدئو نبود.
کیبورد های اینبلاین به صورت مسیج ارسال میشن... اونی که در این دو درس استفاده شد کیبوردهای معمولی بودن که به صورت مسیج فراخوانی اطلاعات میکردن..
ولی کیبوردهای اینلاین رو منظورمه که درخواست و ریسپانسشون به صورت callback query هست.
اونا رو در بعضی بات های فارسی مث همین بات پلیس گروه @isnullbot استفاده میشه...
multipage keyboard فکر میکنم هست... زمین و زمان رو زیر و رو کردم ندیدم!!
اگر نمونه اش رو نمیدیدم میگفتم اصلا قابلیتش نیست!
ولی متاسفانه انجام شده و مشتری هم از ما میخواد!!

Sorena
1 سال پیش

سلام مجدد مهندس موسوی عزیز
مهندس در متدهای جدید این پکیج برای ساخت باتون های اینلاین به این صورت عمل میکنن

$keyboard = Keyboard::make(['resize_keyboard' => true])
                    ->inline()->row(
                        Keyboard::button(['text' => 'book', 'callback_data' => 'data']),
                        Keyboard::button(['text' => 'ball', 'callback_data' => 'data_from_btn2'])
                    )->row(
                        Keyboard::button(['text' => 'book2', 'callback_data' => 'data2']),
                        Keyboard::button(['text' => 'ball2', 'callback_data' => 'data_from_btn22'])
                    );

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

آفلاین
user-avatar
حسام موسوی
1 سال پیش

سلام آیا list chunk رو تست کردید ؟

Sorena
1 سال پیش

خیر مهندس...
اصلا حقیقتا نمیدونم چطور میتونم این قسمت رو با تابع foreach ایجاد کنم

->row(
Keyboard::button(['text' => 'book', 'callback_data' => 'data']),
Keyboard::button(['text' => 'ball', 'callback_data' => 'data_from_btn2'])
)
مثلا منظورم اینه : (:مثال زدم نخندید(:

->inline([
            foreach($records->chunk(3) as $chunk){
                    row(
                        foreach($chunk as $record){
                            Keyboard::button(['text' =>$record->text, 'callback_data' => $record->data]),
                        }
                    )
            }
            ]);
Sorena
1 سال پیش

استاد... مارو راهنمایی نمیکنید واسه کامنت قبلی که هنوز تایید نشده؟

آفلاین
user-avatar
حسام موسوی
1 سال پیش

ببیینید اول اینکه به هیچ وجه foreach رو نباید اونجا قرار بدید
دوم اینکه میشه یه چیزی شبیه کد زیر البته چون پروژه شما رو ندارم نتونستم تست کنم ولی در کل با تست و رفع باگ میتونید حلش کنید

$keyboard = Keyboard::make(['resize_keyboard' => true])->inline();

foreach($records->chunk(3) as $chunk) {
    $keybordList = [];
    foreach($chunk as $record){
        $keyboard[] = Keyboard::button(['text' =>$record->text, 'callback_data' => $record->data]);
    }

    $keyboard->row(...$keybordList);
}
Sorena
1 سال پیش

ممنونم عزیزم...
خودم از این روش جواب گرفتم.

$city=City::all()->where('State_ID', $update->callbackQuery->data)->all();
                foreach ($city as $val){
                    $btn[] = Keyboard::button(['text' => "$val->Name", 'callback_data' => "$val->ID"]);
                };
                $chank= array_chunk($btn,3);
                $keyboard=[
                    "resize_keyboard"=> true,
                    'inline_keyboard'=>$chank
                ];
//        return $row;
                //INLINE KEYBOARD END
                $this->telegram->sendMessage([
                    'chat_id' => $update->callbackQuery->from->id,
                    'text' => 'گزینه مورد نظر خود را انتخاب فرمایید',
                    'reply_markup' =>json_encode($keyboard),
                ]);

از روش شمام استفاده میکنم و نتیجه رو مینویسم. سپاس بیکران

آفلاین
user-avatar
sajad yf
2 سال پیش

BadMethodCallException: Method [replyKeyboardMarkup] does not exist. in file F:\laravel\vendor\irazasyed\telegram-bot-sdk\src\Api.php on line 98 سلام .. این ارور واسه replyKeyboardMarkup ولی علتشو نمیدونم .. با ویدیو انجام دادم

آفلاین
user-avatar
حسام موسوی
2 سال پیش

سلام ممکنه در ورژن جدید این متد حذف شده باشه باید مستند این پکییج رو مشاهده کنید

M.KAZEMI
2 سال پیش

مهندس هر جای اینترنت رو گشتیم نتونستیم این مشکلی که دوستمون اشاره کردن رو حل کنیم...
ورژن سه پکیج رو نصب کردم... خسته شدم باور کن از دیروز دارم سرچ میکنم (:
توی نسخه جدید انگار خبری از این متد نیست
یه فکری به حال ما بکن (:

آفلاین
user-avatar
حسام موسوی
2 سال پیش

بجای استفاده از متد replyKeyboardMarkup
از کد زیر چرا استفاده نمیکنید

$reply_markup = Keyboard::make($params);
M.KAZEMI
2 سال پیش

بله... اکثریت کلاس ها و پکیج های این متد تغییر کردند و در حال توسعه اس... خیلی بهتر شدن فقط باید از طریق پیج https://github.com/irazasyed/telegram-bot-sdk/issues
توی سوالات دنبال متدهای جدیدش بود و یا خود دوستان نگاهی به کلاس ها و متد های داخلی پکیج بکنن تا تغییرات دستشون بیاد .
چون هنوز تغییرات به صورت محتوایی در سایت پکیج قرار داده نشده.
بازم ممنون مهندس موسوی عزیزم

آفلاین
user-avatar
arian
2 سال پیش

سلام وقت بخیر
آقای موسوی به من ارور ۴۱۹ میده توی اجرای درخواست Route::post('/396603472:AAGLckyApu-oMnURzd59DgNXbsCqFhgPjHA/webhook' , 'TelegramController@webhook'); که البته آی *** ،آی دی خودم هست

آفلاین
user-avatar
حسام موسوی
2 سال پیش

سلام
مستندات تلگرام رو بخونید ببینید این کد برای چه مشکلیه

آفلاین
user-avatar
محمد
2 سال پیش

سلام وقت بخیر
من رباتو میسازم و button هاشو هم ایجاد میکنم ولی مثلا وقتی switch میذارم اصلا عمل نمیکنه
به نظرم به خاطر request هست که عمل نمیکنه چون وقتی حتی میخوام از متد sendMessage استفاده کنم برای chat_id که میام request("message.chat.id") رو وارد میکنم ارور میده

این متد منقضی شده؟ و اینکه مثلا نمیدونم چرا توی شرط ها نمیره حتی توی switch گذاشتم اگه مثلا گزینه 1 رو انتخاب کرد بهش return 'salam' کنه

میشه راهنمایی کنید؟


public function webhook()
    {
        Telegram::commandsHandler(true);

        switch (request('message.text')){
            case 'آخرین مقالات':
                return 'slm';
                break;
            case 'آخرین ویدیو ها':
                return $this->lastEpisodes();
                break;
            case 'ارتباط با ما':
                return $this->contactUs();
                break;
        }
    }

    private function lastArticles()
    {
        $articles = Article::latest()->take(5)->get();
        if ($articles){
            $text='';
            foreach ($articles as $article){
                $text .= $article->title . "\n";
                $text .= url()->to($article->path()) . "\n";
            }
        }else{
            $text = 'مقاله ای برای نمایش وجود ندارد.';
        }

        Telegram::sendMessage([
            'text' => $text,
        ]);
    }
آفلاین
user-avatar
حسام موسوی
2 سال پیش

سلام اول اینکه چه اروری میده و دوم اینکه نیازه به پروکسی چون این بسته اس

آفلاین
user-avatar
محمد
2 سال پیش

وقتی start میزنم و کیبورد میاد و اون گزینه ای رو که انتخاب میکنم هیچ اتفاقی نمی افته و توی ngrok میاد ارور 503 میده

مشکل از request بود که ظاهرا دیگه جواب نمیده و نمیتونه chat_id رو بگیره

پروکسی هم روشنه

آفلاین
user-avatar
حسام موسوی
2 سال پیش

در ارور 503 ببینید متن دقیق ارور چی هست به کدوم قسمت گیر میده

آفلاین
user-avatar
نعیم سهرابی
2 سال پیش

سلام و خسته نباشید و با تشکر از زحمات شما

حسام جان من رباتم رو لوکالم اوکی بود
اما الان رو سرور اصلی با همچین اروری رو به رو میشم
"cURL error 7: Failed to connect to 2001:67c:4e8:f004::9: Network is unreachable (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)"
مشکل از کجاس ؟

آفلاین
user-avatar
حسام موسوی
2 سال پیش

با سلام این مشکل مربوط به سیستم خودتون میشه .
سعی کنید port رو تغییر بدید بجای ۸۰۰۰ از چیز دیگه ای استفاده کنید یا بجای localhost از ip استفاده کنید بببینید چی میشه .

آفلاین
user-avatar
امیر ام
2 سال پیش

سلام من چون دامینم http هست این ارور رو میده
Invalid URL, should be a HTTPS url.
چیکار باید بکنم

آفلاین
user-avatar
حسام موسوی
2 سال پیش

برای ارتباط با تگرام حتما باید https باشید

آفلاین
user-avatar
Cix
2 سال پیش

استاد همه چی میفرسته اما replyKeyboardMarkup را که واد میکنم که keyboards ارسال کنم ارور میده که

BadMethodCallException: Method [replyKeyboardMarkup] does not exist. in file C:\Users\user\Desktop\x\vendor\irazasyed\telegram-bot-sdk\src\Api.php on line 98

چی کنم ؟ :((((

آفلاین
user-avatar
حسام موسوی
2 سال پیش

به جای استفاده از این متد مستقیم از کد زیر استفاده کنید

$reply_markup = Keyboard::make($params);
آفلاین
user-avatar
Cix
2 سال پیش

استاد گرام ممنون مشکل حل شد

آفلاین
user-avatar
HaSaN-Zzz
2 سال پیش
 $keyboard = [
            ['مشاهده محصولات'],
            ['ویژه ها', 'پربازدیدترین', 'جدیدترین'],
            ['لیست موردعلاقه من', 'سوابق مرور من'],
            ['ارتباط با ما']
        ];

        $reply_markup = Key0board::make([
            'keyboard' => $keyboard,
            'resize_keyboard' => true,
            'one_time_keyboard' => true
        ]);

        Telegram::sendMessage([
            'chat_id' => request('message.chat.id'),
            'text' => 'heloo',
            'reply_markup' => $reply_markup
        ]);

اقای موسوی منم همچین مشکلی داشتم با این متدی که گفتین جایگزین کردم ولی با این اررور میده

Symfony\Component\Debug\Exception\FatalThrowableError: Class 'App\Telegram\Commands\Keyboard' not found in file C:\Users\MoHaMMaD-HaSaN\Desktop\botickshop\app\Telegram\Commands\StartCommand.php on line 26
آفلاین
user-avatar
حسام موسوی
2 سال پیش

شما اشتباهی نوشتید Key0board اون عدد صفر اون وسط چیکار میکنه

آفلاین
user-avatar
HaSaN-Zzz
2 سال پیش

اره ببخشید اینجا دستم خورده مثه اینکه متوجه نشدم ولی بازم اونو که برداشتم هنوزم همون اررور میده فک کنم اپدیت جدید بعضی متدا کار نمیکنه وقتی توی رباتم start میزنم با replyWithMessage() میتونم پاسخی ارسال کنم ولی با Telegram::sendMessage() پاسخی ارسال نمیشه نمیدونم چرا !!!!

آفلاین
user-avatar
حسام موسوی
2 سال پیش

بله همیشه سعی کنید متد ها رو از کتابخونه دنبال کنید

آفلاین
user-avatar
Cix
2 سال پیش

استاد بررسی کردم برای چت آیدی و توی گیت هاب که میگشتم با این کد مواجه شدم . گفتم شاید شخص دیگه ای هم مشکل منو داشت

$update = Telegram::getWebhookUpdates();
$chat_id = $update->getMessage()->getChat()->getId();