Mirëdita.
Ka shumë artikuj mbi botët Telegram, ndërsa pak kush shkruan për aftësitë për Alisën, dhe nuk kam gjetur informacione se si të krijoja një bot të vetëm, kështu që vendosa të ndaj përvojën time se si të krijoni një bot të thjeshtë Telegram dhe një aftësi për Yandex.Alice për një faqe interneti, që ka funksionalitet të njëjtë.
Pra, si të ngremë një server web dhe të marrim certifikatën ssl nuk do të flas për këtë, ka mjaft për këtë.
Krijimi i bot-it Telegram
Së pari, le të krijojmë një bot Telegram, për këtë shkoni në Telegram dhe gjejeni bot-in BotFather.


Zgjidhni /newbot

Shkruani emrin e bot-it, me të cilin do të përgjigjet, pastaj shkruani emrin e bot-it, në përgjigje do të merrni një token për të menaxhuar bot-in, shënoni këtë çelës, do të na nevojitet më vonë.

Hapi tjetër është të njoftoni serverët e Telegram-it se në cilin server duhet të dërgohen të dhënat nga boti. Për këtë bëni një lidhje të tipit:
https://api.telegram.org/bot___TOKEN___/setWebhook?url=https://____RRUGA_DERI_NË_SKRIPTIN___
___TOKEN___ zëvendësohet me token-in tonë nga boti, e fituar më parë
____RRUGA_DERI_NË_SKRIPTIN___ zëvendësohet me adresën e skriptit në serverin tonë, ku do të ndodhin përpunimi i të dhënave (p.sh., www.my_server.ru/webhook_telegram.php).
Këtu ka një problem, serveri api.telegram.org është nën bllokadë, por mund ta bëni kështu: merrni me qira serverin më të lirë server aty ku nuk ka kufizime dhe jepni nga konsola e këtij serveri komandën
wget ___ADRESA_PAS_GJITHASH____
I gjithash, boti Telegram është krijuar dhe i lidhur me tuajin сервером.
Krijimi i aftësisë për Yandex.Alice
Tani kalojmë në krijimin e aftësisë për Yandex.Alice.
Për të krijuar një aftësi, duhet të shkoni në faqen e zhvilluesve të Yandex.Dialogues faqen e zhvilluesve të Yandex.Dialogues, kliko aty «Krijo dialog» dhe zgjedh «Aftësi në Alisën».

Do të hapet dialogu i konfigurimit të aftësisë.

Fillojmë të ruajmë konfigurimet e aftësisë.
Shkruani emrin e aftësisë tuaj.

Emri aktivizues duhet të zgjidhet me kujdes të madh, në mënyrë që Alisa ta kuptojë saktë, nga nuancat - aplikacioni celular me Alisën dhe kolonat si Yandex.Station ose Irbis A mund të perceptojnë fjalët ndryshe.
Shkruani rrugën deri në skriptin në serverin tonë ashtu si për Telegram, por ky do të jetë skripti për Alisën, 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 Alisës.

Nëse planifikohet që të funksionojë vetëm në pajisje mobile ose në shfletues, atëherë zgjidhni «Kërkohet pajisje me ekran».
Më pas, vendosim cilësimet për katalogun e aftësive të Alicë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 gjithçka, kalojmë te skriptet.
Skripti i botit Telegram
Le të fillojmë me skriptin për Telegram.
Lidhim bibliotekën, ku do të përpunohen mesazhet nga boti dhe Alicia:
include_once 'webhook_parse.php';
Definojmë tokenin e botit 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ë punojmë me variablat:
$tokens — këtu tani janë të gjitha fjalët që përdoruesi ka shkruar
$user_id — këtu është id e përdoruesit
$msg_chat_id — chat-i ku boti mori komandën
$msg_user_name — emri i përdoruesit
Më pas, thërrasim funksionin për përpunimin Parse_Tokens:
$Out_Str = Parse_Tokens($tokens);
Dhe dërgojmë përgjigjen:
Send_Out($user_id, $Out_Str);
funksioni Send_Out është i thjeshtë dhe duket ashtu:
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 kalojmë te skripti për Alicën, ai është pothuajse i njëjtë me atë për Telegram.
Po ashtu lidhim bibliotekën, ku do të përpunohen mesazhet nga boti dhe Alicës, plus bibliotekën me klasat për Alicën:
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:
nëse (isset($data['request']))
{
//original_utterance
nëse (isset($data['meta']))
{
$data_meta = $data['meta'];
nëse (isset($data_meta['client_id'])) {$client_id = $data_meta['client_id'];}
}
nëse (isset($data['request']))
{
$data_req = $data['request'];
nëse (isset($data_req['original_utterance']))
{
$original_utterance = $data_req['original_utterance'];
}
nëse (isset($data_req['command'])) {$data_msg = $data_req['command'];}
nëse (isset($data_req['nlu']))
{
$data_nlu = $data_req['nlu'];
nëse (isset($data_nlu['tokens'])) {$tokens = $data_nlu['tokens'];}
// $data_token_count = count($data_tokens);
}
}
nëse (isset($data['session']))
{
$data_session = $data['session'];
nëse (isset($data_session['new'])) {$data_msg_new = $data_session['new'];}
nëse (isset($data_session['message_id'])) {$data_msg_id = $data_session['message_id'];}
nëse (isset($data_session['session_id'])) {$data_msg_sess_id = $data_session['session_id'];}
nëse (isset($data_session['skill_id'])) {$skill_id = $data_session['skill_id'];}
nëse (isset($data_session['user_id'])) {$user_id = $data_session['user_id'];}
}
}
Këtu ka pak më pak përbërës të nevojshëm:
$tokens — këtu tani janë të gjitha fjalët që përdoruesi ka shkruar
$user_id — këtu është id e përdoruesit
Yandex vazhdimisht pinguese aftësitë e publikuara, dhe kam shtuar një rresht për të dalë menjëherë nga skripti, pa e filluar përpunimin e plotë të mesazhit:
nëse (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Thërrasim funksionin Parse_Tokens për përpunim, ai është i njëjtë me atë 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:
funksioni 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;
nëse (strlen($out_tts) 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();
}
Kemi përfunduar skriptin për Alisa.
Skripti i përpunimit Parse_Tokens është bërë thjesht si shembull, ju mund të bëni atje çdo kontroll dhe përpunim.
funksioni Parse_Tokens($tokens)
{
$out = "";
// bëni diçka me tokens //
$out = "Keni futur " . count($tokens) . " fjalë: " . implode($tokens, " ");
ktheheni $out;
}
Nëse ju nevojitet komunikimi me përdoruesin në një formë më të komplikuar se pyetje-përgjigje, atëherë do t'ju duhet të ruani në bazën e të dhënave (për shembull mysql) $user_id të përdoruesit dhe tashmë të dhënat e marra nga përdoruesi dhe t'i analizoni ato në funksionin Parse_Tokens.
Këtu është pothuajse gjithçka, nëse gjithçka është bërë saktë, atëherë bot Telegram është tashmë në dispozicion, aftësia e Alisës mund të kontrollohet dialogs.yandex.ru/developer, duke kaluar në aftësinë tuaj të re në skedën e testimit.

Nëse gjithçka punon saktë, mund të dërgoni aftësinë për moderim duke klikuar butonin "Në moderim".
Tani tani keni dy bota për platforma të ndryshme, të cilat funksionojnë njëlloj.
Dokumentacioni për shërbimin Yandex.Dialogs këtu
Skritet e plota janë të publikuara në github shkarkoni.
Burimi: habr.com
