Yandex.Alice ja Telegrami bot PHP-l koos ühise funktsionaalsusega

Tere päevast.

Telegrami botide kohta on palju artikleid, kuid Alice'i oskuste kohta kirjutatakse harva, ning teavet selle kohta, kuidas teha ühte bot'i, ei leidnud ma üldse. Seetõttu otsustasin jagada oma kogemust, kuidas luua lihtne Telegrami bot ja Yandex.Alice oskus veebisaidi jaoks, sealhulgas ühine funktsionaalsus.

Nii et, kuidas käivitada veebiserver ja saada ssl-sertifikaat ma ei räägi, selle kohta on piisavalt kirjutatud.

Telegrami boti loomine

Esmalt loome Telegrami boti, selleks läheme Telegrami ja otsime sealt bot'i BotFather.

Yandex.Alice ja Telegrami bot PHP-l koos ühise funktsionaalsusega

Yandex.Alice ja Telegrami bot PHP-l koos ühise funktsionaalsusega

Valime /newbot

Yandex.Alice ja Telegrami bot PHP-l koos ühise funktsionaalsusega

Sisestame boti nime, millele ta reageerib, seejärel sisestame boti kasutajanime. Vastuseks saame бoti juhtimiseks token'i, salvestame selle võtme, see tuleb meile hiljem kasuks.

Yandex.Alice ja Telegrami bot PHP-l koos ühise funktsionaalsusega

Järgmine samm on teavitada Telegrami servereid, millisele serverile saata boti andmed. Selleks loome lingi kujul:

https://api.telegram.org/bot___TOKKEN___/setWebhook?url=https://____TEE_SKRIPTINI___

___TOKKEN___ asendame meie varem saadud boti token'iga

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

Siin on probleem, server api.telegram.org on blokeeritud, kuid on võimalik teha järgmist: rentida kõige odavam, server seal, kus ei ole piiranguid, ja anda selle serveri konsoolist käsk.

wget ___SAADUD_AADRESS___

Kõik, Telegrami bot on loodud ja seotud teie serveriga.

Osakonna loomine Yandex.Alice jaoks

Liigume edasi osakonna loomise juurde Yandex.Alice jaoks.

Osakonna loomiseks peate minema Yandex.Dialogue arendajate lehele. Yandex.Dialogue arendajate lehele,kliki seal 'Loo dialooge' ja vali 'Osakond Alicele'.

Yandex.Alice ja Telegrami bot PHP-l koos ühise funktsionaalsusega

Avaneb osakonna häälte dialoog.

Yandex.Alice ja Telegrami bot PHP-l koos ühise funktsionaalsusega

Alustame osakonna seadistuste sisestamist.

Sisestage teie osakonna nimi.

Yandex.Alice ja Telegrami bot PHP-l koos ühise funktsionaalsusega

Aktiveerimise nimi tuleks valida väga hoolikalt, et Alice saaks seda õigesti mõista; arvestada tuleb, et Alice mobiilirakendus ja sellised kõlarid nagu Yandex.Station või Irbis A saavad sõnu erinevalt tõlgendada.

Sisestage skripti tee meie serveris samamoodi nagu Telegrami puhul, 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-l koos ühise funktsionaalsusega

Valige hääl, millega osakond räägib; mulle meeldib kõige rohkem Alice hääl.

Yandex.Alice ja Telegrami bot PHP-l koos ühise funktsionaalsusega

Kui töö toimub ainult mobiilseadmete või brauseri kaudu, valime „Vajalik seadme ekraan“.

Seejärel sisestame Aliase oskuste katalooge seaded. Kui kavatsete aktiveerimiseks kasutada kaubamärki — peate kaubamärgi veebisaidi verifitseerima teenuses webmaster.yandex.ru.

Yandex.Alice ja Telegrami bot PHP-l koos ühise funktsionaalsusega

Seadete osas on kõik, liikume skriptide juurde.

Telegrami-boti skript

Alustame Telegrami skriptiga.

Ühendame raamatukogu, kus töödeldakse boti ja Aliase sõnumeid:

include_once 'webhook_parse.php';

Määrame meie boti tokeni:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

Saame andmed:

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

Töötleme andmed muutujateks:

if (!$request)
{
  die();
    // Mõni viga väljund (päring pole kehtiv JSON)
}
else if (!isset($request['update_id']) || !isset($request['message']))
{
  die();
    // Mõni viga väljund (päringul puudub sõnum)
}
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 saab muutujatega töötada:

$tokens — siin on nüüd kõik sõnade, mille kasutaja sisestab

$user_id — siin on kasutaja id

$msg_chat_id — vestlus, kus bot sai käsu

$msg_user_name — kasutajanimi

Jätkame funktsiooni Parse_Tokens töötlemisega:

$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 jaoks mõeldud oskuse skript

Liigume nüüd skripti juurde Alicele, see on peaaegu sama, mis Telegramis.

Lisame ka teegi, kust töötatakse välja botilt ja Alicelt saadud sõnumid, pluss teegi, kus on Alice'i klassid:

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

Saame andmed:

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

Töötleme 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õnade, mille kasutaja sisestab

$user_id — siin on kasutaja id

Yandex pings published skills frequently, and I added a line to exit the script immediately without running full message processing:

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

We call the Parse_Tokens function for processing, which is the same as for Telegram:

$Out_Str = Parse_Tokens($tokens);

Ja saadame vastuse:

Send_Out($user_id, $Out_Str);

The Send_Out function here is a bit more complex:

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

Skript on lõpetatud Alice jaoks.

Parse_Tokens töötlemiseks mõeldud skript on tehtud lihtsalt näidisena, saate seal teha igasuguseid kontrolle ja töötlemisi.

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

Kui teil on vaja keerulisemat kasutajaga suhtlemist kui küsimus-vastus, peate salvestama andmebaasi (näiteks mysql) $user_id ja juba kasutajalt saadud andmed ning analüüsima 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 uude oskusesse testimise vahelehele.

Yandex.Alice ja Telegrami bot PHP-l koos ühise funktsionaalsusega

Kui kõik töötab korralikult, saate oskuse korraldada modereerimise, vajutades nuppu «Modereerimisele».

Nüüd on teil kahte bot'i erinevatele platvormidele, mis töötavad ühtemoodi.

Yandex.Dialogide teenuse dokumentatsioon siin

Täielikud skriptid on üles laetud githubi lae alla.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster