Yandex.Alice ja Telegrami bot PHP-s ühtse funktsionaalsusega

Tere päevast.

Telegram-botidest on palju artikleid, kuid oskuste kohta Alisale räägib keegi vähe, ja ma ei leidnud üldse teavet, kuidas luua ühtset boti, seetõttu otsustasin jagada oma kogemust, kuidas luua lihtsat Telegram-boti ja Yandex.Alice oskust, millel on ühine funktsionaalsus.

Nii, kuidas üles seada veebiserver ja saada ssl-sertifikaat ma rääkima ei hakka, sellest on piisavalt kirjutatud.

Telegram-boti loomine

Esiteks loome Telegram-boti, selleks mine Telegrami ja leia sealt BotFather.

Yandex.Alice ja Telegrami bot PHP-s ühtse funktsionaalsusega

Yandex.Alice ja Telegrami bot PHP-s ühtse funktsionaalsusega

Vali /newbot

Yandex.Alice ja Telegrami bot PHP-s ühtse funktsionaalsusega

Sisesta boti nimi, millele ta reageerib, seejärel sisesta boti kasutajanimi, vastuseks saad tokeni boti haldamiseks, salvestame selle võtme, see tuleb meile hiljem kasuks.

Yandex.Alice ja Telegrami bot PHP-s ühtse funktsionaalsusega

Järgmine samm on öelda Telegrami serveritele, kuhu boti andmeid saata. Selleks teeme lingi kujul:

https://api.telegram.org/bot___TOKEN___/setWebhook?url=https://____TEE_KRIPTI___

___TOKEN___ asendame meie poolt varem saadud boti tokeniga

____TEE_KRIPTI___ asendame meie serveris oleva skripti aadressiga, kus andmete töötlemine toimub (näiteks www.my_server.ru/webhook_telegram.php).

Siin on probleem, api.telegram.org server on blokeeritud, kuid võid teha nii: rentida kõige odavam server seal, kus pole teadlikkuse piiramisi ja anda selle serveri konsoolist käsk

wget ___SAADUD_AADRESS___

Kõik, Telegram-bot on loodud ja ühendatud sinu serverilt.

Yandex.Alice oskuse loomine

Liigume edasi Yandex.Alice oskuse loomise juurde.

Oskuse loomiseks pead minema Yandex.Dialogide arendaja lehele Yandex.Dialogide arendaja lehele, vajuta seal "Loo dialoog" ja vali "Oscar Alice's".

Yandex.Alice ja Telegrami bot PHP-s ühtse funktsionaalsusega

Avanevad oskuse seadistuste dialoog.

Yandex.Alice ja Telegrami bot PHP-s ühtse funktsionaalsusega

Alustame oskuse seadistuste sisestamist.

Sisesta oma oskuse nimi.

Yandex.Alice ja Telegrami bot PHP-s ühtse funktsionaalsusega

Aktiveerimise nime tuleks valida väga ettevaatlikult, et Alice seda õigesti mõistaks, detailina – mobiilirakendus Alicega ja seadmed nagu Yandex.Station või Irbis A võivad sõnu eri viisil tajuda.

Sisesta meie serveris oleva skripti tee nagu Telegrami jaoks, kuid see on skript, mis on mõeldud just Alicele, näiteks www.my_server.ru/webhook_alice.php.

Yandex.Alice ja Telegrami bot PHP-s ühtse funktsionaalsusega

Vali hääl, millega oskus räägib, mulle meeldib just Alice hääl.

Yandex.Alice ja Telegrami bot PHP-s ühtse funktsionaalsusega

Kui on plaanis töötada ainult mobiilseadmetes või brauseris, siis vali "Vajalik ekraaniga seade".

Edasi sisestame Alice oskuste katalooge seadistused. Kui plaanite aktiveerimiseks kasutada sõna - bränd, peate läbima brändi veebisaidi valideerimise teenuses webmaster.yandex.ru.

Yandex.Alice ja Telegrami bot PHP-s ühtse funktsionaalsusega

Seadistustega on kõik, liigume skriptide juurde.

Telegrami roboti skript

Alustame Telegrami skriptist.

Käivitame teegi, kus töödeldakse roboti ja Alice' sõnumeid:

include_once 'webhook_parse.php';

Määrame meie roboti tokeni:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

Saame andmed:

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

Mäletame andmed muutujateks:

if (!$request)
{
  die();
    // Mõni viga (taotlus ei ole kehtiv JSON)
}
else if (!isset($request['update_id']) || !isset($request['message']))
{
  die();
    // Mõni viga (taotlusel ei ole sõnumit)
}
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 on võimalik töötada muutujatega:

$tokens — siin on nüüd kõik sõnad, mida kasutaja sisestas

$user_id — siin on kasutaja id

$msg_chat_id — vestlus, kus robot sai käsu

$msg_user_name — kasutaja nimi

Seejärel kutsume üles töötlemiseks funktsiooni Parse_Tokens:

$Out_Str = Parse_Tokens($tokens);

Ja saadame vastuse:

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.Alice oskuse skript

Nüüd liigume Alice skripti juurde, see on peaaegu sama nagu Telegrami skript.

Käivitame ka teegi, kus töödeldakse roboti ja Alice'i sõnumeid, pluss teegi klassidega Alice'i jaoks:

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

Saame andmed:

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

Mäletame andmed 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 vajalikke muutujaid veidi vähem:

$tokens — siin on nüüd kõik sõnad, mida kasutaja sisestas

$user_id — siin on kasutaja id

Yandex jälgib pidevalt avaldatud oskusi, ja ma lisasin rea, et skriptist kohe välja minna, käivitamata sõnumi täielikku töötlemist:

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

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

$Out_Str = Parse_Tokens($tokens);

Ja saadame vastuse:

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) 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õpetasime skripti Alice jaoks.

Isegi skripti töötlemiseks Parse_Tokens tegin puhtalt näitena, saate seal teha igasuguseid kontrolle ja töötlemisi.

function Parse_Tokens($tokens)
{
  $out = "";
  // tee midagi tokenitega //
  $out =  "Teie sisestatud " . count($tokens) . " sõna: " . implode($tokens, " ");
  return $out;
}

Kui peate suhtlust kasutajaga keerulisemaks, kui küsimus-vastus, on vaja salvestada andmebaasis (näiteks mysql) $user_id kasutaja ja juba kasutajalt saadud andmed ning analüüsida neid funktsioonis Parse_Tokens.

Sisuliselt on see peaaegu kõik, kui kõik on õigesti tehtud, on Telegrami bot juba saadaval, Alice oskust saab kontrollida dialogs.yandex.ru/developer, minnes oma uuele oskusele testeeringu vahekaardile.

Yandex.Alice ja Telegrami bot PHP-s ühtse funktsionaalsusega

Kui kõik töötab õigesti, saate oskuse moderatsioonile saata, vajutades nuppu „Moderatsioonile“.

Nüüd on teil kaks bot'i erinevate platvormide jaoks, mis töötavad ühtemoodi.

Yandex.Dialogide teenuse dokumentatsioon siit

Täielikud skriptid on üles laaditud GitHubi alla laadida.

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster