Yandex.Alisa u Telegram bot f'PHP bl-istess funzjonalità

Tajba wara nofsinhar.

Hemm ħafna artikli dwar is-suġġett tal-bots tat-Telegram, iżda ftit nies jiktbu dwar il-ħiliet għal Alice, u ma sibt l-ebda informazzjoni dwar kif tagħmel bot wieħed, għalhekk iddeċidejt li naqsam l-esperjenza tiegħi dwar kif nagħmel bot Telegram sempliċi u l-ħila Yandex.Alice għas-sit li għandu l-istess funzjonalità.

Allura, mhux se ngħidlek kif tgħolli web server u tikseb ċertifikat ssl, inkiteb biżżejjed dwaru.

Ħolqien ta' bot Telegram

L-ewwel, ejja noħolqu bot Telegram, għal dan immorru Telegram u nsibu l-bot BotFather hemmhekk.

Yandex.Alisa u Telegram bot f'PHP bl-istess funzjonalità

Yandex.Alisa u Telegram bot f'PHP bl-istess funzjonalità

Agħżel /newbot

Yandex.Alisa u Telegram bot f'PHP bl-istess funzjonalità

Aħna nidħlu l-isem tal-bot li bih se tirrispondi, imbagħad nidħlu l-isem tal-bot, b'risposta nġibu token biex nikkontrollaw il-bot, niktbu din iċ-ċavetta, se tkun utli għalina fil-futur.

Yandex.Alisa u Telegram bot f'PHP bl-istess funzjonalità

Il-pass li jmiss huwa li tgħid lis-servers Telegram lil liema server tibgħat id-dejta mill-bot. Biex tagħmel dan, nagħmlu link tal-formola:

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

___TOKEN___ nibdlu bit-token tagħna mill-bot, li waslet qabel

____PATH_TO_SCRIPT____ nibdlu bl-indirizz tal-iskrittura fuq is-server tagħna fejn id-dejta se tiġi pproċessata (per eżempju, www.my_server.ru/webhook_telegram.php).

Hemm problema hawn, is-server api.telegram.org jinsab taħt imblukkar, imma tista' tagħmel dan: tikri l-orħos server fejn m'hemmx restrizzjonijiet u agħti l-kmand mill-console ta' dan is-server

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

Dak hu, il-bot Telegram huwa maħluq u konness mas-server tiegħek.

Ħolqien ta 'ħila għal Yandex.Alisa

Ejja ngħaddu biex noħolqu ħila għal Yandex.Alice.

Biex toħloq ħila, trid tmur fil-paġna tal-iżviluppaturi Yandex.Dialogues Yandex.Dialogs paġna tal-iżviluppatur, ikklikkja hemm "Oħloq djalogu" u agħżel "Ħila f'Alice".

Yandex.Alisa u Telegram bot f'PHP bl-istess funzjonalità

Id-djalogu tas-settings tal-ħiliet se jinfetaħ.

Yandex.Alisa u Telegram bot f'PHP bl-istess funzjonalità

Nibdew nidħlu fis-settings tal-ħiliet.

Daħħal l-isem tal-ħila tiegħek.

Yandex.Alisa u Telegram bot f'PHP bl-istess funzjonalità

L-isem tal-attivazzjoni għandu jintgħażel b'attenzjoni kbira sabiex Alice tifhimha b'mod korrett, mill-sfumaturi - applikazzjoni mobbli b'Alice u kolonni bħal Yandex.Station jew Irbis A jistgħu jipperċepixxu l-kliem b'mod differenti.

Aħna nidħlu fit-triq għall-iskrittura fuq is-server tagħna bl-istess mod bħal għal Telegram, iżda se tkun iskrittura speċifikament għal Alice, pereżempju www.my_server.ru/webhook_alice.php.

Yandex.Alisa u Telegram bot f'PHP bl-istess funzjonalità

Nagħżlu l-vuċi li biha titkellem is-sengħa, inħobb aktar il-vuċi ta’ Alice.

Yandex.Alisa u Telegram bot f'PHP bl-istess funzjonalità

