అదే కార్యాచరణతో PHPలో Yandex.Alisa మరియు Telegram bot

శుభ మధ్యాహ్నం.

టెలిగ్రామ్ బాట్‌ల అంశంపై చాలా కథనాలు ఉన్నాయి, కానీ కొంతమంది వ్యక్తులు ఆలిస్‌కు నైపుణ్యాల గురించి వ్రాస్తారు మరియు ఒకే బాట్‌ను ఎలా తయారు చేయాలనే దానిపై నాకు ఎటువంటి సమాచారం దొరకలేదు, కాబట్టి దీన్ని ఎలా తయారు చేయాలనే దానిపై నా అనుభవాన్ని పంచుకోవాలని నిర్ణయించుకున్నాను. సాధారణ టెలిగ్రామ్ బాట్ మరియు అదే కార్యాచరణను కలిగి ఉన్న సైట్ కోసం Yandex.Alice నైపుణ్యం.

కాబట్టి, వెబ్ సర్వర్‌ను ఎలా పెంచాలో మరియు ssl ప్రమాణపత్రాన్ని ఎలా పొందాలో నేను మీకు చెప్పను, దాని గురించి తగినంతగా వ్రాయబడింది.

టెలిగ్రామ్ బాట్‌ను సృష్టిస్తోంది

ముందుగా, టెలిగ్రామ్ బాట్‌ని క్రియేట్ చేద్దాం, దీని కోసం మనం టెలిగ్రామ్‌కి వెళ్లి అక్కడ బోట్‌ఫాదర్ బాట్‌ను కనుగొంటాము.

అదే కార్యాచరణతో PHPలో Yandex.Alisa మరియు Telegram bot

అదే కార్యాచరణతో PHPలో Yandex.Alisa మరియు Telegram bot

/న్యూబోట్ ఎంచుకోండి

అదే కార్యాచరణతో 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);
}

ఇప్పుడు మీరు వేరియబుల్స్‌తో పని చేయవచ్చు:

$టోకెన్లు - ఇప్పుడు వినియోగదారు నమోదు చేసిన అన్ని పదాలు ఇక్కడ ఉన్నాయి

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

ఇక్కడ కొన్ని తక్కువ వేరియబుల్స్ ఉన్నాయి:

$టోకెన్లు - ఇప్పుడు వినియోగదారు నమోదు చేసిన అన్ని పదాలు ఇక్కడ ఉన్నాయి

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

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పరీక్ష ట్యాబ్‌లో మీ కొత్త నైపుణ్యానికి వెళ్లడం ద్వారా.

అదే కార్యాచరణతో PHPలో Yandex.Alisa మరియు Telegram bot

ప్రతిదీ సరిగ్గా పని చేస్తే, మీరు "మోడరేషన్ కోసం" బటన్‌ను క్లిక్ చేయడం ద్వారా మోడరేషన్ కోసం నైపుణ్యాన్ని పంపవచ్చు.

ఇప్పుడు మీరు ఒకే విధంగా పనిచేసే విభిన్న ప్లాట్‌ఫారమ్‌ల కోసం రెండు బాట్‌లను కలిగి ఉన్నారు.

Yandex.Dialogues సేవ కోసం డాక్యుమెంటేషన్ ఇక్కడ

పూర్తి స్క్రిప్ట్‌లు గిథబ్‌లో పోస్ట్ చేయబడ్డాయి скачать.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి