PHP-də Yandex.Alisa və Telegram botu eyni funksionallıqla

Günortadan sonra yaxşı.

Telegram botları mövzusunda çoxlu məqalələr var, lakin çox az adam Alice üçün bacarıqlar haqqında yazır və mən tək bot yaratmaq haqqında heç bir məlumat tapa bilmədim, ona görə də öz təcrübəmi bölüşmək qərarına gəldim. sadə Telegram botu və eyni funksionallığa malik sayt üçün Yandex.Alice bacarığı.

Beləliklə, sizə veb serveri necə qaldıracağınızı və ssl sertifikatı alacağınızı deməyəcəyəm, bu barədə kifayət qədər yazılıb.

Telegram botunun yaradılması

Əvvəlcə Telegram bot yaradaq, bunun üçün biz Telegrama gedirik və orada BotFather botunu tapırıq.

PHP-də Yandex.Alisa və Telegram botu eyni funksionallıqla

PHP-də Yandex.Alisa və Telegram botu eyni funksionallıqla

/newbot seçin

PHP-də Yandex.Alisa və Telegram botu eyni funksionallıqla

Onun cavab verəcəyi botun adını daxil edirik, sonra botun adını daxil edirik, cavab olaraq botu idarə etmək üçün token alırıq, bu açarı yazırıq, gələcəkdə bizə faydalı olacaq.

PHP-də Yandex.Alisa və Telegram botu eyni funksionallıqla

Növbəti addım Telegram serverlərinə botdan hansı serverə məlumat göndərəcəyini söyləməkdir. Bunu etmək üçün formanın bir keçidini düzəldirik:

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

___TOKEN___ biz əvvəllər alınan botdan olan nişanımızla əvəz edirik

____PATH_TO_SCRIPT____ biz serverimizdə verilənlərin işlənəcəyi skriptin ünvanı ilə əvəz edirik (məsələn, www.my_server.ru/webhook_telegram.php).

Burada problem var, api.telegram.org serveri bloklanır, lakin siz bunu edə bilərsiniz: heç bir məhdudiyyət olmayan ən ucuz serveri icarəyə götürün və bu serverin konsolundan əmr verin.

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

Budur, Telegram botu yaradıldı və serverinizə qoşuldu.

Yandex.Alisa üçün bacarıq yaratmaq

Gəlin Yandex.Alice üçün bacarıq yaratmağa davam edək.

Bacarıq yaratmaq üçün Yandex.Dialogues developers səhifəsinə keçməlisiniz Yandex.Dialoqs tərtibatçı səhifəsi, orada "Dialoq yarat" düyməsini basın və "Alisdə bacarıq" seçin.

PHP-də Yandex.Alisa və Telegram botu eyni funksionallıqla

Bacarıq parametrləri dialoqu açılacaq.

PHP-də Yandex.Alisa və Telegram botu eyni funksionallıqla

Bacarıq parametrlərini daxil etməyə başlayırıq.

Bacarıqınızın adını daxil edin.

PHP-də Yandex.Alisa və Telegram botu eyni funksionallıqla

Aktivləşdirmə adı çox diqqətlə seçilməlidir ki, Alice onu düzgün başa düşsün, nüanslardan - Alice ilə mobil proqram və Yandex.Station və ya Irbis A kimi sütunlar sözləri fərqli şəkildə qəbul edə bilər.

Serverimizdəki skriptin yolunu Telegram üçün olduğu kimi daxil edirik, lakin bu, məsələn, Alice üçün xüsusi bir skript olacaq. www.my_server.ru/webhook_alice.php.

PHP-də Yandex.Alisa və Telegram botu eyni funksionallıqla

Məharətin danışacağı səsi biz seçirik, mən Alisin səsini daha çox bəyənirəm.

PHP-də Yandex.Alisa və Telegram botu eyni funksionallıqla

