Yandex.Alisa kunye neTelegram bot kwi-PHP kunye nokusebenza okufanayo

Mva.

Kukho amanqaku amaninzi kwisihloko seTelegram bots, kodwa bambalwa abantu ababhala ngezakhono zika-Alice, kwaye andizange ndifumane naluphi na ulwazi malunga nendlela yokwenza ibhot enye, ngoko ndaye ndagqiba ekubeni ndibelane ngamava am malunga nendlela yokwenza ibhoti enye. i-bot yeTelegram elula kunye nobuchule beYandex.Alice kwisiza esinomsebenzi ofanayo.

Ngoko, andiyi kukuxelela indlela yokunyusa umncedisi wewebhu kwaye ufumane isatifikethi se-ssl, ngokwaneleyo kubhaliwe malunga nayo.

Ukwenza iTelegram bot

Okokuqala, masenze i-bot yeTelegram, kule nto siya kwiTelegram kwaye sifumane iBotFather bot apho.

Yandex.Alisa kunye neTelegram bot kwi-PHP kunye nokusebenza okufanayo

Yandex.Alisa kunye neTelegram bot kwi-PHP kunye nokusebenza okufanayo

Khetha /newbot

Yandex.Alisa kunye neTelegram bot kwi-PHP kunye nokusebenza okufanayo

Sifaka igama lebhoti eliza kuphendula ngayo, ngoko sifaka igama lebhothi, ekuphenduleni sifumana uphawu lokulawula ibhothi, sibhala phantsi esi sitshixo, siya kuba luncedo kuthi kwixesha elizayo.

Yandex.Alisa kunye neTelegram bot kwi-PHP kunye nokusebenza okufanayo

Inyathelo elilandelayo kukuxelela iiseva zeTelegram ukuba yeyiphi iseva ekufuneka ithumele idatha ukusuka kwi-bot ukuya. Ukwenza oku, senza ikhonkco lefom:

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

___TOKEN___ sibuyisela ithokheni yethu kwi-bot, efunyenwe ngaphambili

____PATH_TO_SCRIPT__ sibuyisela idilesi yeskripthi kumncedisi wethu apho idatha iya kuqhutyelwa khona (umzekelo, www.my_server.ru/webhook_telegram.php).

Kukho ingxaki apha, i-api.telegram.org iseva iphantsi kothintelo, kodwa ungenza oku: qesha umncedisi ngexabiso eliphantsi apho kungekho zithintelo kwaye unike umyalelo ovela kwikhonsoli yalo mncedisi.

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

Yiyo loo nto, i-Telegraph bot yenziwe kwaye iqhagamshelwe kwiseva yakho.

Ukudala isakhono seYandex.Alisa

Masiqhubele phambili ekudaleni isakhono seYandex.Alice.

Ukwenza isakhono, kufuneka uye kwiphepha labaphuhlisi be-Yandex.Dialogues Yandex.Dialogs iphepha lomphuhlisi, cofa apho "Yenza incoko" kwaye ukhethe "Skill in Alice".

Yandex.Alisa kunye neTelegram bot kwi-PHP kunye nokusebenza okufanayo

Incoko yababini yezicwangciso zezakhono iya kuvula.

Yandex.Alisa kunye neTelegram bot kwi-PHP kunye nokusebenza okufanayo

Siqala ukungena kwizicwangciso zezakhono.

Faka igama lobuchule bakho.

Yandex.Alisa kunye neTelegram bot kwi-PHP kunye nokusebenza okufanayo

Igama lokuvula kufuneka likhethwe ngokucokisekileyo ukwenzela ukuba u-Alice aqonde ngokuchanekileyo, ukusuka kwi-nuances - isicelo seselula kunye no-Alice kunye neekholamu ezifana ne-Yandex.Isikhululo okanye i-Irbis A inokubona amagama ngokwahlukileyo.

Sifaka umendo weskripthi kwiseva yethu ngendlela efanayo neyeTelegram, kodwa iya kuba siskripthi esikhethekileyo sikaAlice, umzekelo. www.my_server.ru/webhook_alice.php.

Yandex.Alisa kunye neTelegram bot kwi-PHP kunye nokusebenza okufanayo

Sikhetha ilizwi esiza kuthetha ngalo isakhono, ndiyalithanda ilizwi lika-Alice ngakumbi.

Yandex.Alisa kunye neTelegram bot kwi-PHP kunye nokusebenza okufanayo

