Yandex.Alice dhe boti Telegram në PHP me funksionalitet të vetëm

Mirëmëngjes.

Ka shumë artikuj në tema të botëve Telegram, por pak kush shkruan për aftësitë për Alice, dhe nuk kam gjetur informacione si të krijoj një bot të vetëm, prandaj vendosa të ndaj përvojën time se si të bëj një bot të thjeshtë Telegram dhe aftësinë Yandex.Alice për një faqe, me funksionalitet të vetëm.

Pra, si të ngremë serverin web dhe të marrim certifikatën ssl nuk do ta përshkruaj, për këtë është shkruar mjaft.

Krijimi i botit Telegram

Së pari krijojmë botin Telegram, për këtë shkojmë në Telegram dhe gjejmë botin BotFather.

Yandex.Alice dhe boti Telegram në PHP me funksionalitet të vetëm

Yandex.Alice dhe boti Telegram në PHP me funksionalitet të vetëm

Zgjedhim /newbot

Yandex.Alice dhe boti Telegram në PHP me funksionalitet të vetëm

Shkruajmë emrin e botit, me të cilin do të përgjigjet, pastaj shkruajmë emrin e botit, në përgjigje marrim një token për menaxhimin e botit, e shkruajmë këtë çelës, do na nevojitet më vonë.

Yandex.Alice dhe boti Telegram në PHP me funksionalitet të vetëm

Hapi tjetër është ta informojmë serverat e Telegramit se në cilin server duhet të dërgojmë të dhënat nga boti. Për këtë krijojmë një lidhje si:

https://api.telegram.org/bot___TOKEN___/setWebhook?url=https://____RRUGA_DER_NË_SCRIPT___

___TOKEN___ e zëvendësojmë me tokenin tonë nga boti, e fituar më parë

____RRUGA_DER_NË_SCRIPT___ e zĂ«vendĂ«sojmĂ« me adresĂ«n e skriptit nĂ« serverin tonĂ«, ku do tĂ« ndodhĂ« pĂ«rpunimi i tĂ« dhĂ«nave (pĂ«r shembull, www.my_server.ru/webhook_telegram.php).

Ka këtu një problem, serveri api.telegram.org është në bllokim, por mund të bëni kështu: merrni me qira më të lirën server aty ku nuk ka kufizime dhe jepni nga konsola e këtij serveri komandën

wget ___ADRESA_E_KAPRATUR___

Të gjitha, boti Telegram është krijuar dhe i lidhur me ju serverin.

Krijimi i një aftësie për Yandex.Alice

Të kalojmë te krijimi i aftësisë për Yandex.Alice.

Për të krijuar një aftësi, duhet të kaloni në faqen e zhvilluesve të Yandex.Dialogs faqja e zhvilluesve të Yandex.Dialogs, klikoni atje 'Krijo dialog' dhe zgjidhni 'Aftësi në Alice'.

Yandex.Alice dhe boti Telegram në PHP me funksionalitet të vetëm

Do të hapet dialogu i cilësimeve të aftësisë.

Yandex.Alice dhe boti Telegram në PHP me funksionalitet të vetëm

Fillojmë të shtojmë cilësimet e aftësisë.

Shtojmë emrin e aftësisë tuaj.

Yandex.Alice dhe boti Telegram në PHP me funksionalitet të vetëm

Emri aktivizues duhet të zgjidhet me shumë kujdes, në mënyrë që Alice ta kuptojë saktë, nga nuancat - aplikacioni mobil me Alice dhe kolonat si Yandex.Station apo Irbis A mund të perceptojnë fjalët ndryshe.

Shtojmë rrugën deri te skripta në serverin tonë ashtu si për Telegram, por kjo do të jetë skripta për Alice, për shembull www.my_server.ru/webhook_alice.php.

Yandex.Alice dhe boti Telegram në PHP me funksionalitet të vetëm

Zgjidhni zërin me të cilin do të flasë aftësia, më pëlqen më shumë zëri i Alice.

Yandex.Alice dhe boti Telegram në PHP me funksionalitet të vetëm

