Yandex.Alisa ug Telegram bot sa PHP nga adunay parehas nga gamit

Maayo nga hapon.

Adunay daghang mga artikulo sa hilisgutan sa Telegram bots, apan pipila ka mga tawo ang nagsulat bahin sa mga kahanas alang kang Alice, ug wala akoy nakit-an nga kasayuran kung giunsa paghimo ang usa ka bot, mao nga nakahukom ko nga ipaambit ang akong kasinatian kung giunsa paghimo yano nga Telegram bot ug ang Yandex.Alice nga kahanas alang sa site nga adunay parehas nga gamit.

Mao nga, dili ko isulti kanimo kung giunsa ang pagpataas sa usa ka web server ug pagkuha usa ka sertipiko sa ssl, igo na ang nasulat bahin niini.

Paghimo ug Telegram bot

Una, maghimo kita ug Telegram bot, para niini moadto kita sa Telegram ug pangitaon ang BotFather bot didto.

Yandex.Alisa ug Telegram bot sa PHP nga adunay parehas nga gamit

Yandex.Alisa ug Telegram bot sa PHP nga adunay parehas nga gamit

Pilia ang /newbot

Yandex.Alisa ug Telegram bot sa PHP nga adunay parehas nga gamit

Gisulod namo ang ngalan sa bot diin kini motubag, dayon among isulod ang ngalan sa bot, isip tubag makakuha kami og token aron makontrol ang bot, among isulat kini nga yawe, kini mapuslanon kanamo sa umaabot.

Yandex.Alisa ug Telegram bot sa PHP nga adunay parehas nga gamit

Ang sunod nga lakang mao ang pagsulti sa mga server sa Telegram kung diin ipadala sa server ang data gikan sa bot. Aron mahimo kini, maghimo kami usa ka link sa porma:

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

___TOKEN___ among ilisan sa among token gikan sa bot, nadawat sa sayo pa

____PATH_TO_SCRIPT____ among ilisan sa adres sa script sa among server diin ang data iproseso (pananglitan, www.my_server.ru/webhook_telegram.php).

Adunay usa ka problema dinhi, ang api.telegram.org server gibabagan, apan mahimo nimo kini: pag-abang sa labing barato nga server kung diin wala’y mga pagdili ug ihatag ang mando gikan sa console sa kini nga server

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

Mao na, ang Telegram bot gihimo ug konektado sa imong server.

Paghimo usa ka kahanas alang sa Yandex.Alisa

Mopadayon kita sa paghimo og kahanas alang sa Yandex.Alice.

Aron makahimo usa ka kahanas, kinahanglan nimo nga moadto sa panid sa mga developer sa Yandex.Dialogues Yandex.Dialogs developer page, i-klik didto ang "Create dialogue" ug pilia ang "Skill in Alice".

Yandex.Alisa ug Telegram bot sa PHP nga adunay parehas nga gamit

Ang dialog setting sa kahanas moabli.

Yandex.Alisa ug Telegram bot sa PHP nga adunay parehas nga gamit

Nagsugod kami sa pagsulod sa mga setting sa kahanas.

Ibutang ang ngalan sa imong kahanas.

Yandex.Alisa ug Telegram bot sa PHP nga adunay parehas nga gamit

Ang ngalan sa pagpaaktibo kinahanglan nga pilion pag-ayo aron masabtan kini ni Alice sa husto, gikan sa mga nuances - usa ka mobile application nga adunay Alice ug mga kolum sama sa Yandex.Station o Irbis A nga makasabut sa mga pulong nga lahi.

Gisulod namon ang agianan sa script sa among server sa parehas nga paagi sama sa Telegram, apan kini usa ka script nga espesipiko alang kang Alice, pananglitan www.my_server.ru/webhook_alice.php.

Yandex.Alisa ug Telegram bot sa PHP nga adunay parehas nga gamit

Gipili namo ang tingog diin ang kahanas mosulti, mas ganahan ko sa tingog ni Alice.

Yandex.Alisa ug Telegram bot sa PHP nga adunay parehas nga gamit