Yalnız mobil cihazlarda və ya brauzerdə işləməyi planlaşdırırsınızsa, "Sizə ekranlı bir cihaz lazımdır" seçin.

Sonra, Alice's bacarıqları kataloqu üçün parametrləri daxil edin. Aktivləşdirmə üçün "marka" sözünü istifadə etməyi planlaşdırırsınızsa, webmaster.yandex.ru xidmətində brendin veb-saytını yoxlamaq lazımdır.

PHP-də Yandex.Alisa və Telegram botu eyni funksionallıqla

Parametrlərlə hamısı budur, skriptlərə keçək.

Telegram bot skripti

Telegram üçün skriptlə başlayaq.

Bot və Alicedən gələn mesajların işlənəcəyi kitabxananı bağlayırıq:

include_once 'webhook_parse.php';

Botumuzun işarəsini təyin etdik:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

Biz məlumat alırıq:

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

Verilənlərin dəyişənlərə təhlili:

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

İndi dəyişənlərlə işləyə bilərsiniz:

$tokens - indi istifadəçinin daxil etdiyi bütün sözlər buradadır

$user_id - burada istifadəçi identifikatoru

$msg_chat_id - botun əmr aldığı söhbət

$msg_user_name - istifadəçi adı

Sonra, emal üçün Parse_Tokens funksiyasını çağırırıq:

$Out_Str = Parse_Tokens($tokens);

Və cavab göndərin:

Send_Out($user_id, $Out_Str);

Send_Out funksiyası sadədir və belə görünür:

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 üçün bacarıq skripti

İndi keçək Alice üçün ssenariyə, demək olar ki, Telegram ilə eynidir.

Biz həmçinin botdan və Alicedən gələn mesajların işlənəcəyi kitabxananı, üstəlik Alice üçün dərsləri olan kitabxananı birləşdiririk:

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

Biz məlumat alırıq:

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

Verilənlərin dəyişənlərə təhlili:

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

Burada bir neçə daha az dəyişən var:

$tokens - indi istifadəçinin daxil etdiyi bütün sözlər buradadır

$user_id - burada istifadəçi identifikatoru

Yandex daim nəşr olunan bacarıqları yoxlayır və mesajın tam işlənməsinə başlamadan dərhal skriptdən çıxmaq üçün bir xətt əlavə etdim:

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

Parse_Tokens funksiyasını emal üçün çağırırıq, bu Telegram ilə eynidir:

$Out_Str = Parse_Tokens($tokens);

Və cavab göndərin:

Send_Out($user_id, $Out_Str);

Send_Out funksiyası burada daha mürəkkəbdir:

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

Alice üçün ssenarini tamamladı.

Parse_Tokens emal skriptinin özü sırf nümunə üçün hazırlanmışdır, orada istənilən yoxlama və emal edə bilərsiniz.

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

Əgər sual-cavabdan daha mürəkkəb formada olan istifadəçi ilə ünsiyyət qurmaq lazımdırsa, onda siz istifadəçinin $user_id kodunu və istifadəçidən artıq qəbul edilmiş məlumatları verilənlər bazasında (məsələn, mysql) saxlamalı və onları təhlil etməli olacaqsınız. Parse_Tokens funksiyası.

Əslində, bu, demək olar ki, hər şeydir, əgər hər şey düzgün aparılırsa, Telegram botu artıq mövcuddur, Alice'nin bacarığı yoxlana bilər dialogs.yandex.ru/developertest tabında yeni bacarığınıza keçərək.

PHP-də Yandex.Alisa və Telegram botu eyni funksionallıqla

Hər şey düzgün işləyirsə, "Moderasiya üçün" düyməsini klikləməklə bacarığı moderasiyaya göndərə bilərsiniz.

İndi eyni şəkildə işləyən müxtəlif platformalar üçün eyni anda iki botunuz var.

Yandex.Dialoqlar xidməti üçün sənədlər burada

Tam skriptlər github-da yerləşdirilib download.

Mənbə: www.habr.com

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