Распознавание сущностей с помощью DaData.ru

Сервис DaData позволяет извлекать и приводить к стандартному виду различные сущности из сообщений Собеседника: города, страны, ФИО и др.; находит компанию по реквизитам, проверяет наличие телефона в справочнике Россвязи. Другой актуальный функционал можно посмотреть на https://dadata.ru/api/.

В данной инструкции мы рассмотрим случай с именами. Предположим, Бот должен узнать имя Собеседника, и мы хотим проверить, что в своем сообщении Собеседник указал именно имя. Также мы хотим использовать имя Собеседника в дальнейшем диалоге с Ботом в полной форме (Собеседник назвался Мишей, будет обращаться к нему Михаил). Для этого используем внешний запрос к DaData и проверить, есть ли имя Собеседника и его полная форма в базе имен сервиса.

Регистрация в DaData.ru

  • Зарегистрируйтесь в сервисе DaData.ru или войдите в сервис, используя email и пароль: https://dadata.ru/clean/.

  • На верхней панели перейдите на вкладку API.

Распознавание имен

Рассмотрим, как работать с сервисом DaData.ru, на примере распознавания имен.

Получение данных из DaData

  • После перехода на вкладку API пролистайте страницу вниз, до раздела ФИО.

  • Выберите Разбор ФИО из строки («стандартизация»).

Важно!

Если вы зарегистрировались впервые, в разделе Как вызвать, перейдите на получите API-ключ и подтвердите адрес электронной почты. После этого обновите страницу.

  • В разделе Как вызвать найдите пример запроса cURL. Здесь H – это headers запроса, d – data, тело запроса.

  • Скопируйте URL из нижней строки этого примера.

Создание внешнего запроса к DaData на Платформе

  • Перейдите в Ботбилдер для нужного Бота и откройте вкладку External Requests.

  • Пролистайте вниз страницы и создайте новый запрос, нажав на Add.

  • Заполните вкладку Main:

В поле Name пропишите название запроса.

В поле Endpoint выберите тип запроса POST и вставьте скопированный URL.

  • Вкладку Headers заполните заголовками из примера запроса DaData.

  • На вкладке Data выберите Data type JSON. В поле Data укажите название контекстной переменной, которую нужно проверить на наличие имени.

В ответ из сервиса DaData будем получать JSON следующего вида. Проверять будем только имя (name).

[
{
    "source": "Срегей владимерович иванов", 
    "result": "Иванов Сергей Владимирович", 
    "result_genitive": "Иванова Сергея Владимировича", 
    "result_dative": "Иванову Сергею Владимировичу", 
    "result_ablative": "Ивановым Сергеем Владимировичем", 
    "surname": "Иванов", 
    "name": "Сергей", 
    "patronymic": "Владимирович", 
    "gender": "М", 
    "qc": 1
}
]
  • На вкладке Response в поле New key нужно указать переменную, которая используется из ответа сервиса (name в нашем случае). В поле name укажите элемент массива и, через /, переменную массива. В данном случае каждая переменная является элементом нулевого массива: [0[/name.

  • Нажмите Save и перейдите обратно в Ботбилдер на вкладку Agent Designer.

Использование внешнего запроса в Сценарии Бота

  • Создайте текстовый слот Text, в котором попросите Собеседника сообщить его имя.

  • Добавьте слот Wait For Reaction, чтобы Бот ожидал получение ответа от Собеседника.

  • Добавьте слот Memory, с помощью которого мы запишем введенное Собеседником сообщение в контекстную переменную name_name.

  • Добавьте слот External Request и из выпадающего списка выберите созданный ранее внешний запрос. Если запрос в выпадающем списке не отображается, обновите страницу.

  • Добавьте слот Transition Rule для разветвления Сценария в зависимости от того, есть ли в базе DaData введенное Собеседником имя.

  • Если имя не будет найдено сервисом, будет возвращено значение None. Соответственно, в под-слоте Condition со значением name вместо name нужно прописать выражение: {{ @name }} == None.

  • Если имя будет найдено в сервисе DaData, Сценарий пойдет по ветке от под-слота Condition со значением True.

  • После под-слота Condition со значением {{ @name }} == None добавим текстовый слот Text для случая, когда имя не найдено. Например, со следующим текстом: Интересное у тебя имя, {{ @name_name }}. Добавьте Wait For Reaction.

  • После под-слота Condition со значением true также добавьте текстовый слот Text. В поле текста для проверки добавьте получаемую из сервиса переменную {{ @name }}. Добавьте Wait For Reaction.

Last updated