Простая и пошаговая интеграция Яндекс-Алисы и 1С

09.04.18

Интеграция - WEB-интеграция

Интеграция Алисы и 1С через http сервис на платформе 8.3.9. Используем виртуальный сервер, сертификат от letsencrypt, и делаем простые запросы к базе из Алисы.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Конфигурация с http сервисом для работы с Алисой (8.3.9)
.cf 31,26Kb
23
23 Скачать (2 SM) Купить за 2 150 руб.
Скрипт на OneScript для работы с Алисой
.os 5,85Kb
12
12 Скачать (1 SM) Купить за 1 850 руб.

Всем привет! После начала публичного бета-тестирования API Алисы я не смог пройти мимо и загорелся идеей попробовать интегрировать её с 1С. В процессе получилось много боли, страданий, но в конце концов всё заработало! В этой статье я собираюсь рассмотреть процесс интеграции по шагам с простой самописной базой, из которой мы будем получать сумму продаж.

1) Итак, для начала нам нужен Windows сервер (я купил в ultravds за 780 руб.)  и доменное имя. Залезаем в DNS редактор и делаем с помощью A записи, чтобы какой-либо поддомен указывал на IP нашего сервера. У меня это, например, выглядит вот так: 

То есть, у меня появляется поддомен bott.mysite.ru который указывает на IP моего сервера.

Если вы всё сделали правильно и у вас на сервере уже запущен IIS (легко нагуглить как это сделать) то вы увидите следующую картинку при визите на bott.mysite.ru

Отлично. Теперь, для работы Алисы, нужно настроить на сайте https.

2) Для бесплатного приобретения валидного, не самоподписанного сертификата, мне помогла утилита PkiSharp-winacme. У нее простой консольный интерфейс, в котором легко разобраться.

Только не забудьте при ее использовании отключить IIS, потому что ей тоже нужен порт 80. После генерации сертификатов, она добавит их в реестр, что в дальнейшем облегчит нам настройку IIS. Просто при создании новой привязки на порт 443, сертификат уже будет в списке выбора.

3) Для общения с Алисой нам понадобится HTTP сервис, который будет отвечать на POST запросы. Добавляем его в конфигурацию (я сделал файловую на 8.3.9), пишем код (можно посмотреть в прикрепленном cf) и публикуем базу на веб-сервере IIS, не забыв поставить галочку "Публиковать HTTP сервисы". После этого нам понадобится какой-нибудь отладчик, чтобы делать POST запросы и проверить работу нашего сервиса. Я использовал Advanced REST client для Хрома. И вот-тут то я столкнулся с несколькими ошибками: 

3а) долгое время у меня при запросе сервиса вылетала 500 ошибка. Оказывается, потому что я поставил платформу 8.3.6 и надо было в свойствах IIS разрешить 32х разрядные приложения. Помогла мне эта статья

3б) Сервис через отладчик не хотел работать без авторизации. Пришлось прописывать url вида https://user:password@bott.site.ru/hs/def и только тогда всё работало. Позднее именно эта особенность доставила мне больше всего хлопот и потрепала изрядно нервов.

4) Для правильного ответа Алисе, согласно документации, надо отдать не просто json, а правильно включить в него поля запроса, такие как session_id, user_id, message_id. Поэтому надо написать код для разбора пришедшего от Алисы Json запроса и выдергивания из него нужных полей в ответ. Код можно посмотреть в приложенной cf в модуле hhtp сервиса. Получается все хорошо:

И тут я подумал что успех близок, однако оказалось что Алиса не принимает в качестве Webhook URL тот формат с пользователем и паролем, который прекрасно работал в отладчике. При попытке его ввести, все время появлялась ошибка "Ошибка в ответе Webhook", причем, согласно моим логам, запрос вообще не приходил. Я обратился в техподдержку Яндекса и в тикете Ticket#18032116321077218 от 29 марта мне обещали это починить, однако на 07.04 все еще такой формат URL не поддерживается.

Тут я приуныл, но вспомнил что есть еще такая штука как OneScript, которая тоже может в HTTP сервисы

5) После некоторых плясок с бубном и настройки сервера под запуск OneScript, у меня получилось возвращать такой же верный ответ как и из 1С, что и неудивительно - код был такой же. URL стал вида https://bott.site.ru/bin/web.os и такой формат Алиса уже приняла без ошибки

И наконец-то заработал тестовый чат на вкладке навыка "Тестирование":