Nëse planifikohet që puna të bëhet vetëm në pajisje mobile ose në shfletues, zgjidhni "Nevojitet pajisje me ekran".

MĂ« pas, vendosni cilĂ«simet pĂ«r katalogun e aftĂ«sive tĂ« AlisĂ«s. NĂ«se planifikoni tĂ« pĂ«rdorni fjalĂ«n — markĂ« pĂ«r aktivizim, duhet tĂ« kaloni verifikimin e faqes sĂ« markĂ«s nĂ« shĂ«rbimin webmaster.yandex.ru.

Yandex.Alice dhe boti Telegram në PHP me funksionalitet të vetëm

Me cilësimet përfundoi, kalojmë te skriptet.

Skripti i bot-it në Telegram

Le të fillojmë me skriptin për Telegram.

Lidhim bibliotekën që do të trajtojë mesazhet nga boti dhe Alisa:

include_once 'webhook_parse.php';

Përcaktojmë token-in e bot-it tonë:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

Marrim të dhënat:

$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);

Analizojmë të dhënat në variabla:

if (!$request)
{
  die();
    // Disa gabime në dalje (kërkesa nuk është JSON i vlefshëm)
}
else if (!isset($request['update_id']) || !isset($request['message']))
{
  die();
    // Disa gabime në dalje (kërkesa nuk ka mesazh)
}
else
{
  $user_id = $request['message']['from']['id'];
  $msg_user_name = $request['message']['from']['first_name'];
  $msg_user_last_name = $request['message']['from']['last_name'];
  $msg_user_nick_name = $request['message']['from']['username'];
  $msg_chat_id = $request['message']['chat']['id'];
  $msg_text = $request['message']['text'];


  $msg_text = mb_strtolower($msg_text, 'UTF-8');


  $tokens = explode(" ", $msg_text);
}

Tani mund të punoni me variablat:

$tokens — kĂ«tu tani janĂ« tĂ« gjitha fjalĂ«t qĂ« pĂ«rdoruesi ka futur

$user_id — kĂ«tu Ă«shtĂ« id e pĂ«rdoruesit

$msg_chat_id — chat-i, nĂ« tĂ« cilin boti mori komandĂ«n

$msg_user_name — emri i pĂ«rdoruesit

Më pas, thërrasim funksionin Parse_Tokens për përpunim:

$Out_Str = Parse_Tokens($tokens);

Dhe dërgojmë përgjigjen:

Send_Out($user_id, $Out_Str);

funksioni Send_Out është i thjeshtë dhe duket kështu:

function Send_Out($user_id, $text, $is_end = true)
{
  global $tg_bot_token;
  if (strlen($user_id) < 1 || strlen($text) < 1) {return;}
  $json = file_get_contents('https://api.telegram.org/bot' . $tg_bot_token . '/sendMessage?chat_id=' . $user_id . '&text=' . $text);
}

 

Skripti i aftësisë për Yandex.Alice

Tani do të kalojmë në skriptin për Alice, shumë e ngjashme me atë për Telegram.

Po ashtu, lidhim bibliotekën ku do të përpunohen mesazhet nga boti dhe Alice, plus një bibliotekë me klasa për Alice:

include_once 'classes_alice.php';
include_once 'webhook_parse.php';

Marrim të dhënat:

$data = json_decode(trim(file_get_contents('php://input')), true);

Analizojmë të dhënat në variabla:

