Yandex.Alisa sy Telegram bot amin'ny PHP miaraka amin'ny fiasa mitovy

Good afternoon.

Betsaka ny lahatsoratra momba ny lohahevitry ny bots Telegram, saingy vitsy ny olona manoratra momba ny fahaiza-manao ho an'i Alice, ary tsy nahita fampahalalana momba ny fomba fanaovana bot tokana aho, ka nanapa-kevitra ny hizara ny traikefako momba ny fomba fanaovana bot iray aho. bot Telegram tsotra sy ny fahaizana Yandex.Alice ho an'ny tranokala manana fiasa mitovy.

Noho izany, tsy hilaza aminao ny fomba hananganana mpizara tranonkala aho ary hahazoana mari-pankasitrahana ssl, ampy ny voasoratra momba izany.

Mamorona bot Telegram

Voalohany, andeha isika hamorona bot Telegram, amin'izany dia mandeha any amin'ny Telegram isika ary mahita ny botFather Bot.

Yandex.Alisa sy Telegram bot amin'ny PHP miaraka amin'ny fiasa mitovy

Yandex.Alisa sy Telegram bot amin'ny PHP miaraka amin'ny fiasa mitovy

Mifidiana / newbot

Yandex.Alisa sy Telegram bot amin'ny PHP miaraka amin'ny fiasa mitovy

Ampidiro ny anaran'ny bot izay hamaliana azy, avy eo ampidiro ny anaran'ny bot, ho setrin'izany dia mahazo mari-pamantarana hifehezana ny bot izahay, soratanay ity fanalahidy ity, mahasoa antsika amin'ny ho avy.

Yandex.Alisa sy Telegram bot amin'ny PHP miaraka amin'ny fiasa mitovy

Ny dingana manaraka dia ny milaza amin'ireo mpizara Telegram hoe iza no mpizara handefa data avy amin'ny bot. Mba hanaovana izany dia manao rohy amin'ny endrika izahay:

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

___TOKEN___ nosoloinay amin'ny marika avy amin'ny bot, voaray teo aloha

____PATH_TO_SCRIPT____ nosoloinay amin'ny adiresin'ny script ao amin'ny servery izay hizorana ny data (ohatra, www.my_server.ru/webhook_telegram.php).

Misy olana eto, voasakana ny mpizara api.telegram.org, saingy azonao atao izany: manofa ny mpizara mora indrindra izay tsy misy famerana ary omeo ny baiko avy amin'ny console an'ity server ity

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

Izay ihany, noforonina sy mifandray amin'ny mpizaranao ny bot Telegram.

Mamorona fahaiza-manao ho an'ny Yandex.Alisa

Andao hiroso amin'ny famoronana fahaiza-manao ho an'ny Yandex.Alice.

Mba hamoronana fahaiza-manao dia mila mandeha any amin'ny pejy mpamorona Yandex.Dialogues ianao Pejy mpamorona Yandex.Dialogs, tsindrio eo "Mamorona fifanakalozan-kevitra" ary fidio ny "Skill in Alice".

Yandex.Alisa sy Telegram bot amin'ny PHP miaraka amin'ny fiasa mitovy

Hisokatra ny fifanakalozan-kevitra momba ny fahaiza-manao.

Yandex.Alisa sy Telegram bot amin'ny PHP miaraka amin'ny fiasa mitovy

Manomboka miditra ao amin'ny firafitry ny fahaiza-manao isika.

Ampidiro ny anaran'ny fahaizanao.

Yandex.Alisa sy Telegram bot amin'ny PHP miaraka amin'ny fiasa mitovy

Ny anaran'ny fampahavitrihana dia tokony hofidina tsara mba hahafantaran'i Alice azy tsara, avy amin'ny nuances - fampiharana finday miaraka amin'i Alice sy tsanganana toy ny Yandex.Station na Irbis A dia afaka mahatsapa ny teny amin'ny fomba hafa.

Izahay dia miditra amin'ny lalana mankany amin'ny script ao amin'ny servery mitovy amin'ny Telegram, fa ho script manokana ho an'i Alice izany, ohatra. www.my_server.ru/webhook_alice.php.

Yandex.Alisa sy Telegram bot amin'ny PHP miaraka amin'ny fiasa mitovy

Mifidy ny feo izay hitenenan'ny fahaizana isika, tiako kokoa ny feon'i Alice.

