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