I-Yandex.Alisa ne-Telegraph bot ku-PHP ngokusebenza okufanayo

Kuhle ntambama.

Kunezindatshana eziningi ngesihloko se-Telegraph bots, kepha bambalwa abantu ababhala ngamakhono ka-Alice, futhi angizange ngithole ulwazi lwendlela yokwenza i-bot eyodwa, ngakho-ke nginqume ukwabelana ngolwazi lwami mayelana nendlela yokwenza i-bot eyodwa. I-Telegram bot elula kanye nekhono le-Yandex.Alice lesayithi elinomsebenzi ofanayo.

Ngakho-ke, ngeke ngikutshele indlela yokukhulisa iseva yewebhu futhi uthole isitifiketi se-ssl, ngokwanele kubhaliwe ngakho.

Ukudala i-Telegraph bot

Okokuqala, ake sakhe ibhodlela yeTelegramu, kulokhu siya kuTelegram futhi sithole i-BotFather bot lapho.

I-Yandex.Alisa ne-Telegraph bot ku-PHP ngokusebenza okufanayo

I-Yandex.Alisa ne-Telegraph bot ku-PHP ngokusebenza okufanayo

Khetha /newbot

I-Yandex.Alisa ne-Telegraph bot ku-PHP ngokusebenza okufanayo

Sifaka igama le-bot elizophendula ngalo, bese sifaka igama le-bot, ekuphenduleni sithola ithokheni yokulawula i-bot, sibhala phansi lesi sihluthulelo, sizoba usizo kithi esikhathini esizayo.

I-Yandex.Alisa ne-Telegraph bot ku-PHP ngokusebenza okufanayo

Isinyathelo esilandelayo ukutshela amaseva eTelegram ukuthi iyiphi iseva okufanele ithumele idatha isuka ku-bot iye kuyo. Ukwenza lokhu, senza isixhumanisi sefomu:

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

___TOKEN___ sifaka ithokheni yethu evela ku-bot, etholwe ngaphambili

__PATH_TO_SCRIPT__ sifaka ikheli lombhalo kuseva yethu lapho idatha izocutshungulwa khona (isibonelo, www.my_server.ru/webhook_telegram.php).

Kunenkinga lapha, iseva ye-api.telegram.org ingaphansi kokuvinjwa, kodwa ungakwenza lokhu: qasha iseva eshibhe lapho kungekho mingcele futhi unikeze umyalo ovela kukhonsoli yale seva.

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

Yilokho kuphela, i-Telegraph bot idaliwe futhi ixhunywe kuseva yakho.

Ukudala ikhono le-Yandex.Alisa

Asiqhubekele ekudaleni ikhono le-Yandex.Alice.

Ukuze udale ikhono, udinga ukuya ekhasini labathuthukisi be-Yandex.Dialogues Ikhasi lonjiniyela le-Yandex.Dialogs, chofoza lapho "Dala inkhulumomphendvulwano" bese ukhetha "Ikhono ku-Alice".

I-Yandex.Alisa ne-Telegraph bot ku-PHP ngokusebenza okufanayo

Ibhokisi lezilungiselelo zekhono lizovuleka.

I-Yandex.Alisa ne-Telegraph bot ku-PHP ngokusebenza okufanayo

Siqala ukufaka izilungiselelo zamakhono.

Faka igama lekhono lakho.

I-Yandex.Alisa ne-Telegraph bot ku-PHP ngokusebenza okufanayo

Igama lokwenza kusebenze kufanele likhethwe ngokucophelela kakhulu ukuze u-Alice aliqonde kahle, kusukela kumanuances - uhlelo lokusebenza lweselula oluno-Alice namakholomu afana ne-Yandex.Isiteshi noma i-Irbis A ingabona amagama ngendlela ehlukile.

Sifaka indlela eya kuskripthi kuseva yethu ngendlela efanayo neyeTelegramu, kodwa kuzoba umbhalo oqondene ngqo no-Alice, isibonelo. www.my_server.ru/webhook_alice.php.

I-Yandex.Alisa ne-Telegraph bot ku-PHP ngokusebenza okufanayo

Sikhetha izwi ikhono elizokhuluma ngalo, ngithanda izwi lika-Alice kakhulu.

I-Yandex.Alisa ne-Telegraph bot ku-PHP ngokusebenza okufanayo

