Mirëmëngjes.
Ka shumë artikuj në tema të botëve Telegram, por pak kush shkruan për aftësitë për Alice, dhe nuk kam gjetur informacione si të krijoj një bot të vetëm, prandaj vendosa të ndaj përvojën time se si të bëj një bot të thjeshtë Telegram dhe aftësinë Yandex.Alice për një faqe, me funksionalitet të vetëm.
Pra, si të ngremë serverin web dhe të marrim certifikatën ssl nuk do ta përshkruaj, për këtë është shkruar mjaft.
Krijimi i botit Telegram
Së pari krijojmë botin Telegram, për këtë shkojmë në Telegram dhe gjejmë botin BotFather.


Zgjedhim /newbot

Shkruajmë emrin e botit, me të cilin do të përgjigjet, pastaj shkruajmë emrin e botit, në përgjigje marrim një token për menaxhimin e botit, e shkruajmë këtë çelës, do na nevojitet më vonë.

Hapi tjetër është ta informojmë serverat e Telegramit se në cilin server duhet të dërgojmë të dhënat nga boti. Për këtë krijojmë një lidhje si:
https://api.telegram.org/bot___TOKEN___/setWebhook?url=https://____RRUGA_DER_NĂ_SCRIPT___
___TOKEN___ e zëvendësojmë me tokenin tonë nga boti, e fituar më parë
____RRUGA_DER_NĂ_SCRIPT___ e zĂ«vendĂ«sojmĂ« me adresĂ«n e skriptit nĂ« serverin tonĂ«, ku do tĂ« ndodhĂ« pĂ«rpunimi i tĂ« dhĂ«nave (pĂ«r shembull, www.my_server.ru/webhook_telegram.php).
Ka këtu një problem, serveri api.telegram.org është në bllokim, por mund të bëni kështu: merrni me qira më të lirën server aty ku nuk ka kufizime dhe jepni nga konsola e këtij serveri komandën
wget ___ADRESA_E_KAPRATUR___
Të gjitha, boti Telegram është krijuar dhe i lidhur me ju serverin.
Krijimi i një aftësie për Yandex.Alice
Të kalojmë te krijimi i aftësisë për Yandex.Alice.
Për të krijuar një aftësi, duhet të kaloni në faqen e zhvilluesve të Yandex.Dialogs faqja e zhvilluesve të Yandex.Dialogs, klikoni atje 'Krijo dialog' dhe zgjidhni 'Aftësi në Alice'.

Do të hapet dialogu i cilësimeve të aftësisë.

Fillojmë të shtojmë cilësimet e aftësisë.
Shtojmë emrin e aftësisë tuaj.

Emri aktivizues duhet të zgjidhet me shumë kujdes, në mënyrë që Alice ta kuptojë saktë, nga nuancat - aplikacioni mobil me Alice dhe kolonat si Yandex.Station apo Irbis A mund të perceptojnë fjalët ndryshe.
Shtojmë rrugën deri te skripta në serverin tonë ashtu si për Telegram, por kjo do të jetë skripta për Alice, për shembull www.my_server.ru/webhook_alice.php.

Zgjidhni zërin me të cilin do të flasë aftësia, më pëlqen më shumë zëri i Alice.

Nëse planifikohet që puna të bëhet vetëm në pajisje mobile ose në shfletues, zgjidhni "Nevojitet pajisje me ekran".
MĂ« pas, vendosni cilĂ«simet pĂ«r katalogun e aftĂ«sive tĂ« AlisĂ«s. NĂ«se planifikoni tĂ« pĂ«rdorni fjalĂ«n â markĂ« pĂ«r aktivizim, duhet tĂ« kaloni verifikimin e faqes sĂ« markĂ«s nĂ« shĂ«rbimin webmaster.yandex.ru.

