میلاد هدایت پور
3 سال پیش توسط میلاد هدایت پور مطرح شد
9 پاسخ

مشکل در برقراری ارتباط بین php و telegram bot

سلام من میخوام بعد از اینکه کاربر پیامی یا دکمه ای توی بات تلگرامی که ساختم فرستاد، ریسپانس رو با webhook دریافت کنم.
مراحل رو کامل انجام دادم :
ادرس فایل webhook رو با بات ست کردم و پیام: Webhook is set فرستاده شد برام.
ssl هم روی هاست فعال هست و مشکلی نداره
اینم کد webhook:

$input = file_get_contents('php://input');

$update = json_decode($input);
$message = $update->message;
$chaiId = $message->chat_id;
$text = $message->text;

$token = "1930362572:AAHEcQhhky9tnOA2ry-bl9mHv-I1Pl0IIR4";

if($text == "/start" || $text == "1"){
    $record = Capsule::table('telegramConnect')->where('clientId', '1')->delete();
    file_get_contents("https://api.telegram.org/bot$token/sendMessage?chat_id=$chaiId&text=$text");
}

وقتی کاربر پیامی توی بات میفرسته اصلا توی این فایل نمیاد. چون اولش برای تست خواستم یک رکورد رو از دیتابیس پاک کنم ولی اون هم نمیشد. یعنی اصلا توی این فایل نمیاد.
مشکل بعدی file_get_contents هست! قبل اینکه کاربر رو به تلگرام ریدایرکت کنم، میام با:

file_get_contents("https://api.telegram.org/bot1930362572:AAHEcQhhky9tnOA2ry-bl9mHv-I1Pl0IIR4/sendMessage?chat_id=$chat_id&text=message from php");

پیام تستی بفرستم برای کاربر ولی خیلی طول میکشه اخر سر هم false برمیگردونه!

میشه راهنمایی کنید چرا نه توی فایل webhook میره و نه با file_get_contents میشه پیام فرستاد؟
مرسی


ثبت پرسش جدید
Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 3 سال پیش آپدیت شد
0

سلام
@miladparsi1070

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

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

$API_KEY = 'Token'; # -- Token -- #
$bot_id = 'Bot UserName'; # -- Bot UserName -- #
$channel = 'channel'; # -- Channel iD -- #
$admin1 = 'Admin'; # -- Admin -- #
$admin2 = 'Admin'; # -- Admin -- #
define('API_KEY', $API_KEY);
$admins = array($admin1,$admin2);
function bot($method, $datas = []){
    $url = "https://api.telegram.org/bot" . API_KEY . "/" . $method;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $datas);
    $res = curl_exec($ch);
    if (curl_error($ch)) {
        var_dump(curl_error($ch));
    } else {
        return json_decode($res);
}}
function SendMessage($chat_id, $text, $key){
bot('sendMessage', ['chat_id' => $chat_id,'text' => $text,'parse_mode' => 'Html','disable_web_page_preview' => true,'reply_markup' => $key]);}
function Forward($chat_id,$from_id,$massege_id){
bot('ForwardMessage',['chat_id'=>$chat_id,'from_chat_id'=>$from_id,'message_id'=>$massege_id]);}
$button=json_encode(['keyboard' => [[['text' => 'تست']],[['text' => 'تست2']]],'resize_keyboard' => true]);
$update = json_decode(file_get_contents('php://input'));
$text = $update->message->text;
$chat_id = $update->message->chat->id;
$message_id = $update->message->message_id;
$first_name = $update->message->from->first_name;
$chatid = $update->callback_query->message->chat->id;
$first_name2 = $update->callback_query->from->first_name;
$data = $update->callback_query->data;

