PHPackages                             m-m/u\_bot - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. m-m/u\_bot

ActiveLibrary[API Development](/categories/api)

m-m/u\_bot
==========

Universal bot(vk, telegram, viber) or skills for Yandex.Alisa, Маруся

1.1.1(5y ago)4131[1 issues](https://github.com/max36895/universal_bot/issues)MITPHPPHP &gt;=7.2CI passing

Since Oct 29Pushed 8mo ago1 watchersCompare

[ Source](https://github.com/max36895/universal_bot)[ Packagist](https://packagist.org/packages/m-m/u_bot)[ Docs](https://www.maxim-m.ru)[ RSS](/packages/m-m-u-bot/feed)WikiDiscussions master Synced 1w ago

READMEChangelog (2)Dependencies (1)Versions (6)Used By (0)

Универсальное приложение для создания навыков и ботов
=====================================================

[](#универсальное-приложение-для-создания-навыков-и-ботов)

[![PHP Composer](https://github.com/max36895/universal_bot/workflows/PHP%20Composer/badge.svg?branch=master)](https://packagist.org/packages/m-m/u_bot)

Установка
---------

[](#установка)

Установите движок:

1. Скачать движок из репозитория;
2. Установить через composer;

### Установка из репозитория

[](#установка-из-репозитория)

Для установки, просто склонируйте git репозиторий, а после подключайте нужные файлы.

```
git clone https://github.com/max36895/universal_bot.git
```

### Установка через composer

[](#установка-через-composer)

Для начала установите composer, а после выполните команду:

```
composer require m-m/u_bot
```

Документация
------------

[](#документация)

Документация: [u\_bot](https://www.maxim-m.ru/bot/documentation/index.html). Получить информации о работе приложения можно в [телеграм канале](https://t.me/joinchat/AAAAAFM8AcuniLTwBLuNsw) или [группе](https://t.me/mm_universal_bot). Также можно прочитать [статью, в которой рассказано как создать навык "Я никогда не"](https://www.maxim-m.ru/article/sozdanie-navyika-ya-nikogda-ne)

Описание
--------

[](#описание)

Движок позволяет создать навык для Яндекс.Алиса, Маруси, Сбер(SmartApp), бота для vk, viber или telegram, с идентичной логикой. Типы доступных приложений в дальнейшем будут дополняться.

При необходимости есть возможность создать приложение со своим типом бота. Тип приложения устанавливается в `mmApp::$appType`, по умолчанию используется alisa.

Старт
-----

[](#старт)

Для успешного старта на всех платформах необходимо настроить конфигурацию приложения. А именно настроить подключение к бд(если есть необходимость), а также указать все необходимые авторизационные токены для корректной работы с api. Массив с настройками и подключению к базе данных и логам выглядит следующим образом:

```
$config = [
  /**
   * @var string: Директория, в которую будут записываться логи и ошибки выполнения
   */
  'error_log' => __DIR__ . '/../../logs',
  /**
   * @var string: Директория, в которую будут записываться json файлы
   */
  'json' => __DIR__ . '/../../json',
  /**
   * @var array: Настройка подключения к базе данных. Актуально если mmApp::$isSaveDb = true
   */
  'db' => [
      'host' => null, // Адрес расположения базы данных (localhost, https://example.com)
      'user' => null, // Имя пользователя
      'pass' => null, // Пароль пользователя
      'database' => null, // Название базы данных
  ]
];
```

Для установки конфигурации передайте данные в приложение следующим образом:

```
$bot->initConfig($config);
```

Массив с параметрами приложения выглядит следующим образом:

```
$param = [
  /**
   * @var string|null: Viber токен для отправки сообщений, загрузки изображений и звуков
   */
  'viber_token' => null,
  /**
   * @var array|string|null: Имя пользователя, от которого будет отправляться сообщение
   */
  'viber_sender' => null,
  /**
   * @var string|null: Telegram токен для отправки сообщений, загрузки изображений и звуков
   */
  'telegram_token' => null,

  /**
   * @var string|null: Версия Vk api. По умолчанию используется v5.103
   */
  'vk_api_version' => null,

  /**
   * @var string|null: Код для проверки корректности Vk бота. Необходим для подтверждения бота.
   */
  'vk_confirmation_token' => null,

  /**
   * @var string|null: Vk Токен для отправки сообщений, загрузки изображений и звуков
   */
  'vk_token' => null,

  /**
   * @var string|null: Яндекс Токен для загрузки изображений и звуков в навыке
   */
  'yandex_token' => null,

  /**
   * @var bool: Актуально для Алисы!
   * Использовать в качестве идентификатора пользователя Id в поле session->user.
   * Если true, то для всех пользователей, которые авторизованы в Яндекс будет использоваться один токен, а не разный.
   */
  'y_isAuthUser' => false,

  /**
   * @var string|null: Идентификатор приложения.
   * Заполняется автоматически.
   */
  'app_id' => null,

  /**
   * @var string|null: Идентификатор пользователя.
   * Заполняется автоматически.
   */
  'user_id' => null,
  /**
   * @var string: Текст приветствия
   */
  'welcome_text' => 'Текст приветствия',
  /**
   * @var string: Текст помощи
   */
  'help_text' => 'Текст помощи',

  /**
   * @var array: Обрабатываемые команды.
   *  - string name: Название команды. Используется для идентификации команд
   *  - $var array slots: Какие слова активируют команду. (Можно использовать регулярные выражения если установлено свойство is_pattern)
   *  - $var bool is_pattern: Использовать регулярное выражение или нет. По умолчанию false
   *
   * Пример intent с регулярным выражением:
   * [
   *  'name' => 'regex',
   *  'slots' => [
   *      '\b{_value_}\b', // Поиск точного совпадения. Например, если _value_ = 'привет', поиск будет осуществляться по точному совпадению. Слово "приветствую" в данном случае не будет считаться как точка срабатывания
   *      '\b{_value_}[^\s]+\b', // Поиск по точному началу. При данной опции слово "приветствую" станет точкой срабатывания
   *      '(\b{_value_}(|[^\s]+)\b)', // Поиск по точному началу или точному совпадению. (Используется по умолчанию)
   *      '\b(\d{3})\b', // Поиск всех чисел от 100 до 999.
   *      '{_value_} \d {_value_}', // Поиск по определенному условию. Например регулярное "завтра в \d концерт", тогда точкой срабатывания станет пользовательский текст, в котором есть вхождение что и в регулярном выражении, где "\d" это любое число.
   *      '{_value_}', // Поиск любого похожего текста. Похоже на strpos()
   *      '...' // Поддерживаются любые регулярные выражения. Перед использованием стоит убедиться в их корректности на сайте: (https://regex101.com/)
   *  ],
   *  'is_pattern' => true
   * ]
   */
  'intents' => [
      [
          'name' => WELCOME_INTENT_NAME, // Название команды приветствия
          'slots' => [ // Слова, на которые будет срабатывать приветствие
              'привет',
              'здравст'
          ]
      ],
      [
          'name' => HELP_INTENT_NAME, // Название команды помощи
          'slots' => [ // Слова, на которые будет срабатывать помощь
              'помощ',
              'что ты умеешь'
          ]
      ],
  ]
];
```

Для установки параметров передайте данные в приложение следующим образом:

```
$bot->initParams($param);
```

Далее создайте файл входа в приложение, а также класс отвечающий за логику приложения. Он должен быть унаследован от абстрактного класса `BotController`, и имеет следующий вид:

```
/**
* Класс, содержащий логику приложения.
* Обязательно должен быть унаследован от класса BotController!
*/
class ExampleController extends MM\bot\controller\BotController
{
 /**
 * Метод, отвечающий за обработку пользовательских команд
 */
 public function action($intentName): void
 {
     /**
     * Какая-то логика приложения
     * ...
     */
 }
}
```

Свой тип приложения.
====================

[](#свой-тип-приложения)

Для добавления своего типа приложения, установите тип в значение `T_USER_APP`. После чего передайте в функцию `run` класс, отвечающий за инициализацию и возврат данных. Класс должен быть унаследован от абстрактного класса `TemplateTypeModel`

Создание своего типа приложения
-------------------------------

[](#создание-своего-типа-приложения)

### Логика нового типа приложения

[](#логика-нового-типа-приложения)

Для начала необходимо создать класс, отвечающий за инициализацию и отображение результата работы. Проще говоря в данном классе происходит получение данных, а также инициализация параметров(Метод `init()`). После успешной обработки пользовательского запроса, класс должен подготовить ответ в требуемом формате(Метод `getContext()`). Пример:

```