Me cilësimet përfundoi, kalojmë te skriptet.
Skripti i bot-it në Telegram
Le të fillojmë me skriptin për Telegram.
Lidhim bibliotekën që do të trajtojë mesazhet nga boti dhe Alisa:
include_once 'webhook_parse.php';
Përcaktojmë token-in e bot-it tonë:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Marrim të dhënat:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Analizojmë të dhënat në variabla:
if (!$request)
{
die();
// Disa gabime në dalje (kërkesa nuk është JSON i vlefshëm)
}
else if (!isset($request['update_id']) || !isset($request['message']))
{
die();
// Disa gabime në dalje (kërkesa nuk ka mesazh)
}
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);
}
Tani mund të punoni me variablat:
$tokens â kĂ«tu tani janĂ« tĂ« gjitha fjalĂ«t qĂ« pĂ«rdoruesi ka futur
$user_id â kĂ«tu Ă«shtĂ« id e pĂ«rdoruesit
$msg_chat_id â chat-i, nĂ« tĂ« cilin boti mori komandĂ«n
$msg_user_name â emri i pĂ«rdoruesit
Më pas, thërrasim funksionin Parse_Tokens për përpunim:
$Out_Str = Parse_Tokens($tokens);
Dhe dërgojmë përgjigjen:
Send_Out($user_id, $Out_Str);
funksioni Send_Out është i thjeshtë dhe duket kështu:
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);
}
Â
Skripti i aftësisë për Yandex.Alice
Tani do të kalojmë në skriptin për Alice, shumë e ngjashme me atë për Telegram.
Po ashtu, lidhim bibliotekën ku do të përpunohen mesazhet nga boti dhe Alice, plus një bibliotekë me klasa për Alice:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Marrim të dhënat:
$data = json_decode(trim(file_get_contents('php://input')), true);
Analizojmë të dhënat në variabla:
po (isset($data['request']))
{
//original_utterance
po (isset($data['meta']))
{
$data_meta = $data['meta'];
po (isset($data_meta['client_id'])) {$client_id = $data_meta['client_id'];}
}
po (isset($data['request']))
{
$data_req = $data['request'];
po (isset($data_req['original_utterance']))
{
$original_utterance = $data_req['original_utterance'];
}
po (isset($data_req['command'])) {$data_msg = $data_req['command'];}
po (isset($data_req['nlu']))
{
$data_nlu = $data_req['nlu'];
po (isset($data_nlu['tokens'])) {$tokens = $data_nlu['tokens'];}
// $data_token_count = count($data_tokens);
}
}
po (isset($data['session']))
{
$data_session = $data['session'];
po (isset($data_session['new'])) {$data_msg_new = $data_session['new'];}
po (isset($data_session['message_id'])) {$data_msg_id = $data_session['message_id'];}
po (isset($data_session['session_id'])) {$data_msg_sess_id = $data_session['session_id'];}
po (isset($data_session['skill_id'])) {$skill_id = $data_session['skill_id'];}
po (isset($data_session['user_id'])) {$user_id = $data_session['user_id'];}
}
}
Këtu ka pak më pak variabla:
$tokens â kĂ«tu tani janĂ« tĂ« gjitha fjalĂ«t qĂ« pĂ«rdoruesi ka futur
$user_id â kĂ«tu Ă«shtĂ« id e pĂ«rdoruesit
Yandex vazhdimisht pingon aftësitë e publikuara, dhe unë shtova një rresht për të dalë direkt nga skripti, pa e filluar përpunimin e plotë të mesazhit:
po (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Thërrasim për përpunim funksionin Parse_Tokens, ai është i njëjtë si për Telegram:
$Out_Str = Parse_Tokens($tokens);
Dhe dërgojmë përgjigjen:
Send_Out($user_id, $Out_Str);
Funksioni Send_Out këtu është më i komplikuar:
function Send_Out($user_id, $out_text, $out_tts = "", $is_end = false)
{
global $data_msg_sess_id, $user_id;
///// GJENERO BAZĂN E DALJES //////
$Data_Out = new Alice_Data_Out();
$Data_Out->response = new Alice_Response();
$Data_Out->session = new Alice_Session();
///// GJENERO BAZĂN E DALJES Fund //////
///// GJENERO MSG DALJES /////
$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();
}
Scripti për Alisën përfundoi.
Scripti i trajtimit të Parse_Tokens është bërë thjesht si shembull, ju do të jeni në gjendje të bëni kontrolle dhe përpunime të ndryshme atje.
function Parse_Tokens($tokens)
{
$out = "";
// bëj diçka me tokenët //
$out = "Fjalët tuaja janë " . count($tokens) . " : " . implode($tokens, " ");
return $out;
}
Nëse ju nevojitet komunikim me përdoruesin më të komplikuar se pyetje-përgjigje, atëherë do të nevojitet të ruani në bazën e të dhënave (p.sh. mysql) $user_id dhe të dhënat që keni marrë nga përdoruesi dhe t'i analizoni ato në funksionin Parse_Tokens.
Kjo është thuajse gjithçka, nëse gjithçka është bërë siç duhet, atëherë boti i Telegramit është tashmë në dispozicion, dhe aftësia e Alisës mund të testohet. dialogs.yandex.ru/developer, duke kaluar në aftësinë tuaj të re në skedën e testimit.

Nëse gjithçka funksionon siç duhet, mund ta dërgoni aftësinë për moderim duke klikuar butonin «Për moderim».
Tani keni dy bota për platformat e ndryshme që funksionojnë në mënyrë të njëjtë.
Dokumentacioni për shërbimin Yandex.Dialogues këtu
SkenerĂ«t e plotĂ« janĂ« tĂ« disponueshĂ«m nĂ« github ŃĐșаŃаŃŃ.
Burimi: habr.com
