Yandex.Alisa agus Telegram bot ann am PHP leis an aon gnìomh

Feasgar math.

Tha tòrr artaigilean ann air cuspair botaichean Telegram, ach chan eil mòran dhaoine a’ sgrìobhadh mu sgilean airson Alice, agus cha do lorg mi fiosrachadh sam bith air mar a nì mi aon bot, agus mar sin chuir mi romham an t-eòlas agam a cho-roinn air mar a nì mi bot. bot Telegram sìmplidh agus sgil Yandex.Alice airson an làrach leis an aon ghoireas.

Mar sin, chan innis mi dhut mar a thogas tu frithealaiche lìn agus a gheibh thu teisteanas ssl, chaidh gu leòr a sgrìobhadh mu dheidhinn.

A 'cruthachadh Telegram bot

An toiseach, cruthaichidh sinn bot Telegram, airson seo thèid sinn gu Telegram agus lorg sinn am bot BotFather an sin.

Yandex.Alisa agus Telegram bot ann am PHP leis an aon gnìomh

Yandex.Alisa agus Telegram bot ann am PHP leis an aon gnìomh

Tagh / newbot

Yandex.Alisa agus Telegram bot ann am PHP leis an aon gnìomh

Bidh sinn a’ cuir a-steach ainm a’ bot leis am freagair e, an uairsin cuiridh sinn a-steach ainm a’ bot, mar fhreagairt gheibh sinn comharra airson smachd a chumail air a’ bot, bidh sinn a’ sgrìobhadh sìos an iuchair seo, bidh e feumail dhuinn san àm ri teachd.

Yandex.Alisa agus Telegram bot ann am PHP leis an aon gnìomh

Is e an ath cheum innse dha na frithealaichean Telegram dè am frithealaiche a chuireas dàta bhon bot gu. Gus seo a dhèanamh, nì sinn ceangal den fhoirm:

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

___TOKEN___ cuiridh sinn an comharra bhon bhot againn na àite, a fhuaireadh na bu thràithe

____PATH_TO_SCRIPT____ cuiridh sinn an àite seòladh an sgriobt air an fhrithealaiche againn far an tèid an dàta a phròiseasadh (mar eisimpleir, www.my_server.ru/webhook_telegram.php).

Tha duilgheadas an seo, tha am frithealaiche api.telegram.org fo bhacadh, ach faodaidh tu seo a dhèanamh: màl am ​​frithealaiche as saoire far nach eil bacadh sam bith agus thoir an àithne bho chonsail an fhrithealaiche seo

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

Sin e, tha an Telegram bot air a chruthachadh agus ceangailte ris an t-seirbheisiche agad.

A 'cruthachadh sgil airson Yandex.Alisa

Nach gluais sinn air adhart gu bhith a 'cruthachadh sgil airson Yandex.Alice.

Gus sgil a chruthachadh, feumaidh tu a dhol gu duilleag luchd-leasachaidh Yandex.Dialogues Duilleag leasaiche Yandex.Dialogs, cliog an sin "Cruthaich còmhradh" agus tagh "Sgil ann an Alice".

Yandex.Alisa agus Telegram bot ann am PHP leis an aon gnìomh

Fosglaidh an còmhradh roghainnean sgil.

Yandex.Alisa agus Telegram bot ann am PHP leis an aon gnìomh

Bidh sinn a 'tòiseachadh a' dol a-steach do na roghainnean sgil.

Cuir a-steach ainm do sgil.

Yandex.Alisa agus Telegram bot ann am PHP leis an aon gnìomh

Bu chòir an t-ainm gnìomhachaidh a thaghadh gu faiceallach gus am bi Alice ga thuigsinn gu ceart, bho na nuances - faodaidh tagradh gluasadach le Alice agus colbhan mar Yandex.Station no Irbis A faclan fhaicinn ann an dòigh eadar-dhealaichte.

Bidh sinn a’ dol a-steach don t-slighe chun sgriobt air an t-seirbheisiche againn san aon dòigh ri Telegram, ach bidh e na sgriobt gu sònraichte airson Alice, mar eisimpleir www.my_server.ru/webhook_alice.php.

Yandex.Alisa agus Telegram bot ann am PHP leis an aon gnìomh

Bidh sinn a’ taghadh an guth leis am bi an sgil a’ bruidhinn, is toil leam guth Alice nas motha.

Yandex.Alisa agus Telegram bot ann am PHP leis an aon gnìomh

Ma tha thu an dùil a bhith ag obair a-mhàin air innealan-làimhe no ann am brabhsair, an uair sin tagh "Feumaidh tu inneal le sgrion."