if($text == '/start'){
    SendMessage($chat_id,"سلام",$button);
    }
    }else{
...

موفق باشید


حسن حکمتی
تخصص : برنامه نویس وب و بلاکچین
@hekmati 3 سال پیش مطرح شد
0

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

https://api.telegram.org/bot1930362572:AAHEcQhhky9tnOA2ry-bl9mHv-I1Pl0IIR4/getme
ok  true
result  
id  1930362572
is_bot  true
first_name  "mwhtestbot"
username    "myMwhTestbot"
can_join_groups true
can_read_all_group_messages false
supports_inline_queries false

برای اینکه ایراد کار رو متوجه بشید هر چیز اضافه ای رو حذف کنید و فقط تلاش کنید ابتدا chat_id کاربر رو بگیرید بعد بقیه قسمت ها رو طبق نیاز پیاده کنید.


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 3 سال پیش آپدیت شد
0

سلام
@miladparsi1070

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

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

$API_KEY = 'Token'; # -- Token -- #
$bot_id = 'Bot UserName'; # -- Bot UserName -- #
$channel = 'channel'; # -- Channel iD -- #
$admin1 = 'Admin'; # -- Admin -- #
$admin2 = 'Admin'; # -- Admin -- #
define('API_KEY', $API_KEY);
$admins = array($admin1,$admin2);
function bot($method, $datas = []){
    $url = "https://api.telegram.org/bot" . API_KEY . "/" . $method;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $datas);
    $res = curl_exec($ch);
    if (curl_error($ch)) {
        var_dump(curl_error($ch));
    } else {
        return json_decode($res);
}}
function SendMessage($chat_id, $text, $key){
bot('sendMessage', ['chat_id' => $chat_id,'text' => $text,'parse_mode' => 'Html','disable_web_page_preview' => true,'reply_markup' => $key]);}
function Forward($chat_id,$from_id,$massege_id){
bot('ForwardMessage',['chat_id'=>$chat_id,'from_chat_id'=>$from_id,'message_id'=>$massege_id]);}
$button=json_encode(['keyboard' => [[['text' => 'تست']],[['text' => 'تست2']]],'resize_keyboard' => true]);
$update = json_decode(file_get_contents('php://input'));
$text = $update->message->text;
$chat_id = $update->message->chat->id;
$message_id = $update->message->message_id;
$first_name = $update->message->from->first_name;
$chatid = $update->callback_query->message->chat->id;
$first_name2 = $update->callback_query->from->first_name;
$data = $update->callback_query->data;

if($text == '/start'){
    SendMessage($chat_id,"سلام",$button);
    }
    }else{
...

موفق باشید


میلاد هدایت پور
تخصص : در حال پیشرفت
@miladparsi1070 3 سال پیش مطرح شد
0

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


میلاد هدایت پور
تخصص : در حال پیشرفت
@miladparsi1070 3 سال پیش مطرح شد
0

@Alimotreb
ادرس درست هست
وب هوک ست شده و وقتی ادرس خود وب هوک رو تو کروم میزنم، کد حذف از دیتابیسی که اولش گذاشتم کار میکنه و رکورد حذف میشه.
ولی از طریق تلگرام به این فایل نمیاد.
وقتی getWebhookInfo میگیرم ارور "Connection timed out" دارم! نمیدونم دلیلش چیه

این کدی که دادین باید وب هوک و کد اصلیش جدا بشه دیگه درسته؟


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 3 سال پیش مطرح شد
0

سلام
@miladparsi1070

کدی ک بهتون دادم رو توی یه فایل بزارید به اسم index.php ، bot.php یا هر چی...
روی این فایل وب هوک ست کنید
و بعد ربات رو استارت کنید!

بعدشم روند توسعه رو میتونید شروع کنید طبق مثال هایی که تو کد هست ، چت آیدی بگیرید و ... متد های تلگرام رو اجرا کنید.

موفق باشید.


Muhammad
تخصص : Back-End Developer
@muhammad 3 سال پیش مطرح شد
0

سلام، دو نکته رو مد نظر داشته باشین:
اول اینکه پیام موفقیت setWebhook به معنی این نیست که ارتباط بین ربات و کدهای شما برقرار شده.
دوم اینکه با متد getWebhookInfo یه url می‌گیرین، اونو با براوزرتون باز کنین. خطایی که گذاشتین، یعنی نتونسته توی وقت مناسب جواب بده و timeout شده.


حسن حکمتی
تخصص : برنامه نویس وب و بلاکچین
@hekmati 3 سال پیش مطرح شد
0

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


Muhammad
تخصص : Back-End Developer
@muhammad 3 سال پیش مطرح شد
0

پیشنهاد می‌کنم این پکیج رو تست کنین:
https://github.com/WebPajooh/TeleBot
این هم یه نمونه که با همین پکیج نوشته شده:
https://github.com/WebPajooh/AntiBot


میلاد هدایت پور
تخصص : در حال پیشرفت
@miladparsi1070 3 سال پیش مطرح شد
0

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


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

ورود یا ثبت‌نام