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