Yandex.Alisa-ն և Telegram-ի բոտը PHP-ում՝ նույն ֆունկցիոնալությամբ

Բարի օր:

Telegram-ի բոտերի թեմայով շատ հոդվածներ կան, բայց քչերն են գրում Ալիսի հմտությունների մասին, և ես որևէ տեղեկություն չգտա, թե ինչպես ստեղծել մեկ բոտ, ուստի որոշեցի կիսվել իմ փորձով, թե ինչպես ստեղծել պարզ Telegram բոտ և Yandex.Alice հմտություն նույն ֆունկցիոնալությամբ կայքի համար:

Այսպիսով, ես ձեզ չեմ ասի, թե ինչպես բարձրացնել վեբ սերվեր և ստանալ ssl վկայագիր, բավական է գրվել դրա մասին:

Telegram բոտի ստեղծում

Նախ, եկեք ստեղծենք Telegram բոտ, դրա համար մենք գնում ենք Telegram և այնտեղ գտնում BotFather բոտը:

Yandex.Alisa-ն և Telegram-ի բոտը PHP-ում՝ նույն ֆունկցիոնալությամբ

Yandex.Alisa-ն և Telegram-ի բոտը PHP-ում՝ նույն ֆունկցիոնալությամբ

Ընտրեք /newbot

Yandex.Alisa-ն և Telegram-ի բոտը PHP-ում՝ նույն ֆունկցիոնալությամբ

Մուտքագրում ենք այն բոտի անունը, որով նա կպատասխանի, այնուհետև մուտքագրում ենք բոտի անունը, ի պատասխան ստանում ենք բոտը կառավարելու նշան, գրում ենք այս բանալին, այն ապագայում մեզ օգտակար կլինի։

Yandex.Alisa-ն և Telegram-ի բոտը PHP-ում՝ նույն ֆունկցիոնալությամբ

Հաջորդ քայլը Telegram սերվերներին ասելն է, թե որ սերվերին պետք է տվյալներ ուղարկեն բոտից: Դա անելու համար մենք ձևի հղում ենք անում.

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

___TOKEN___ մենք փոխարինում ենք ավելի վաղ ստացված բոտի մեր նշանով

____PATH_TO_SCRIPT____ մենք փոխարինում ենք մեր սերվերի սկրիպտի հասցեով, որտեղ տվյալները կմշակվեն (օրինակ. www.my_server.ru/webhook_telegram.php).

Այստեղ խնդիր կա, api.telegram.org սերվերը արգելափակված է, բայց դուք կարող եք դա անել. վարձել ամենաէժան սերվերը, որտեղ սահմանափակումներ չկան և հրաման տալ այս սերվերի վահանակից։

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

Վերջ, ստեղծվում է Telegram բոտը և միացված է ձեր սերվերին:

Yandex.Alisa-ի համար հմտության ստեղծում

Եկեք անցնենք Yandex.Alice-ի համար հմտություն ստեղծելուն:

Հմտություն ստեղծելու համար հարկավոր է գնալ Yandex.Dialogues մշակողների էջ Yandex.Dialogs մշակողի էջ, սեղմեք այնտեղ «Ստեղծել երկխոսություն» և ընտրեք «Հմտություն Ալիսում»:

Yandex.Alisa-ն և Telegram-ի բոտը PHP-ում՝ նույն ֆունկցիոնալությամբ

Հմտությունների կարգավորումների երկխոսությունը կբացվի:

Yandex.Alisa-ն և Telegram-ի բոտը PHP-ում՝ նույն ֆունկցիոնալությամբ

Մենք սկսում ենք մուտք գործել հմտությունների կարգավորումներ:

Մուտքագրեք ձեր հմտության անունը:

Yandex.Alisa-ն և Telegram-ի բոտը PHP-ում՝ նույն ֆունկցիոնալությամբ

Ակտիվացման անունը պետք է ընտրվի շատ ուշադիր, որպեսզի Ալիսը այն ճիշտ հասկանա՝ նրբություններից՝ Ալիսով բջջային հավելվածը և Yandex.Station-ի կամ Irbis A-ի նման սյունակները կարող են այլ կերպ ընկալել բառերը:

Մենք մեր սերվերի վրա մուտքագրում ենք սցենարի ուղին այնպես, ինչպես Telegram-ի համար, բայց դա կլինի հատուկ սցենար Ալիսի համար, օրինակ. www.my_server.ru/webhook_alice.php.

Yandex.Alisa-ն և Telegram-ի բոտը PHP-ում՝ նույն ֆունկցիոնալությամբ

Մենք ընտրում ենք այն ձայնը, որով կխոսի հմտությունը, ինձ ավելի շատ դուր է գալիս Ալիսի ձայնը։

Yandex.Alisa-ն և Telegram-ի բոտը PHP-ում՝ նույն ֆունկցիոնալությամբ

Եթե ​​նախատեսում եք աշխատել միայն շարժական սարքերում կամ բրաուզերում, ապա ընտրեք «Ձեզ էկրանով սարք է պետք»:

Հաջորդը, մուտքագրեք Ալիսի հմտությունների կատալոգի կարգավորումները: Եթե ​​ակտիվացման համար նախատեսում եք օգտագործել «բրենդ» բառը, ապա պետք է ստուգեք ապրանքանիշի կայքը webmaster.yandex.ru ծառայությունում։

Yandex.Alisa-ն և Telegram-ի բոտը PHP-ում՝ նույն ֆունկցիոնալությամբ

Այսքանը կարգավորումների հետ է կապված, եկեք անցնենք սցենարներին:

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 բոտն արդեն հասանելի է, Ալիսի հմտությունը կարելի է ստուգել dialogs.yandex.ru/developerանցնելով ձեր նոր հմտությունը թեստավորման ներդիրում:

Yandex.Alisa-ն և Telegram-ի բոտը PHP-ում՝ նույն ֆունկցիոնալությամբ

Եթե ​​ամեն ինչ ճիշտ է աշխատում, կարող եք հմտությունն ուղարկել մոդերացիայի՝ սեղմելով «Չափավորելու համար» կոճակը:

Այժմ դուք ունեք միանգամից երկու բոտ տարբեր հարթակների համար, որոնք աշխատում են նույն կերպ։

Փաստաթղթեր Yandex.Dialogues ծառայության համար այստեղ

Ամբողջական սցենարները տեղադրված են github-ում բեռնել.

Source: www.habr.com

Добавить комментарий