Yandex.Alisa iyo Telegram bot ee PHP oo leh shaqo isku mid ah

Galab wanaagsan.

Waxaa jira maqaallo badan oo ku saabsan mawduuca bots-ka Telegram, laakiin dad yar ayaa wax ka qora xirfadaha Alice, mana helin wax macluumaad ah oo ku saabsan sida loo sameeyo hal bot, sidaas darteed waxaan go'aansaday inaan la wadaago waayo-aragnimadayda sida loo sameeyo fudud Telegram bot iyo xirfadda Yandex.Alice ee goobta oo leh shaqo isku mid ah.

Markaa, kuuma sheegi doono sida loo kiciyo server-ka webka oo aad u hesho shahaadada ssl, wax ku filan ayaa laga qoray.

Abuuritaanka bot Telegram

Marka hore, aan abuurno bot Telegram, tan waxaan u aadnaa Telegram oo aan halkaas ka helno BotFather bot.

Yandex.Alisa iyo Telegram bot ee PHP oo leh shaqo isku mid ah

Yandex.Alisa iyo Telegram bot ee PHP oo leh shaqo isku mid ah

Dooro / newbot

Yandex.Alisa iyo Telegram bot ee PHP oo leh shaqo isku mid ah

Waxaan galeynaa magaca bot-ka kaas oo uu ku jawaabi doono, ka dibna waxaan galeynaa magaca bot, jawaab celinta waxaan helnaa calaamad lagu xakameynayo bot, waxaan qoreynaa furahaan, waxay noqon doontaa mid waxtar noo leh mustaqbalka.

Yandex.Alisa iyo Telegram bot ee PHP oo leh shaqo isku mid ah

Talaabada xigta waa in aad u sheegtid adeegayaasha Telegram server-ka ay xogta uga soo dirayaan bot-ka. Si tan loo sameeyo, waxaanu samaynaa isku xidhka foomka:

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

___TOKEN____ waxaynu ku bedelnaa calaamadayada botka, ee hore loo helay

____PATH_TO_SCRIPT____ waxaan ku badalnaa ciwaanka qoraalka ee serfarkayaga halkaas oo xogta laga baaraandegi doono (tusaale, www.my_server.ru/webhook_telegram.php).

Dhibaato ayaa ka jirta halkan, server-ka api.telegram.org ayaa xannibaya, laakiin waxaad samayn kartaa sidan: kirayso server-ka ugu jaban oo aan lahayn wax xaddidaad ah oo ka bixi amarka console ee server-kan.

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

Taasi waa, bot-ka Telegram-ka ayaa la sameeyay oo lagu xidhay server-kaaga.

Abuuritaanka xirfad Yandex.Alisa

Aan u gudubno abuurista xirfad Yandex.Alice.

Si aad u abuurto xirfad, waxaad u baahan tahay inaad aado bogga horumarinta ee Yandex.Dialogues Yandex.Dialogs bogga horumariyaha, guji "Create dialogue" oo dooro "Skill in Alice".

Yandex.Alisa iyo Telegram bot ee PHP oo leh shaqo isku mid ah

Wadahadalka dejinta xirfadaha ayaa furmi doona.

Yandex.Alisa iyo Telegram bot ee PHP oo leh shaqo isku mid ah

Waxaan bilaabaynaa inaan galno goobaha xirfadda.

Geli magaca xirfadaada.

Yandex.Alisa iyo Telegram bot ee PHP oo leh shaqo isku mid ah

Magaca firfircoonida waa in si taxadar leh loo doortaa si ay Alice si sax ah u fahamto, laga bilaabo nuucyada - codsi moobiil oo leh Alice iyo tiirar sida Yandex.Station ama Irbis A waxay u fahmi karaan erayada si kala duwan.

Waxaan galnaa dariiqa qoraalka ee server-keena si la mid ah sida Telegram, laakiin waxay noqon doontaa qoraal gaar ah Alice, tusaale ahaan. www.my_server.ru/webhook_alice.php.

Yandex.Alisa iyo Telegram bot ee PHP oo leh shaqo isku mid ah

Waxaan dooranaa codka ay xirfaddu ku hadli doonto, aad ayaan uga helaa codka Alice.

Yandex.Alisa iyo Telegram bot ee PHP oo leh shaqo isku mid ah

