Yandex.Alisa da Telegram bot a cikin PHP tare da ayyuka iri ɗaya

Good rana.

Akwai labarai da yawa kan batun bots na Telegram, amma mutane kaɗan ne ke rubuta game da ƙwarewa ga Alice, kuma ban sami wani bayani kan yadda ake yin boti ɗaya ba, don haka na yanke shawarar raba gwaninta kan yadda ake yin bot. sauki Telegram bot da fasaha na Yandex.Alice don rukunin yanar gizon yana da ayyuka iri ɗaya.

Don haka, ba zan gaya muku yadda ake haɓaka sabar gidan yanar gizo ba kuma ku sami takardar shaidar ssl, an riga an rubuta isasshe game da shi.

Ƙirƙirar bot na Telegram

Da farko, bari mu ƙirƙiri bot na Telegram, don wannan muna zuwa Telegram kuma mu sami BotFather bot a wurin.

Yandex.Alisa da Telegram bot a cikin PHP tare da ayyuka iri ɗaya

Yandex.Alisa da Telegram bot a cikin PHP tare da ayyuka iri ɗaya

Zaɓi /newbot

Yandex.Alisa da Telegram bot a cikin PHP tare da ayyuka iri ɗaya

Mun shigar da sunan bot ɗin da zai amsa, sannan mu shigar da sunan bot, a cikin martani mun sami alamar sarrafa bot, mun rubuta wannan maɓallin, zai zama da amfani a gare mu a nan gaba.

Yandex.Alisa da Telegram bot a cikin PHP tare da ayyuka iri ɗaya

Mataki na gaba shine gaya wa Sabar Telegram wacce uwar garken zata aika bayanai daga bot zuwa. Don yin wannan, muna yin hanyar haɗin yanar gizon:

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

___TOKEN___ mun maye gurbinsu da alamar mu daga bot, da aka samu a baya

___PATH_TO_SCRIPT____ mun maye gurbin da adireshin rubutun akan sabar mu inda za'a sarrafa bayanan (misali, www.my_server.ru/webhook_telegram.php).

Akwai matsala a nan, uwar garken api.telegram.org tana ƙarƙashin toshewa, amma kuna iya yin haka: hayar uwar garken mafi arha inda babu hani kuma ba da umarni daga na'urar wasan bidiyo na wannan sabar.

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

Shi ke nan, an ƙirƙiri bot ɗin Telegram kuma an haɗa shi da sabar ku.

Ƙirƙirar fasaha don Yandex.Alisa

Bari mu ci gaba don ƙirƙirar fasaha don Yandex.Alice.

Don ƙirƙirar fasaha, kuna buƙatar zuwa shafin masu haɓaka Yandex.Dialogues Shafin mai haɓaka Yandex.Dialogs, danna can "Ƙirƙiri tattaunawa" kuma zaɓi "Skill in Alice".

Yandex.Alisa da Telegram bot a cikin PHP tare da ayyuka iri ɗaya

Za a buɗe maganganun saitunan fasaha.

Yandex.Alisa da Telegram bot a cikin PHP tare da ayyuka iri ɗaya

Mun fara shigar da saitunan fasaha.

Shigar da sunan gwanintar ku.

Yandex.Alisa da Telegram bot a cikin PHP tare da ayyuka iri ɗaya

Ya kamata a zaɓi sunan kunnawa sosai a hankali don Alice ta fahimce shi daidai, daga nuances - aikace-aikacen hannu tare da Alice da ginshiƙai kamar Yandex.Station ko Irbis A na iya fahimtar kalmomi daban.

Muna shigar da hanyar zuwa rubutun akan sabar mu kamar yadda na Telegram, amma zai zama rubutun musamman ga Alice, misali. www.my_server.ru/webhook_alice.php.

Yandex.Alisa da Telegram bot a cikin PHP tare da ayyuka iri ɗaya

Mun zaɓi muryar da gwanintar za ta yi magana da ita, Ina son muryar Alice.

