Сайн байна уу.
Telegram ботуудын талаар маш олон нийтлэл байдаг, гэхдээ цөөхөн хүн Алисын ур чадварын талаар бичдэг, би ганц робот хийх талаар ямар ч мэдээлэл олж чадаагүй тул би хэрхэн робот хийх талаар туршлагаа хуваалцахаар шийдлээ. энгийн Telegram бот болон Yandex.Alice-ийн ур чадвар нь ижил функцтэй сайтад зориулагдсан.
Тиймээс, би танд вэб серверийг хэрхэн өсгөх, ssl гэрчилгээ авах талаар хэлэхгүй, энэ талаар хангалттай бичсэн байна.
Telegram бот үүсгэх
Эхлээд Telegram бот үүсгэцгээе, үүний тулд бид Telegram руу очоод тэндээс BotFather роботыг олоорой.
/newbot-г сонгоно уу
Бид ботын хариу өгөх нэрийг оруулаад дараа нь ботын нэрийг оруулаад хариуд нь ботыг удирдах жетон авч, энэ түлхүүрийг бичнэ, энэ нь ирээдүйд бидэнд хэрэг болно.
Дараагийн алхам бол Telegram серверүүдэд роботоос ямар сервер рүү өгөгдөл илгээхийг хэлэх явдал юм. Үүнийг хийхийн тулд бид маягтын холбоосыг хийдэг:
https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___
___TOKEN___ бид өмнө нь хүлээн авсан роботын токеноор солино
____PATH_TO_SCRIPT____ бид өгөгдлийг боловсруулах сервер дээрх скриптийн хаягаар солигддог (жишээлбэл,
Энд асуудал байна, api.telegram.org сервер хаагдсан байна, гэхдээ та үүнийг хийж болно: ямар ч хязгаарлалтгүй хамгийн хямд сервер түрээслээд энэ серверийн консолоос тушаал өгнө үү.
wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___
Ингээд л Telegram бот үүсгээд таны серверт холбогдсон байна.
Yandex.Alisa-д зориулсан ур чадварыг бий болгох
Yandex.Alice-д зориулсан ур чадварыг бий болгох ажлыг үргэлжлүүлье.
Ур чадварыг бий болгохын тулд та Yandex.Dialogues хөгжүүлэгчдийн хуудас руу очих хэрэгтэй
Ур чадварын тохиргооны харилцах цонх нээгдэнэ.
Бид ур чадварын тохиргоог оруулж эхэлнэ.
Ур чадварынхаа нэрийг оруулна уу.
Идэвхжүүлэх нэрийг маш болгоомжтой сонгох хэрэгтэй бөгөөд ингэснээр Алис үүнийг зөв ойлгохын тулд Алистай гар утасны програм, Yandex.Station эсвэл Irbis A гэх мэт багана нь үгсийг өөрөөр хүлээж авах боломжтой.
Бид сервер дээрээ скрипт рүү орох замыг Telegram-тай адил оруулдаг, гэхдээ энэ нь жишээлбэл, Алисад зориулсан скрипт байх болно.
Бид ур чадварын ярих хоолойг сонгодог, би Алисын хоолойд илүү дуртай.
Хэрэв та зөвхөн хөдөлгөөнт төхөөрөмж эсвэл хөтөч дээр ажиллахаар төлөвлөж байгаа бол "Танд дэлгэцтэй төхөөрөмж хэрэгтэй" гэснийг сонгоно уу.
Дараа нь Алисын ур чадварын каталогийн тохиргоог оруулна уу. Хэрэв та идэвхжүүлэхийн тулд "брэнд" гэсэн үгийг ашиглахаар төлөвлөж байгаа бол webmaster.yandex.ru үйлчилгээнд тухайн брэндийн вэбсайтыг баталгаажуулах шаардлагатай.
Энэ бол тохиргоотой холбоотой, скриптүүд рүү шилжье.
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 бот аль хэдийн бэлэн болсон бол Алисын ур чадварыг шалгаж болно.
Хэрэв бүх зүйл зөв ажиллаж байвал та "Зохицуулах" товчийг дарж ур чадвараа зохицуулж болно.
Одоо та өөр өөр платформд зориулсан хоёр роботтой болсон бөгөөд тэдгээр нь ижил аргаар ажилладаг.
Yandex.Dialogues үйлчилгээний баримт бичиг
Бүрэн скриптүүдийг github дээр нийтэлсэн
Эх сурвалж: www.habr.com