Я обрадовался, и решил что для получения данных из 1С достаточно перенаправить запрос в неё.

6) При переадресации из OneScript в 1С я написал вот такой код:

СтрокаСсылки = "http://user:password@localhost/dbz/hs/def/";
Соединение = Новый HTTPСоединение(СтрокаСсылки,80,"user","password");
тело= Запрос.ПолучитьТелоКакСтроку();
Запрос1 = Новый HTTPЗапрос;
Запрос1 .Заголовки.Вставить("Content-Type","application/json");
Запрос1.УстановитьТелоИзСтроки(тело); 
Ответ1с = Соединение.ОтправитьДляОбработки(Запрос1);
Возврат Ответ1с; 

Но оно не взлетело и все время возникала 500 ошибка. Тут я уже приуныл окончательно и решил что ничего не получится.

7) Однако, немного пояндексив про "http сервисы без авторизации" я нашел тему на Инфостарте, и, оказывается, параметры авторизации можно прописать прямо в default.vrd. В самом верху где у вас прописан первый тег point есть путь к ИБ (у меня файловая) и туда можно дописать юзера и пароль:

ib="File="C:\onecweb\filebase";usr="username";pwd="password""

Это помогло, и ссылка на http сервис без авторизации удовлетворила Алису.

8) Собственно, нужно же сделать что-то полезное по команде Алисы и я выбрал просто отправлять в ответ пользователю сумму продаж по регистру Продажи.Обороты. Иногда вылетает ошибка "url диалога недоступен", мне кажется это из-за того что у меня файловая база. Но все равно это успех!

9) Однако, что если мы хотим более сложное поведение - те же продажи за определенный период, по определенным организациям, складам, номенклатуре. Использовать все время СтрНайти для разбора команд не очень продуктивно, поэтому следующая тема для развития - какая-то нейросеть для извлечения фактов из текста. Чтобы ей можно было передать строку вида "отчет по продажам по организации ромашка со склада Основной за неделю" и она возвращала json с найденными фактами. У Яндекса есть для этого Томита парсер, возможно в комментариях мне подскажут еще хорошие варианты, и я дополню эту статью.

 

Алиса голосовой помошник интеграция

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    17782    19    22    

16

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    19848    13    17    

16

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14422    42    8    

18

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    1172    1    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. metmetmet 82 09.04.18 21:10 Сейчас в теме
Не до конца понял как все настроено, но однозначно круть.
Я так понял, общение с Алисой происходит в приложении на телефоне, и каким-то образом настроен вебхук на http сервис 1c?
pavel_pss; +1 Ответить
2. kiv1c 818 10.04.18 09:17 Сейчас в теме
(1) пока не через телефон, а через тестовый чат на платформе Яндекс-диалогов, и там да, вебхук - ссылка с https на которые Алиса делает POST запросы.
28. пользователь 24.05.18 05:41
Сообщение было скрыто модератором.
...
30. пользователь 27.05.18 06:38
Сообщение было скрыто модератором.
...
3. baracuda 2 10.04.18 11:07 Сейчас в теме
В чем суть?? Алиса смогла 1с слово продажи а вы смогли это слово распознать и дать ответ в виду готового отчета?
6. olegmedvedev 65 10.04.18 16:12 Сейчас в теме
(3)ну это примерно как с чат-ботами в телеграмм. там тоже даешь боту команду - он тебе отчет. тут фишка в голосовом управлении.
4. blackhole321 1314 10.04.18 14:14 Сейчас в теме
Поясните пожалуйста, Вы проксируете ответы через OneScript или webhook напрямую настроен на 1С?
15. kiv1c 818 11.04.18 14:18 Сейчас в теме
(4) после добавления авторизации в default.vrd вебхук получилось настроить напрямую на 1с
16. blackhole321 1314 11.04.18 14:22 Сейчас в теме
(15)А что с лицензиями? Одновременных запросов может быть приличное количество.
5. bonv 1560 10.04.18 16:09 Сейчас в теме
(0) С учетом
использовать файловую базу 1С не самое лучшее решение. Да и в целом не все запросы можно обработать за такое время в 1С.
8. TitanLuchs 413 11.04.18 10:29 Сейчас в теме
(5) Файловая база вполне разумное решение при небольшом количество запросов. А 1,5 секунд для 1С это даже много, обычно за 200-300 мсек ответ возвращается.
9. bonv 1560 11.04.18 10:54 Сейчас в теме
(8)
А 1,5 секунд для 1С это даже много, обычно за 200-300 мсек ответ возвращается.

