Yandex.Alisa eta Telegram bot PHPn funtzionalitate berarekin

Arratsalde on.

Artikulu asko daude Telegram-eko bot-en gaiari buruz, baina jende gutxik idazten du Aliceren trebetasunei buruz, eta ez nuen bot bakar bat egiteko informaziorik aurkitu, beraz, nire esperientzia partekatzea erabaki nuen. Telegram bot sinplea eta Yandex.Alice trebetasuna funtzionalitate bera duten gunerako.

Beraz, ez dizut esango nola sortu web zerbitzari bat eta ssl ziurtagiria nola lortu, nahikoa idatzi da horri buruz.

Telegram bot bat sortzea

Lehenik eta behin, sor dezagun Telegram bot bat, horretarako Telegramera joango gara eta bertan aurkituko dugu BotFather bot.

Yandex.Alisa eta Telegram bot PHPn funtzionalitate berarekin

Yandex.Alisa eta Telegram bot PHPn funtzionalitate berarekin

Aukeratu /newbot

Yandex.Alisa eta Telegram bot PHPn funtzionalitate berarekin

Erantzungo duen bot-aren izena sartzen dugu, gero bot-aren izena sartzen dugu, erantzun moduan bot-a kontrolatzeko token bat lortzen dugu, gako hau idazten dugu, etorkizunean erabilgarria izango zaigu.

Yandex.Alisa eta Telegram bot PHPn funtzionalitate berarekin

Hurrengo urratsa Telegram zerbitzariei bot-tik datuak zein zerbitzaritara bidali behar dituzten esatea da. Horretarako, formularioko esteka bat egiten dugu:

https: //api.telegram.org/bot___Π’ΠžΠšΠ•Π___/setWebhook?url=https://____ПУВЬ_Π”Πž_БКРПИВА___

___TOKEN___ gure tokenarekin ordezkatzen dugu bot-etik, lehenago jasotakoa

____PATH_TO_SCRIPT____ datuak prozesatuko diren gure zerbitzariko script-aren helbidearekin ordezkatzen dugu (adibidez, www.my_server.ru/webhook_telegram.php).

Hemen arazo bat dago, api.telegram.org zerbitzaria blokeatuta dago, baina hau egin dezakezu: alokatu zerbitzari merkeena mugarik ez dagoen tokian eta eman komandoa zerbitzari honen kontsolatik

wget ___ΠŸΠžΠ›Π£Π§Π˜Π’Π¨Π˜Π™Π‘Π―_АДРЕБ___

Hori da, Telegram bot-a sortu eta zure zerbitzariari konektatuta dago.

Yandex.Alisarako trebetasun bat sortzea

Goazen Yandex.Alicerako trebetasun bat sortzera.

Trebetasun bat sortzeko, Yandex.Dialogues garatzaileen orrira joan behar duzu Yandex.Dialogs garatzaile orria, egin klik bertan "Sortu elkarrizketa" eta hautatu "Skill in Alice".

Yandex.Alisa eta Telegram bot PHPn funtzionalitate berarekin

Trebetasun ezarpenen elkarrizketa-koadroa irekiko da.

Yandex.Alisa eta Telegram bot PHPn funtzionalitate berarekin

Trebetasun ezarpenak sartzen hasiko gara.

Sartu zure trebetasunaren izena.

Yandex.Alisa eta Telegram bot PHPn funtzionalitate berarekin

Aktibazio-izena kontu handiz aukeratu behar da, Alicek ondo uler dezan, Γ±abarduratik - Alice eta Yandex.Station edo Irbis A bezalako zutabeak dituen mugikorrentzako aplikazio batek hitzak modu ezberdinean hautematen ditzake.

Gure zerbitzarian script-erako bidea Telegramen bezala sartzen dugu, baina Alicerentzat bereziki script bat izango da, adibidez www.my_server.ru/webhook_alice.php.

Yandex.Alisa eta Telegram bot PHPn funtzionalitate berarekin

Trebetasunak hitz egingo duen ahotsa aukeratzen dugu, Aliceren ahotsa gehiago gustatzen zait.