An ath rud, cuir a-steach na roghainnean airson catalog sgilean Alice. Ma tha thu an dùil am facal "brand" a chleachdadh airson gnìomhachd, feumaidh tu làrach-lìn a 'bhrand a dhearbhadh anns an t-seirbheis webmaster.yandex.ru.

Yandex.Alisa agus Telegram bot ann am PHP leis an aon gnìomh

Tha sin uile leis na roghainnean, gluaisidh sinn air adhart gu na sgriobtaichean.

Sgriobt bot telegram

Feuch an tòisich sinn le sgriobt airson Telegram.

Bidh sinn a’ ceangal an leabharlann far an tèid teachdaireachdan bhon bhot agus Alice a ghiullachd:

include_once 'webhook_parse.php';

Shuidhich sinn comharra ar bot:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

Gheibh sinn dàta:

$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);

A’ parsadh an dàta gu caochladairean:

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

A-nis faodaidh tu obrachadh le caochladairean:

$tokens - seo a-nis a h-uile facal a chuir an cleachdaiche a-steach

$user_id - ID cleachdaiche an seo

$msg_chat_id - cabadaich anns an d’ fhuair am bot an àithne

$msg_user_name - ainm-cleachdaiche

An ath rud, canaidh sinn an gnìomh Parse_Tokens airson giullachd:

$Out_Str = Parse_Tokens($tokens);

Agus cuir freagairt:

Send_Out($user_id, $Out_Str);

tha an gnìomh Send_Out sìmplidh agus tha e coltach ri seo:

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

Sgriobt sgil airson Yandex.Alisa

A-nis gluaisidh sinn air adhart chun sgriobt airson Alice, tha e cha mhòr an aon rud ri Telegram.

Bidh sinn cuideachd a’ ceangal an leabharlann far an tèid teachdaireachdan bhon bot agus Alice a phròiseasadh, a bharrachd air leabharlann le clasaichean airson Alice:

include_once 'classes_alice.php';
include_once 'webhook_parse.php';

Gheibh sinn dàta:

$data = json_decode(trim(file_get_contents('php://input')), true);

A’ parsadh an dàta gu caochladairean:

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

Tha beagan nas lugha de chaochladairean an seo:

$tokens - seo a-nis a h-uile facal a chuir an cleachdaiche a-steach

$user_id - ID cleachdaiche an seo

Bidh Yandex an-còmhnaidh a’ putadh sgilean foillsichte, agus chuir mi loidhne ris gus an sgriobt fhàgail sa bhad gun a bhith a’ tòiseachadh air làn ghiollachd na teachdaireachd:

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

Canaidh sinn an gnìomh Parse_Tokens airson giullachd, tha e an aon rud ri Telegram:

$Out_Str = Parse_Tokens($tokens);

Agus cuir freagairt:

Send_Out($user_id, $Out_Str);

Tha an gnìomh Send_Out nas toinnte an seo:

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

Chrìochnaich an sgriobt airson Alice.

Chaidh an sgriobt giollachd Parse_Tokens fhèin a dhèanamh dìreach mar eisimpleir, faodaidh tu sgrùdaidhean agus giullachd sam bith a dhèanamh an sin.

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

Ma dh’fheumas tu conaltradh a dhèanamh ri neach-cleachdaidh ann an cruth nas iom-fhillte na freagairt ceist, feumaidh tu $user_id an neach-cleachdaidh agus an dàta a fhuaireadh bhon neach-cleachdaidh san stòr-dàta mu thràth (mar eisimpleir, mysql) a shàbhaladh agus an sgrùdadh ann an an gnìomh Parse_Tokens.

Gu fìrinneach, is e seo cha mhòr a h-uile càil, ma thèid a h-uile càil a dhèanamh ceart, tha an Telegram bot ri fhaighinn mu thràth, faodar sgil Alice a sgrùdadh dialogs.yandex.ru/developerle bhith a’ dol don sgil ùr agad air an taba deuchainn.

Yandex.Alisa agus Telegram bot ann am PHP leis an aon gnìomh

Ma dh’ obraicheas a h-uile càil ceart, faodaidh tu an sgil airson measadh a chuir air falbh le bhith a’ briogadh air a’ phutan “Airson moderation”.

A-nis tha dà bhot agad airson diofar àrd-ùrlaran aig an aon àm, a bhios ag obair san aon dòigh.

Sgrìobhainnean airson seirbheis Yandex.Dialogues an seo

Sgriobtaichean slàn air an postadh air github скачать.

Source: www.habr.com

Cuir beachd ann