PHPackages                             avtonom/php-yandex-alisa - 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. avtonom/php-yandex-alisa

ActiveLibrary[API Development](/categories/api)

avtonom/php-yandex-alisa
========================

PHP lib for yandex alisa-bot dialogs

162PHP

Since Feb 16Pushed 7y ago1 watchersCompare

[ Source](https://github.com/Avtonom/php-yandex-alisa)[ Packagist](https://packagist.org/packages/avtonom/php-yandex-alisa)[ RSS](/packages/avtonom-php-yandex-alisa/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependenciesVersions (1)Used By (0)

PHP-YANDEX-ALISA
================

[](#php-yandex-alisa)

Библиотека для работы с Алисой.

- Вызов методов классов по запросу.
- Сохранение контекста диалога.

Пример блоковой системы находиться в папке blocks.

---

Содержание
----------

[](#содержание)

1. [TODO](#todo)
2. [Установка](#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0)
3. [Описание констант](#%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BA%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82)
4. [Описание переменных](#%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D1%85)
5. [Описание методов](#%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2)
6. [Система JSON-блоков](#%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0-json-%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2)
    - [Что это такое?](#%D0%A7%D1%82%D0%BE-%D1%8D%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5)
    - [Файлы обработки](#%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B-%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8)
    - [Описание Action](#%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-action)
        - [Простой пример](#%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%B9-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80)
        - [Пример с вариацией сообщений](#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D1%81-%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B5%D0%B9-%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B9)
        - [Пример с добавлением кнопки](#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D1%81-%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC-%D0%BA%D0%BD%D0%BE%D0%BF%D0%BA%D0%B8)
        - [Пример с подготовленные запросы](#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D1%81-%D0%BF%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B)
        - [Группировка prepare и question](#%D0%93%D1%80%D1%83%D0%BF%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0-prepare-%D0%B8-question)
        - [Пример кода с кнопками и payload](#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D0%BA%D0%BE%D0%B4%D0%B0-%D1%81-%D0%BA%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0%D0%BC%D0%B8-%D0%B8-payload)
        - [Пример сложного JSON-блока](#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D0%B3%D0%BE-json-%D0%B1%D0%BB%D0%BE%D0%BA%D0%B0)
    - [Описание Payload](#%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-payload)
        - [Пример запроса](#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0)
        - [Форматирование текста](#%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0)
7. [Консоль Алиса](#%D0%9A%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D1%8C-%D0%90%D0%BB%D0%B8%D1%81%D0%B0)
    - [Получить загруженные файлы](#php-alisa-uploadget)
    - [Загрузить с сервера](#php-alisa-uploadfile-file_name)
    - [Загрузить с сайта](#php-alisa-uploadurl-url)
8. [index.php](#indexphp)
9. [setting.yml](#settingyml)
10. [Локальный Webhook.](#%D0%9B%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9-webhook)

---

TODO
----

[](#todo)

ДатаОписание релизаСостояние5.08.2018Теперь можно делать вариации вопросов и ответов.**done**5.08.2018Выполнять payload-функции (callback).**done**5.08.2018Проверка на орфографию.**done**6.08.2018Поддержка подготовленных запросов.**done**8.08.2018Реализация созданий навыков при помощи JSON-блоков.**done**11.08.2018Отправка сообщений с фотографиями.**done 80%**13.08.2018Вызов методов классов по запросу (call\_user\_func).**done**16.08.2018Сохранение контекста диалога (context).**done**----Сохранение профиля пользователя.**in plan**----Авторизация пользователя.**in plan**---Оплата при помощи компании Unitpay.**in plan**Установка
---------

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

```
composer require danil005/php-yandex-alisa

```

Описание констант
-----------------

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

### SKILL\_NAME

[](#skill_name)

Название навыка.

---

### VERSION

[](#version)

Версия Алиса API. По умолчанию: 1.0

Описание переменных
-------------------

[](#описание-переменных)

### private $startMessage = ""

[](#private-startmessage--)

Сообщение, которое будет отображаться при старте навыка.

---

### private $startMessageTTS = ""

[](#private-startmessagetts--)

Сообщение, которое будет озвучено синтезом речи Yandex.

---

### private $startButton = \[\]

[](#private-startbutton--)

Кнопки, которые будут отображены при запуске навыка

---

### private $version = self::VERSION

[](#private-version--selfversion)

Наследует константу VERSION.

---

### private $anyMessage = "Простите, я вас не понимаю."

[](#private-anymessage---простите-я-вас-не-понимаю)

Сообщение, которое будет отправлено пользователю в случае, если команда не будет найдена.

---

### private $caseSensitive = true

[](#private-casesensitive--true)

Чувствительность к регистру сообщений.

---

### private $speller = false

[](#private-speller--false)

Проверка на орфографию.

---

### public $vars = \[\]

[](#public-vars--)

Переменная для обработки [Prepare-функции](#public-preparestring-getmessage-string-command-bool).

---

### private $request = \[\]

[](#private-request--)

Переменная, которая получает ответ от Алисы.

---

### public $imagesDir = "images"

[](#public-imagesdir--images)

Директория с изображениями.

---

### public $response = stdObject

[](#public-response--stdobject)

Переменная для формирования ответа на полученный запрос от Алисы.

Описание методов
----------------

[](#описание-методов)

### public setCaseSensitive(bool $sensitive = true): $this

[](#public-setcasesensitivebool-sensitive--true-this)

Метод, который меняет чувствительность к регистру. `TRUE` - включить чувствительность. `FALSE` - выключить чувствительность.

АргументТипОписаниеПо умолчаниюsensitiveboolЧувствительно к регистру.true---

### public setImagesDir(String $path): $this

[](#public-setimagesdirstring-path-this)

Устанавливает директорию с изображениями.

АргументТипОписаниеПо умолчаниюpathStringДиректория с изображениями.Обязательно---

### public setAny(String $message): $this

[](#public-setanystring-message-this)

Метод, который устанавливает сообщение по умолчанию, если чат-бот не смог понять, что от него хотят.

АргументТипОписаниеПо умолчаниюmessageStringТекст сообщения.Обязательно---

### public setVersion(String $version = self::VERSION): $this

[](#public-setversionstring-version--selfversion-this)

Метод, который устанавливает версию Алиса API.

АргументТипОписаниеПо умолчаниюversionStringВерсия Алиса API.Данные с константы VERSION---

### public setSpellerCorrect(bool $speller = false): $this

[](#public-setspellercorrectbool-speller--false-this)

Исправление ошибок в тексте.

АргументТипОписаниеПо умолчаниюspellerboolУстановить проверку на орфографию и ее исправления в случае нахождении ошибки.false---

### public setEndMessage(): $this

[](#public-setendmessage-this)

Метод, который завершает сессию и закрывает навык.

---

### public addStartMessage(String $message): $this

[](#public-addstartmessagestring-message-this)

Метод, который устанавливает сообщение при старте навыка.

АргументТипОписаниеПо умолчаниюmessageStringТекст сообщения.Обязательно---

### public addStartTTS(String $message): $this

[](#public-addstartttsstring-message-this)

Метод, который устанавливает сообщение при старте навыка для синтеза речи.

АргументТипОписаниеПо умолчаниюmessageStringТекст сообщения.Обязательно---

### public addStartButton(String $title, bool $hide = false, Array $payload = \[\], String $url = null): $this

[](#public-addstartbuttonstring-title-bool-hide--false-array-payload---string-url--null-this)

Метод, который устанавливает кнопки при старте навыка.

АргументТипОписаниеПо умолчаниюtitleStringНазвание кнопки.ОбязательноhideboolСпрятать кнопки после нажатия.falsepayloadArrayОтправить дополнительные данные для обработки.\[\]urlStringURL-ссылкаnull---

### public addButton(String $title, bool $hide = false, Array $payload = \[\], String $url = null): $this

[](#public-addbuttonstring-title-bool-hide--false-array-payload---string-url--null-this)

Метод, который устанавливает кнопки.

**ВНИМАНИЕ!****Обязательно перед этим методом использовать sendMessage();**

АргументТипОписаниеПо умолчаниюtitleStringНазвание кнопки.ОбязательноhideboolСпрятать кнопки после нажатия.falsepayloadArrayОтправить дополнительные данные для обработки.\[\]urlStringURL-ссылкаnull---

### public sendMessage(String $message, String $tts = "", bool $speller = false ): $this

[](#public-sendmessagestring-message-string-tts---bool-speller--false--this)

Отправить сообщение пользователю. Использовать speller в этом методе не так важно, ведь вы сами можете вводить корректный текст, однако если вы не уверены в написании или боитесь, что где-то сделали опечатку, то можете использовать этот аргумент и поставить его на `TRUE`. Также использование аргумента speller очень хорошо сочетается с методом [prepare](#public-preparestring-getmessage-string-command-bool).

АргументТипОписаниеПо умолчаниюmessageStringТекст сообщения.ОбязательноttsStringСинтез речи, ударения, паузы.""spellerboolПроверка на орфографию и исправление, если будет найдена ошибка.false---

### public sendImage(String $path, String $title = "", String $description = "", Array $options = \[\]): $this

[](#public-sendimagestring-path-string-title---string-description---array-options---this)

Метод, которые отобразить изображение. Если указать его, то sendMessage вызывать нет смысла. **Внимание, чтобы отобразить изображение, вам необходимо его загрузить на сервер Yandex. Для этого создана консоль - alisa.**

АргументТипОписаниеПо умолчаниюpathStringНазвание файла.ОбязательноtitleStringПодпись под фотографией""descriptionStringОписание под фотографией""optionsArrayДополнительные настройки\[\]#### Дополнительные настройки:

[](#дополнительные-настройки)

|Аргумент|Тип| Описание
|:--:|--|--|-- |url|String|Web-ссылка.
|payload|Array|Payload-запрос.

---

### public sendGallery(Array $images, String $headerText = "", String $footerText = "", Array $footerOpt = \[\]): $this

[](#public-sendgalleryarray-images-string-headertext---string-footertext---array-footeropt---this)

Метод, которые отобразить галерею. Если указать его, то sendMessage вызывать нет смысла. **Внимание, чтобы отобразить изображение, вам необходимо его загрузить на сервер Yandex. Для этого создана консоль - alisa.**

АргументТипОписаниеПо умолчаниюimagesArrayМассив с изображениями.ОбязательноheaderTextStringЗаголовок галереи.""footerTextStringТекст под изображениями.""footerOptArrayДополнительные настройки\[\]#### Дополнительные настройки:

[](#дополнительные-настройки-1)

|Аргумент|Тип| Описание
|:--:|--|--|-- |url|String|Web-ссылка.
|payload|Array|Payload-запрос. |message|String|Сообщение, которое будет отправлено при нажатии на кнопку.

---

### protected optionsQuestions(Array $list, String $command): bool

[](#protected-optionsquestionsarray-list-string-command-bool)

Вариация реагирования на фразы для выполнения определенного дейсвтия указанного в [cmd()](#public-cmdstring-command).

АргументТипОписаниеПо умолчаниюlistArrayЛист ключевых слов для вызова действия.ОбязательноcommandStringКоманда пришедшая от пользователя на сервер.Обязательно---

### protected optionsAnswers(Array $list): mixed

[](#protected-optionsanswersarray-list-mixed)

Отправить вариационный ответ пользователю. Например, если вы не хотите отправлять пользователю одно и тоже сообщение, то можно использовать этот метод и расширить диапазон речи.

АргументТипОписаниеПо умолчаниюlistarrayЛист фраз, которые будет выдавать Алиса-навык.Обязательно---

### protected optionsCallback(Array $list, Array $callback): $this

[](#protected-optionscallbackarray-list-array-callback-this)

Метод, который позволяет делать логическую операцию ИЛИ. В этом случае указывается набор фраз, которые возможны при возврате payload (Callback). В случае если это слово будет найдено, то выдает `TRUE`. Также можно отправлять несколько Payload для одного действия и тем самым через эту функцию написать их оба.

АргументТипОписаниеПо умолчаниюlistArrayЛист ключевых слов.ОбязательноcallbackStringОбязательная переменная, которая передается в функцию для обработки.Обязательно---

### public prepare(String $getMessage, String $command): bool

[](#public-preparestring-getmessage-string-command-bool)

Метод, который позволяет делать подготовленные запросы и в последствии выводить их. Возвращает `true` или `false`, а также записывает результат функции в переменную `$this->vars`.

Пример:

```
if( $this->prepare("Купить {what} за {price}", $command) ) {
  $this->sendMessage("Вы уверены, что хотите купить
   {$this->vars['whats']} за {$this->vars['price']}₽?");
  return true;
}

```

Как вы можете заметить, ключи переменной vars отображают подготовленные ключи из аргумента `String $getMessage`.

АргументТипОписаниеПо умолчаниюgetMessageStringСообщение, которое должен принять навык для обработки данных.ОбязательноcommandStringСообщение которое придет от пользователя.Обязательно---

### public listen(): bool|null

[](#public-listen-boolnull)

Начать прослушивать Webhook. **Данный метод обязательно указывать в конце цепочки.**

---

### public cmd(String $command)

[](#public-cmdstring-command)

Метод в котором необходимо обрабатывать все данные. **Обязательно указывать** `return true;` **после каждого условия.**

```
if( $command == "привет" ) {
  $this->sendMessage("Приветик")->addButton("А что ты умеешь?");
  return true;
}
//Или
if( $this->optionsQuestions(["привет", "здравствуйте"]) ) {
  $this
  ->sendMessage($this->optionsAnswers(["Добрый день!", "Я рада вас видеть!"]))
  ->addButton("А что ты умеешь?");
  return true;
}
//Или
if( $this->prepare("забронируй мне {what} на {time} в {when}", $command) ) {
  $this->sendMessage
  ("Мы забронировали
	  {$this->vars['what']}
   на {$this->vars['time']}
    в {$this->vars['when']}"
  );
  return true;
}

return false;

```

---

### public payload(Array $callback)

[](#public-payloadarray-callback)

Метод в котором необходимо обрабатывать все данные пришедших с payload.. **Обязательно указывать** `return true;` **после каждого условия.**

```
if( array_key_exists('help', $callback) ) {
  $this->sendMessage('Много чего! А ты?');
  return true;
}
//Или
if( $this->optionsCallback(["help", "helpme"], $callback) ) {
  $this->sendMessage('Много чего! А ты?');
  return true;
}
return false;

```

---

Система JSON-блоков
-------------------

[](#система-json-блоков)

Просто, удобно, быстро. Чтобы активировать блоковую систему, укажите в index.php (или в другом файле) метод `setBlocksActions(true)`.

---

### Что это такое?

[](#что-это-такое)

Система JSON-блоков построена таким образом, чтобы можно было использовать SDK не трогая навыки программирования. Вам достаточно прочитать эту документацию и делать уже сейчас свои навыки. Пока эта система находиться на Alpha-стадии.

---

### Файлы обработки

[](#файлы-обработки)

Всего 2 файла обработки:

ФайлОписаниеМестонахождениеaction.jsonГлавный файл, который берет на себя ответственность выполнять определенны действия.\\dir\_project\\blocks\\action.jsonpayload.jsonФайл для обработки payload запросов (callback).\\dir\_project\\blocks\\payload.**Если у вас стоит `setCaseSensitive(false)`, то обязательно писать маленькими буквами, разрешает писать хаотично в send-теле.**

---

### Описание Action

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

Главный файл блоковой системы.

#### Простой пример:

[](#простой-пример)

Это маленький пример, который демонстрирует работу навыка уже с готовым json-блоком. Он ограничен действиями, однако может прост в понимании.

```
[
  {
	"question": "привет",
	"send": {
	   "message": "Добрый день!",
	   "tts": "Д+обрый---д+ень!"
	}
  }
]

```

АргументТип данныхОписаниеquestionStringСообщение, которое будет писать пользователь.sendArrayОтветить на сообщение навыку.messageStringСообщение, которое будет отправлено в ответ.ttsStringСинтез речи.#### Пример с вариацией сообщений:

[](#пример-с-вариацией-сообщений)

Иногда хочется, чтобы навык реагировал на несколько фраз, а также отвечал не одним предложением, а каким-нибудь разным.

```
[
 {
  "question": [
	  "привет", "добрый день", "здравствуйте"
  ],
  "send": {
	  "message": ["Добрый день", "С новым годом!"],
	  "tts": ["Д+обрый---д+ень!", "С н+овым г+одом!"]
  }
 }
]

```

АргументТип данныхОписаниеquestionArrayСообщение, которое будет писать пользователь.sendArrayОтветить на сообщение навыку.messageArrayСообщение, которое будет отправлено в ответ.ttsArrayСинтез речи.**ВНИМАНИЕ**Рекомендуем указывать вариацию ответов в одинаковом порядке с синтезом речи, дабы не было разногласия: текст - один, а слова речи -другие.

#### Пример с добавлением кнопки:

[](#пример-с-добавлением-кнопки)

Кнопки необходимо добавлять внутри тела send, там и прописывать логику.

```
...
},
"buttons": {
  "title": "button1",
  "hide": false,
  "payload": [],
  "url": null
}

```

АргументТип данныхОписаниеbuttonsArrayОбъявление кнопок в теле send.titleStringНазвание кнопки.hideBoolСпрятать кнопку после нажатия.payloadArrayАналог callback, отправляет данные на сервер. Дальше будет расписано, как можно будет это использовать.urlStringКнопка с ссылкой.Кнопок можно добавить несколько, для этого просто сделайте `buttons` как массив:

```
...
},
"buttons": [
	{
	  "title": "button1",
	  "hide": false,
	  "payload": [],
	  "url": null
	},
	{
	  "title": "button2",
	  "hide": false,
	  "payload": [],
	  "url": null
	},
	...
]

```

#### Пример с подготовленные запросы:

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

Подготовленные запросы - это сложная конструкция позволяющая вам создавать различные запросы, например: забронируй гостиницу на пятницу в 15:40. Запрос будет выглядеть таким образом:

`забронировать {what} на {when} в {time}`Такая конструкция может быть **за место question**.

```
[
  {
   "prepare": "купить {what}",
	 "send": {
	   "message": "Вы купили {what}!"
	   "tts": "Вы куп+или {what}!"
	 },
	 ...
  }
]

```

АргументТип данныхОписаниеprepareStringПодготовленный запрос. Переменная указывается в фигурных скобках. Она может быть любой, но **должна начинаться с буквы**.Переменные можно указывать в send-теле для отображения того, что написал пользователь.

#### Группировка prepare и question:

[](#группировка-prepare-и-question)

Вы также можете группировать вместе подготовленные запросы и обычные. Непосредственно в обоих этих методах возможно использовать вариацию. Однако блоковая система станет сложнее:

```
[
 {
	 "question": ["купить", "приобрести"],
	 "prepare": ["купить {what}", "приобрести {what}"],
	    "send": {
		  "message": "Покупаем..." ,
		  "tts": "Покупаем..."
	 ...
 }
]

```

Также можно разделить ответы и создать их опциональными:

```
[
 {
	 "question": ["купить", "приобрести"],
	 "prepare": ["купить {what}", "приобрести {what}"],
	    "send": {
		  "message": {
			  "question": "Покупаем...",
			  "prepare": "Покупаем {what}..."
		  },
		  "tts": {
		      "question": "Покуп+аем...",
			  "prepare": "Покуп+аем {what}..."
		  }
	 ...
 }
]

```

С кнопками тоже самое, что и с сообщениями:

```
[
 {
	 "question": ["купить", "приобрести"],
	 "prepare": ["купить {what}", "приобрести {what}"],
	    "send": {
		  "message": {
			  "question": "Покупаем...",
			  "prepare": "Покупаем {what}..."
		  },
		  "tts": {
		      "question": "Покуп+аем...",
			  "prepare": "Покуп+аем {what}..."
		  },
		  "buttons": {
			  "prepare": [
				 {
					 "title": "ButtonPrepare1",
					 "hide": false,
					 "payload": [],
					 "url": null
				 },
				 {
					 "title": "ButtonPrepare2",
					 "hide": false,
					 "payload": [],
				     "url": null
			     }
			 ],
			 "question": {
				  "title": "ButtonQuestion1",
				  "hide": false,
				  "payload": [],
				  "url": null
			 }
		}
 }
]

```

Как видите, помимо того, что можно добавить кнопку под каждый ответ, так их можно создать несколько. Это очень удобно и делает в два счета, да куда быстрее чем писать код.

#### Пример кода с кнопками и payload:

[](#пример-кода-с-кнопками-и-payload)

Payload - это аналог Callback на других сервисах.

```
...,
"buttons": {
	"title": "ButtonPrepare1",
	"hide": false,
	"payload": {
		"function": "test",
		"vars": [
		   {
			 "function": "test",
			 "vars": {}
		   }
		]
	},
	"url": null
},
...

```

Аргументы из payload:

АргументТип данныхОписаниеfunctionStringФункция, которая указана в payload.json. Настройка действия делается в этом файле.varsArrayДополнительные переменные, которые будут переданы. Если вы использовали подготовленные запросы, то все переменные будут переданы **во все vars** кнопок, которые будут созданы.**ВНИМАНИЕ**Если указать несколько payload, то отправка кнопок или сообщений не будет, но вы можете таким образом обрабатывать различную информацию. Например, произвести оплату.

#### Пример сложного JSON-блока:

[](#пример-сложного-json-блока)

```
[
 {
	 "question": ["купить", "приобрести"],
     "prepare": ["купить {what}", "приобрести {what}"],
     "send": {
	   "message": {
		   "question": [
			    "Производим покупку...",
			    "Покупаем...",
			    "Оплачиваем..."
		   ],
		   "prepare": [
			   "Покупаем {what}...",
			   "Приобретаем {what}..."
		   ]
	   },
	   "tts": {
		   "question": [
			   "Произв+одим пок+упку...",
			   "Покуп+аем...",
			   "Опл+ачиваем..."
		   ],
		   "prepare": [
			   "Покуп+аем {what}...",
			   "Приобрет+аем {what}..."
		   ]
	   },
	   "buttons": {
		   "prepare": [
			  {
				 "title": "ButtonPrepare1",
				 "hide": false,
				 "payload": [
				    {
					  "function": "test",
				      "vars": {
					      "admin": "yes",
					      "age": 23
				      }
					}
				 ],
				 "url": null
		 	  },
			  {
			    "title": "ButtonPrepare2",
				"hide": false,
				"payload": [],
				"url": "https://example.ru/"
			  }
		   ],
		   "question": {
			  "title": "ButtonQuestion1",
			  "hide": true,
			  "payload": [],
			  "url": "https://example.ru/"
		  }
		 }
	 },
	 "end_session": false
 }
]

```

Глобальное описание всех переменных:

АргументТип данныхОписаниеquestionString|ArrayПринимает сообщения для обработки. Если использовать массив, то будет вариация того, что может написать пользователь.prepareString|ArrayПодготовленные запросы, которые можно использовать за место **question**. Если использовать массив, то будет вариация того, что может написать пользователь.sendArrayМассив, который обрабатывает все действия.messageString|ArrayАргумент, который отправляет сообщение пользователю. Если это массив, то будет создана вариация ответов. Рекомендуется делать соответствие текстов с TTS, чтобы не было асинхронности речевого синтеза и текста. Также можно указать тип ответа и на какой аргумент prepare или question.ttsString|ArrayАргумент, который создает синтез речи для текста. Если это массив, то будет создана вариация ответов. Рекомендуется делать соответствие текстов с TTS, чтобы не было асинхронности речевого синтеза и текста.buttonsArrayСоздание кнопок. Можно указать тип ответа prepare или question, добавить несколько кнопок.titleStringНазвание кнопки.hideBoolСкрыть кнопку после нажатия.payloadArrayОтправить payload-запрос.functionStringНазвание функции в файле payload.json.varsArrayПеременные для передачи с payload-запросом.urlStringОтправить по ссылки при нажатии на кнопку.end\_sessionBoolЗавершить сессию.### Описание Payload

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

Payload файл необходим для обработки запросов отправленных с кнопок:

#### Пример запроса:

[](#пример-запроса)

```
{
	{
		  "buy": {
			  "sendMessage": {
				  "message": [
				     "Вы хотите купить $^what|asd$. Вы уверены?",
				     "Вы приобритаете $what$. Вы уверены?"
				  ],
				  "tts": [
					  "Вы хотите купить $what$. Вы уверены?",
					  "Вы приобритаете $what$. Вы уверены?"
				  ]
			  },
			  "sendButtons": [
				 {
					 "title": "Да, уверен.",
					 "hide": false,
					 "payload": [
						{
						  "function": "yes_buy",
						  "vars": {}
						}
					 ],
					 "url": null
			  }
		 ]
	}
}

```

Описание аргументов:

АргументТип данныхОписаниеbuyStringНазвание функции, за место buy можно использовать любые другие слова. Это название нужно передавать в button =&gt; payload =&gt; function.sendMessageArrayАргумент для отправки сообщения.messageString|ArrayОтправить сообщение. Если это массив, то будет создана вариация сообщений. Рекомендуется делать соответствие текстов с TTS, чтобы не было асинхронности речевого синтеза и текста.ttsString|ArrayОтправить синтез речи. Если это массив, то будет создана вариация сообщений. Рекомендуется делать соответствие текстов с TTS, чтобы не было асинхронности речевого синтеза и текста.sendButtonArrayОтправляет кнопки.titleStringНазвание кнопки.hideBoolСкрыть кнопку после нажатия.payloadArrayВыполнить Payload-запрос.functionStringНазвание функции в payload.json.varsArrayПеременные для передачи с payload-запросом.urlStringОтправить по ссылки при нажатии на кнопку.### Форматирование текста:

[](#форматирование-текста)

> $param$ - получить переменную из переменной vars. Например вы передали: Купить {what}. Значит в payload нужно указать $what$

> $^param$ - если стоит такой знак, значит это слово будет исправлено в случае допущенной ошибки. Например: Исправить {what}. В переменной what = (здровстуйте). На выходи мы получим исправленное слово =&gt; здравствуйте.

> $param1|param2$ - условия ИЛИ. Если переменная param1 будет пуста, то выведет param2 и наоборот.

---

Консоль Алиса
-------------

[](#консоль-алиса)

Консоль, которая на данный момент создана для загрузки изображения и просмотра уже загруженных.

#### php alisa upload:get

[](#php-alisa-uploadget)

Возвращает все загруженные изображения.

```
Images List

===========
ID: 11
ImageName: f3ccdd27d2000e3f
ImageFile: 1.jpg
ImageID: 1030494/88a816aaacf55838ade8
===========

...

```

#### php alisa upload:file ``

[](#php-alisa-uploadfile-file_name)

Загружает изображение из папку, которую вы установили методом `setImageDir()`.

#### php alisa upload:url ``

[](#php-alisa-uploadurl-url)

Загружает изображение с указной ссылки.

---

index.php
---------

[](#indexphp)

Файл для запуска чат-бота. Вы также можете изменить название файла, однако необходимо указывать то, что приведено к примеру ниже:

```
$main = new \yandex\alisa\Alisa();
$main->addStartMessage("Добро пожаловать")->setCaseSensitive(false)->listen();

```

---

setting.yml
-----------

[](#settingyml)

Файл для настройки стандартных констант.

```
skill-name: АлиВиксед
skill-id: 354e2695-98b3-4951-be30-e7e2efff5868
skill-token: AQAAAAAW2RNZAAT7o0Uw9ECNE0WFgqvKcoGUppc

```

КонстантаОписаниеskill-nameНазвание навыка.skill-idID-навыка.skill-tokenOAuth-токен Dialogs для работы с изображениями.Локальный Webhook:
------------------

[](#локальный-webhook)

Чтобы запустить локальный webhook необходимо пройти на [ngrko](https://ngrok.com/) и создать аккаунт. После скачать программу и кинуть ее в удобно для вас место. Запустите командную строку и пропишете: ngrok http `port`Если это локальный сайт, то можете написать ngrok http `example.ru:port`В случае, если вы используете [OpenServer](https://ospanel.io/) , то необходимо еще указать алису в настройках: [![enter image description here](https://camo.githubusercontent.com/407d2225922bb574379d55eb329238ed14832df2fbaf41dd3755981cce225e2e/687474703a2f2f646c342e6a6f78692e6e65742f64726976652f323031382f30382f30322f303032342f303035302f313632323036362f36362f663833623636366337342e706e67)](https://camo.githubusercontent.com/407d2225922bb574379d55eb329238ed14832df2fbaf41dd3755981cce225e2e/687474703a2f2f646c342e6a6f78692e6e65742f64726976652f323031382f30382f30322f303032342f303035302f313632323036362f36362f663833623636366337342e706e67)При успешном запуске, просто введите этот адрес в Webhook URL: [![enter image description here](https://camo.githubusercontent.com/61397cfd0f169c4f6d1ad2fa4f3f9dd12549a5ac01c1322b4f15b1f6babcb67e/687474703a2f2f646c342e6a6f78692e6e65742f64726976652f323031382f30382f30322f303032342f303035302f313632323036362f36362f623565363764376136302e706e67)](https://camo.githubusercontent.com/61397cfd0f169c4f6d1ad2fa4f3f9dd12549a5ac01c1322b4f15b1f6babcb67e/687474703a2f2f646c342e6a6f78692e6e65742f64726976652f323031382f30382f30322f303032342f303035302f313632323036362f36362f623565363764376136302e706e67)

---

Version: 2.1 Danil Sidorenko © MIT 2018

###  Health Score

20

—

LowBetter than 14% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity7

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity38

Early-stage or recently created project

 Bus Factor1

Top contributor holds 73.8% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/851a2d4f8d02604c04bd2c4331a901e4fc92ed7ec1371cbceafb48c2495efc8c?d=identicon)[avtonomspb](/maintainers/avtonomspb)

---

Top Contributors

[![Danil005](https://avatars.githubusercontent.com/u/26440814?v=4)](https://github.com/Danil005 "Danil005 (31 commits)")[![Fighter90](https://avatars.githubusercontent.com/u/6834634?v=4)](https://github.com/Fighter90 "Fighter90 (7 commits)")[![Avtonom](https://avatars.githubusercontent.com/u/988367?v=4)](https://github.com/Avtonom "Avtonom (4 commits)")

---

Tags

alicealisabotbotschatchatbotdialogyandexyandex-dialogs

### Embed Badge

![Health badge](/badges/avtonom-php-yandex-alisa/health.svg)

```
[![Health](https://phpackages.com/badges/avtonom-php-yandex-alisa/health.svg)](https://phpackages.com/packages/avtonom-php-yandex-alisa)
```

###  Alternatives

[stripe/stripe-php

Stripe PHP Library

4.0k143.3M480](/packages/stripe-stripe-php)[twilio/sdk

A PHP wrapper for Twilio's API

1.6k92.9M272](/packages/twilio-sdk)[knplabs/github-api

GitHub API v3 client

2.2k15.8M187](/packages/knplabs-github-api)[facebook/php-business-sdk

PHP SDK for Facebook Business

90121.9M34](/packages/facebook-php-business-sdk)[meilisearch/meilisearch-php

PHP wrapper for the Meilisearch API

73813.7M114](/packages/meilisearch-meilisearch-php)[google/gax

Google API Core for PHP

263103.1M454](/packages/google-gax)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