Yandex.Alisa eta Telegram bot PHPn funtzionalitate berarekin

Gailu mugikorretan edo arakatzaile batean bakarrik lan egiteko asmoa baduzu, hautatu "Pantaila duen gailu bat behar duzu".

Ondoren, sartu Aliceren trebetasunen katalogoaren ezarpenak. Aktibatzeko "marka" hitza erabiltzeko asmoa baduzu, markaren webgunea webmaster.yandex.ru zerbitzuan egiaztatu behar duzu.

Yandex.Alisa eta Telegram bot PHPn funtzionalitate berarekin

Hori guztia ezarpenekin, joan gaitezen gidoietara.

Telegram bot gidoia

Has gaitezen Telegramerako gidoi batekin.

Liburutegia konektatzen dugu non bot-aren eta Aliceren mezuak prozesatuko diren:

include_once 'webhook_parse.php';

Gure bot-aren tokena ezarri dugu:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

Datuak jasotzen ditugu:

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

Datuak aldagaietan analizatzea:

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

Orain aldagaiekin lan egin dezakezu:

$tokens - hona hemen erabiltzaileak sartu dituen hitz guztiak

$user_id - erabiltzailearen ID hemen

$msg_chat_id - bot-ak komandoa jaso duen txata

$msg_user_name - erabiltzaile-izena

Ondoren, Parse_Tokens funtzioari deitzen diogu prozesatzeko:

$Out_Str = Parse_Tokens($tokens);

Eta bidali erantzuna:

Send_Out($user_id, $Out_Str);

Send_Out funtzioa sinplea da eta itxura hau du:

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.Alisarako trebetasun gidoia

Orain joan gaitezen Aliceren gidoiari, Telegramen ia berdina da.

Botaren eta Aliceren mezuak prozesatuko diren liburutegia ere konektatzen dugu, baita Alicerako klaseak dituen liburutegi bat ere:

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

Datuak jasotzen ditugu:

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

Datuak aldagaietan analizatzea:

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

Hemen aldagai gutxi batzuk daude:

$tokens - hona hemen erabiltzaileak sartu dituen hitz guztiak

$user_id - erabiltzailearen ID hemen

Yandex-ek etengabe ping egiten ditu argitaratutako trebetasunak, eta lerro bat gehitu nuen scriptetik berehala irteteko mezuaren prozesamendu osoa hasi gabe:

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

Parse_Tokens funtzioari deitzen diogu prozesatzeko, Telegramen berdina da:

$Out_Str = Parse_Tokens($tokens);

Eta bidali erantzuna:

Send_Out($user_id, $Out_Str);

Send_Out funtzioa konplikatuagoa da hemen:

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

Aliceren gidoia amaitu da.

Parse_Tokens prozesatzeko script-a bera adibide baterako egin zen, edozein egiaztapen eta prozesatu egin ditzakezu bertan.

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

Galdera-erantzun bat baino forma konplexuagoko erabiltzaile batekin komunikatu behar baduzu, orduan erabiltzailearen $user_id eta erabiltzaileak dagoeneko jasotako datuak datu-basean gorde beharko dituzu (adibidez, mysql) eta aztertu beharko dituzu. Parse_Tokens funtzioa.

Egia esan, hau ia dena da, dena ondo egiten bada, Telegram bot-a dagoeneko eskuragarri dago, Aliceren trebetasuna egiaztatu daiteke dialogs.yandex.ru/developerprobak fitxan zure trebetasun berrira joanez.

Yandex.Alisa eta Telegram bot PHPn funtzionalitate berarekin

Dena ondo funtzionatzen badu, trebetasuna moderatzeko bidal dezakezu "Moderaziorako" botoian klik eginez.

Orain plataforma ezberdinetarako bi bot dituzu aldi berean, modu berean funtzionatzen dutenak.

Yandex.Dialogues zerbitzurako dokumentazioa Hemen

Github-en argitaratutako script osoak deskargatu.

Iturria: www.habr.com

Gehitu iruzkin berria