Kung nagplano ka nga magtrabaho lamang sa mga mobile device o sa usa ka browser, dayon pilia ang "Kinahanglan nimo ang usa ka aparato nga adunay screen."

Sunod, pagsulod sa mga setting alang sa katalogo sa kahanas ni Alice. Kung nagplano ka nga gamiton ang pulong nga "brand" alang sa pagpaaktibo, kinahanglan nimo nga susihon ang website sa brand sa serbisyo sa webmaster.yandex.ru.

Yandex.Alisa ug Telegram bot sa PHP nga adunay parehas nga gamit

Kana lang sa mga setting, magpadayon kita sa mga script.

Telegram bot script

Magsugod ta sa usa ka script para sa Telegram.

Gikonektar namo ang librarya diin ang mga mensahe gikan sa bot ug Alice iproseso:

include_once 'webhook_parse.php';

Gibutang namon ang timaan sa among bot:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

Nakadawat kami og datos:

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

Pag-parse sa datos ngadto sa mga variable:

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

Karon mahimo ka nga magtrabaho uban ang mga variable:

$tokens - ania na karon ang tanang pulong nga gisulod sa user

$user_id - user id dinhi

$msg_chat_id - chat diin ang bot nakadawat sa sugo

$msg_user_name - username

Sunod, among gitawag ang Parse_Tokens function para sa pagproseso:

$Out_Str = Parse_Tokens($tokens);

Ug ipadala ang tubag:

Send_Out($user_id, $Out_Str);

ang Send_Out function kay yano ug ingon niini:

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 para sa Yandex.Alisa

Karon magpadayon kita sa script para kay Alice, halos parehas kini sa Telegram.

Gikonektar usab namo ang librarya diin ang mga mensahe gikan sa bot ug Alice iproseso, lakip ang usa ka librarya nga adunay mga klase alang kang Alice:

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

Nakadawat kami og datos:

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

Pag-parse sa datos ngadto sa mga variable:

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

Adunay pipila ka gamay nga mga variable dinhi:

$tokens - ania na karon ang tanang pulong nga gisulod sa user

$user_id - user id dinhi

Kanunay nga gi-ping ni Yandex ang mga kahanas nga gipatik, ug gidugangan nako ang usa ka linya aron makagawas dayon sa script nga wala magsugod sa hingpit nga pagproseso sa mensahe:

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

Gitawag namon ang Parse_Tokens function alang sa pagproseso, parehas kini sa Telegram:

$Out_Str = Parse_Tokens($tokens);

Ug ipadala ang tubag:

Send_Out($user_id, $Out_Str);

Ang Send_Out function mas komplikado dinhi:

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

Nahuman ang script para kay Alice.

Ang script sa pagproseso sa Parse_Tokens mismo gihimo alang sa usa ka pananglitan, mahimo nimo ang bisan unsang mga pagsusi ug pagproseso didto.

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

Kung kinahanglan nimo nga makigsulti sa usa ka tiggamit sa usa ka labi ka komplikado nga porma kaysa usa ka pangutana-tubag, nan kinahanglan nimo nga i-save ang $user_id sa gumagamit ug ang datos nga nadawat na gikan sa tiggamit sa database (pananglitan, mysql) ug analisa kini sa ang Parse_Tokens function.

Sa tinuud, kini hapit tanan, kung ang tanan nahimo nga tama, nan ang Telegram bot magamit na, ang kahanas ni Alice mahimong masusi dialogs.yandex.ru/developerpinaagi sa pag-adto sa imong bag-ong kahanas sa tab sa pagsulay.

Yandex.Alisa ug Telegram bot sa PHP nga adunay parehas nga gamit

Kung ang tanan molihok sa husto, mahimo nimong ipadala ang kahanas alang sa kasarangan pinaagi sa pag-klik sa "For moderation" nga buton.

Karon aduna ka'y ​​duha ka mga bot alang sa lain-laing mga plataporma sa usa ka higayon, nga nagtrabaho sa samang paagi.

Dokumentasyon para sa serbisyo sa Yandex.Dialogues dinhi

Ang bug-os nga mga script gi-post sa github ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ.

Source: www.habr.com

Idugang sa usa ka comment