سلام دوستان
من یک ربات تلگرامی نوشتم برای سایتم
من میتونم ایمیلی (نام کاربری) که کاربر در ربات ارسال کرده رو بررسی کنم ولی وقتی کاربر موبایلش رو ارسال میکنه ربات پیغام خطا بر میگردونه
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);
}
}
$email = array();
$queries = "SELECT * FROM tblusers";
$pdoInstance = DBConnection::getDBConnectionInstance();
$statement = $pdoInstance->prepare($queries);
$statement->execute();
$userEmails = $statement->fetchAll();
foreach($userEmails as $userEmail)
{
$email[] = $userEmail['email'];
}
function makeKeyboard(array $opt)
{
$key = array(
'keyboard' => $opt,
'resize_keyboard' => true,
'one_time_keyboard' => true,
'selective' => true
);
return json_encode($key, TRUE);
}
function inline(array $opt)
{
$key = array(
'inline_keyboard' => $opt
);
return json_encode($key, TRUE);
}
function inlinebtn($text)
{
$opt = array(
array(
array(
'text' => $text,
'callback_data' =>$text
)
)
);
return $opt;
}
$menu = array(array("ورود"));
$update = file_get_contents('php://input');
file_put_contents('bot.txt', $update);
$update = json_decode($update, TRUE);
var_dump($update);
$chat_id = $update['message']['from']['id'];
$message = $update['message']['text'];
$return_message = urlencode($message);
$btn = makeKeyboard($menu);
$mobile = array();
$queriesP = "SELECT * FROM tblusers WHERE email = '".$message."'";
$pdoInstanceP = DBConnection::getDBConnectionInstance();
$statementP = $pdoInstanceP->prepare($queriesP);
$statementP->execute();
$userPasswords = $statementP->fetchAll();
foreach($userPasswords as $userPassword)
{
$mobile[] = $userPassword['mobile'];
}
if(trim($message) == '/start')
{
bot('sendMessage', "chat_id=$chat_id&text=به ربات سیوان مال خوش آمدید!&reply_markup=$btn");
}
elseif($message == 'ورود')
{
bot('sendMessage', "chat_id=$chat_id&text=نام کاربری خود را وارد نمایید&reply_markup=$btn");
}
elseif(in_array($message, $email))
{
bot('sendMessage', "chat_id=$chat_id&text=رمز عبور را وارد نمایید&reply_markup=$btn");
}
elseif(in_array($message, $mobile))
{
bot('sendMessage', "chat_id=$chat_id&text=درست است&reply_markup=$btn");
}
else
{
bot('sendMessage', "chat_id=$chat_id&text=نام کاربری یا موبایل اشتباه است&reply_markup=$btn");
}
در ضمن وقتی از $message یا $update وردامپ میگیرم مقدار خالی میده در صورتی که در bot.txt مقدار مسیج رو دارم
$update = file_get_contents('php://input');
file_put_contents('bot.txt', $update);
$update = json_decode($update, TRUE);
var_dump($update);
$chat_id = $update['message']['from']['id'];
$message = $update['message']['text'];
ممنون میشک راهنمایی بفرمایید
سلام
میتونید با یک شرط ساده اینو هندل کنید یا فیلتر های خودش استفاده کنید و جلوی ورود شماره تماس رو بگیرید
سلام. مشکل شما احتمالا به دلیل عدم وجود کلید در update['message'] است. بنابراین، به جای استفاده از $update['message']['text'] برای گرفتن مقدار متن (پیام)، میتوانید از $update['callback_query']['data'] برای دریافت متن بازگشتی از کاربر استفاده کنید.
بعلاوه، مطمئن شوید که در قسمت curl_setopt($ch, CURLOPT_POSTFIELDS, $datas); مقدار $datas با استفاده از کلید "text" درخواست sendMessage حاوی نام کاربری یا موبایل کاربر است.
کد تغییر یافته شما به صورت زیر خواهد بود:
$update = file_get_contents('php://input');
file_put_contents('bot.txt', $update);
$update = json_decode($update, true);
$chat_id = $update['message']['from']['id'];
if (isset($update['callback_query'])) {
// در صورتی که یک پاسخ callback داریم
$message = $update['callback_query']['data'];
} else {
// در غیر اینصورت، یک پیام جدید داریم
$message = $update['message']['text'];
}
$return_message = urlencode($message);
$btn = makeKeyboard($menu);
$mobile = array();
$queriesP = "SELECT * FROM tblusers WHERE email = '".$message."'";
$pdoInstanceP = DBConnection::getDBConnectionInstance();
$statementP = $pdoInstanceP->prepare($queriesP);
$statementP->execute();
$userPasswords = $statementP->fetchAll();
foreach($userPasswords as $userPassword)
{
$mobile[] = $userPassword['mobile'];
}
if(trim($message) == '/start')
{
bot('sendMessage', "chat_id=$chat_id&text=به ربات سیوان مال خوش آمدید!&reply_markup=$btn");
}
elseif($message == 'ورود')
{
bot('sendMessage', "chat_id=$chat_id&text=نام کاربری خود را وارد نمایید&reply_markup=$btn");
}
elseif(in_array($message, $email))
{
bot('sendMessage', "chat_id=$chat_id&text=رمز عبور را وارد نمایید&reply_markup=$btn");
}
elseif(in_array($message, $mobile))
{
bot('sendMessage', "chat_id=$chat_id&text=درست است&reply_markup=$btn");
}
else
{
bot('sendMessage', "chat_id=$chat_id&text=نام کاربری یا موبایل اشتباه است&reply_markup=$btn");
}
لازم به ذکر است که باید callback_query را در تابع bot() بررسی کنید تا پاسخ مناسبی برگردانده شود.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