Yandex.Alisa ja Telegram robot sama funktsiooniga PHP-s

Tere päevast.

Telegrami robotite teemal on palju artikleid, kuid vähesed inimesed kirjutavad Alice'i oskustest ja ma ei leidnud ühtegi teavet selle kohta, kuidas ühte robotit teha, seega otsustasin jagada oma kogemusi, kuidas lihtne Telegrami robot ja Yandex.Alice'i oskus saidi jaoks, millel on samad funktsioonid.

Niisiis, ma ei räägi teile, kuidas veebiserverit kasvatada ja ssl-sertifikaati hankida, sellest on kirjutatud piisavalt.

Telegrami roboti loomine

Kõigepealt loome Telegrami roboti, selleks läheme Telegrami ja leiame sealt BotFatheri roboti.

Yandex.Alisa ja Telegram robot sama funktsiooniga PHP-s

Yandex.Alisa ja Telegram robot sama funktsiooniga PHP-s

Valige /newbot

Yandex.Alisa ja Telegram robot sama funktsiooniga PHP-s

Sisestame boti nime, millega see reageerib, seejärel sisestame boti nime, vastuseks saame boti juhtimiseks märgi, kirjutame selle võtme üles, see on meile tulevikus kasulik.

Yandex.Alisa ja Telegram robot sama funktsiooniga PHP-s

Järgmine samm on öelda Telegrami serveritele, millisesse serverisse robotist andmed saata. Selleks loome vormi lingi:

https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___

___TOKEN___ asendame oma varem saadud boti märgiga

____PATH_TO_SCRIPT____ asendame selle skripti aadressiga meie serveris, kus andmeid töödeldakse (näiteks www.my_server.ru/webhook_telegram.php).

Siin on probleem, api.telegram.org server on blokeeritud, kuid saate seda teha: rentige odavaim server, kus pole piiranguid ja andke käsk selle serveri konsoolist

wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___

See on kõik, Telegrami bot luuakse ja ühendatakse teie serveriga.

Oskuste loomine Yandex.Alisa jaoks

Jätkame Yandex.Alice'i oskuste loomisega.

Oskuste loomiseks peate minema Yandex.Dialogues arendajate lehele Yandex.Dialogsi arendaja leht, klõpsake seal "Loo dialoog" ja valige "Skill in Alice".

Yandex.Alisa ja Telegram robot sama funktsiooniga PHP-s

Avaneb oskuste seadete dialoog.

Yandex.Alisa ja Telegram robot sama funktsiooniga PHP-s

Alustame oskuste seadete sisestamist.

Sisestage oma oskuse nimi.

Yandex.Alisa ja Telegram robot sama funktsiooniga PHP-s

Aktiveerimisnimi tuleks valida väga hoolikalt, et Alice sellest nüanssidest õigesti aru saaks - Alice'iga mobiilirakendus ja veerud nagu Yandex.Station või Irbis A suudavad sõnu erinevalt tajuda.

Sisestame oma serveris oleva skripti tee samamoodi nagu Telegrami jaoks, kuid see on näiteks spetsiaalselt Alice'i jaoks mõeldud skript www.my_server.ru/webhook_alice.php.

Yandex.Alisa ja Telegram robot sama funktsiooniga PHP-s

Valime hääle, millega oskus kõnelema hakkab, mulle meeldib Alice'i hääl rohkem.

Yandex.Alisa ja Telegram robot sama funktsiooniga PHP-s

Kui kavatsete töötada ainult mobiilseadmetes või brauseris, valige "Teil on vaja ekraaniga seadet".

Järgmisena sisestage Alice'i oskuste kataloogi seaded. Kui kavatsete aktiveerimiseks kasutada sõna "bränd", peate teenuses webmaster.yandex.ru kontrollima kaubamärgi veebisaiti.

Yandex.Alisa ja Telegram robot sama funktsiooniga PHP-s

See on kõik seadetega, liigume edasi skriptide juurde.

Telegrami roboti skript

Alustame Telegrami skriptiga.

Ühendame raamatukogu, kus töödeldakse roboti ja Alice'i sõnumeid:

include_once 'webhook_parse.php';

Seadsime oma roboti märgi:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

Saame andmeid:

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

Andmete sõelumine muutujateks:

if (!$request)
{
  die();
    // Some Error output (request is not valid JSON)
}
else if (!isset($request['update_id']) || !isset($request['message']))
{
  die();
    // Some Error output (request has not message)
}
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);
}

Nüüd saate muutujatega töötada:

$tokens – siin on nüüd kõik kasutaja sisestatud sõnad

$user_id – kasutaja ID siin

$msg_chat_id – vestlus, milles bot sai käsu

$msg_user_name – kasutajanimi

Järgmisena kutsume töötlemiseks funktsiooni Parse_Tokens:

$Out_Str = Parse_Tokens($tokens);

Ja saatke vastus:

Send_Out($user_id, $Out_Str);

funktsioon Send_Out on lihtne ja näeb välja selline:

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);
}

Yandex.Alisa oskusskript

Liigume nüüd Alice'i skripti juurde, see on peaaegu sama, mis Telegrami puhul.

Ühendame ka raamatukogu, kus töödeldakse roboti ja Alice'i sõnumeid, ning teegi Alice'i klassidega:

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

Saame andmeid:

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

Andmete sõelumine muutujateks:

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

//original_utterance


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

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

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


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

Siin on mõned muutujad vähem:

$tokens – siin on nüüd kõik kasutaja sisestatud sõnad

$user_id – kasutaja ID siin

Yandex pingib pidevalt avaldatud oskusi ja lisasin rea, et kohe skriptist väljuda ilma sõnumi täielikku töötlemist alustamata:

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

Kutsume töötlemiseks funktsiooni Parse_Tokens, see on sama, mis Telegrami puhul:

$Out_Str = Parse_Tokens($tokens);

Ja saatke vastus:

Send_Out($user_id, $Out_Str);

Funktsioon Send_Out on siin keerulisem:

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

  ///// GENERATE BASE OF OUT //////
    $Data_Out = new Alice_Data_Out();
    $Data_Out->response = new Alice_Response();
    $Data_Out->session = new Alice_Session();
  ///// GENERATE BASE OF OUT End //////

  ///// OUT MSG GENERATE /////
  $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();
}

Lõpetas Alice'i stsenaariumi.

Parse_Tokensi töötlemise skript ise on tehtud puhtalt näite jaoks, seal saab teha mis tahes kontrolle ja töötlemist.

function Parse_Tokens($tokens)
{
  $out = "";
  // do something with tokens //
  $out =  "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
  return $out;
}

Kui teil on vaja suhelda mõne keerulisema vormiga kui küsimus-vastus kasutajaga, siis tuleb kasutaja $user_id ja kasutajalt juba saadud andmed andmebaasi salvestada (näiteks mysql) ja analüüsida funktsioon Parse_Tokens.

Tegelikult on see peaaegu kõik, kui kõik on õigesti tehtud, on Telegrami bot juba saadaval, Alice'i oskusi saab kontrollida dialogs.yandex.ru/developerminnes oma uue oskuse juurde testimise vahekaardil.

Yandex.Alisa ja Telegram robot sama funktsiooniga PHP-s

Kui kõik töötab õigesti, saate oskuse modereerimiseks saata, klõpsates nuppu "Modereerimiseks".

Nüüd on teil korraga kaks robotit erinevatele platvormidele, mis töötavad samal viisil.

Teenuse Yandex.Dialogues dokumentatsioon siin

Täielikud skriptid postitatud githubisse alla laadima.

Allikas: www.habr.com

Lisa kommentaar