Tere päevast.
Telegram-botidest on palju artikleid, kuid oskuste kohta Alisale räägib keegi vähe, ja ma ei leidnud üldse teavet, kuidas luua ühtset boti, seetõttu otsustasin jagada oma kogemust, kuidas luua lihtsat Telegram-boti ja Yandex.Alice oskust, millel on ühine funktsionaalsus.
Nii, kuidas üles seada veebiserver ja saada ssl-sertifikaat ma rääkima ei hakka, sellest on piisavalt kirjutatud.
Telegram-boti loomine
Esiteks loome Telegram-boti, selleks mine Telegrami ja leia sealt BotFather.


Vali /newbot

Sisesta boti nimi, millele ta reageerib, seejärel sisesta boti kasutajanimi, vastuseks saad tokeni boti haldamiseks, salvestame selle võtme, see tuleb meile hiljem kasuks.

Järgmine samm on öelda Telegrami serveritele, kuhu boti andmeid saata. Selleks teeme lingi kujul:
https://api.telegram.org/bot___TOKEN___/setWebhook?url=https://____TEE_KRIPTI___
___TOKEN___ asendame meie poolt varem saadud boti tokeniga
____TEE_KRIPTI___ asendame meie serveris oleva skripti aadressiga, kus andmete töötlemine toimub (näiteks www.my_server.ru/webhook_telegram.php).
Siin on probleem, api.telegram.org server on blokeeritud, kuid võid teha nii: rentida kõige odavam server seal, kus pole teadlikkuse piiramisi ja anda selle serveri konsoolist käsk
wget ___SAADUD_AADRESS___
Kõik, Telegram-bot on loodud ja ühendatud sinu serverilt.
Yandex.Alice oskuse loomine
Liigume edasi Yandex.Alice oskuse loomise juurde.
Oskuse loomiseks pead minema Yandex.Dialogide arendaja lehele Yandex.Dialogide arendaja lehele, vajuta seal "Loo dialoog" ja vali "Oscar Alice's".

Avanevad oskuse seadistuste dialoog.

Alustame oskuse seadistuste sisestamist.
Sisesta oma oskuse nimi.

Aktiveerimise nime tuleks valida väga ettevaatlikult, et Alice seda õigesti mõistaks, detailina – mobiilirakendus Alicega ja seadmed nagu Yandex.Station või Irbis A võivad sõnu eri viisil tajuda.
Sisesta meie serveris oleva skripti tee nagu Telegrami jaoks, kuid see on skript, mis on mõeldud just Alicele, näiteks www.my_server.ru/webhook_alice.php.

Vali hääl, millega oskus räägib, mulle meeldib just Alice hääl.

Kui on plaanis töötada ainult mobiilseadmetes või brauseris, siis vali "Vajalik ekraaniga seade".
Edasi sisestame Alice oskuste katalooge seadistused. Kui plaanite aktiveerimiseks kasutada sõna - bränd, peate läbima brändi veebisaidi valideerimise teenuses webmaster.yandex.ru.

Seadistustega on kõik, liigume skriptide juurde.
Telegrami roboti skript
Alustame Telegrami skriptist.
Käivitame teegi, kus töödeldakse roboti ja Alice' sõnumeid:
include_once 'webhook_parse.php';
Määrame meie roboti tokeni:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Saame andmed:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Mäletame andmed muutujateks:
if (!$request)
{
die();
// Mõni viga (taotlus ei ole kehtiv JSON)
}
else if (!isset($request['update_id']) || !isset($request['message']))
{
die();
// Mõni viga (taotlusel ei ole sõnumit)
}
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);
}
Nüüd on võimalik töötada muutujatega:
$tokens — siin on nüüd kõik sõnad, mida kasutaja sisestas
$user_id — siin on kasutaja id
$msg_chat_id — vestlus, kus robot sai käsu
$msg_user_name — kasutaja nimi
Seejärel kutsume üles töötlemiseks funktsiooni Parse_Tokens:
$Out_Str = Parse_Tokens($tokens);
Ja saadame vastuse:
Send_Out($user_id, $Out_Str);
Funktsioon Send_Out on lihtne ja näeb välja selline:
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);
}
Yandex.Alice oskuse skript
Nüüd liigume Alice skripti juurde, see on peaaegu sama nagu Telegrami skript.
Käivitame ka teegi, kus töödeldakse roboti ja Alice'i sõnumeid, pluss teegi klassidega Alice'i jaoks:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Saame andmed:
$data = json_decode(trim(file_get_contents('php://input')), true);
Mäletame andmed muutujateks:
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'];}
}
}
Siin on vajalikke muutujaid veidi vähem:
$tokens — siin on nüüd kõik sõnad, mida kasutaja sisestas
$user_id — siin on kasutaja id
Yandex jälgib pidevalt avaldatud oskusi, ja ma lisasin rea, et skriptist kohe välja minna, käivitamata sõnumi täielikku töötlemist:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Kutsume töötlemiseks funktsiooni Parse_Tokens, see on sama, mis Telegrami jaoks:
$Out_Str = Parse_Tokens($tokens);
Ja saadame vastuse:
Send_Out($user_id, $Out_Str);
Funktsioon Send_Out on siin keerulisem:
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) 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();
}
Lõpetasime skripti Alice jaoks.
Isegi skripti töötlemiseks Parse_Tokens tegin puhtalt näitena, saate seal teha igasuguseid kontrolle ja töötlemisi.
function Parse_Tokens($tokens)
{
$out = "";
// tee midagi tokenitega //
$out = "Teie sisestatud " . count($tokens) . " sõna: " . implode($tokens, " ");
return $out;
}
Kui peate suhtlust kasutajaga keerulisemaks, kui küsimus-vastus, on vaja salvestada andmebaasis (näiteks mysql) $user_id kasutaja ja juba kasutajalt saadud andmed ning analüüsida neid funktsioonis Parse_Tokens.
Sisuliselt on see peaaegu kõik, kui kõik on õigesti tehtud, on Telegrami bot juba saadaval, Alice oskust saab kontrollida dialogs.yandex.ru/developer, minnes oma uuele oskusele testeeringu vahekaardile.

Kui kõik töötab õigesti, saate oskuse moderatsioonile saata, vajutades nuppu „Moderatsioonile“.
Nüüd on teil kaks bot'i erinevate platvormide jaoks, mis töötavad ühtemoodi.
Yandex.Dialogide teenuse dokumentatsioon siit
Täielikud skriptid on üles laaditud GitHubi alla laadida.
Allikas: habr.com
