Yandex.Alisa un Telegram robots PHP ar tādu paŔu funkcionalitāti

Labdien.

Ir daudz rakstu par Telegram robotu tēmu, taču daži cilvēki raksta par prasmēm Alisei, un es neatradu nekādu informāciju par to, kā izveidot vienu robotu, tāpēc nolēmu dalÄ«ties pieredzē par to, kā izveidot vienkārÅ”s Telegram robots un Yandex.Alice prasme vietnei ar tādu paÅ”u funkcionalitāti.

Tātad, es jums nestāstīŔu, kā izveidot tīmekļa serveri un iegūt SSL sertifikātu, par to ir rakstīts pietiekami daudz.

Telegram robota izveide

Vispirms izveidosim Telegram robotu, Å”im nolÅ«kam mēs ejam uz Telegram un atrodam BotFather robotu.

Yandex.Alisa un Telegram robots PHP ar tādu paŔu funkcionalitāti

Yandex.Alisa un Telegram robots PHP ar tādu paŔu funkcionalitāti

Izvēlieties /newbot

Yandex.Alisa un Telegram robots PHP ar tādu paŔu funkcionalitāti

Mēs ievadām bota nosaukumu, ar kuru tas atbildēs, pēc tam ievadām bota nosaukumu, atbildot mēs saņemam marÄ·ieri bota vadÄ«Å”anai, mēs pierakstām Å”o atslēgu, tas mums noderēs nākotnē.

Yandex.Alisa un Telegram robots PHP ar tādu paŔu funkcionalitāti

Nākamais solis ir paziņot Telegram serveriem, uz kuru serveri sūtīt datus no robota. Lai to izdarītu, mēs izveidojam veidlapas saiti:

https: //api.telegram.org/bot___Š¢ŠžŠšŠ•Š___/setWebhook?url=https://____ŠŸŠ£Š¢Š¬_Š”Šž_Š”ŠšŠ ŠŸŠ˜Š¢Š___

___TOKEN___ mēs aizstājam ar savu marķieri no robota, kas saņemts agrāk

____PATH_TO_SCRIPT____ mēs aizstājam ar tā skripta adresi mūsu serverī, kurā dati tiks apstrādāti (piemēram, www.my_server.ru/webhook_telegram.php).

Å eit ir problēma, api.telegram.org serveris ir bloķēts, bet jÅ«s varat to izdarÄ«t: iznomāt lētāko serveri, kur nav ierobežojumu un dodiet komandu no Ŕī servera konsoles

wget ___ŠŸŠžŠ›Š£Š§Š˜Š’ŠØŠ˜Š™Š”ŠÆ_ŠŠ”Š Š•Š”___

Tas arī viss, Telegram robots ir izveidots un savienots ar jūsu serveri.

Iemaņu izveide Yandex.Alisa

Pāriesim pie Yandex.Alice prasmes izveides.

Lai izveidotu prasmi, jums jāiet uz Yandex.Dialogues izstrādātāju lapu Yandex.Dialogs izstrādātāja lapa, noklikŔķiniet tur "Izveidot dialogu" un atlasiet "Skill in Alice".

Yandex.Alisa un Telegram robots PHP ar tādu paŔu funkcionalitāti

Tiks atvērts prasmju iestatÄ«jumu dialoglodziņŔ.

Yandex.Alisa un Telegram robots PHP ar tādu paŔu funkcionalitāti

Mēs sākam ievadīt prasmju iestatījumus.

Ievadiet savas prasmes nosaukumu.

Yandex.Alisa un Telegram robots PHP ar tādu paŔu funkcionalitāti

Aktivizācijas nosaukums jāizvēlas ļoti rūpīgi, lai Alise to saprastu pareizi, pēc niansēm - mobilā aplikācija ar Alisi un kolonnām, piemēram, Yandex.Station vai Irbis A vārdus var uztvert dažādi.

Mēs ievadām ceļu uz skriptu savā serverÄ« tādā paŔā veidā kā Telegram, bet tas bÅ«s skripts, kas paredzēts, piemēram, Alisei www.my_server.ru/webhook_alice.php.

Yandex.Alisa un Telegram robots PHP ar tādu paŔu funkcionalitāti

Mēs izvēlamies balsi, ar kuru prasme runās, man vairāk patīk Alises balss.

