Labdien.
Ir daudz rakstu par Telegram robotu tÄmu, taÄu daži cilvÄki raksta par prasmÄm Alisei, un es neatradu nekÄdu informÄciju par to, kÄ izveidot vienu robotu, tÄpÄc nolÄmu dalÄ«ties pieredzÄ par to, kÄ izveidot vienkÄrÅ”s Telegram robots un Yandex.Alice prasme vietnei ar tÄdu paÅ”u funkcionalitÄti.
TÄtad, es jums nestÄstÄ«Å”u, kÄ izveidot tÄ«mekļa serveri un iegÅ«t SSL sertifikÄtu, par to ir rakstÄ«ts pietiekami daudz.
Telegram robota izveide
Vispirms izveidosim Telegram robotu, Å”im nolÅ«kam mÄs ejam uz Telegram un atrodam BotFather robotu.
IzvÄlieties /newbot
MÄs ievadÄm bota nosaukumu, ar kuru tas atbildÄs, pÄc tam ievadÄm bota nosaukumu, atbildot mÄs saÅemam marÄ·ieri bota vadÄ«Å”anai, mÄs pierakstÄm Å”o atslÄgu, tas mums noderÄs nÄkotnÄ.
NÄkamais solis ir paziÅot Telegram serveriem, uz kuru serveri sÅ«tÄ«t datus no robota. Lai to izdarÄ«tu, mÄs izveidojam veidlapas saiti:
https: //api.telegram.org/bot___Š¢ŠŠŠŠ___/setWebhook?url=https://____ŠŠ£Š¢Š¬_ŠŠ_Š”ŠŠ ŠŠŠ¢Š___
___TOKEN___ mÄs aizstÄjam ar savu marÄ·ieri no robota, kas saÅemts agrÄk
____PATH_TO_SCRIPT____ mÄs aizstÄjam ar tÄ skripta adresi mÅ«su serverÄ«, kurÄ dati tiks apstrÄdÄti (piemÄram,
Å eit ir problÄma, api.telegram.org serveris ir bloÄ·Äts, bet jÅ«s varat to izdarÄ«t: iznomÄt lÄtÄko serveri, kur nav ierobežojumu un dodiet komandu no Ŕī servera konsoles
wget ___ŠŠŠŠ£Š§ŠŠŠØŠŠŠ”ŠÆ_ŠŠŠ ŠŠ”___
Tas arī viss, Telegram robots ir izveidots un savienots ar jūsu serveri.
IemaÅu izveide Yandex.Alisa
PÄriesim pie Yandex.Alice prasmes izveides.
Lai izveidotu prasmi, jums jÄiet uz Yandex.Dialogues izstrÄdÄtÄju lapu
Tiks atvÄrts prasmju iestatÄ«jumu dialoglodziÅÅ”.
MÄs sÄkam ievadÄ«t prasmju iestatÄ«jumus.
Ievadiet savas prasmes nosaukumu.
AktivizÄcijas nosaukums jÄizvÄlas ļoti rÅ«pÄ«gi, lai Alise to saprastu pareizi, pÄc niansÄm - mobilÄ aplikÄcija ar Alisi un kolonnÄm, piemÄram, Yandex.Station vai Irbis A vÄrdus var uztvert dažÄdi.
MÄs ievadÄm ceļu uz skriptu savÄ serverÄ« tÄdÄ paÅ”Ä veidÄ kÄ Telegram, bet tas bÅ«s skripts, kas paredzÄts, piemÄram, Alisei
MÄs izvÄlamies balsi, ar kuru prasme runÄs, man vairÄk patÄ«k Alises balss.
Ja plÄnojat strÄdÄt tikai mobilajÄs ierÄ«cÄs vai pÄrlÅ«kprogrammÄ, atlasiet āJums nepiecieÅ”ama ierÄ«ce ar ekrÄnuā.
PÄc tam ievadiet Alises prasmju kataloga iestatÄ«jumus. Ja plÄnojat aktivizÄÅ”anai izmantot vÄrdu "zÄ«mols", jums ir jÄpÄrbauda zÄ«mola vietne pakalpojumÄ webmaster.yandex.ru.
Tas viss ar iestatÄ«jumiem, pÄriesim pie skriptiem.
Telegrammas robota skripts
SÄksim ar Telegram skriptu.
MÄs savienojam bibliotÄku, kurÄ tiks apstrÄdÄti ziÅojumi no robota un Alises:
include_once 'webhook_parse.php';
MÄs iestatÄ«jÄm sava robota marÄ·ieri:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
MÄs saÅemam datus:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Datu parsÄÅ”ana mainÄ«gajos:
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);
}
Tagad jÅ«s varat strÄdÄt ar mainÄ«gajiem:
$tokens ā Å”eit ir visi lietotÄja ievadÄ«tie vÄrdi
$user_id ā lietotÄja ID Å”eit
$msg_chat_id - tÄrzÄÅ”ana, kurÄ robots saÅÄma komandu
$msg_user_name ā lietotÄjvÄrds
TÄlÄk apstrÄdei izsaucam funkciju Parse_Tokens:
$Out_Str = Parse_Tokens($tokens);
Un nosūtiet atbildi:
Send_Out($user_id, $Out_Str);
Funkcija Send_Out ir vienkÄrÅ”a un izskatÄs Å”Ädi:
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);
}
Prasmju skripts Yandex.Alisa
Tagad pÄriesim pie Alises skripta, tas ir gandrÄ«z tÄds pats kÄ Telegram.
MÄs arÄ« savienojam bibliotÄku, kurÄ tiks apstrÄdÄti ziÅojumi no bota un Alises, kÄ arÄ« bibliotÄku ar nodarbÄ«bÄm Alisei:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
MÄs saÅemam datus:
$data = json_decode(trim(file_get_contents('php://input')), true);
Datu parsÄÅ”ana mainÄ«gajos:
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'];}
}
}
Å eit ir daži mazÄk mainÄ«gie:
$tokens ā Å”eit ir visi lietotÄja ievadÄ«tie vÄrdi
$user_id ā lietotÄja ID Å”eit
Yandex pastÄvÄ«gi pÄrbauda publicÄtÄs prasmes, un es pievienoju rindiÅu, lai nekavÄjoties izietu no skripta, nesÄkot pilnu ziÅojuma apstrÄdi:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
ApstrÄdei mÄs izsaucam funkciju Parse_Tokens, tÄ ir tÄda pati kÄ Telegram:
$Out_Str = Parse_Tokens($tokens);
Un nosūtiet atbildi:
Send_Out($user_id, $Out_Str);
Funkcija Send_Out Å”eit ir sarežģītÄka:
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();
}
Pabeidza Alises scenÄriju.
Pats Parse_Tokens apstrÄdes skripts tika izveidots tikai piemÄram, tur varat veikt jebkÄdas pÄrbaudes un apstrÄdi.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
Ja nepiecieÅ”ams sazinÄties ar lietotÄju, kura forma ir sarežģītÄka nekÄ jautÄjums-atbilde, tad lietotÄja $user_id un no lietotÄja jau saÅemtie dati ir jÄsaglabÄ datu bÄzÄ (piemÄram, mysql) un jÄanalizÄ funkcija Parse_Tokens.
PatiesÄ«bÄ tas ir gandrÄ«z viss, ja viss ir izdarÄ«ts pareizi, tad Telegram bots jau ir pieejams, Alises prasmes var pÄrbaudÄ«t
Ja viss darbojas pareizi, prasmi var nosÅ«tÄ«t moderÄÅ”anai, noklikŔķinot uz pogas "ModerÄcijai".
Tagad jums ir divi boti dažÄdÄm platformÄm vienlaikus, kas darbojas vienÄdi.
DokumentÄcija pakalpojumam Yandex.Dialogues
Pilni skripti publicÄti vietnÄ github
Avots: www.habr.com