Haddii aad qorsheyneyso inaad ku shaqeyso oo keliya aaladaha mobilada ama browserka, ka dibna dooro "Waxaad u baahan tahay qalab leh shaashad."

Marka xigta, geli jaangooyooyinka buug-yaraha xirfadaha Alice. Haddii aad qorsheyneyso inaad ereyga "calaamadaha" u isticmaasho firfircoonida, waxaad u baahan tahay inaad xaqiijiso bogga sumadda ee adeegga webmaster.yandex.ru.

Yandex.Alisa iyo Telegram bot ee PHP oo leh shaqo isku mid ah

Taasi waa dhammaan goobaha, aynu u gudubno qoraallada.

Farta bot ee Telegram

Aan ku bilowno qoraalka Telegram.

Waxaan isku xireynaa maktabadda halkaas oo fariimaha bot iyo Alice laga baaraandegi doono:

include_once 'webhook_parse.php';

Waxaan dejinay calaamadda bot-kayaga:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

Waxaan helnaa xogta:

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

U kala soocida xogta doorsoomayaal:

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

Hadda waxaad ku shaqayn kartaa doorsoomayaasha:

$token - waa kuwan hadda dhammaan kelmadaha uu isticmaaluhu galay

$user_id - id isticmaale halkan

$msg_chat_id - ku sheekee kaas oo bot-ku ku helay amarka

$msg_user_name - username

Marka xigta, waxaan ugu yeernaa Parse_Tokens shaqada si loo habeeyo:

$Out_Str = Parse_Tokens($tokens);

Oo jawaab u soo dir:

Send_Out($user_id, $Out_Str);

Shaqada Send_Out waa mid fudud waxayna u egtahay sidan:

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

Qoraal xirfadeedka Yandex.Alisa

Hadda aan u gudubno qoraalka Alice, waxay la mid tahay tan Telegram.

Waxaan sidoo kale ku xireynaa maktabadda halkaas oo fariimaha bot iyo Alice lagu farsameyn doono, oo lagu daray maktabad leh xiisado Alice:

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

Waxaan helnaa xogta:

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

U kala soocida xogta doorsoomayaal:

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

Waxaa jira doorsoomayaal ka yar halkan:

$token - waa kuwan hadda dhammaan kelmadaha uu isticmaaluhu galay

$user_id - id isticmaale halkan

Yandex waxay si joogto ah u daabacdaa xirfadaha daabacan, waxaanan ku daray khad si aan isla markiiba uga baxo qoraalka aniga oo aan bilaabin socodsiinta dhambaalka fariinta:

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

Waxaan ugu yeernaa shaqada Parse_Tokens ee farsamaynta, waxay la mid tahay tan Telegram:

$Out_Str = Parse_Tokens($tokens);

Oo jawaab u soo dir:

Send_Out($user_id, $Out_Str);

Howsha Send_Out aad bay u dhib badan tahay halkan:

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

U dhameeyay qoraalka Alice

Farsamaynta Parse_Tokens lafteeda ayaa loo sameeyay tusaale ahaan, wax kasta oo hubin ah oo aad halkaa ku samayn karto.

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

Haddii aad u baahan tahay inaad la xidhiidho isticmaale foom ka adag marka loo eego su'aal-jawaab, markaa waxaad u baahan doontaa inaad kaydiso isticmaalaha $user_id iyo xogta horeba looga helay isticmaalaha kaydka (tusaale, mysql) oo aad falanqaynayso shaqada Parse_Tokens

Dhab ahaantii, tani waa ku dhawaad ​​wax walba, haddii wax walba si sax ah loo sameeyo, markaa botka Telegram waa horeba la heli karo, xirfadda Alice waa la hubin karaa dialogs.yandex.ru/developerAdigoo aadaya xirfadaada cusub ee tabka imtixaanka.

Yandex.Alisa iyo Telegram bot ee PHP oo leh shaqo isku mid ah

Haddii wax waliba si sax ah u shaqeeyaan, waxaad u diri kartaa xirfada dhexdhexaadinta adigoo gujinaya badhanka "For moderation".

Hadda waxaad haysataa laba bots oo kala duwan hal mar, kuwaas oo si isku mid ah u shaqeeya.

Dukumentiyada adeegga Yandex.Dialogues halkan

Qoraallo buuxa ayaa lagu dhejiyay github ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ.

Source: www.habr.com

Add a comment