Ну если возвращать "Привет Мир!", то да) Если добавить какую-то бизнес-логику, то время ответа сильно возрастет.
10. TitanLuchs 413 11.04.18 11:02 Сейчас в теме
(9) Это широко распространенное заблуждение
11. bonv 1560 11.04.18 12:00 Сейчас в теме
(10) В чем заблуждение? Это же очевидно что время ответа "привет мир!" будет меньше, чем время ответа, например, информации о задолженности контрагента Иванова, которую получаем запросом
12. Fox-trot 163 11.04.18 12:55 Сейчас в теме
13. bonv 1560 11.04.18 13:05 Сейчас в теме
(12) не очевидно, что запрос к базе данных требует какое-то время? И это время больше, чем нулевое время когда мы запрос к базе данных не делаем?
14. TitanLuchs 413 11.04.18 14:12 Сейчас в теме
(13) То, что время будет больше, это, конечно же, очевидно. А вот про "нулевое время" вы зря. Так как при выполнении запросов к 1С через http-сервисы нулевого времени не бывает. На установление соединения (даже не первоначального, а повторного при переиспользовании сеансов) уходит очень много времени. Причем настолько много, что если просто "выдать в ответ "Привет, мир!"" займет Х миллисекунд, то это не значит, что "сходить за данными в БД и вернуть их" займет в разы больше времени: 2Х, 3Х или 10Х. Часто это бывает всего 1,1Х, и то при большом количество запросов к 1С. Фишка в том, что ~0,9Х от общего времени занимает само подключение к базе.
Fox-trot; +1 Ответить
17. bonv 1560 11.04.18 15:22 Сейчас в теме
(14) "нулевое время" упоминалось мной только в контексте "когда мы запрос к базе данных не делаем". Очевидно, что вызов сервиса занимает не нулевое время.
Причем настолько много, что если просто "выдать в ответ "Привет, мир!"" займет Х миллисекунд, то это не значит, что "сходить за данными в БД и вернуть их" займет в разы больше времени: 2Х, 3Х или 10Х.

Запрос запросу рознь. Любой запрос к виртуальной таблице ОстаткиИОбороты регистра бухгалтерии выполняется в 10 и более раз дольше, чем просто ответить "Привет мир!". Да что уж там, задача "получить информацию о задолженности контрагента Иванова, используя регистр бухгалтерии, через Алису" без дополнительных таблиц нереализуема. Ибо время будет выходить за 1.5 сек почти всегда.
18. TitanLuchs 413 11.04.18 15:35 Сейчас в теме
(17)
задача "получить информацию о задолженности контрагента Иванова, используя регистр бухгалтерии, через Алису" без дополнительных таблиц нереализуема. Ибо время будет выходить за 1.5 сек почти всегда.


Она реализуема на 100% путем выполнения двух http-запросов. Первым инициируем начало формирования отчета, а вторым забираем результат. Забирать можно когда угодно - хоть через 1,5 секунды, хоть через 1,5 дня.
19. bonv 1560 11.04.18 16:21 Сейчас в теме
(18)
- "Алиса, какая задолженность у контрагента Иванов?"
- "Приходите завтра"

