Jó napot.
A Telegram-botokról sok cikk található, de az Aliás képességeiről keveset írnak. Az egységes bot létrehozása pedig egyáltalán nem található, ezért megosztom tapasztalataimat arról, hogyan készíthetünk egy egyszerű Telegram-botot és egy Yandex.Aliás képességet a weboldal számára, amelyek egy közös funkcionalitással bírnak.
Tehát, hogyan állítsunk be egy webszervert és kapjunk ssl-tanúsítványt erről nem fogok mesélni, erről már bőven írtak.
Telegram-bot létrehozása
Első lépésként hozzuk létre a Telegram-botot, ehhez menjünk a Telegramra, és keressük meg a BotFather-t.


Válasszuk a /newbot lehetőséget.

Beírjuk a bot nevét, amely alapján válaszolni fog, majd beírjuk a bot felhasználónevét. Válaszként kapunk egy tokent a bot kezeléséhez, ezt a kulcsot jegyezzük le, mert később szükségünk lesz rá.

A következő lépés az, hogy értesítsük a Telegram szervereit, hogy melyik szerverre küldjék a bot adatait. Ehhez egy ilyen formátumú hivatkozást készítünk:
https://api.telegram.org/bot___TOKÉN___/setWebhook?url=https://____ÚTVONAL_A_SZKRIPTHEZ___
___TOKÉN___ cseréljük le a korábban kapott bot tokenünkre.
____ÚTVONAL_A_SZKRIPTHEZ___ cseréljük le a szerverünkön lévő szkript címére, ahol az adatok feldolgozása történik (például www.my_server.ru/webhook_telegram.php).
Itt van egy probléma, az api.telegram.org szerver blokkolva van, de meg lehet oldani: béreljünk egy legolcsóbb szerver ott, ahol nincsenek korlátozások, és adjuk ki a szerver konzoljából a következő parancsot
wget ___MEGKERESOTT_CÍM___
Minden, létrehoztuk a Telegram-botot, és összekapcsoltuk a saját szerverrel.
Képesség létrehozása Yandex.Aliás számára
Térjünk át a Yandex.Aliás képességének létrehozására.
A képesség létrehozásához lépjünk a Yandex.Dialogs fejlesztői oldalára. a Yandex.Dialogs fejlesztői oldalára,, kattintsunk a „Párbeszéd létrehozása” gombra, és válasszuk az „Aliás képesség” opciót.

Megnyílik a képesség beállító párbeszédablak.

Kezdjük el megadni a képesség beállításait.
Adjuk meg a képesség nevét.

A aktiváló nevet nagyon gondosan kell választani, hogy Aliás helyesen érthesse. Az apróságok közé tartozik, hogy a mobil alkalmazás Aliással és az Yandex.Station vagy Irbis A típusú hangszórók különbözőképpen értelmezhetik a szavakat.
Adjuk meg a szerverünkön lévő szkript címét ugyanúgy, ahogyan a Telegram esetében, csak ez a szkript kifejezetten Aliás számára készült, például www.my_server.ru/webhook_alice.php.

Válasszuk ki azt a hangot, amellyel a képesség fog beszélni, nekem jobban tetszik Aliás hangja.

Ha csak mobil eszközökön vagy böngészőben tervezett használat, akkor válasszuk a „Kell egy képernyővel rendelkező eszköz” lehetőséget.
Ezután megadjuk az Alice készségkönyvtár beállításait. Ha aktiváláshoz márkanevet tervez használni, akkor a márka weboldalának hitelesítésén kell átmennie a webmaster.yandex.ru szolgáltatásban.

