Разработка бота в мессенджере MAX. Часть 1
Во всех мануалах пишут что бота нужно создавать в боте MasterBot, однако у меня он усиленно пишет что «Сейчас создать бота не получится. Попробуйте позже». Удалось создать только в консоли разработчика из https://business.max.ru/self/#/services, для этого нужно подтвердить организацию при помощи ЭЦП ключа. Простым физическим лицам, похоже пока бота не создать.
Документация по разработке бота тут: https://dev.max.ru/docs-api/ , увы не очень удобная. Как делать некоторые вещи я сделать долго путался, а некоторые так и не удалось, пришлось копаться в исходниках их официального клиента API на Python.
Итак, для начала создал класс для работы с мессенджером, который берет на себя всю рутину:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
class TMax { public $url=""; public $login=""; public $password=""; public function __construct($url,$token) { $this->url=$url; $this->token=$token; } function Reqwest($reqwest,$params,$type="POST"){ if ($type=="GET"){ $reqwest=$reqwest."?".http_build_query($params); }; if ($type=="POST"){ $reqwest=$reqwest."?".http_build_query($params); }; $ch = curl_init($this->url.$reqwest); $authorization = "Authorization:".$this->token; $this->PutLog("--(R $type) in $reqwest :".json_encode($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json',$authorization)); if ($type=="POST"){ curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params)); }; if ($type=="PATCH"){ curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params)); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH'); } curl_setopt($ch, CURLOPT_TIMEOUT, 600); $res=curl_exec($ch); if(curl_errno($ch)){ throw new Exception(curl_error($ch)); }; $this->PutLog("--(R) out :".json_encode($res)); $response = json_decode($res); return $response; } function PutLog($txt){ if (DEBUG==true){ $data=Date("m-d-y h:i:s")." ".$txt."\n"; file_put_contents(API_LOG_FILE, $data,FILE_APPEND); if (DEV_MODE==true){ echo $data."<br/>"; }; }; } } |
Далее необходимо зарегистрировать вебхук, куда платформа будет посылать обновления по по событиям:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$url="https://".$_SERVER["SERVER_NAME"].$_SERVER["SCRIPT_URL"]; echo "-оформляем подписку на текущий URL:$url<br/>"; $params=[]; $params["url"]=$url; $params["secret"]=secret; $params["update_types"]=["message_created","bot_started"]; $res=$Max->Reqwest("subscriptions",$params); if (isset($res->success)){ if ($res->success==true){ echo "-Успешно<br/>"; } else { echo "-возникла ошибка:".$res->message."<br/>"; }; } else { echo "-возникла ошибка. Подробности в логах<br/>"; }; die(); |
Получить информацию о боте можно так:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
if (isset($_GET["BotInfo"])){ echo "-информация о боте<br/>"; $params=[]; $res=$Max->Reqwest("me",$params,"GET"); if (isset($res->user_id)){ echo "<pre>"; var_dump($res); } else { echo "-возникла ошибка. Подробности в логах<br/>"; }; die(); } |
Установить команды бота:
|
1 |
if (isset($_GET["BotCommand"])){<br> echo "-устанавливаем доступные команды для бота<br/>"; <br> $params=[];<br> $params[]=["name"=>"Ку","description"=>"Говорить Ку пацаки.."];<br> $params[]=["name"=>"ЫЫ","description"=>"Говорить ЫЫ пацаки.."];<br> $params[]=["name"=>"help","description"=>"Тыгыдын"];<br> $res=$Max->Reqwest("me",["commands"=>$params],"PATCH");<br> die(); <br>} |
Причем установить то я команды установил, но в самом боте в мессенджере они так и не отображаются. Почем? Пока не выяснено.
В самом вебхуке прописал отлов событий присоединения к боту, и пользователь что-то написал. В этом случае отвечаем ему:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
if ($in->update_type=="bot_started"){ $params=[]; $params["user_id"]=$in->user->user_id; //$params["chat_id"]=$in->chat_id; $params["text"]="О! Свежее мясо!"; $params["format"]="html"; $res=$Max->Reqwest("messages",$params,"POST"); }; if ($in->update_type=="message_created"){ $params=[]; //$params["user_id"]=$in->message->recipient->user_id; $params["chat_id"]=$in->message->recipient->chat_id; $params["text"]="Привет человек!"; $params["format"]="markdown"; $params["attachments"]=[]; //$params["link"]=["type"=>"forward","mid"=>$in->message->body->mid]; $res=$Max->Reqwest("messages",$params,"POST"); }; |