Yandex.Alisa da Telegram bot a cikin PHP tare da ayyuka iri ɗaya

Idan kuna shirin yin aiki kawai akan na'urorin hannu ko a cikin mai bincike, sannan zaɓi "Kuna buƙatar na'ura mai allo."

Na gaba, shigar da saituna don katalojin basirar Alice. Idan kuna shirin amfani da kalmar "alama" don kunnawa, kuna buƙatar tabbatar da gidan yanar gizon alamar a cikin sabis na webmaster.yandex.ru.

Yandex.Alisa da Telegram bot a cikin PHP tare da ayyuka iri ɗaya

Shi ke nan tare da saitunan, bari mu matsa zuwa rubutun.

Rubutun bot na Telegram

Bari mu fara da rubutun don Telegram.

Muna haɗa ɗakin karatu inda za a sarrafa saƙonni daga bot da Alice:

include_once 'webhook_parse.php';

Mun saita alamar bot ɗin mu:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

Muna karɓar bayanai:

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

Fassara bayanai zuwa masu canji:

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

Yanzu zaku iya aiki tare da masu canji:

$tokens - Anan ga duk kalmomin da mai amfani ya shigar

$user_id - id mai amfani anan

$msg_chat_id - taɗi inda bot ɗin ya karɓi umarni

$msg_user_name - sunan mai amfani

Bayan haka, muna kiran aikin Parse_Tokens don sarrafawa:

$Out_Str = Parse_Tokens($tokens);

Kuma aika amsa:

Send_Out($user_id, $Out_Str);

Aikin Send_Out yana da sauƙi kuma yayi kama da wannan:

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

Rubutun gwaninta don Yandex.Alisa

Yanzu bari mu matsa zuwa rubutun Alice, kusan iri ɗaya ne da na Telegram.

Muna kuma haɗa ɗakin karatu inda za a sarrafa saƙonni daga bot da Alice, da ɗakin karatu tare da azuzuwan Alice:

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

Muna karɓar bayanai:

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

Fassara bayanai zuwa masu canji:

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

Akwai ƴan ƴan canji anan:

$tokens - Anan ga duk kalmomin da mai amfani ya shigar

$user_id - id mai amfani anan

Yandex koyaushe yana buga fasaha, kuma na ƙara layi don fita daga rubutun nan da nan ba tare da fara cikakken sarrafa saƙon ba:

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

Muna kiran aikin Parse_Tokens don sarrafawa, daidai yake da na Telegram:

$Out_Str = Parse_Tokens($tokens);

Kuma aika amsa:

Send_Out($user_id, $Out_Str);

Aikin Send_Out ya fi rikitarwa anan:

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

Ya gama rubutun ga Alice.

Rubutun sarrafa Parse_Tokens kansa an yi shi ne kawai misali, kuna iya yin duk wani bincike da sarrafawa a can.

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

Idan kuna buƙatar sadarwa tare da mai amfani da sigar da ta fi rikitarwa fiye da amsar tambaya, to kuna buƙatar adana $user_id mai amfani da bayanan da aka riga aka karɓa daga mai amfani a cikin bayanan (misali, mysql) kuma bincika su a ciki. aikin Parse_Tokens.

A zahiri, wannan kusan komai ne, idan an yi komai daidai, to an riga an sami bot ɗin Telegram, ana iya bincika ƙwarewar Alice. dialogs.yandex.ru/developerta hanyar zuwa sabon fasahar ku akan shafin gwaji.

Yandex.Alisa da Telegram bot a cikin PHP tare da ayyuka iri ɗaya

Idan komai yayi daidai, zaku iya aika gwanintar don daidaitawa ta danna maɓallin "Don daidaitawa".

Yanzu kuna da bots guda biyu don dandamali daban-daban a lokaci ɗaya, waɗanda ke aiki iri ɗaya.

Takaddun bayanai don sabis ɗin Yandex.Dialogues a nan

An buga cikakkun rubutun akan github скачать.

source: www.habr.com

Add a comment