Good mchana.
Kuna nakala nyingi juu ya mada ya roboti za Telegraph, lakini watu wachache huandika juu ya ujuzi wa Alice, na sikupata habari yoyote juu ya jinsi ya kutengeneza bot moja, kwa hivyo niliamua kushiriki uzoefu wangu juu ya jinsi ya kutengeneza bot. Boti rahisi ya Telegraph na ujuzi wa Yandex.Alice kwa tovuti kuwa na utendaji sawa.
Kwa hiyo, sitakuambia jinsi ya kuinua seva ya wavuti na kupata cheti cha ssl, kutosha imeandikwa juu yake.
Kuunda bot ya Telegraph
Kwanza, hebu tuunde bot ya Telegramu, kwa hili tunaenda kwa Telegramu na kupata BotFather bot huko.
Chagua /newbot
Tunaingia jina la bot ambalo litajibu, kisha tunaingia jina la bot, kwa kujibu tunapata ishara ya kudhibiti bot, tunaandika ufunguo huu, itakuwa na manufaa kwetu katika siku zijazo.
Hatua inayofuata ni kuwaambia seva za Telegraph ni seva gani ya kutuma data kutoka kwa kijibu kwenda. Ili kufanya hivyo, tunatengeneza kiunga cha fomu:
https: //api.telegram.org/bot___Π’ΠΠΠΠ___/setWebhook?url=https://____ΠΠ£Π’Π¬_ΠΠ_Π‘ΠΠ ΠΠΠ’Π___
___TOKEN___ tunabadilisha na tokeni yetu kutoka kwa roboti, iliyopokelewa mapema
____PATH_TO_SCRIPT__ tunabadilisha na anwani ya hati kwenye seva yetu ambapo data itachakatwa (kwa mfano,
Kuna shida hapa, seva ya api.telegram.org iko chini ya kizuizi, lakini unaweza kufanya hivi: kukodisha seva ya bei rahisi ambapo hakuna vizuizi na toa amri kutoka kwa koni ya seva hii.
wget ___ΠΠΠΠ£Π§ΠΠΠ¨ΠΠΠ‘Π―_ΠΠΠ ΠΠ‘___
Hiyo ni, bot ya Telegraph imeundwa na kuunganishwa kwenye seva yako.
Kuunda ujuzi kwa Yandex.Alisa
Hebu tuendelee kuunda ujuzi kwa Yandex.Alice.
Ili kuunda ujuzi, unahitaji kwenda kwenye ukurasa wa watengenezaji wa Yandex.Dialogues
Kidirisha cha mipangilio ya ujuzi kitafunguliwa.
Tunaanza kuingia mipangilio ya ujuzi.
Ingiza jina la ujuzi wako.
Jina la kuwezesha linapaswa kuchaguliwa kwa uangalifu sana ili Alice alielewe kwa usahihi, kutoka kwa nuances - programu ya simu iliyo na Alice na safu wima kama vile Yandex.Station au Irbis A inaweza kutambua maneno kwa njia tofauti.
Tunaingiza njia ya hati kwenye seva yetu kwa njia sawa na kwa Telegraph, lakini itakuwa hati mahsusi kwa Alice, kwa mfano.
Tunachagua sauti ambayo ustadi utazungumza, napenda sauti ya Alice zaidi.
Ikiwa unapanga kufanya kazi tu kwenye vifaa vya rununu au kwenye kivinjari, kisha chagua "Unahitaji kifaa kilicho na skrini."
Ifuatayo, weka mipangilio ya katalogi ya ujuzi wa Alice. Ikiwa unapanga kutumia neno "brand" kwa uanzishaji, unahitaji kuthibitisha tovuti ya brand katika huduma ya webmaster.yandex.ru.
Hiyo yote ni pamoja na mipangilio, wacha tuendelee kwenye maandishi.
Nakala ya bot ya telegramu
Wacha tuanze na hati ya Telegraph.
Tunaunganisha maktaba ambapo ujumbe kutoka kwa roboti na Alice utachakatwa:
include_once 'webhook_parse.php';
Tunaweka ishara ya bot yetu:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Tunapokea data:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Kuchanganua data katika anuwai:
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);
}
Sasa unaweza kufanya kazi na anuwai:
$tokeni - hapa kuna maneno yote ambayo mtumiaji aliingia
$user_id - kitambulisho cha mtumiaji hapa
$msg_chat_id - gumzo ambalo roboti ilipokea amri
$msg_jina_la_mtumiaji - jina la mtumiaji
Ifuatayo, tunaita kazi ya Parse_Tokens kwa usindikaji:
$Out_Str = Parse_Tokens($tokens);
Na tuma jibu:
Send_Out($user_id, $Out_Str);
Send_Out kazi ni rahisi na inaonekana kama hii:
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);
}
Hati ya ujuzi kwa Yandex.Alisa
Sasa hebu tuendelee kwenye hati ya Alice, ni karibu sawa na ya Telegram.
Pia tunaunganisha maktaba ambapo ujumbe kutoka kwa roboti na Alice utachakatwa, pamoja na maktaba yenye madarasa ya Alice:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Tunapokea data:
$data = json_decode(trim(file_get_contents('php://input')), true);
Kuchanganua data katika anuwai:
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'];}
}
}
Kuna vigezo vichache hapa:
$tokeni - hapa kuna maneno yote ambayo mtumiaji aliingia
$user_id - kitambulisho cha mtumiaji hapa
Yandex huweka ustadi uliochapishwa kila wakati, na nikaongeza laini ili kutoka kwa hati mara moja bila kuanza usindikaji kamili wa ujumbe:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Tunaita kazi ya Parse_Tokens kwa usindikaji, ni sawa na ya Telegraph:
$Out_Str = Parse_Tokens($tokens);
Na tuma jibu:
Send_Out($user_id, $Out_Str);
Kitendaji cha Send_Out ni ngumu zaidi hapa:
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();
}
Alimaliza maandishi ya Alice.
Hati ya usindikaji ya Parse_Tokens yenyewe ilitengenezwa kwa mfano tu, unaweza kufanya ukaguzi wowote na usindikaji hapo.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
Ikiwa unahitaji kuwasiliana na mtumiaji wa fomu ngumu zaidi kuliko jibu la swali, basi utahitaji kuhifadhi $user_id ya mtumiaji na data ambayo tayari imepokelewa kutoka kwa mtumiaji kwenye hifadhidata (kwa mfano, mysql) na kuzichanganua katika kazi ya Parse_Tokens.
Kweli, hii ni karibu kila kitu, ikiwa kila kitu kimefanywa kwa usahihi, basi bot ya Telegram tayari inapatikana, ujuzi wa Alice unaweza kuangaliwa.
Ikiwa kila kitu kitafanya kazi kwa usahihi, unaweza kutuma ujuzi kwa udhibiti kwa kubofya kitufe cha "Kwa kiasi".
Sasa una roboti mbili za majukwaa tofauti mara moja, ambayo hufanya kazi kwa njia ile ile.
Nyaraka za huduma ya Yandex.Dialogues
Maandishi kamili yaliyotumwa kwenye github
Chanzo: mapenzi.com