Ukuba uceba ukusebenza kuphela kwizixhobo eziphathwayo okanye kwisikhangeli, ngoko ukhethe "Udinga isixhobo ngesikrini."

Emva koko, faka useto lwekhathalogu yezakhono zika-Alice. Ukuba uceba ukusebenzisa igama elithi "brand" ukuze usebenze, kufuneka uqinisekise iwebhusayithi ye-brand kwinkonzo webmaster.yandex.ru.

Yandex.Alisa kunye neTelegram bot kwi-PHP kunye nokusebenza okufanayo

Kuko konke kunye noseto, masiqhubele phambili kwizikripthi.

Iskripthi sebhot yeTelegram

Masiqale ngeskripthi seTelegram.

Sidibanisa ilayibrari apho imiyalezo evela kwi-bot kunye no-Alice iya kuqhutyelwa phambili:

include_once 'webhook_parse.php';

Siseta umqondiso webhot yethu:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

Sifumana idatha:

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

Ukwahlulahlula idatha kwiiyantlukwano:

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

Ngoku ungasebenza ngeenguqu:

$amathokheni - apha ngoku onke amagama afakwe ngumsebenzisi

$user_id - id yomsebenzisi apha

$ msg_chat_id - ncokola apho i-bot ifumene umyalelo

$msg_igama_lomsebenzisi-igama lomsebenzisi

Okulandelayo, sibiza umsebenzi weParse_Tokens wokuqhubekeka:

$Out_Str = Parse_Tokens($tokens);

Kwaye uthumele impendulo:

Send_Out($user_id, $Out_Str);

umsebenzi we-Send_Out ulula kwaye ujongeka ngolu hlobo:

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 sobuchule seYandex.Alisa

Ngoku masiqhubele phambili kwiskripthi sika-Alice, iphantse yafana neyeTelegram.

Sikwaqhagamshela ithala leencwadi apho imiyalezo evela kwi-bot kunye ne-Alice iya kuqwalaselwa, kunye nethala leencwadi elineeklasi zika-Alice:

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

Sifumana idatha:

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

Ukwahlulahlula idatha kwiiyantlukwano:

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

Kukho iinguqu ezimbalwa apha:

$amathokheni - apha ngoku onke amagama afakwe ngumsebenzisi

$user_id - id yomsebenzisi apha

I-Yandex ihlala i-pings izakhono ezipapashiweyo, kwaye ndongeze umgca wokuphuma ngokukhawuleza kwiskripthi ngaphandle kokuqalisa inkqubo epheleleyo yomyalezo:

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

Sibiza umsebenzi we-Parse_Tokens wokusetyenzwa, iyafana neyeTelegram:

$Out_Str = Parse_Tokens($tokens);

Kwaye uthumele impendulo:

Send_Out($user_id, $Out_Str);

Umsebenzi we-Send_Out unzima kakhulu apha:

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

Ugqibile iskripthi sika-Alice.

Iskripthi sokusetyenzwa kweParse_Tokens ngokwaso senziwe ngokomzekelo kuphela, ungenza naziphi na iitshekhi kunye nokusebenza apho.

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

Ukuba ufuna ukunxibelelana nomsebenzisi wefomu entsonkothileyo kunempendulo yombuzo, ke kuya kufuneka ugcine i-user_id yomsebenzisi kunye nedatha esele ifunyenwe kumsebenzisi kwisiseko sedatha (umzekelo, mysql) kwaye uhlalutye kuyo umsebenzi weParse_Tokens.

Enyanisweni, oku phantse yonke into, ukuba yonke into yenziwe ngokuchanekileyo, i-Telegram bot sele ikhona, ubuchule buka-Alice bunokujongwa. dialogs.yandex.ru/developerngokuya kwisakhono sakho esitsha kwithebhu yovavanyo.

Yandex.Alisa kunye neTelegram bot kwi-PHP kunye nokusebenza okufanayo

Ukuba yonke into isebenza ngokuchanekileyo, ungathumela isakhono sokumodareyitha ngokucofa iqhosha elithi "Ukumodareyitha".

Ngoku une-bots ezimbini zamaqonga ahlukeneyo ngaxeshanye, asebenza ngendlela efanayo.

Amaxwebhu enkonzo yeYandex.Dialogues apha

Izikripthi ezipheleleyo zifakwe kwi-github ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ.

umthombo: www.habr.com

Yongeza izimvo