Yandex.Alisa na Telegram bot katika PHP na utendaji sawa

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.

Yandex.Alisa na Telegram bot katika PHP na utendaji sawa

Yandex.Alisa na Telegram bot katika PHP na utendaji sawa

Chagua /newbot

Yandex.Alisa na Telegram bot katika PHP na utendaji sawa

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.

Yandex.Alisa na Telegram bot katika PHP na utendaji sawa

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, www.my_server.ru/webhook_telegram.php).

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 Ukurasa wa msanidi wa Yandex.Dialogs, bofya hapo "Unda mazungumzo" na uchague "Ujuzi katika Alice".

Yandex.Alisa na Telegram bot katika PHP na utendaji sawa

Kidirisha cha mipangilio ya ujuzi kitafunguliwa.

Yandex.Alisa na Telegram bot katika PHP na utendaji sawa

Tunaanza kuingia mipangilio ya ujuzi.

Ingiza jina la ujuzi wako.

Yandex.Alisa na Telegram bot katika PHP na utendaji sawa

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. www.my_server.ru/webhook_alice.php.

Yandex.Alisa na Telegram bot katika PHP na utendaji sawa

Tunachagua sauti ambayo ustadi utazungumza, napenda sauti ya Alice zaidi.

Yandex.Alisa na Telegram bot katika PHP na utendaji sawa

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.

Yandex.Alisa na Telegram bot katika PHP na utendaji sawa

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. dialogs.yandex.ru/developerkwa kwenda kwenye ujuzi wako mpya kwenye kichupo cha majaribio.

Yandex.Alisa na Telegram bot katika PHP na utendaji sawa

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 hapa

Maandishi kamili yaliyotumwa kwenye github download.

Chanzo: mapenzi.com

Kuongeza maoni