Բարի օր:
Telegram-ի բոտերի թեմայով շատ հոդվածներ կան, բայց քչերն են գրում Ալիսի հմտությունների մասին, և ես որևէ տեղեկություն չգտա, թե ինչպես ստեղծել մեկ բոտ, ուստի որոշեցի կիսվել իմ փորձով, թե ինչպես ստեղծել պարզ Telegram բոտ և Yandex.Alice հմտություն նույն ֆունկցիոնալությամբ կայքի համար:
Այսպիսով, ես ձեզ չեմ ասի, թե ինչպես բարձրացնել վեբ սերվեր և ստանալ ssl վկայագիր, բավական է գրվել դրա մասին:
Telegram բոտի ստեղծում
Նախ, եկեք ստեղծենք Telegram բոտ, դրա համար մենք գնում ենք Telegram և այնտեղ գտնում BotFather բոտը:
Ընտրեք /newbot
Մուտքագրում ենք այն բոտի անունը, որով նա կպատասխանի, այնուհետև մուտքագրում ենք բոտի անունը, ի պատասխան ստանում ենք բոտը կառավարելու նշան, գրում ենք այս բանալին, այն ապագայում մեզ օգտակար կլինի։
Հաջորդ քայլը Telegram սերվերներին ասելն է, թե որ սերվերին պետք է տվյալներ ուղարկեն բոտից: Դա անելու համար մենք ձևի հղում ենք անում.
https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___
___TOKEN___ մենք փոխարինում ենք ավելի վաղ ստացված բոտի մեր նշանով
____PATH_TO_SCRIPT____ մենք փոխարինում ենք մեր սերվերի սկրիպտի հասցեով, որտեղ տվյալները կմշակվեն (օրինակ.
Այստեղ խնդիր կա, api.telegram.org սերվերը արգելափակված է, բայց դուք կարող եք դա անել. վարձել ամենաէժան սերվերը, որտեղ սահմանափակումներ չկան և հրաման տալ այս սերվերի վահանակից։
wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___
Վերջ, ստեղծվում է Telegram բոտը և միացված է ձեր սերվերին:
Yandex.Alisa-ի համար հմտության ստեղծում
Եկեք անցնենք Yandex.Alice-ի համար հմտություն ստեղծելուն:
Հմտություն ստեղծելու համար հարկավոր է գնալ Yandex.Dialogues մշակողների էջ
Հմտությունների կարգավորումների երկխոսությունը կբացվի:
Մենք սկսում ենք մուտք գործել հմտությունների կարգավորումներ:
Մուտքագրեք ձեր հմտության անունը:
Ակտիվացման անունը պետք է ընտրվի շատ ուշադիր, որպեսզի Ալիսը այն ճիշտ հասկանա՝ նրբություններից՝ Ալիսով բջջային հավելվածը և Yandex.Station-ի կամ Irbis A-ի նման սյունակները կարող են այլ կերպ ընկալել բառերը:
Մենք մեր սերվերի վրա մուտքագրում ենք սցենարի ուղին այնպես, ինչպես Telegram-ի համար, բայց դա կլինի հատուկ սցենար Ալիսի համար, օրինակ.
Մենք ընտրում ենք այն ձայնը, որով կխոսի հմտությունը, ինձ ավելի շատ դուր է գալիս Ալիսի ձայնը։
Եթե նախատեսում եք աշխատել միայն շարժական սարքերում կամ բրաուզերում, ապա ընտրեք «Ձեզ էկրանով սարք է պետք»:
Հաջորդը, մուտքագրեք Ալիսի հմտությունների կատալոգի կարգավորումները: Եթե ակտիվացման համար նախատեսում եք օգտագործել «բրենդ» բառը, ապա պետք է ստուգեք ապրանքանիշի կայքը webmaster.yandex.ru ծառայությունում։
Այսքանը կարգավորումների հետ է կապված, եկեք անցնենք սցենարներին:
Telegram բոտի սցենար
Սկսենք Telegram-ի սցենարից:
Մենք միացնում ենք գրադարանը, որտեղ կմշակվեն բոտի և Ալիսի հաղորդագրությունները.
include_once 'webhook_parse.php';
Մենք սահմանեցինք մեր բոտի նշանը.
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Մենք ստանում ենք տվյալներ.
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Տվյալների վերլուծությունը փոփոխականների մեջ.
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);
}
Այժմ դուք կարող եք աշխատել փոփոխականների հետ.
$tokens - ահա բոլոր այն բառերը, որոնք օգտատերը մուտքագրել է
$user_id - օգտվողի ID այստեղ
$msg_chat_id - զրույց, որտեղ բոտը ստացել է հրամանը
$msg_user_name - օգտվողի անուն
Հաջորդը, մենք անվանում ենք Parse_Tokens ֆունկցիան մշակման համար.
$Out_Str = Parse_Tokens($tokens);
Եվ ուղարկեք պատասխան.
Send_Out($user_id, $Out_Str);
Send_Out ֆունկցիան պարզ է և ունի հետևյալ տեսքը.
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.Alisa-ի համար
Հիմա անցնենք Ալիսի սցենարին, այն գրեթե նույնն է, ինչ Telegram-ի համար։
Մենք նաև միացնում ենք գրադարանը, որտեղ կմշակվեն բոտի և Ալիսի հաղորդագրությունները, գումարած գրադարան՝ Ալիսի համար դասերով.
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Մենք ստանում ենք տվյալներ.
$data = json_decode(trim(file_get_contents('php://input')), true);
Տվյալների վերլուծությունը փոփոխականների մեջ.
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'];}
}
}
Այստեղ կան մի քանի ավելի քիչ փոփոխականներ.
$tokens - ահա բոլոր այն բառերը, որոնք օգտատերը մուտքագրել է
$user_id - օգտվողի ID այստեղ
Yandex-ը անընդհատ ping-ում է հրապարակված հմտությունները, և ես տող եմ ավելացրել՝ սցենարից անմիջապես դուրս գալու համար՝ առանց հաղորդագրության ամբողջական մշակումը սկսելու.
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Մենք անվանում ենք Parse_Tokens ֆունկցիան մշակման համար, այն նույնն է, ինչ Telegram-ի համար.
$Out_Str = Parse_Tokens($tokens);
Եվ ուղարկեք պատասխան.
Send_Out($user_id, $Out_Str);
Send_Out ֆունկցիան այստեղ ավելի բարդ է.
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();
}
Ավարտել է Ալիսի սցենարը։
Parse_Tokens մշակման սցենարն ինքնին ստեղծվել է զուտ օրինակի համար, այնտեղ կարող եք ցանկացած ստուգում և մշակում կատարել:
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
Եթե Ձեզ անհրաժեշտ է ավելի բարդ ձևով օգտատիրոջ հետ շփվել, քան հարց-պատասխանը, ապա պետք է պահպանեք օգտվողի $user_id-ը և օգտագործողից արդեն ստացված տվյալները տվյալների բազայում (օրինակ՝ mysql) և վերլուծեք դրանք: Parse_Tokens ֆունկցիան:
Փաստորեն, սա գրեթե ամեն ինչ է, եթե ամեն ինչ ճիշտ է արված, ապա Telegram բոտն արդեն հասանելի է, Ալիսի հմտությունը կարելի է ստուգել
Եթե ամեն ինչ ճիշտ է աշխատում, կարող եք հմտությունն ուղարկել մոդերացիայի՝ սեղմելով «Չափավորելու համար» կոճակը:
Այժմ դուք ունեք միանգամից երկու բոտ տարբեր հարթակների համար, որոնք աշխատում են նույն կերպ։
Փաստաթղթեր Yandex.Dialogues ծառայության համար
Ամբողջական սցենարները տեղադրված են github-ում
Source: www.habr.com