Jekk qed tippjana li taħdem biss fuq apparat mobbli jew fil-browser, imbagħad agħżel "Għandek bżonn apparat bi skrin."

Sussegwentement, daħħal is-settings għall-katalgu tal-ħiliet ta 'Alice. Jekk qed tippjana li tuża l-kelma "marka" għall-attivazzjoni, trid tivverifika l-websajt tad-ditta fis-servizz webmaster.yandex.ru.

Yandex.Alisa u Telegram bot f'PHP bl-istess funzjonalità

Dak kollu bis-settings, ejja ngħaddu għall-iskripts.

Telegram bot skript

Nibdew b'kitba għal Telegram.

Aħna nqabbdu l-librerija fejn se jiġu pproċessati messaġġi mill-bot u Alice:

include_once 'webhook_parse.php';

Aħna nissettjaw it-token tal-bot tagħna:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

Nirċievu data:

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

Parsing tad-dejta f'varjabbli:

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

Issa tista 'taħdem b'varjabbli:

$tokens - issa hawn il-kliem kollu li daħħal l-utent

$user_id - id-utent hawn

$msg_chat_id - chat li fih il-bot irċieva l-kmand

$msg_user_name - isem tal-utent

Sussegwentement, insejħu l-funzjoni Parse_Tokens għall-ipproċessar:

$Out_Str = Parse_Tokens($tokens);

U ibgħat tweġiba:

Send_Out($user_id, $Out_Str);

il-funzjoni Send_Out hija sempliċi u tidher bħal din:

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

Iskrittura tal-ħiliet għal Yandex.Alisa

Issa ejja ngħaddu għall-iskript għal Alice, huwa kważi l-istess bħal għal Telegram.

Aħna ngħaqqdu wkoll il-librerija fejn se jiġu pproċessati messaġġi mill-bot u Alice, flimkien ma' librerija bi klassijiet għal Alice:

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

Nirċievu data:

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

Parsing tad-dejta f'varjabbli:

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

Hemm ftit inqas varjabbli hawn:

$tokens - issa hawn il-kliem kollu li daħħal l-utent

$user_id - id-utent hawn

Yandex kontinwament jagħti ping tal-ħiliet ippubblikati, u żidt linja biex noħroġ immedjatament mill-iskrittura mingħajr ma nibda l-ipproċessar sħiħ tal-messaġġ:

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

Insejħu l-funzjoni Parse_Tokens għall-ipproċessar, hija l-istess bħal għal Telegram:

$Out_Str = Parse_Tokens($tokens);

U ibgħat tweġiba:

Send_Out($user_id, $Out_Str);

Il-funzjoni Send_Out hija aktar ikkumplikata hawn:

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

Temm l-iskript għal Alice.

L-iskritt tal-ipproċessar Parse_Tokens innifsu sar purament għal eżempju, tista 'tagħmel kwalunkwe kontrolli u pproċessar hemmhekk.

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

Jekk għandek bżonn tikkomunika ma 'utent ta' forma aktar kumplessa minn mistoqsija-tweġiba, allura jkollok bżonn issalva l-$user_id ta 'l-utent u d-data diġà riċevuta mill-utent fid-database (per eżempju, mysql) u tanalizza. minnhom fil-funzjoni Parse_Tokens.

Attwalment, dan huwa kważi kollox, jekk kollox isir b'mod korrett, allura l-bot Telegram huwa diġà disponibbli, il-ħila ta 'Alice tista' tiġi ċċekkjata dialogs.yandex.ru/developerbilli tmur fil-ħila l-ġdida tiegħek fuq it-tab tal-ittestjar.

Yandex.Alisa u Telegram bot f'PHP bl-istess funzjonalità

Jekk kollox jaħdem sew, tista' tibgħat il-ħila għall-moderazzjoni billi tikklikkja l-buttuna "Għall-moderazzjoni".

Issa għandek żewġ bots għal pjattaformi differenti f'daqqa, li jaħdmu bl-istess mod.

Dokumentazzjoni għas-servizz Yandex.Dialogues hawn

Skripts sħaħ mibgħuta fuq github download.

Sors: www.habr.com

Żid kumment