Yandex.Alisa un Telegram robots PHP ar tādu paŔu funkcionalitāti

Ja plānojat strādāt tikai mobilajās ierÄ«cēs vai pārlÅ«kprogrammā, atlasiet ā€œJums nepiecieÅ”ama ierÄ«ce ar ekrānuā€.

Pēc tam ievadiet Alises prasmju kataloga iestatÄ«jumus. Ja plānojat aktivizÄ“Å”anai izmantot vārdu "zÄ«mols", jums ir jāpārbauda zÄ«mola vietne pakalpojumā webmaster.yandex.ru.

Yandex.Alisa un Telegram robots PHP ar tādu paŔu funkcionalitāti

Tas viss ar iestatījumiem, pāriesim pie skriptiem.

Telegrammas robota skripts

Sāksim ar Telegram skriptu.

Mēs savienojam bibliotēku, kurā tiks apstrādāti ziņojumi no robota un Alises:

include_once 'webhook_parse.php';

Mēs iestatījām sava robota marķieri:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

Mēs saņemam datus:

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

Datu parsēŔana mainīgajos:

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

Tagad jūs varat strādāt ar mainīgajiem:

$tokens ā€” Å”eit ir visi lietotāja ievadÄ«tie vārdi

$user_id ā€” lietotāja ID Å”eit

$msg_chat_id - tērzÄ“Å”ana, kurā robots saņēma komandu

$msg_user_name ā€” lietotājvārds

Tālāk apstrādei izsaucam funkciju Parse_Tokens:

$Out_Str = Parse_Tokens($tokens);

Un nosūtiet atbildi:

Send_Out($user_id, $Out_Str);

Funkcija Send_Out ir vienkārŔa un izskatās Ŕādi:

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

Prasmju skripts Yandex.Alisa

Tagad pāriesim pie Alises skripta, tas ir gandrīz tāds pats kā Telegram.

Mēs arī savienojam bibliotēku, kurā tiks apstrādāti ziņojumi no bota un Alises, kā arī bibliotēku ar nodarbībām Alisei:

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

Mēs saņemam datus:

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

Datu parsēŔana mainīgajos:

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'];}
  }
}

Šeit ir daži mazāk mainīgie:

$tokens ā€” Å”eit ir visi lietotāja ievadÄ«tie vārdi

$user_id ā€” lietotāja ID Å”eit

Yandex pastāvīgi pārbauda publicētās prasmes, un es pievienoju rindiņu, lai nekavējoties izietu no skripta, nesākot pilnu ziņojuma apstrādi:

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

Apstrādei mēs izsaucam funkciju Parse_Tokens, tā ir tāda pati kā Telegram:

$Out_Str = Parse_Tokens($tokens);

Un nosūtiet atbildi:

Send_Out($user_id, $Out_Str);

Funkcija Send_Out Ŕeit ir sarežģītāka:

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

Pabeidza Alises scenāriju.

Pats Parse_Tokens apstrādes skripts tika izveidots tikai piemēram, tur varat veikt jebkādas pārbaudes un apstrādi.

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

Ja nepiecieÅ”ams sazināties ar lietotāju, kura forma ir sarežģītāka nekā jautājums-atbilde, tad lietotāja $user_id un no lietotāja jau saņemtie dati ir jāsaglabā datu bāzē (piemēram, mysql) un jāanalizē funkcija Parse_Tokens.

PatiesÄ«bā tas ir gandrÄ«z viss, ja viss ir izdarÄ«ts pareizi, tad Telegram bots jau ir pieejams, Alises prasmes var pārbaudÄ«t dialogs.yandex.ru/developerpārejot uz savu jauno prasmi testÄ“Å”anas cilnē.

Yandex.Alisa un Telegram robots PHP ar tādu paŔu funkcionalitāti

Ja viss darbojas pareizi, prasmi var nosÅ«tÄ«t moderÄ“Å”anai, noklikŔķinot uz pogas "Moderācijai".

Tagad jums ir divi boti dažādām platformām vienlaikus, kas darbojas vienādi.

Dokumentācija pakalpojumam Yandex.Dialogues Ŕeit

Pilni skripti publicēti vietnē github download.

Avots: www.habr.com

Pievieno komentāru