Yandex.Alisa og Telegram láni í PHP með sömu virkni

Góðan dag.

Það eru margar greinar um efnið Telegram vélmenni, en fáir skrifa um færni fyrir Alice, og ég fann engar upplýsingar um hvernig á að búa til einn vélmenni, svo ég ákvað að deila reynslu minni um hvernig á að búa til einfalt Telegram láni og Yandex.Alice færni fyrir síðuna sem hefur sömu virkni.

Svo ég mun ekki segja þér hvernig á að hækka vefþjón og fá ssl vottorð, nóg hefur verið skrifað um það.

Að búa til Telegram bot

Fyrst skulum við búa til Telegram láni, til þess förum við í Telegram og finnum BotFather botninn þar.

Yandex.Alisa og Telegram láni í PHP með sömu virkni

Yandex.Alisa og Telegram láni í PHP með sömu virkni

Veldu /newbot

Yandex.Alisa og Telegram láni í PHP með sömu virkni

Við sláum inn nafn botnsins sem hann mun svara með, síðan sláum við inn nafn botnsins, sem svar fáum við tákn til að stjórna botninum, við skrifum niður þennan lykil, hann mun nýtast okkur í framtíðinni.

Yandex.Alisa og Telegram láni í PHP með sömu virkni

Næsta skref er að segja Telegram netþjónum til hvaða netþjóns eigi að senda gögn frá botni. Til að gera þetta gerum við hlekk á eyðublaðinu:

https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___

___TOKEN___ við skiptum út fyrir táknið okkar frá botni, sem var móttekið áðan

____PATH_TO_SCRIPT____ við skiptum út fyrir heimilisfang skriftunnar á þjóninum okkar þar sem gögnin verða unnin (til dæmis, www.my_server.ru/webhook_telegram.php).

Það er vandamál hér, api.telegram.org miðlarinn er undir lokun, en þú getur gert þetta: leigðu ódýrasta netþjóninn þar sem engar takmarkanir eru og gefðu skipunina frá stjórnborði þessa netþjóns

wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___

Það er það, Telegram botninn er búinn til og tengdur við netþjóninn þinn.

Að búa til færni fyrir Yandex.Alisa

Við skulum halda áfram að búa til færni fyrir Yandex.Alice.

Til að búa til hæfileika þarftu að fara á þróunarsíðu Yandex.Dialogues Yandex.Dialogs þróunarsíða, smelltu þar "Create dialogue" og veldu "Skill in Alice".

Yandex.Alisa og Telegram láni í PHP með sömu virkni

Hæfnistillingarglugginn opnast.

Yandex.Alisa og Telegram láni í PHP með sömu virkni

Við byrjum að fara inn í færnistillingarnar.

Sláðu inn nafn kunnáttu þinnar.

Yandex.Alisa og Telegram láni í PHP með sömu virkni

Velja ætti virkjunarheitið mjög vandlega svo að Alice skilji það rétt, út frá blæbrigðum - farsímaforrit með Alice og dálkar eins og Yandex.Station eða Irbis A geta skynjað orð á annan hátt.

Við sláum inn slóðina að handritinu á netþjóninum okkar á sama hátt og fyrir Telegram, en það verður til dæmis handrit sérstaklega fyrir Alice. www.my_server.ru/webhook_alice.php.

Yandex.Alisa og Telegram láni í PHP með sömu virkni

Við veljum röddina sem kunnáttan mun tala með, mér líkar betur við rödd Alice.

Yandex.Alisa og Telegram láni í PHP með sömu virkni

Ef þú ætlar að vinna aðeins í fartækjum eða í vafra skaltu velja „Þú þarft tæki með skjá“.

Næst skaltu slá inn stillingar fyrir færnilista Alice. Ef þú ætlar að nota orðið "vörumerki" til að virkja, þarftu að staðfesta vefsíðu vörumerkisins í webmaster.yandex.ru þjónustunni.

Yandex.Alisa og Telegram láni í PHP með sömu virkni

Það er allt með stillingarnar, við skulum halda áfram að forskriftunum.

Telegram bot handrit

Byrjum á handriti fyrir Telegram.

Við tengjum bókasafnið þar sem skilaboð frá botni og Alice verða unnin:

include_once 'webhook_parse.php';

Við stillum tákn botnsins okkar:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

Við fáum gögn:

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

Að flokka gögnin í breytur:

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

Nú er hægt að vinna með breytur:

$tokens - hér eru nú öll orðin sem notandinn sló inn

$user_id - notandaauðkenni hér

$msg_chat_id - spjall þar sem lánmaðurinn fékk skipunina

$msg_user_name - notendanafn

Næst köllum við Parse_Tokens aðgerðina til vinnslu:

$Out_Str = Parse_Tokens($tokens);

Og sendu svar:

Send_Out($user_id, $Out_Str);

Send_Out aðgerðin er einföld og lítur svona út:

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

Færnihandrit fyrir Yandex.Alisa

Nú skulum við halda áfram að handritinu að Alice, það er nánast það sama og fyrir Telegram.

Við tengjum líka bókasafnið þar sem skilaboð frá botni og Alice verða unnin, auk bókasafns með flokkum fyrir Alice:

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

Við fáum gögn:

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

Að flokka gögnin í breytur:

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

Það eru nokkrar færri breytur hér:

$tokens - hér eru nú öll orðin sem notandinn sló inn

$user_id - notandaauðkenni hér

Yandex pingar stöðugt birta færni og ég bætti við línu til að hætta strax í handritinu án þess að hefja fulla vinnslu skilaboðanna:

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

Við köllum Parse_Tokens aðgerðina fyrir vinnslu, það er það sama og fyrir Telegram:

$Out_Str = Parse_Tokens($tokens);

Og sendu svar:

Send_Out($user_id, $Out_Str);

Send_Out aðgerðin er flóknari hér:

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

Kláraði handritið að Alice.

Parse_Tokens vinnsluhandritið sjálft var eingöngu gert til dæmis, þú getur gert allar athuganir og vinnslu þar.

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

Ef þú þarft að eiga samskipti við notanda á flóknara formi en spurningu-svari, þá þarftu að vista $user_id notandans og gögnin sem þegar hafa borist frá notandanum í gagnagrunninum (til dæmis mysql) og greina þau í Parse_Tokens fallið.

Reyndar er þetta næstum allt, ef allt er gert á réttan hátt, þá er Telegram botninn þegar tiltækur, hægt er að athuga færni Alice dialogs.yandex.ru/developermeð því að fara í nýja færni þína á prófunarflipanum.

Yandex.Alisa og Telegram láni í PHP með sömu virkni

Ef allt virkar rétt geturðu sent hæfileikann til stjórnunar með því að smella á hnappinn „Til stjórnunar“.

Nú hefurðu tvo vélmenni fyrir mismunandi vettvang í einu, sem virka á sama hátt.

Skjöl fyrir Yandex.Dialogues þjónustuna hér

Heildarforskriftir birtar á github sækja.

Heimild: www.habr.com

Bæta við athugasemd