Ну нормально чо)
ivanov660; +1 Ответить
20. TitanLuchs 413 11.04.18 17:46 Сейчас в теме
(19) Если у вас взаиморасчеты формируются полтора дня, то не нормально, а грустно.
21. nporrep 50 12.04.18 05:00 Сейчас в теме
(20) Здравствуйте. Как там у вас, в будущем?
22. nporrep 50 12.04.18 05:09 Сейчас в теме
(20)
Кроме шуток, грустно на самом деле то, что Вы не допускаете в свою голову мысль о гораздо больших масштабах оперативной информации, чем те, с которыми Вы привыкли работать. Много лет назад, однажды, я столкнулся с ограничением в Excel в количестве строк на листе и всё заверте... ODBC get, динамическое наблюдение + быстрый своп, параллелизм... если вы понимаете, о чем я =)
23. TitanLuchs 413 12.04.18 09:18 Сейчас в теме
(22) Я не знаю, какой объем оперативной информации для вас "большой". Если хотите конкретики, то в реальных проектах мы за 300-400 миллисекунд получали выборку из 50 записей регистра сведений, содержащего 100000000 (сто миллионов) записей и успешно отображали ее в виде таблицы html на сайте. Выполняли 900 http-запросов к 1С в секунду, из которых половина выполняет запись в БД. И такое условие, как ограничение в 1,5 секунды при выполнении запроса, выполняется более чем успешно независимо от масштаба оперативной информации.
MrFlanker; +1 Ответить
25. bugagashenka 203 23.05.18 07:05 Сейчас в теме
(23) можно пруф? слабо верится, что 50 записей можно выбрать из 100КК за 400 мс. Сколько людей в базе находилось в это время? Какой размер базы? Железо и версия 1С и SQL?
27. TitanLuchs 413 23.05.18 10:37 Сейчас в теме
(25) Я не скажу ничего про размер базы, железо и версии 1С и SQL, потому что у меня нет этой информации. Мы делали этот функционал для gilev.ru, разрабатывали только веб-морду и модули 1С, которые берут за основу уже выбранные из базы данные, обеспечивают их отображение на странице сайта и интерактивность. А выборку данных, настройку серверов и прочее ускорение работы делали сотрудники gilev.ru. Поскольку они именно на этом специализируется, получилось так быстро. На разогретой базе запрос в среднем за 400 мсек. Спросите их, возможно они поделятся информацией.
Часть этого функционала можно посмотреть, например, здесь: http://www.gilev.ru/sqlsize/.
MrFlanker; +1 Ответить
7. monkbest 114 11.04.18 07:57 Сейчас в теме
А можно поподробнее принцип взаимодействия пользователь/Алиса/1с
если я своей Алисе скажу "продажи" она же не полезет к Вам на сервер :)

т.е. как Алиса узнает, что запросы именно вот этого пользователя надо перенаправлять куда-то?
24. user971612 07.05.18 19:39 Сейчас в теме
А как сделать лишь запуск проводника адреса? К примеру игры. steam://rungameid/509980
26. evn-zorin 33 23.05.18 07:46 Сейчас в теме
чем бы дитя не тешилось
29. Maxisussr 24.05.18 16:42 Сейчас в теме
(0)
Не совсем понял (может, плохо читал), в чем отличие от Telegram-бота по своей сути (результату)?
31. SiAl 76 21.09.18 21:00 Сейчас в теме
Слышал байку, что уже есть WMS с голосовым управлением. Типа, ходит кладовщик с гарнитурой и через Алису запрашивает по номеру заказа на сборку что собирать и где, а та отвечает. Потом также кладовщик голосом фиксирует окончание сбора через Алису. Типа тогда руки свободны от бумаг, планшета, ТСД и бегать к компу нет надобности постоянно. Но что-то не могу найти через поисковики такое решение. Наверно все-таки это пока байка.
32. acanta 21.09.18 21:29 Сейчас в теме
Как много девушек хороших готовы поработать вместо Алисы. Блютус, мобилка и громкая связь.
33. olo_lo4 14.01.19 19:39 Сейчас в теме
Ребят, а есть продолжение этой по настоящему бомбической темы ?
34. kiv1c 818 15.01.19 11:16 Сейчас в теме
(33) а что бы вы хотели видеть в продолжении? у меня пока идей новых нет)
35. xyzet 15.01.19 18:48 Сейчас в теме
Эпловская Сири на очереди следующая или у нее нет возможности подобного взаимодействия?
36. TitanLuchs 413 18.01.20 22:38 Сейчас в теме
(35) У Сири еще проще. Там есть "Команды". Создаешь новую команду с запуском приложения, в качестве приложения выбирается браузер, на следующем шаге пункт "Получить содержимое веб-страницы" и в URL можно указать путь к http-сервису базы 1С с нужными параметрами. У меня так Сири по голосовым командам дома свет включает/выключает.
Fox-trot; +1 Ответить
37. SeiOkami 3515 02.09.20 18:06 Сейчас в теме
Ждём интеграции с Яндекс колонкой. Чтобы можно было надиктовывать настройки для СКД, и слушать в ответ результат отчета
38. pavel_pss 290 26.04.21 14:30 Сейчас в теме
по сути, посмотрев эту cf ты просто сделал http сервис, который не понятно откуда получает входящие данные , обрабатывает их и возвращает ответ. Может я не совсем внимательно читал статью, и не особо разбирался и пунктами до №4, но откуда и как получить эти входящие данные, а именно как заставить алису передать данные в твой http сервис я не понял.
Оставьте свое сообщение