Yandex.Alisa እና Telegram bot በ PHP ውስጥ ከተመሳሳይ ተግባር ጋር

ደህና ከሰዓት.

በቴሌግራም ቦቶች ርዕስ ላይ ብዙ መጣጥፎች አሉ ፣ ግን ጥቂት ሰዎች ስለ ችሎታ ለአሊስ ይጽፋሉ ፣ እና አንድ ቦት እንዴት እንደምሠራ ላይ ምንም መረጃ አላገኘሁም ፣ ስለሆነም እንዴት እንደሚሰራ ያለኝን ተሞክሮ ለማካፈል ወሰንኩ ። ቀላል ቴሌግራም ቦት እና የ Yandex.Alice ችሎታ ለጣቢያው ተመሳሳይ ተግባር ያለው።

ስለዚህ፣ የድር አገልጋይን እንዴት እንደሚያሳድጉ እና የssl ሰርተፍኬት እንደሚያገኙ አልነግርዎትም፣ ስለሱ በቂ ተጽፏል።

የቴሌግራም ቦት መፍጠር

በመጀመሪያ የቴሌግራም ቦት እንፍጠር፣ ለዚህም ወደ ቴሌግራም ሄደን BotFather bot እዚያ እናገኛለን።

Yandex.Alisa እና Telegram bot በ PHP ውስጥ ከተመሳሳይ ተግባር ጋር

Yandex.Alisa እና Telegram bot በ PHP ውስጥ ከተመሳሳይ ተግባር ጋር

ይምረጡ / newbot

Yandex.Alisa እና Telegram bot በ PHP ውስጥ ከተመሳሳይ ተግባር ጋር

የሚመልስበትን የቦት ስም እናስገባዋለን, ከዚያም የቦቱን ስም አስገባን, በምላሹ ቦቱን ለመቆጣጠር ቶከን እናገኛለን, ይህን ቁልፍ እንጽፋለን, ለወደፊቱ ይጠቅመናል.

Yandex.Alisa እና Telegram bot በ PHP ውስጥ ከተመሳሳይ ተግባር ጋር

ቀጣዩ እርምጃ ለቴሌግራም አገልጋዮች የትኛውን አገልጋይ ከቦት ላይ ውሂብ እንደሚልክ መንገር ነው። ይህንን ለማድረግ የቅጹን አገናኝ እናደርጋለን-

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

___TOKEN___ ቀደም ሲል የተቀበልነውን ከቦት በተገኘ ማስመሰያችን እንተካለን።

___PATH_TO_SCRIPT____ ውሂቡ በሚሰራበት በአገልጋያችን ላይ ባለው የስክሪፕት አድራሻ እንተካለን (ለምሳሌ፡- www.my_server.ru/webhook_telegram.php).

እዚህ ላይ ችግር አለ፣ api.telegram.org አገልጋይ እየታገደ ነው፣ ግን ይህን ማድረግ ትችላለህ፡ ምንም ገደብ በሌለበት ቦታ በጣም ርካሹን አገልጋይ ተከራይ እና ከዚህ አገልጋይ ኮንሶል ትእዛዙን ስጠው

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

ያ ብቻ ነው፣ የቴሌግራም ቦት ተፈጥሯል እና ከአገልጋይዎ ጋር የተገናኘ ነው።

ለ Yandex.Alisa ችሎታ መፍጠር

ለ Yandex.Alice ክህሎት ወደ መፍጠር እንሂድ።

ችሎታ ለመፍጠር ወደ Yandex.Dialogues ገንቢዎች ገጽ መሄድ ያስፈልግዎታል Yandex.Dialogs ገንቢ ገጽ, እዚያ "ውይይት ፍጠር" ን ጠቅ ያድርጉ እና "በአሊስ ውስጥ ችሎታ" የሚለውን ይምረጡ.

Yandex.Alisa እና Telegram bot በ PHP ውስጥ ከተመሳሳይ ተግባር ጋር

የክህሎት ቅንብሮች መገናኛ ይከፈታል።

Yandex.Alisa እና Telegram bot በ PHP ውስጥ ከተመሳሳይ ተግባር ጋር

የክህሎት ቅንብሮችን ማስገባት እንጀምራለን.

የችሎታዎን ስም ያስገቡ።

Yandex.Alisa እና Telegram bot በ PHP ውስጥ ከተመሳሳይ ተግባር ጋር

አሊስ በትክክል እንዲረዳው የማግበሪያው ስም በጣም በጥንቃቄ መመረጥ አለበት ፣ ከቁጥሮች - የሞባይል መተግበሪያ ከአሊስ ጋር እና እንደ Yandex.Station ወይም Irbis A ያሉ ዓምዶች ቃላትን በተለየ መንገድ ሊገነዘቡ ይችላሉ።

ልክ እንደ ቴሌግራም በአገልጋያችን ላይ ወደ ስክሪፕት የሚወስደውን መንገድ እናስገባለን ነገርግን በተለይ ለአሊስ ስክሪፕት ይሆናል። www.my_server.ru/webhook_alice.php.

Yandex.Alisa እና Telegram bot በ PHP ውስጥ ከተመሳሳይ ተግባር ጋር

ችሎታው የሚናገርበትን ድምጽ እንመርጣለን ፣ የአሊስን ድምጽ የበለጠ እወዳለሁ።

Yandex.Alisa እና Telegram bot በ PHP ውስጥ ከተመሳሳይ ተግባር ጋር

በሞባይል መሳሪያዎች ላይ ወይም በአሳሽ ውስጥ ብቻ ለመስራት ካቀዱ "ስክሪን ያለው መሳሪያ ያስፈልግዎታል" የሚለውን ይምረጡ.