Uma uhlele ukusebenza kuphela kumadivayisi eselula noma kusiphequluli, bese ukhetha okuthi "Udinga idivayisi enesikrini."

Okulandelayo, faka izilungiselelo zekhathalogi yamakhono ka-Alice. Uma uhlela ukusebenzisa igama elithi "brand" ukuze usebenze, udinga ukuqinisekisa iwebhusayithi yomkhiqizo kusevisi ye-webmaster.yandex.ru.

I-Yandex.Alisa ne-Telegraph bot ku-PHP ngokusebenza okufanayo

Yilokho kuphela ngezilungiselelo, ake sidlulele emibhalweni.

Isikripthi se-Telegram bot

Ake siqale ngombhalo weTelegramu.

Sixhuma umtapo wezincwadi lapho imilayezo evela ku-bot ne-Alice izocutshungulwa khona:

include_once 'webhook_parse.php';

Setha ithokheni ye-bot yethu:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

Sithola idatha:

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

Ukuhlaziya idatha ibe okuguquguqukayo:

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

Manje usungasebenza ngokuguquguqukayo:

$amathokheni - nawa manje wonke amagama afakwe umsebenzisi

$user_id - id yomsebenzisi lapha

$msg_chat_id - xoxa lapho i-bot ithole khona umyalo

$msg_igama_lomsebenzisi - igama lomsebenzisi

Okulandelayo, sibiza umsebenzi we-Parse_Tokens wokucutshungulwa:

$Out_Str = Parse_Tokens($tokens);

Bese uthumela impendulo:

Send_Out($user_id, $Out_Str);

umsebenzi we-Send_Out ulula futhi ubukeka kanje:

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

Isikripthi sekhono se-Yandex.Alisa

Manje ake sidlulele embhalweni ka-Alice, icishe ifane neyeTelegramu.

Futhi sixhuma umtapo wezincwadi lapho imilayezo evela ku-bot ne-Alice izocutshungulwa khona, kanye nelabhulali enamakilasi ka-Alice:

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

Sithola idatha:

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

Ukuhlaziya idatha ibe okuguquguqukayo:

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

Kukhona okuguquguqukayo okumbalwa lapha:

$amathokheni - nawa manje wonke amagama afakwe umsebenzisi

$user_id - id yomsebenzisi lapha

I-Yandex ihlale ibhala amakhono ashicilelwe, futhi ngengeza umugqa ukuze ngiphume ngokushesha kuskripthi ngaphandle kokuqala ukucutshungulwa okugcwele komlayezo:

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

Sibiza umsebenzi we-Parse_Tokens ukuze ucutshungulwe, kuyafana noweTelegramu:

$Out_Str = Parse_Tokens($tokens);

Bese uthumela impendulo:

Send_Out($user_id, $Out_Str);

Umsebenzi we-Send_Out uyinkimbinkimbi kakhulu lapha:

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

Uqedile ukubhala u-Alice.

Iskripthi sokucubungula se-Parse_Tokens ngokwaso senzelwe isibonelo nje, ungenza noma yikuphi ukuhlola nokucubungula lapho.

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

Uma udinga ukuxhumana nomsebenzisi wefomu eliyinkimbinkimbi kunempendulo yombuzo, uzodinga ukuthi ulondoloze i-$user_id yomsebenzisi kanye nedatha esivele yamukelwe kumsebenzisi kusizindalwazi (ngokwesibonelo, mysql) futhi uyihlaziye ku- umsebenzi we-Parse_Tokens.

Eqinisweni, lokhu cishe konke, uma konke kwenziwa kahle, i-Telegram bot isivele itholakala, ikhono lika-Alice lingahlolwa. dialogs.yandex.ru/developerngokuya ekhonweni lakho elisha kuthebhu yokuhlola.

I-Yandex.Alisa ne-Telegraph bot ku-PHP ngokusebenza okufanayo

Uma konke kusebenza kahle, ungathumela ikhono lokulinganisa ngokuchofoza inkinobho ethi "Ngokongamela".

Manje usunama-bot amabili amapulatifomu ahlukene ngesikhathi esisodwa, asebenza ngendlela efanayo.

Amadokhumenti esevisi ye-Yandex.Dialogues lapha

Imibhalo egcwele ithunyelwe ku-github ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ.

Source: www.habr.com

Engeza amazwana