Yandex.Alisa sy Telegram bot amin'ny PHP miaraka amin'ny fiasa mitovy

Raha mikasa ny hiasa amin'ny fitaovana finday na amin'ny navigateur ianao, dia fidio "Mila fitaovana misy efijery ianao."

Manaraka, ampidiro ny firafitry ny katalaogin'ny fahaizan'i Alice. Raha mikasa ny hampiasa ny teny hoe "marika" ianao amin'ny fampahavitrihana, dia mila manamarina ny tranokalan'ny marika amin'ny serivisy webmaster.yandex.ru.

Yandex.Alisa sy Telegram bot amin'ny PHP miaraka amin'ny fiasa mitovy

Izay ihany ny momba ny fandrindrana, andao hiroso amin'ny script.

Telegram bot script

Andeha isika hanomboka amin'ny script ho an'ny Telegram.

Ampifandraiso amin'ny tranomboky misy ny hafatra avy amin'ny bot sy Alice izahay:

include_once 'webhook_parse.php';

Nametraka ny mariky ny bot-nay izahay:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

Mahazo angona izahay:

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

Fanaraha-maso ny angon-drakitra ho variables:

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

Afaka miasa amin'ny variables ianao izao:

$tokens - eto izao ny teny rehetra nampidirin'ny mpampiasa

$user_id - ID mpampiasa eto

$msg_chat_id - resaka izay nahazoan'ny bot ny baiko

$msg_user_name - solonanarana

Manaraka izany dia antsoinay ny fiasa Parse_Tokens ho an'ny fanodinana:

$Out_Str = Parse_Tokens($tokens);

Ary andefaso valiny:

Send_Out($user_id, $Out_Str);

Ny asa Send_Out dia tsotra ary toa izao:

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

Skill script ho an'ny Yandex.Alisa

Andeha isika hifindra amin'ny script ho an'i Alice, saika mitovy amin'ny Telegram.

Ampifandraisinay ihany koa ny tranomboky izay hanodinana ny hafatra avy amin'ny bot sy Alice, miampy tranomboky misy kilasy ho an'i Alice:

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

Mahazo angona izahay:

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

Fanaraha-maso ny angon-drakitra ho variables:

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

Misy varimbazaha vitsy kokoa eto:

$tokens - eto izao ny teny rehetra nampidirin'ny mpampiasa

$user_id - ID mpampiasa eto

Yandex ping tsy tapaka ny fahaiza-manao navoaka, ary nanampy andalana aho hivoaka avy hatrany ny script nefa tsy manomboka ny fanodinana feno ny hafatra:

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

Antsoinay ny fiasa Parse_Tokens ho an'ny fanodinana, mitovy amin'ny Telegram izany:

$Out_Str = Parse_Tokens($tokens);

Ary andefaso valiny:

Send_Out($user_id, $Out_Str);

Ny asa Send_Out dia sarotra kokoa eto:

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

Vita ny script ho an'i Alice.

Ny script fanodinana Parse_Tokens dia natao ho ohatra fotsiny, azonao atao ny manara-maso sy manara-maso any.

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

Raha mila mifandray amin'ny mpampiasa endrika sarotra kokoa noho ny valin'ny fanontaniana ianao dia mila mitahiry ny $user_id an'ny mpampiasa sy ny angona efa voaray avy amin'ny mpampiasa ao amin'ny tahiry (ohatra, mysql) ary hamakafaka azy ireo ny asa Parse_Tokens.

Raha ny marina, saika ny zava-drehetra izany, raha vita tsara ny zava-drehetra, dia efa misy ny bot Telegram, azo jerena ny fahaizan'i Alice. dialogs.yandex.ru/developeramin'ny fandehanana amin'ny fahaizanao vaovao eo amin'ny tabilao fitsapana.

Yandex.Alisa sy Telegram bot amin'ny PHP miaraka amin'ny fiasa mitovy

Raha mandeha tsara ny zava-drehetra dia azonao atao ny mandefa ny fahaiza-manao ho an'ny antonony amin'ny fipihana ny bokotra "Ho an'ny antonony".

Ankehitriny ianao dia manana bots roa ho an'ny sehatra samihafa indray mandeha, izay miasa amin'ny fomba mitovy.

Documentation ho an'ny serivisy Yandex.Dialogues eto

Lahatsoratra feno navoaka tao amin'ny github ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ.

Source: www.habr.com

Add a comment