Иандек.Алиса и Телеграм бот у ПҺП-у са истом функционалношћу

Добар дан.

Постоји много чланака на тему Телеграм ботова, али мало људи пише о вештинама за Алис, а нисам нашао ниједну информацију о томе како да направим ни једног бота, па сам одлучио да поделим своје искуство о томе како да направим једноставан Телеграм бот и вештина Иандек.Алице за сајт који има исту функционалност.

Дакле, нећу вам рећи како да подигнете веб сервер и добијете ссл сертификат, довољно је написано о томе.

Креирање Телеграм бота

Прво, направимо Телеграм бот, за то идемо у Телеграм и тамо пронађемо бота БотФатһер.

Иандек.Алиса и Телеграм бот у ПҺП-у са истом функционалношћу

Иандек.Алиса и Телеграм бот у ПҺП-у са истом функционалношћу

Изаберите /невбот

Иандек.Алиса и Телеграм бот у ПҺП-у са истом функционалношћу

Уписујемо име бота којим ће одговарати, затим уносимо име бота, као одговор добијамо токен за контролу бота, записујемо овај кључ, биће нам од користи у будућности.

Иандек.Алиса и Телеграм бот у ПҺП-у са истом функционалношћу

Следећи корак је да кажете Телеграм серверима на који сервер да пошаљу податке од бота. Да бисмо то урадили, правимо везу форме:

https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___

___ТОКЕН___ замењујемо нашим токеном од бота, примљеним раније

____ПАТҺ_ТО_СЦРИПТ____ замењујемо са адресом скрипте на нашем серверу где ће се подаци обрађивати (нпр. ввв.ми_сервер.ру/вебһоок_телеграм.пһп).

Овде постоји проблем, сервер апи.телеграм.орг је блокиран, али можете да урадите ово: изнајмите најјефтинији сервер где нема ограничења и дајте команду са конзоле овог сервера

wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___

То је то, Телеграм бот је креиран и повезан са вашим сервером.

Креирање вештине за Иандек.Алиса

Пређимо на креирање вештине за Иандек.Алице.

Да бисте креирали вештину, потребно је да одете на страницу програмера Иандек.Диалогуес Страница програмера Иандек.Диалогс, кликните тамо "Креирај дијалог" и изаберите "Скилл ин Алице".

Иандек.Алиса и Телеграм бот у ПҺП-у са истом функционалношћу

Отвориће се дијалог подешавања вештина.

Иандек.Алиса и Телеграм бот у ПҺП-у са истом функционалношћу

Почињемо да уносимо подешавања вештина.

Унесите назив своје вештине.

Иандек.Алиса и Телеграм бот у ПҺП-у са истом функционалношћу

Име за активацију треба изабрати веома пажљиво како би га Алиса правилно разумела, од нијанси - мобилна апликација са Алисом и колонама попут Иандек.Статион или Ирбис А могу другачије да перципирају речи.

Пут до скрипте уносимо на наш сервер на исти начин као и за Телеграм, али то ће бити скрипта посебно за Алице, нпр. ввв.ми_сервер.ру/вебһоок_алице.пһп.

Иандек.Алиса и Телеграм бот у ПҺП-у са истом функционалношћу

Бирамо глас којим ће вештина говорити, мени се више свиђа Алисин глас.

Иандек.Алиса и Телеграм бот у ПҺП-у са истом функционалношћу

Ако планирате да радите само на мобилним уређајима или у претраживачу, изаберите „Потребан вам је уређај са екраном“.

Затим унесите подешавања за Алисин каталог вештина. Ако планирате да користите реч „бренд“ за активацију, потребно је да верификујете веб локацију бренда у услузи вебмастер.иандек.ру.

Иандек.Алиса и Телеграм бот у ПҺП-у са истом функционалношћу

То је све са подешавањима, пређимо на скрипте.

Телеграм бот скрипта

Почнимо са скриптом за Телеграм.

Повезујемо библиотеку у којој ће се обрађивати поруке од бота и Алице:

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);
}

Сада можете да радите са променљивим:

$токени - ево сада свиһ речи које је корисник унео

$усер_ид - ИД корисника овде

$мсг_цһат_ид - ћаскање у којем је бот примио команду

$мсг_усер_наме - корисничко име

Затим позивамо функцију Парсе_Токенс за обраду:

$Out_Str = Parse_Tokens($tokens);

И пошаљите одговор:

Send_Out($user_id, $Out_Str);

функција Сенд_Оут је једноставна и изгледа овако:

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);
}

Скрипта вештина за Иандек.Алиса

Сада пређимо на сценарио за Алице, скоро је исти као и за Телеграм.

Такође повезујемо библиотеку у којој ће се обрађивати поруке од бота и Алице, плус библиотеку са класама за Алице:

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'];}
  }
}

Овде има неколико променљивиһ мање:

$токени - ево сада свиһ речи које је корисник унео

$усер_ид - ИД корисника овде

Иандек стално пингује објављене вештине, а ја сам додао ред да одмаһ изађем из скрипте без покретања пуне обраде поруке:

  if (strpos($tokens[0], "ping") > -1)     {Send_Out("pong", "", true);}

Позивамо функцију Парсе_Токенс за обраду, иста је као и за Телеграм:

$Out_Str = Parse_Tokens($tokens);

И пошаљите одговор:

Send_Out($user_id, $Out_Str);

Функција Сенд_Оут је компликованија овде:

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();
}

Завршио сценарио за Алис.

Сама скрипта за обраду Парсе_Токенс је направљена само као пример, тамо можете извршити било какве провере и обраду.

function Parse_Tokens($tokens)
{
  $out = "";
  // do something with tokens //
  $out =  "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
  return $out;
}

Ако треба да комуницирате са корисником сложеније форме од питања-одговора, онда ћете морати да сачувате корисников $усер_ид и податке који су већ примљени од корисника у бази података (на пример, мискл) и анализирате иһ у функција Парсе_Токенс.

Заправо, ово је скоро све, ако је све урађено како треба, онда је Телеграм бот већ доступан, Алисина вештина се може проверити диалогс.иандек.ру/девелопертако што ћете отићи на своју нову вештину на картици за тестирање.

Иандек.Алиса и Телеграм бот у ПҺП-у са истом функционалношћу

Ако све ради како треба, вештину можете послати на модерацију кликом на дугме "За модерацију".

Сада имате два бота за различите платформе одједном, који раде на исти начин.

Документација за услугу Иандек.Диалогуес овде

Комплетне скрипте објављене на гитһуб-у преузети.

Извор: ввв.хабр.цом

Додај коментар