Yandex.Alisa සහ Telegram bot එකම ක්‍රියාකාරීත්වයකින් PHP හි ඇත

සුභ දවසක්.

ටෙලිග්‍රාම් බොට් පිළිබඳ මාතෘකාව පිළිබඳ ලිපි රාශියක් ඇත, නමුත් ඇලිස් සඳහා කුසලතා ගැන ලියන්නේ ස්වල්ප දෙනෙකි, සහ තනි බොට් එකක් සාදා ගන්නේ කෙසේද යන්න පිළිබඳ කිසිදු තොරතුරක් මට හමු නොවීය, එබැවින් මම එය සාදන ආකාරය පිළිබඳ මගේ අත්දැකීම් බෙදා ගැනීමට තීරණය කළෙමි. සරල ටෙලිග්‍රාම් බොට් සහ Yandex.Alice කුසලතාව එකම ක්‍රියාකාරීත්වයක් ඇති වෙබ් අඩවිය සඳහා.

එබැවින්, වෙබ් සේවාදායකයක් ඔසවා ssl සහතිකයක් ලබා ගන්නේ කෙසේදැයි මම ඔබට නොකියමි, ඒ ගැන ප්රමාණවත් තරම් ලියා ඇත.

Telegram bot එකක් නිර්මාණය කිරීම

මුලින්ම අපි Telegram bot එකක් හදමු, මේ සඳහා අපි Telegram වෙත ගොස් එහි ඇති BotFather bot එක සොයා ගනිමු.

Yandex.Alisa සහ Telegram bot එකම ක්‍රියාකාරීත්වයකින් PHP හි ඇත

Yandex.Alisa සහ Telegram bot එකම ක්‍රියාකාරීත්වයකින් PHP හි ඇත

/ newbot තෝරන්න

Yandex.Alisa සහ Telegram bot එකම ක්‍රියාකාරීත්වයකින් PHP හි ඇත

අපි එය ප්‍රතිචාර දක්වන බොට්ගේ නම ඇතුළත් කරමු, ඉන්පසු අපි බොට්ගේ නම ඇතුළත් කරමු, ප්‍රතිචාර වශයෙන් අපට බොට් පාලනය කිරීමට ටෝකනයක් ලැබේ, අපි මෙම යතුර ලියා තබමු, එය අනාගතයේදී අපට ප්‍රයෝජනවත් වනු ඇත.

Yandex.Alisa සහ Telegram bot එකම ක්‍රියාකාරීත්වයකින් PHP හි ඇත

ඊළඟ පියවර වන්නේ bot වෙතින් දත්ත යැවිය යුත්තේ කුමන සේවාදායකයටද යන්න Telegram සේවාදායකයන්ට පැවසීමයි. මෙය සිදු කිරීම සඳහා, අපි පෝරමයේ සබැඳියක් සාදන්නෙමු:

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

___TOKEN___ අපි කලින් ලැබුණු බොට් එකෙන් අපේ ටෝකනය වෙනුවට ආදේශ කරමු

____PATH_TO_SCRIPT____ අපි දත්ත සකසනු ලබන අපගේ සේවාදායකයේ ස්ක්‍රිප්ටයේ ලිපිනය සමඟ ප්‍රතිස්ථාපනය කරන්නෙමු (උදාහරණයක් ලෙස, www.my_server.ru/webhook_telegram.php).

මෙහි ගැටලුවක් ඇත, api.telegram.org සේවාදායකය අවහිර වෙමින් පවතී, නමුත් ඔබට මෙය කළ හැකිය: සීමාවන් නොමැති ලාභම සේවාදායකය කුලියට ගෙන මෙම සේවාදායකයේ කොන්සෝලයෙන් විධානය ලබා දෙන්න.

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

එපමණයි, Telegram bot නිර්මාණය කර ඔබගේ සේවාදායකයට සම්බන්ධ කර ඇත.

Yandex.Alisa සඳහා කුසලතා නිර්මාණය කිරීම

Yandex.Alice සඳහා කුසලතා නිර්මාණය කිරීමට අපි ඉදිරියට යමු.

කුසලතාවයක් නිර්මාණය කිරීම සඳහා, ඔබ Yandex.Dialogues සංවර්ධක පිටුවට යා යුතුය Yandex.Dialogs සංවර්ධක පිටුව, එහි "Create Dialogue" ක්ලික් කර "Skill in Alice" තෝරන්න.

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 හි ඇත

ඔබ ජංගම උපාංගවල හෝ බ්‍රවුසරයක පමණක් වැඩ කිරීමට අදහස් කරන්නේ නම්, "ඔබට තිරයක් සහිත උපාංගයක් අවශ්‍යයි" තෝරන්න.

ඊළඟට, ඇලිස්ගේ කුසලතා නාමාවලිය සඳහා සැකසුම් ඇතුළත් කරන්න. ඔබ සක්රිය කිරීම සඳහා "සන්නාමය" යන වචනය භාවිතා කිරීමට අදහස් කරන්නේ නම්, ඔබ webmaster.yandex.ru සේවාවෙහි වෙළඳ නාමයේ වෙබ් අඩවිය සත්යාපනය කළ යුතුය.

Yandex.Alisa සහ Telegram bot එකම ක්‍රියාකාරීත්වයකින් PHP හි ඇත

සැකසීම් සමඟ එපමණයි, අපි ස්ක්‍රිප්ට් වෙත යමු.

ටෙලිග්‍රාම් බොට් ස්ක්‍රිප්ට්

අපි Telegram සඳහා ස්ක්‍රිප්ට් එකකින් පටන් ගනිමු.

බොට් සහ ඇලිස් වෙතින් පණිවිඩ සැකසෙන පුස්තකාලය අපි සම්බන්ධ කරමු:

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 - bot හට විධානය ලැබුණු කතාබස්

$msg_user_name - පරිශීලක නාමය

ඊළඟට, අපි සැකසීම සඳහා Parse_Tokens ශ්‍රිතය අමතන්නෙමු:

$Out_Str = Parse_Tokens($tokens);

සහ ප්රතිචාරයක් එවන්න:

Send_Out($user_id, $Out_Str);

Send_Out ශ්‍රිතය සරල වන අතර මේ ආකාරයට පෙනේ:

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 ශ්‍රිතය ලෙස හඳුන්වමු, එය Telegram සඳහා සමාන වේ:

$Out_Str = Parse_Tokens($tokens);

සහ ප්රතිචාරයක් එවන්න:

Send_Out($user_id, $Out_Str);

Send_Out ශ්‍රිතය මෙහි වඩාත් සංකීර්ණ වේ:

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 මත පළ කර ඇත скачать.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න