A beállításokkal kész, most térjünk át a szkriptekre.
Telegram-bot szkript
Kezdjük a Telegram szkripttel.
Csatlakoztatjuk azt a könyvtárat, ahol a bot és Alice által küldött üzeneteket kezeljük:
include_once 'webhook_parse.php';
Megadjuk a botunk tokenjét:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Adatok lekérése:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Az adatok változókra bontása:
if (!$request)
{
die();
// Néhány hibakimenet (a kérés nem érvényes JSON)
}
else if (!isset($request['update_id']) || !isset($request['message']))
{
die();
// Néhány hibakimenet (a kérés nem tartalmaz üzenetet)
}
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);
}
Most már dolgozhatunk a változókkal:
$tokens — itt vannak most az összes szó, amit a felhasználó beírt
$user_id — itt a felhasználó azonosítója
$msg_chat_id — a csevegés, ahol a bot parancsot kapott
$msg_user_name — a felhasználó neve
Ezután hívjuk meg a Parse_Tokens feldolgozó függvényt:
$Out_Str = Parse_Tokens($tokens);
És elküldjük a választ:
Send_Out($user_id, $Out_Str);
A Send_Out függvény egyszerű, és így néz ki:
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);
}
A készség szkriptje Yandex.Alice számára
Most térjünk át a szkriptre Alice számára, ez majdnem ugyanolyan, mint a Telegram esetében.
Csatlakoztatjuk a könyvtárat, ahol a bot és Alice által küldött üzeneteket kezeljük, valamint az Alice osztályait tartalmazó könyvtárat:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Adatok lekérése:
$data = json_decode(trim(file_get_contents('php://input')), true);
Az adatok változókra bontása:
if (isset($data['request']))
{
//eredeti_kifejezés
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'];}
}
}
Itt kevesebb szükséges változó van:
$tokens — itt vannak most az összes szó, amit a felhasználó beírt
$user_id — itt a felhasználó azonosítója
A Yandex folyamatosan pingeli a közzétett készségeket, és hozzátettem egy sort, hogy azonnal kilépjek a szkriptből, anélkül, hogy teljesen feldolgoznám az üzenetet:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
A Parse_Tokens funkciót hívva kezeljük, ez ugyanaz, mint a Telegram esetében:
$Out_Str = Parse_Tokens($tokens);
És elküldjük a választ:
Send_Out($user_id, $Out_Str);
A Send_Out funkció itt összetettebb:
function Send_Out($user_id, $out_text, $out_tts = "", $is_end = false)
{
global $data_msg_sess_id, $user_id;
//////////// KIMENET BÁZIS GENERÁLÁS ////////////
$Data_Out = new Alice_Data_Out();
$Data_Out->response = new Alice_Response();
$Data_Out->session = new Alice_Session();
//////////// KIMENET BÁZIS GENERÁLÁS VÉGE ////////////
//////////// ÜZENET KIMENET GENERÁLÁS ////////////
$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();
}
Befejeztük a szkriptet Aliszához.
A Parse_Tokens kezelő szkriptjét pusztán példának készítettem, itt bármilyen ellenőrzést és feldolgozást megvalósíthatsz.
function Parse_Tokens($tokens)
{
$out = "";
// végezz valamit a tokenelemekkel //
$out = "Ön beírt " . count($tokens) . " szót: " . implode($tokens, " ");
return $out;
}
Ha a felhasználóval folytatott kommunikációd bonyolultabb, mint a kérdés-válasz, akkor mentened kell az adatbázisba (például mysql) a $user_id-t és a felhasználótól már kapott adatokat, majd ezeket elemezni a Parse_Tokens funkcióban.
Ez gyakorlatilag mindent lefed, ha minden rendben működik, akkor a Telegram-bot már elérhető, az Alisz készséget pedig ellenőrizheted. dialogs.yandex.ru/developer, át lehet menni az új készséged tesztelési fülére.

Ha minden megfelelően működik, a készséget moderációra lehet küldeni a „Moderálásra” gomb megnyomásával.
Most már két különböző platformra készült botja van, amelyek egyaránt ugyanúgy működnek.
Dokumentáció a Yandex.Dialogs szolgáltatásról itt
A teljes szkriptek elérhetőek a githubon letölteni.
Forrás: habr.com
