Как бы не ругались некоторые товарищи на 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();
...