በመቀጠል የአሊስ የክህሎት ካታሎግ ቅንብሮችን ያስገቡ። ለማግበር "ብራንድ" የሚለውን ቃል ለመጠቀም ካቀዱ በዌብማስተር.yandex.ru አገልግሎት ውስጥ የምርት ስሙን ድር ጣቢያ ማረጋገጥ አለብዎት.

Yandex.Alisa እና Telegram bot በ PHP ውስጥ ከተመሳሳይ ተግባር ጋር

በቅንብሮች ውስጥ ያ ብቻ ነው ፣ ወደ ስክሪፕቶች እንሂድ ።

ቴሌግራም bot ስክሪፕት

በቴሌግራም ስክሪፕት እንጀምር።

ከቦት እና ከአሊስ የሚመጡ መልዕክቶች የሚስተናገዱበትን ቤተ-መጽሐፍት እናገናኘዋለን፡-

include_once 'webhook_parse.php';

የቦታችንን ምልክት አዘጋጅተናል፡-

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

መረጃ እንቀበላለን፡-

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

ውሂቡን ወደ ተለዋዋጮች መተንተን;

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

አሁን ከተለዋዋጮች ጋር መሥራት ይችላሉ-

$tokens - አሁን ተጠቃሚው ያስገቧቸው ሁሉም ቃላት እዚህ አሉ።

$user_id - የተጠቃሚ መታወቂያ እዚህ

$msg_chat_id - ቦት ትዕዛዙን የተቀበለበት ውይይት

$msg_user_name - የተጠቃሚ ስም

በመቀጠል፣ ለሂደቱ የ Parse_Tokens ተግባር ብለን እንጠራዋለን፡-

$Out_Str = Parse_Tokens($tokens);

እና ምላሽ ይላኩ፡-

Send_Out($user_id, $Out_Str);

የላክ_ውጪ ተግባር ቀላል እና ይህን ይመስላል፡-

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

ለ Yandex.Alisa የክህሎት ስክሪፕት

አሁን ወደ አሊስ ስክሪፕት እንሂድ ከቴሌግራም ጋር አንድ አይነት ነው ማለት ይቻላል።

እንዲሁም ከቦት እና ከአሊስ የሚመጡ መልእክቶች የሚስተናገዱበትን ቤተ-መጽሐፍት እና ለአሊስ ትምህርት ያለው ቤተ-መጽሐፍት እናገናኘዋለን፡

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

መረጃ እንቀበላለን፡-

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

ውሂቡን ወደ ተለዋዋጮች መተንተን;

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

ጥቂት ተለዋዋጮች እዚህ አሉ።

$tokens - አሁን ተጠቃሚው ያስገቧቸው ሁሉም ቃላት እዚህ አሉ።

$user_id - የተጠቃሚ መታወቂያ እዚህ

Yandex ያለማቋረጥ ችሎታዎችን ያሳትማል እና የመልእክቱን ሙሉ ሂደት ሳልጀምር ወዲያውኑ ከስክሪፕቱ ለመውጣት መስመር ጨምሬያለሁ፡-

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

ለሂደቱ የ Parse_Tokens ተግባር ብለን እንጠራዋለን፣ እሱ ከቴሌግራም ጋር ተመሳሳይ ነው፡-

$Out_Str = Parse_Tokens($tokens);

እና ምላሽ ይላኩ፡-

Send_Out($user_id, $Out_Str);

የላክ_ውጪ ተግባር እዚህ የበለጠ የተወሳሰበ ነው፡-

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

ለአሊስ ስክሪፕት ጨርሷል።

የ Parse_Tokens ፕሮሰሲንግ ስክሪፕት እራሱ የተሰራው ለአብነት ብቻ ነው፣ እዚያ ማናቸውንም ፍተሻ እና ሂደት ማድረግ ይችላሉ።

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

ከጥያቄ-መልስ ይልቅ ውስብስብ ከሆነው ተጠቃሚ ጋር መገናኘት ከፈለጉ የተጠቃሚውን $user_id እና ከተጠቃሚው የተቀበለውን ውሂብ በመረጃ ቋቱ (ለምሳሌ mysql) ውስጥ ማስቀመጥ እና በ ውስጥ መተንተን ያስፈልግዎታል የ Parse_Tokens ተግባር።

በእውነቱ ፣ ይህ ሁሉም ነገር ማለት ይቻላል ፣ ሁሉም ነገር በትክክል ከተሰራ ፣ ከዚያ የቴሌግራም ቦት ቀድሞውኑ ይገኛል ፣ የአሊስ ችሎታ ሊረጋገጥ ይችላል dialogs.yandex.ru/developerበሙከራ ትሩ ላይ ወደ አዲሱ ችሎታዎ በመሄድ.

Yandex.Alisa እና Telegram bot በ PHP ውስጥ ከተመሳሳይ ተግባር ጋር

ሁሉም ነገር በትክክል የሚሰራ ከሆነ "ለአወያይ" ቁልፍን ጠቅ በማድረግ ለሽምግልና ክህሎትን መላክ ይችላሉ.

አሁን ለተለያዩ የመሳሪያ ስርዓቶች በአንድ ጊዜ ሁለት ቦቶች አሉዎት, እነሱም በተመሳሳይ መንገድ ይሰራሉ.

ለ Yandex.Dialogues አገልግሎት ሰነድ እዚህ

ሙሉ ስክሪፕቶች በ github ላይ ተለጥፈዋል скачать.

ምንጭ: hab.com

አስተያየት ያክሉ