Yandex.Alisa болон Telegram бот нь ижил функцтэй PHP дээр

Сайн байна уу.

Telegram ботуудын талаар маш олон нийтлэл байдаг, гэхдээ цөөхөн хүн Алисын ур чадварын талаар бичдэг, би ганц робот хийх талаар ямар ч мэдээлэл олж чадаагүй тул би хэрхэн робот хийх талаар туршлагаа хуваалцахаар шийдлээ. энгийн Telegram бот болон Yandex.Alice-ийн ур чадвар нь ижил функцтэй сайтад зориулагдсан.

Тиймээс, би танд вэб серверийг хэрхэн өсгөх, ssl гэрчилгээ авах талаар хэлэхгүй, энэ талаар хангалттай бичсэн байна.

Telegram бот үүсгэх

Эхлээд Telegram бот үүсгэцгээе, үүний тулд бид Telegram руу очоод тэндээс BotFather роботыг олоорой.

Yandex.Alisa болон Telegram бот нь ижил функцтэй PHP дээр

Yandex.Alisa болон Telegram бот нь ижил функцтэй PHP дээр

/newbot-г сонгоно уу

Yandex.Alisa болон Telegram бот нь ижил функцтэй PHP дээр

Бид ботын хариу өгөх нэрийг оруулаад дараа нь ботын нэрийг оруулаад хариуд нь ботыг удирдах жетон авч, энэ түлхүүрийг бичнэ, энэ нь ирээдүйд бидэнд хэрэг болно.

Yandex.Alisa болон Telegram бот нь ижил функцтэй PHP дээр

Дараагийн алхам бол 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 бот үүсгээд таны серверт холбогдсон байна.

Yandex.Alisa-д зориулсан ур чадварыг бий болгох

Yandex.Alice-д зориулсан ур чадварыг бий болгох ажлыг үргэлжлүүлье.

Ур чадварыг бий болгохын тулд та Yandex.Dialogues хөгжүүлэгчдийн хуудас руу очих хэрэгтэй Yandex.Dialogs хөгжүүлэгч хуудас, тэнд "Харилцан яриа үүсгэх" дээр товшоод "Алисын ур чадвар" -ыг сонгоно уу.

Yandex.Alisa болон Telegram бот нь ижил функцтэй PHP дээр

Ур чадварын тохиргооны харилцах цонх нээгдэнэ.

Yandex.Alisa болон Telegram бот нь ижил функцтэй PHP дээр

Бид ур чадварын тохиргоог оруулж эхэлнэ.

Ур чадварынхаа нэрийг оруулна уу.

Yandex.Alisa болон Telegram бот нь ижил функцтэй PHP дээр

Идэвхжүүлэх нэрийг маш болгоомжтой сонгох хэрэгтэй бөгөөд ингэснээр Алис үүнийг зөв ойлгохын тулд Алистай гар утасны програм, Yandex.Station эсвэл Irbis A гэх мэт багана нь үгсийг өөрөөр хүлээж авах боломжтой.

Бид сервер дээрээ скрипт рүү орох замыг Telegram-тай адил оруулдаг, гэхдээ энэ нь жишээлбэл, Алисад зориулсан скрипт байх болно. www.my_server.ru/webhook_alice.php.

Yandex.Alisa болон Telegram бот нь ижил функцтэй PHP дээр

Бид ур чадварын ярих хоолойг сонгодог, би Алисын хоолойд илүү дуртай.

Yandex.Alisa болон Telegram бот нь ижил функцтэй PHP дээр

Хэрэв та зөвхөн хөдөлгөөнт төхөөрөмж эсвэл хөтөч дээр ажиллахаар төлөвлөж байгаа бол "Танд дэлгэцтэй төхөөрөмж хэрэгтэй" гэснийг сонгоно уу.

Дараа нь Алисын ур чадварын каталогийн тохиргоог оруулна уу. Хэрэв та идэвхжүүлэхийн тулд "брэнд" гэсэн үгийг ашиглахаар төлөвлөж байгаа бол webmaster.yandex.ru үйлчилгээнд тухайн брэндийн вэбсайтыг баталгаажуулах шаардлагатай.

Yandex.Alisa болон Telegram бот нь ижил функцтэй PHP дээр

Энэ бол тохиргоотой холбоотой, скриптүүд рүү шилжье.

Telegram роботын скрипт

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

Одоо та хувьсагчтай ажиллах боломжтой:

$ token - энд хэрэглэгчийн оруулсан бүх үгс байна

$user_id - хэрэглэгчийн 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-д зориулсан ур чадварын скрипт

Одоо Алисын скрипт рүү шилжье, энэ нь Telegram-тай бараг ижил байна.

Мөн бид робот болон Алисаас ирсэн мессежүүдийг боловсруулах номын сан, мөн Алисад зориулсан ангиудтай номын сантай холбогдоно.

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

Энд цөөн хэдэн хувьсагч байна:

$ token - энд хэрэглэгчийн оруулсан бүх үгс байна

$user_id - хэрэглэгчийн ID энд байна

Yandex нь нийтлэгдсэн ур чадвараа байнга pings хийдэг бөгөөд би мессежийг бүрэн боловсруулж эхлэхгүйгээр скриптээс шууд гарах мөрийг нэмсэн:

  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 функцэд оруулна.

Үнэндээ энэ бол бараг бүх зүйл, хэрэв бүх зүйл зөв хийгдсэн бол Telegram бот аль хэдийн бэлэн болсон бол Алисын ур чадварыг шалгаж болно. dialogs.yandex.ru/developerТуршилтын таб дээрх шинэ ур чадвар руугаа очно уу.

Yandex.Alisa болон Telegram бот нь ижил функцтэй PHP дээр

Хэрэв бүх зүйл зөв ажиллаж байвал та "Зохицуулах" товчийг дарж ур чадвараа зохицуулж болно.

Одоо та өөр өөр платформд зориулсан хоёр роботтой болсон бөгөөд тэдгээр нь ижил аргаар ажилладаг.

Yandex.Dialogues үйлчилгээний баримт бичиг энд

Бүрэн скриптүүдийг github дээр нийтэлсэн скачать.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх