Goeie middei.
D'r binne in protte artikels oer it ûnderwerp fan Telegram-bots, mar in pear minsken skriuwe oer feardichheden foar Alice, en ik fûn gjin ynformaasje oer hoe't jo in inkele bot meitsje kinne, dus ik besleat myn ûnderfining te dielen oer hoe't jo in bot meitsje kinne. ienfâldige Telegram bot en de Yandex.Alice feardigens foar de side mei deselde funksjonaliteit.
Dat, ik sil jo net fertelle hoe't jo in webserver ferheegje en in ssl-sertifikaat krije, der is genôch oer skreaun.
It meitsjen fan in Telegram bot
Litte wy earst in Telegram-bot oanmeitsje, hjirfoar geane wy nei Telegram en fine dêr de BotFather-bot.
Kies /newbot
Wy ynfiere de namme fan 'e bot wêrmei't it sil reagearje, dan ynfiere wy de namme fan' e bot, as antwurd krije wy in token om de bot te kontrolearjen, wy skriuwe dizze kaai op, it sil nuttich wêze foar ús yn 'e takomst.
De folgjende stap is om de Telegram-tsjinners te fertellen nei hokker server gegevens fan 'e bot moatte stjoere. Om dit te dwaan, meitsje wy in keppeling fan it formulier:
https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___
___TOKEN___ ferfange wy mei ús token fan 'e bot, earder ûntfongen
____PATH_TO_SCRIPT____ ferfange wy mei it adres fan it skript op ús tsjinner wêr't de gegevens ferwurke wurde (bygelyks,
D'r is hjir in probleem, de api.telegram.org-tsjinner is ûnder blokkearjen, mar jo kinne dit dwaan: hiere de goedkeapste tsjinner wêr't gjin beheiningen binne en jou it kommando fan 'e konsole fan dizze tsjinner
wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___
Dat is it, de Telegram-bot is oanmakke en ferbûn mei jo server.
It meitsjen fan in feardigens foar Yandex.Alisa
Litte wy trochgean mei it meitsjen fan in feardigens foar Yandex.Alice.
Om in feardigens te meitsjen, moatte jo nei de Yandex.Dialogues-ûntwikkeldersside gean
It dialoochfinster foar feardigensynstellingen sil iepenje.
Wy begjinne de feardigensynstellingen yn te fieren.
Fier de namme fan jo feardigens yn.
De aktivearringsnamme moat tige foarsichtich keazen wurde, sadat Alice it goed begrypt, fan 'e nuânses - in mobile applikaasje mei Alice en kolommen lykas Yandex.Station of Irbis A kinne wurden oars waarnimme.
Wy ynfiere it paad nei it skript op ús server op deselde manier as foar Telegram, mar it sil in skript wêze spesifyk foar Alice, bygelyks
Wy kieze de stim wêrmei't de feardigens sil prate, ik hâld mear fan Alice's stim.
As jo fan plan binne om allinich op mobile apparaten of yn in browser te wurkjen, selektearje dan "Jo hawwe in apparaat nedich mei in skerm."
Fier dan de ynstellings yn foar Alice's feardigenskatalogus. As jo fan plan binne om it wurd "merk" te brûken foar aktivearring, moatte jo de webside fan it merk ferifiearje yn 'e tsjinst webmaster.yandex.ru.
Dat is alles mei de ynstellings, lit ús gean nei de skripts.
Telegram bot skript
Litte wy begjinne mei in skript foar Telegram.
Wy ferbine de bibleteek wêr't berjochten fan 'e bot en Alice sille wurde ferwurke:
include_once 'webhook_parse.php';
Wy sette it token fan ús bot yn:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Wy ûntfange gegevens:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
It parsearjen fan de gegevens yn fariabelen:
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);
}
No kinne jo wurkje mei fariabelen:
$tokens - hjir binne no alle wurden dy't de brûker ynfierd hat
$user_id - brûkers-id hjir
$msg_chat_id - petear wêryn de bot it kommando ûntfong
$msg_user_name - brûkersnamme
Dêrnei neame wy de funksje Parse_Tokens foar ferwurking:
$Out_Str = Parse_Tokens($tokens);
En stjoer in reaksje:
Send_Out($user_id, $Out_Str);
de Send_Out-funksje is ienfâldich en sjocht der sa út:
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);
}
Skill skript foar Yandex.Alisa
Litte wy no gean nei it skript foar Alice, it is hast itselde as foar Telegram.
Wy ferbine ek de bibleteek wêr't berjochten fan 'e bot en Alice wurde ferwurke, plus in bibleteek mei klassen foar Alice:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Wy ûntfange gegevens:
$data = json_decode(trim(file_get_contents('php://input')), true);
It parsearjen fan de gegevens yn fariabelen:
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'];}
}
}
D'r binne hjir in pear minder fariabelen:
$tokens - hjir binne no alle wurden dy't de brûker ynfierd hat
$user_id - brûkers-id hjir
Yandex pingt konstant publisearre feardichheden, en ik haw in rigel tafoege om it skript fuortendaliks te ferlitten sûnder de folsleine ferwurking fan it berjocht te begjinnen:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Wy neame de Parse_Tokens-funksje foar ferwurking, it is itselde as foar Telegram:
$Out_Str = Parse_Tokens($tokens);
En stjoer in reaksje:
Send_Out($user_id, $Out_Str);
De Send_Out-funksje is hjir komplisearre:
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();
}
It skript foar Alice klear.
It ferwurkingsskript fan Parse_Tokens sels waard puur makke foar in foarbyld, jo kinne dêr alle kontrôles en ferwurkjen dwaan.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
As jo moatte kommunisearje mei in brûker fan in mear komplekse foarm dan in fraach-antwurd, dan moatte bewarje de brûker syn $user_id en de gegevens al ûntfongen fan de brûker yn de databank (bygelyks, mysql) en analysearje se yn de funksje Parse_Tokens.
Eigentlik is dit hast alles, as alles goed is dien, dan is de Telegram-bot al beskikber, de feardigens fan Alice kin wurde kontrolearre
As alles goed wurket, kinne jo de feardigens foar moderaasje stjoere troch op de knop "Foar moderaasje" te klikken.
No hawwe jo twa bots foar ferskate platfoarms tagelyk, dy't op deselde manier wurkje.
Dokumintaasje foar de tsjinst Yandex.Dialogues
Folsleine skripts pleatst op github
Boarne: www.habr.com