Max: Исключение повторных нажатий кнопок до ответа сервера
Как бы не ругались некоторые товарищи на Habr, что «разрабатывать под Max, себя не уважать», но тем не менее не все имеют этот выбор 😉 Так что проблемы решать таки нужно..
Итак, задача: между нажатием кнопки с кэлбеком и ответом сервера происходит некоторая пауза. Иногда в несколько секунд. Пользователи не всегда дожидаются ответа, и нажимают кнопки по нескольку раз.
Решение: т.к. на основной ответ сервера требуется некоторое время на его подготовку, то перед «настоящим» ответом сервера, отправим «промежуточный», который сообщит пользователю «Подождите ответа сервера», а заодно скроет все кнопки из предыдущего сообщения пользователя, чтоб не было соблазна их нажимать. Код получается примерно такой:
...
if (isset($in->update_type)){
if ($in->update_type=="message_callback"){
$params=[];
$params["callback_id"]=$in->callback->callback_id;
$data=[];
$data["message"]["attachments"]=[];
$data["notification"]="Подождите ответа сервера...";
$res=$Max->Reqwest("answers",$params,$data,"POST");
};
if (($in->update_type=="message_created") or ($in->update_type=="message_callback") or ($in->update_type=="bot_started")){
$res=$Api1c->reqwest("MaxCallback2",["body"=>$body]); // пересылаем всё что пришло в 1С и получаем ответ
if ($res==null){
$params=[];
$params["chat_id"]=$in->message->recipient->chat_id;
$data=[];
$data["text"]="Временная ошибка серверера. Попробуйте позже.";
$data["format"]= "html";
$buttons=[];
$button=[];
$button["type"]="callback";
$button["text"]="Перейти в главное меню";
$button["payload"]="Go2MainMenu";
$buttons[]=$button;
$attachment=[];
$attachment["type"]="inline_keyboard";
$attachment["payload"]["buttons"]=[];
$attachment["payload"]["buttons"][]=$buttons;
$data["attachments"]=[];
$data["attachments"][]=$attachment;
$res=$Max->Reqwest("messages",$params,$data,"POST");
die();
};
// если 1С вернула ошибку то её и показываем пользователю
if ($res->error==true){
$params=[];
if (isset($in->message)){$params["chat_id"]=$in->message->recipient->chat_id;};
if (isset($in->chat_id)){$params["chat_id"]=$in->chat_id;};
$data=[];
$data["text"]=$res->result;
$data["format"]= "html";
$buttons=[];
$button=[];
$button["type"]="callback";
$button["text"]="Перейти в главное меню";
$button["payload"]="Go2MainMenu";
$buttons[]=$button;
$attachment=[];
$attachment["type"]="inline_keyboard";
$attachment["payload"]["buttons"]=[];
$attachment["payload"]["buttons"][]=$buttons;
$data["attachments"]=[];
$data["attachments"][]=$attachment;
$res=$Max->Reqwest("messages",$params,$data,"POST");
die();
};
// Что пришло из 1С, то и отдаём в сообщения пользователю..
$params=$res->result->params;
$data=$res->result->data;
$res=$Max->Reqwest("messages",$params,$data,"POST");
die();
...



