سلام من میخوام بعد از اینکه کاربر پیامی یا دکمه ای توی بات تلگرامی که ساختم فرستاد، ریسپانس رو با 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 میشه پیام فرستاد؟
مرسی
سلام
@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{
...
موفق باشید
سلام
تنظیمات اولیه رو درست اعمال کردید.
این لینک رو اجرا کنید تا پاسخ رو ببینید.
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 کاربر رو بگیرید بعد بقیه قسمت ها رو طبق نیاز پیاده کنید.
سلام
@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
داخل کروم میزنم نتیجه همین هست که شما دادین.
اصلا فایلی که ست کردم اجرا نمیشه که من ایدی چت کاربر رو بگیرم
@Alimotreb
ادرس درست هست
وب هوک ست شده و وقتی ادرس خود وب هوک رو تو کروم میزنم، کد حذف از دیتابیسی که اولش گذاشتم کار میکنه و رکورد حذف میشه.
ولی از طریق تلگرام به این فایل نمیاد.
وقتی getWebhookInfo میگیرم ارور "Connection timed out" دارم! نمیدونم دلیلش چیه
این کدی که دادین باید وب هوک و کد اصلیش جدا بشه دیگه درسته؟
سلام
@miladparsi1070
کدی ک بهتون دادم رو توی یه فایل بزارید به اسم index.php ، bot.php یا هر چی...
روی این فایل وب هوک ست کنید
و بعد ربات رو استارت کنید!
بعدشم روند توسعه رو میتونید شروع کنید طبق مثال هایی که تو کد هست ، چت آیدی بگیرید و ... متد های تلگرام رو اجرا کنید.
موفق باشید.
سلام، دو نکته رو مد نظر داشته باشین:
اول اینکه پیام موفقیت setWebhook به معنی این نیست که ارتباط بین ربات و کدهای شما برقرار شده.
دوم اینکه با متد getWebhookInfo یه url میگیرین، اونو با براوزرتون باز کنین. خطایی که گذاشتین، یعنی نتونسته توی وقت مناسب جواب بده و timeout شده.
سلام
نتیجه ای که برگردوند نشون میده تا اون مرحله کار رو درست انجام دادید ولی بقیه روند ایراد داره همین فایلی که جناب @Alimotreb ارسال کردند رو پیاده سازی کنید خیلی روشن و کاربردی دسترسی به متدها رو هم براتون قرار دادن تست کنید تا یک الگوی مناسب داشته باشید بعد بر اساس نیازتون کاستومایز کنید.
@miladparsi1070
پیشنهاد میکنم این پکیج رو تست کنین:
https://github.com/WebPajooh/TeleBot
این هم یه نمونه که با همین پکیج نوشته شده:
https://github.com/WebPajooh/AntiBot
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