po (isset($data['request']))
{

//original_utterance


  po (isset($data['meta']))
  {
    $data_meta = $data['meta'];
    po (isset($data_meta['client_id'])) {$client_id = $data_meta['client_id'];}
  }

  po (isset($data['request']))
  {
    $data_req = $data['request'];

    po (isset($data_req['original_utterance']))
    {
      $original_utterance = $data_req['original_utterance'];
    }


    po (isset($data_req['command'])) {$data_msg = $data_req['command'];}
    po (isset($data_req['nlu']))
    {
      $data_nlu = $data_req['nlu'];
      po (isset($data_nlu['tokens'])) {$tokens = $data_nlu['tokens'];}
//      $data_token_count = count($data_tokens);
    }
  }
  po (isset($data['session']))
  {
    $data_session = $data['session'];
    po (isset($data_session['new'])) {$data_msg_new = $data_session['new'];}
    po (isset($data_session['message_id'])) {$data_msg_id = $data_session['message_id'];}
    po (isset($data_session['session_id'])) {$data_msg_sess_id = $data_session['session_id'];}
    po (isset($data_session['skill_id'])) {$skill_id = $data_session['skill_id'];}
    po (isset($data_session['user_id'])) {$user_id = $data_session['user_id'];}
  }
}

Këtu ka pak më pak variabla:

$tokens — kĂ«tu tani janĂ« tĂ« gjitha fjalĂ«t qĂ« pĂ«rdoruesi ka futur

$user_id — kĂ«tu Ă«shtĂ« id e pĂ«rdoruesit

Yandex vazhdimisht pingon aftësitë e publikuara, dhe unë shtova një rresht për të dalë direkt nga skripti, pa e filluar përpunimin e plotë të mesazhit:

  po (strpos($tokens[0], "ping") > -1)     {Send_Out("pong", "", true);}

Thërrasim për përpunim funksionin Parse_Tokens, ai është i njëjtë si për Telegram:

$Out_Str = Parse_Tokens($tokens);

Dhe dërgojmë përgjigjen:

Send_Out($user_id, $Out_Str);

Funksioni Send_Out këtu është më i komplikuar:

function Send_Out($user_id, $out_text, $out_tts = "", $is_end = false)
{
  global $data_msg_sess_id, $user_id;

  ///// GJENERO BAZËN E DALJES //////
    $Data_Out = new Alice_Data_Out();
    $Data_Out->response = new Alice_Response();
    $Data_Out->session = new Alice_Session();
  ///// GJENERO BAZËN E DALJES Fund //////

  ///// GJENERO MSG DALJES /////
  $Data_Out->session->session_id = $data_msg_sess_id;;
  $Data_Out->session->user_id = $user_id;

  $Data_Out->response->text = $out_text;
  $Data_Out->response->tts = $out_tts;

  if (strlen($out_tts) < 1) {$Data_Out->response->tts = $out_text;}

  $Data_Out->response->end_session = $is_end;

  header('Content-Type: application/json');
  print(json_encode($Data_Out, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT));

  die();
}

Scripti për Alisën përfundoi.

Scripti i trajtimit të Parse_Tokens është bërë thjesht si shembull, ju do të jeni në gjendje të bëni kontrolle dhe përpunime të ndryshme atje.

function Parse_Tokens($tokens)
{
  $out = "";
  // bëj diçka me tokenët //
  $out =  "Fjalët tuaja janë " . count($tokens) . " : " . implode($tokens, " ");
  return $out;
}

Nëse ju nevojitet komunikim me përdoruesin më të komplikuar se pyetje-përgjigje, atëherë do të nevojitet të ruani në bazën e të dhënave (p.sh. mysql) $user_id dhe të dhënat që keni marrë nga përdoruesi dhe t'i analizoni ato në funksionin Parse_Tokens.

Kjo është thuajse gjithçka, nëse gjithçka është bërë siç duhet, atëherë boti i Telegramit është tashmë në dispozicion, dhe aftësia e Alisës mund të testohet. dialogs.yandex.ru/developer, duke kaluar në aftësinë tuaj të re në skedën e testimit.

Yandex.Alice dhe boti Telegram në PHP me funksionalitet të vetëm

Nëse gjithçka funksionon siç duhet, mund ta dërgoni aftësinë për moderim duke klikuar butonin «Për moderim».

Tani keni dy bota për platformat e ndryshme që funksionojnë në mënyrë të njëjtë.

Dokumentacioni për shërbimin Yandex.Dialogues këtu

SkenerĂ«t e plotĂ« janĂ« tĂ« disponueshĂ«m nĂ« github сĐșачать.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster