PHP இல் Yandex.Alisa மற்றும் Telegram bot ஆகியவை ஒரே செயல்பாட்டுடன் உள்ளன

நல்ல மதியம்.

டெலிகிராம் போட்கள் என்ற தலைப்பில் நிறைய கட்டுரைகள் உள்ளன, ஆனால் ஆலிஸின் திறன்களைப் பற்றி சிலர் எழுதுகிறார்கள், மேலும் ஒரு போட் எப்படி செய்வது என்பது பற்றிய எந்த தகவலையும் நான் கண்டுபிடிக்கவில்லை, எனவே எனது அனுபவத்தைப் பகிர்ந்து கொள்ள முடிவு செய்தேன். எளிய டெலிகிராம் போட் மற்றும் Yandex.Alice திறன் அதே செயல்பாடு கொண்ட தளம்.

எனவே, ஒரு வலை சேவையகத்தை எவ்வாறு உயர்த்துவது மற்றும் ஒரு ssl சான்றிதழைப் பெறுவது என்பதை நான் உங்களுக்குச் சொல்ல மாட்டேன், அதைப் பற்றி போதுமான அளவு எழுதப்பட்டுள்ளது.

டெலிகிராம் போட்டை உருவாக்குதல்

முதலில், டெலிகிராம் போட் ஒன்றை உருவாக்குவோம், இதற்காக நாம் டெலிகிராமிற்குச் சென்று, அங்குள்ள போட்ஃபாதர் போட்டைக் கண்டுபிடிப்போம்.

PHP இல் Yandex.Alisa மற்றும் Telegram bot ஆகியவை ஒரே செயல்பாட்டுடன் உள்ளன

PHP இல் Yandex.Alisa மற்றும் Telegram bot ஆகியவை ஒரே செயல்பாட்டுடன் உள்ளன

/ newbot என்பதைத் தேர்ந்தெடுக்கவும்

PHP இல் Yandex.Alisa மற்றும் Telegram bot ஆகியவை ஒரே செயல்பாட்டுடன் உள்ளன

அது பதிலளிக்கும் போட்டின் பெயரை உள்ளிடுகிறோம், பின்னர் போட்டின் பெயரை உள்ளிடுகிறோம், அதற்கு பதிலளிக்கும் விதமாக போட்டைக் கட்டுப்படுத்த ஒரு டோக்கனைப் பெறுகிறோம், இந்த விசையை எழுதுகிறோம், இது எதிர்காலத்தில் நமக்கு பயனுள்ளதாக இருக்கும்.

PHP இல் Yandex.Alisa மற்றும் Telegram bot ஆகியவை ஒரே செயல்பாட்டுடன் உள்ளன

அடுத்த கட்டமாக டெலிகிராம் சர்வர்களிடம், போட்டில் இருந்து டேட்டாவை எந்த சர்வருக்கு அனுப்ப வேண்டும் என்று சொல்ல வேண்டும். இதைச் செய்ய, படிவத்தின் இணைப்பை உருவாக்குகிறோம்:

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 டெவலப்பர் பக்கம், அங்கு "உரையாடலை உருவாக்கு" என்பதைக் கிளிக் செய்து, "ஆலிஸில் திறமை" என்பதைத் தேர்ந்தெடுக்கவும்.

PHP இல் Yandex.Alisa மற்றும் Telegram bot ஆகியவை ஒரே செயல்பாட்டுடன் உள்ளன

திறன் அமைப்புகள் உரையாடல் திறக்கும்.

PHP இல் Yandex.Alisa மற்றும் Telegram bot ஆகியவை ஒரே செயல்பாட்டுடன் உள்ளன

நாங்கள் திறன் அமைப்புகளை உள்ளிடத் தொடங்குகிறோம்.

உங்கள் திறமையின் பெயரை உள்ளிடவும்.

PHP இல் Yandex.Alisa மற்றும் Telegram bot ஆகியவை ஒரே செயல்பாட்டுடன் உள்ளன

செயல்படுத்தும் பெயரை மிகவும் கவனமாகத் தேர்ந்தெடுக்க வேண்டும், இதனால் ஆலிஸ் அதை நுணுக்கங்களிலிருந்து சரியாகப் புரிந்துகொள்கிறார் - ஆலிஸுடன் ஒரு மொபைல் பயன்பாடு மற்றும் Yandex.Station அல்லது Irbis A போன்ற நெடுவரிசைகள் சொற்களை வித்தியாசமாக உணர முடியும்.

டெலிகிராம் போலவே எங்கள் சர்வரிலும் ஸ்கிரிப்டுக்கான பாதையை உள்ளிடுகிறோம், ஆனால் இது குறிப்பாக ஆலிஸுக்கு ஸ்கிரிப்டாக இருக்கும், எடுத்துக்காட்டாக www.my_server.ru/webhook_alice.php.

PHP இல் Yandex.Alisa மற்றும் Telegram bot ஆகியவை ஒரே செயல்பாட்டுடன் உள்ளன

திறமை பேசும் குரலை நாங்கள் தேர்வு செய்கிறோம், ஆலிஸின் குரல் எனக்கு மிகவும் பிடிக்கும்.

PHP இல் Yandex.Alisa மற்றும் Telegram bot ஆகியவை ஒரே செயல்பாட்டுடன் உள்ளன

மொபைல் சாதனங்களில் அல்லது உலாவியில் மட்டுமே வேலை செய்ய நீங்கள் திட்டமிட்டால், "உங்களுக்கு திரையுடன் கூடிய சாதனம் தேவை" என்பதைத் தேர்ந்தெடுக்கவும்.

அடுத்து, ஆலிஸின் திறன்கள் பட்டியலுக்கான அமைப்புகளை உள்ளிடவும். செயல்படுத்துவதற்கு "பிராண்ட்" என்ற வார்த்தையைப் பயன்படுத்த நீங்கள் திட்டமிட்டால், webmaster.yandex.ru சேவையில் பிராண்டின் வலைத்தளத்தை நீங்கள் சரிபார்க்க வேண்டும்.

PHP இல் Yandex.Alisa மற்றும் Telegram 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);

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) சேமித்து அவற்றை பகுப்பாய்வு செய்ய வேண்டும். பார்ஸ்_டோக்கன்கள் செயல்பாடு.

உண்மையில், இது கிட்டத்தட்ட எல்லாமே, எல்லாவற்றையும் சரியாகச் செய்தால், டெலிகிராம் போட் ஏற்கனவே உள்ளது, ஆலிஸின் திறமையை சரிபார்க்கலாம் dialogs.yandex.ru/developerசோதனைத் தாவலில் உங்கள் புதிய திறமைக்குச் செல்வதன் மூலம்.

PHP இல் Yandex.Alisa மற்றும் Telegram bot ஆகியவை ஒரே செயல்பாட்டுடன் உள்ளன

எல்லாம் சரியாகச் செயல்பட்டால், "மதிப்பீட்டுக்கு" பொத்தானைக் கிளிக் செய்வதன் மூலம் நீங்கள் திறன்களை மிதமான நிலைக்கு அனுப்பலாம்.

இப்போது உங்களிடம் ஒரே நேரத்தில் வெவ்வேறு தளங்களுக்கு இரண்டு போட்கள் உள்ளன, அவை ஒரே மாதிரியாக வேலை செய்கின்றன.

Yandex.Dialogues சேவைக்கான ஆவணம் இங்கே

முழு ஸ்கிரிப்ட்களும் கிதுப்பில் வெளியிடப்பட்டன скачать.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்