> For the complete documentation index, see [llms.txt](https://chatme-ai-4.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://chatme-ai-4.gitbook.io/docs/poshagovye-instrukcii-po-sozdaniyu-shablonnykh-botov/sozdanie-bota-s-integraciei-s-servisom-pogody.md).

# Создание бота с интеграцией с сервисом погоды

В Платформа реализована возможность интеграции Бота с внешними системами, которые предоставляют открытый API, например, с CRM или другими сервисами. В статье [Создание простого бота-опросника](/docs/poshagovye-instrukcii-po-sozdaniyu-shablonnykh-botov/sozdanie-prostogo-bota-oprosnika.md) мы уже научились создавать простых кнопочных ботов. В этой статье мы научимся созданию бота с интеграцией с сервисом погоды. По аналогии вы сможете делать интеграции Бота с CRM.

### Термины, используемые в статье

Внешний запрос — запрос из Платформа в какую-либо внешнюю систему.

Контекстная переменная — переменные, хранящиеся в Чате и доступные для чтения и изменения системой по заложенной в Сценарий агента или Платформа логике.

Пользовательские контекстные переменные — Контекстная переменная, которые создаются пользователем.

### Создание Внешних запросов

Первым делом необходимо создать Внешний запрос — это функционал, позволяющий Агенту обращаться во внешние системы по API. С помощью них мы будем отправлять данные в сервис погоды и получать необходимую в Сценарий агента информацию.

1. Зарегистрируйтесь в сервисе погоды по адресу <https://home.openweathermap.org/users/sign_up>. Этот сервис позволяет делать до 1000 обращений к API в день бесплатно.
2. Нужные нам запросы находятся по адресу <https://openweathermap.org/api/geocoding-api#direct> — этот запрос позволяет найти координаты города, и <https://openweathermap.org/api/one-call-3#current> — этот запрос позволяет узнать погоду по координатам места.
3. Зарегистрируйтесь на Платформа или войдите в уже существующий аккаунт по ссылке <https://admin.chatme.ai/>. Вы окажетесь на странице Папок вашей Компания. Подробнее о регистрации и авторизации: Регистрация и авторизация на Платформе.<br>

   <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-kDyCePVFd4/6774e349d74ac9d3d2aca886a6bcd808e3bbe3e16572f8c0ae0d1d478f5ff9ff7696e7ac9168011a204f3a485a543a28c737809693034f04ac9870b7eaf27bc1f24775bced4b826a3e176381e4344c3f81657ef8568318a4af132a37b47a6f58843265e3" alt=""><figcaption></figcaption></figure>
4. Создадим первый Внешний запрос. Для этого перейдите на Вкладка Ресурсов, нажав кнопку Resources на верхней панели.\
   ![image.png](https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-2HcpbNjiT9/f854a65dd6010869af679fbec136c85c1a6cf9c22679ab4215f086aaca9dc87a345f8f63a14ce16ea1fcd9afe34006982849f6d1cdc05fd45c64e99946332530688726e6247e03986e3b6ca9e3a009415f99b707c7ea2264575cc72d8962a1688d551326)
5. Зайдите в раздел с Внешний запрос. Подробнее о вкладке: [Вкладка внешних запросов — External Requests](/docs/proekty-na-platforme/proekt-i-ego-soderzhimoe/agenty-na-platforme/obzor-konstruktora-scenariya-agenta-i-vkladok/vkladka-vneshnikh-zaprosov-external-requests.md).<br>

   <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-58PqaLdfAM/2c4214d063cb56a709531dce72ae528c0d86bbdd6f4f872f5eddde6c8ac67a67e074433d3a3d29f11f3ded77e75ea0b67387dd7439b092a776dd346b3a9aa8b3afd4ff78980dbb1b287178e5456a63d71891f3f6452852ba364d48ef42a644c222530f9f" alt=""><figcaption></figcaption></figure>
6. Создайте новый Внешний запрос, нажав кнопку Create new.<br>

   <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-ClTTSkiYwC/e02b2fbeedb4e706cf1da7ccd36fc96c36c4143f303ac5eb65d7cd914eaf963753047d8d0168dbec54da626c6f94ce3645bd4a64699cf541ce817ed82387ed0d200c2898691df6c4b590b8072fbf00564341efda93b5bdc6259dde1a2ea782017827ba94" alt=""><figcaption></figcaption></figure>
7. Задайте ему имя “погода”, метод запроса оставьте GET, а в поле Endpoint (это URL-адрес, куда будет отправляться запрос) пропишите {{ url }} — так указываются Пользовательские контекстные переменные в этом поле. О том, что такое Контекстная переменная и какие они бывают: [Контекстные переменные чата](/docs/sostoyanie-obsheniya-tochka-v-scenarii-agenta-v-kotoroi-agent-nakhoditsya-v-tekushii-moment.-sostoya/kontekstnye-peremennye-chata.md). О том, что такое Пользовательские контекстные переменные как корректно задать для них имя: [Пользовательские контекстные переменные](/docs/sostoyanie-obsheniya-tochka-v-scenarii-agenta-v-kotoroi-agent-nakhoditsya-v-tekushii-moment.-sostoya/polzovatelskie-kontekstnye-peremennye.md). Позже мы создадим эту Контекстная переменная в Сценарий агента нашего Агента.<br>

   <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-HrG15pMAkh/02d326603d4244d923d565c0b38edb0270b0b17474ccc10446d5d5609df13c89e94c0e261f6753b8bb2f77f6e7a9d083ecb4a54c9f88e888d294f7ca8e73ea703a9ef64aa858bc3477b4698f6ad98c07fe53a3d12714a5cdcbcfa33266862448899d015e" alt=""><figcaption></figcaption></figure>
8. В Платформа существует Лимит на размер получаемого тела в ответ на Внешний запрос — если тело ответа превышает лимиты, то в переменную raw\_response, которая содержит ответ внешней системы на Внешний запрос, записывается не ответ, а текст ошибки. Чтобы получить текст ответа, необходимо настроить его парсинг — записать его в Пользовательские контекстные переменные — на вкладке Response. Для этого перейдите на вкладку Response, предназначенную для парсинга ответа на запрос, и задайте в поле Variable значение result, а в поле Value — значение {{ body }}. Таким образом, все тело ответа будет сохранено в переменной result и будет доступно для использования в Сценарий агента Агента. Подробнее о парсинге на вкладке Response: [Вкладка внешних запросов — External Requests](/docs/proekty-na-platforme/proekt-i-ego-soderzhimoe/agenty-na-platforme/obzor-konstruktora-scenariya-agenta-i-vkladok/vkladka-vneshnikh-zaprosov-external-requests.md)<br>

   <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-GCspklL0nZ/89b6dc8cab0da42bec417c1658a47a131aeab8cae9275ed75fbfa43a4ea5572e097e794c7c4b301f892fc8e70f5cb25742a71cc1fd401b69629eb1a0c0ae7b671e279d5848a63b7a0c53ad1307f14268e3107891396154de4f82a5cfe8f6d43ad0bb25de" alt=""><figcaption></figcaption></figure>
9. Сохраните запрос, нажав кнопку CREATE.
10. Создайте еще один Внешний запрос, нажав кнопку Create new. Задайте ему имя “погода 2”, метод запроса оставьте GET, а в поле Endpoint пропишите {{ url2 }}. Позже мы создадим эту Контекстная переменная в Сценарий агента нашего Агента.<br>

    <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-z0LzzLeh3x/dc4c4c3e6d9f3a47aad84eb75440986dd97145430a8006300825724071cd54d97161a1c5cd2541224f8d77e241f76353a3784dc4641cb362b7d951fd29532bb57e39db89f298baafd9eb8b3e4ebc4a7c02ba1cc24e1d187100f2ffcf8a1a559d1a0fa67f" alt=""><figcaption></figcaption></figure>
11. Перейдите на вкладку Response и задайте в поле Variable значение result2, а в поле Value — значение {{ body }}, чтобы сохранить все тело ответа в переменной result2 и использовать его в Сценарий агента Агента.<br>

    <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-cHzPFlp-W9/439c44796b656f05c3746b57a4489be688875c5edc2e0f0470ac1b3021d830c7f5781d766baeb3badc298a76f6ca1fa342290059b2ab4c0396ff423fc518b4d903dd42497a9aad14a3f68baa83612ebaf8fe51ae6c027d1731829fa188e125ada5cbd0eb" alt=""><figcaption></figcaption></figure>
12. Сохраните запрос, нажав кнопку CREATE.

### Создание Сценария Агента

Внешний запрос готовы, теперь необходимо создать Агента и его Сценарий агента.

1. Перейдите на вкладку Папкаов, нажав кнопку Dashboard на верхней панели.\
   ![image.png](https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-PRvSqqUFG1/9167884c017aaa66e6cc6843e9ba0f00b7f58210410076dc2eb8aec7ecd3a8bbb8631a3b444f5f7e529a88eacbd144976943ab3e05634d5c6f02434b88c1e12dfe81550fa8b75e3ef9d0ec6ed19ebca6442a18a758b7afd424d823b450b292dd68e855f3)
2. Создайте нового Агента, как описано в статье [Создание простого бота-опросника](/docs/poshagovye-instrukcii-po-sozdaniyu-shablonnykh-botov/sozdanie-prostogo-bota-oprosnika.md).<br>

   <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-Pcnz8rK4dh/9fde97d78c990a224b9d8ac7e2fccae8a67e523efedbbee10f5eb505fc5d2dcb73319241cdc21396941b9687bdacde52280d2291e05149050de553f13d7913fc682fe1840754d13158c4828fb1a6971fbc23f76755c6bb6f1101802bbc4475ed00b01b89" alt=""><figcaption></figcaption></figure>
3. Перейдите в БотБилдер Агента и создайте Слот Text с текстом “Привет! Я бот-метеоролог, я могу сообщить тебе погоду в любом городе. Хочешь попробовать?”.<br>

   <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-znbVbM-Knm/8269a2fbe40c9d4c130b17e10ccaea1e4a7aae28998a405bca28c0995f6a0aedb542582067463a39092ef3deea236c6bab6e62d0334f988f1426c2d4bd2a3f2171755b8d271dffc49687729dd3b12b421ffe42a72e871115d7b16669fa6e2595276c3122" alt=""><figcaption></figcaption></figure>
4. Далее добавьте кнопки “Да” и “Нет”.<br>

   <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-NhU69p1vo9/79435f500f2548f08ffee5094d6d364ea30f09eb73f36a0a7560b81949618c9affe12eecd0c5ec5c435e0cb68934959e36c34e80f3be28cb275815c6336ebc33e8f447d76b4d6e3f8cbafdcfc28754ebcbf289cffa708ed67fd436a2998bc123a567da4f" alt=""><figcaption></figcaption></figure>
5. После кнопки “Нет” добавьте Слот Text с текстом “Ты можешь вернуться в любой момент.” и Слот Wait For Reaction.<br>

   <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-oSBvpwlH0X/b068bea82ff81b85c0dc798d745638d7bd334b7e674b82c789d6ae6962bad2fad3d568a77923275e6c3c9e9847b3880b69844592730958c03cd85d1dfcd7c24c55b883181192abc923f9a43d68ffbae9d8b8266fb6dfcd0fc4a51a4b4583cd68ba8fba1a" alt=""><figcaption></figcaption></figure>
6. После Подслота fallback добавьте Слот Text с текстом “Пожалуйста, выбери одну из кнопок.” и Слот Jump с переходом обратно в кнопочное меню.<br>

   <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-tMjacRoJ-m/b51612ca9a9b6126008681d7695a0455de36950345da2b774a3401f7861c2c9141b6a2fb780ec0a8e65d95c3f0a6e9b793cadcd529603b7290c097373069465e23b073e0e917f792d92abb0944f5782414d2b054347a8c7be679cf835928f1b2ad920ae8" alt=""><figcaption></figcaption></figure>
7. После кнопки “Да” добавьте Слот Text с текстом “Тогда напиши название города.” и Слот Wait For Reaction.<br>

   <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-UH0RQfKoaw/7c161e2541bda94f02eacac63f030ffa97a8ab48c188f9a786854e9483feee179e096de5d5b43c9e67f0a21b122518a2ef58b2f54e458bef493d0b72531291cfa2dba99ebd9bf34540a49e75acd000d5afeb4c49e6169fec94650288f334f58e22a2499f" alt=""><figcaption></figcaption></figure>
8. Затем добавьте Слот Memory — этот Слот позволяет записывать данные в Пользовательские контекстные переменные. Подробнее о Слоте Memory: [Создание и сохранение переменных контекста | Слот Memory.](/docs/proekty-na-platforme/proekt-i-ego-soderzhimoe/agenty-na-platforme/kak-postroit-scenarii-agenta/kak-sozdavat-i-nastraivat-sloty/sozdanie-i-sokhranenie-peremennykh-konteksta-or-slot-memory.md)<br>

   <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-ayoG9LM4cv/ea10a7bbd33b044b669ce9dcd19d660987d5f479ec32c98e1910ebdd316ec7fcd702bb32175f501178f358b997e8139834ecfa03c2366bf8fec03cb34250e022244b73974a37154d88b746a993895a3ecbd3dc068e87373482a5f34577adc267d00d1bbc" alt=""><figcaption></figcaption></figure>
9. Найдите ваш ключ API key, перейдя по ссылке <https://home.openweathermap.org/api_keys>, и скопируйте значение из поля Key.<br>

   <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-jMP28pyBl-/e65d84ce0896c55e7941be8e6189b5225aa91f1cce65929cf00b8703b3ca4cccc86aaa311ad123aa245aed16bedb8e276b64058fcb5b04bd629b8acc2521d19d8908e711e1b71ca1480322fd1efb54204768bb20507f99323984dde1a06c2c00adcafed3" alt=""><figcaption></figcaption></figure>
10. В данном Слоте Memory будет составляться Endpoint для первого из наших Внешний запрос. Формат URL-адреса для первого запроса следующий: **<http://api.openweathermap.org/geo/1.0/direct?q={название> города}\&appid={API key}**. Нам необходимо составить URL-адрес, подставив туда название города, введенного Собеседником и наш личный ключ API key.
11. 1. Задайте Слоту имя “составление url для запроса”.
    2. Пропишите в поле Key значение url, в  поле Value — значение '**<http://api.openweathermap.org/geo/1.0/direct?q=\\{{> client\_message }}\&appid=API key**', где API key — это значение ключа из предыдущего шага, а {{ client\_message }} — это Контекстная переменная client\_message, которая содержит сообщение Собеседника. Контекстная переменная для подстановки в Слоте Memory указываются именно в таком формате — обрамленные двумя фигурными кавычками. Все значение поля необходимо заключить в кавычки, чтобы оно записалось в переменную в качестве строки. Таким образом будет составлен URL-адрес для первого запроса и сохранен в Контекстная переменная url, которую мы ранее уже указали в Внешний запрос в качестве Endpoint.
    3. Сохраните Слот.<br>

       <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-oTxFByU-lq/cf0d3f31472c97c1e345643eb2bd614c4c8002c5bf845de6699f0c8fc97d2b929e0e34d6d4735a3271d7b1ecd9bf035e6ac709f7372d46421d30d7c1a0daa66b7352051e95a33c4ae55d930ee2f62e7b1dba919a433c1315a8dd1f16d805afa2db1d91f5" alt=""><figcaption></figcaption></figure>
12. После Слота Memory добавьте Слот External Request — с помощью него будет происходить интеграция с сервисом погоды. В нем пропишите в поле Name название “получение координат”. В поле Request выберите Внешний запрос под названием “погода”.<br>

    <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-tSwFs0N2KH/36d7fde9766d916323b357d6da05b389239997b8ee90ce33f4ae781dc36b8669b8d0c98ece7ed5251ad73389241cd8ed2e183b33a9849970189f0498fc7514f7b400bd73eadd6c98816c086e8c5a3b67fdbca372b63812a6de8f25a8d667f0b4b72f398d" alt=""><figcaption></figcaption></figure>
13. Если Собеседник укажет несуществующее название города, мы получим пустой ответ от сервиса погоды, т.е. Контекстная переменная raw\_response будет иметь значение \[]. Мы используем это в Сценарий агента, чтобы предложить Собеседнику ввести другое название. Для этого добавьте после Слота External Request Слот Transition Rule — он позволяет делать разветвления Сценарий Агента в зависимости от указанных условий. Подробнее: [Разветвление сценария в зависимости от условий | Слот Transition Rule ](/docs/proekty-na-platforme/proekt-i-ego-soderzhimoe/agenty-na-platforme/kak-postroit-scenarii-agenta/kak-sozdavat-i-nastraivat-sloty/razvetvlenie-scenariya-v-zavisimosti-ot-uslovii-or-slot-transition-rule-i-pod-slot-condition.md)и под-слот Condition. Задайте Слоту имя “проверка города”.<br>

    <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-NWnnql6rjg/dfb8862dd70134ec119ebe0cb17e9923d2a0a31a97ce709d143bed9f8877dfefe022018458672ac41d5e6b5854f5bcec4f42b7142af03aa52f1e55a04ffd5dbeb382950780c116830e11b0f62e56cd8dea9837cc4d8143eeecc4b6125c7352e604f645ff" alt=""><figcaption></figcaption></figure>
14. При создании Transition Rule будут автоматически созданы два Подслота condition, эти Подслоты содержат в себе условие, при значении true которого, Агент перейдет в Ветка сценария, идущую после этого Подслота condition.<br>

    <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-HAAP81MQkn/1362907162226be8cbf357f63bc83b57f2e99f3cca23d21c9bf18a0476da611477ea11c555b5c1bd32e2f030a6ea12f4c06bc3c3eceef11ced1d6a92cae3f87c1836c7c8c59d9ca4c4746049f270c207e8e71722f40d323530cfaf5221cc6fc7901417c9" alt=""><figcaption></figcaption></figure>
15. Нам необходимо проверить, содержит ли Контекстная переменная raw\_response значение \[]. Для этого откройте Подслот со значением main и пропишите в нем в поле Condition условие {{ raw\_response == '\[]' }}. Поле Name очистите, тогда в Дерево сценария на Подслоте condition будет отображаться выражение из поля Condition.<br>

    <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-wQmpxDQpGo/c3b3d4ed4b4e50c4f1ba9294a06062573b68e13ac26def2d16fcb23e95b992fc35fb7dd668f4745f88dc0145229383d64f114de007caa70e12735a477b79c1ea325c1ba2bd11869e985200597247fd381833b412584fae5b798aa2ca656907111c13d8fa" alt=""><figcaption></figcaption></figure>
16. После данного Подслота добавьте Слот Text с текстом “Я не знаю такого города. Пожалуйста, введите другое название.” и Слот Jump с переходом в Слот Wait For Reaction, где Агент ожидает получить название города.<br>

    <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-TInsHu-zAL/ffb9cf557243796687dcdad99821f0631937ad981dc92ded037d8cd62cdd029e313d3dd258b18340d003397811611d60404b2dde475ad40a6e5ae5689b8d27aaed31525dade3d5a69d7a32491030cef16d0987becb9daa10c69777402e8a2865785e9ebf" alt=""><figcaption></figcaption></figure>
17. Если город будет найден в сервисе погоды, то будет получен ответ формата:
18. \[  {     "name":"название города",     "local\_names":{        названия города на доступных языках     },     "lat": широта,     "lon": долгота,     "country":"код страны, где находится город",     "state":"название страны,  где находится город"  }]
19. После Подслота condition с названием FALLBACK\_CONDITION поставьте Слот Memory, где из полученного от сервиса ответа будут извлекаться координаты города, необходимые для получения информации о погоде в нем.
20. 1. Задайте Слоту имя “сохранение координат”.<br>

       <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-80eljlrEGc/7d3ea59b99d656b33a331ee22ee5825fcbf9421ff3ea17eaf4bc3ab537df94c956580fb1e353c90b3bad4dbd8ec597ee155384940a85089b84b4bb6722455e75fc092d93d88001e6a70b94926f51557e9dd554920d9e232c64e068dcdafd8356e5dc8941" alt=""><figcaption></figcaption></figure>
    2. Пропишите в поле Key значение lat, а в поле Value — значение {{ result\[0].lat }}.<br>

       <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-CRhaR0m57C/01ba200f4ae65e204128313690a1aa50596447b98889727c799a40c852d39beba0c53b8e5b73b564be3ee1306c51496a2f619d0187d728566877177ce05d2022fd85ae4131b6d998489f52e7516feb095be8cff4660f2597c4b113f6dffa2c2245e1ed2c" alt=""><figcaption></figcaption></figure>
    3. Затем добавьте еще одну пару Key - Value, нажав кнопку Add new field.<br>

       <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-7PCu0Hlfi3/5bccce988356621fef69d02bc54c1274822a49a424475baaebd459bff8ef493448cd8be895f0756564698daefcedb0aa3d54dea039c1fe2c96e51e26622d416df9b7bd113573e367a161ae5f824e1900306efc342e33267069ac2dcd32863863ac81ddc2" alt=""><figcaption></figcaption></figure>
    4. Пропишите в поле Key значение lon, а в поле Value — значение {{ result\[0].lon }}.<br>

       <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-GWLCDRjetk/746fd7e75efc3bb9638e35b901eef782823d9cf6c2e2de24f7ffb2ec97969413b1f77d2daba2205c1a7310ae9e64cee4e85c1ae5d9491598bfdea9d76739cc24b361cfa916a2200531e1653cdc94e855d8fa6870d8f4f8657e85682fce14d4e487cca98a" alt=""><figcaption></figcaption></figure>
    5. Так задаются обращения к первому элементу массива result (нумерация элементов массива начинается с нуля) и содержащимся в нем переменным  lat и lon — значениям широты и долготы. Подробнее о синтаксисе Платформа: [Синтаксис](/docs/proekty-na-platforme/proekt-i-ego-soderzhimoe/agenty-na-platforme/sintaksis.md).
21. В этом же Слоте мы можем собрать и Endpoint для второго Внешний запрос. Формат URL-адреса для второго запроса следующий: <https://api.openweathermap.org/data/2.5/weather?lat={lat}\\&lon={lon}\\&appid={API> key}. Нам необходимо составить URL-адрес, подставив туда координаты города, введенного Собеседником и наш личный ключ API key.
22. 1. Добавьте еще одну пару Key - Value. Пропишите в поле Key значение url2, в  поле Value — значение '<https://api.openweathermap.org/data/2.5/weather?lat=\\{{> lat }}\&lon={{ lon }}\&appid=API key', где API key — это значение ключа из шага 8, а {{ lat }} и {{ lon }} — переменные с координатами. Таким образом будет составлен URL-адрес для второго запроса и сохранен в Контекстная переменная url2, которую мы ранее уже указали в Внешний запрос в качестве Endpoint.<br>

       <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-p3wUb3OSAL/971dcf90435e7c3e9aac76620e99cbb7274b2569d0365714bb75a4c1165292fcf080859575dc42b55a18840ec7fb875df0bd366e8bd898458c2d62a1ef68a3fdaea3e9d8c402babb4839f43b35c0d68a867e89c431ed5ba0f91413302aaf9e9978f8e3d7" alt=""><figcaption></figcaption></figure>
    2. Сохраните Слот.
23. Далее создайте Слот External Request с названием “получение погоды”, выберите в нем Внешний запрос “погода 2”.<br>

    <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-2N-L1mAkPG/31013d05bf4b0be84d49252b00c951983a1c1337e574a336849f2cf8ef5f7223e390f59fdb295515dda88268bb3cf9344c8e4d96a62f224c5d837f7709fbb6c6ea0708314b28e1a2d3522ab50cc46322b9aee36d85694780dbfe0a3a052efb5e51ef9afd" alt=""><figcaption></figcaption></figure>
24. В ответ на запрос мы должны получить ответ следующего формата (ответ имеет формат данных — Словари) :&#x20;

{

&#x20;"coord": { &#x20;

координаты города&#x20;

},&#x20;

"weather": \[  &#x20;

&#x20;{     "id": 501,   &#x20;

&#x20;"main": "погода",    &#x20;

"description": "описание погоды",   &#x20;

&#x20;"icon": "10d"  &#x20;

}&#x20;

],&#x20;

"base": "stations",&#x20;

"main": {  &#x20;

"temp": фактическая температура в Кельвинах,  &#x20;

"feels\_like": ощущаемая температура в Кельвинах,  &#x20;

"temp\_min": минимальная температура в Кельвинах,  &#x20;

"temp\_max": максимальная температура в Кельвинах,  &#x20;

"pressure": атмосферное давление,  &#x20;

"humidity": влажность воздуха,  &#x20;

"sea\_level": атмосферное давление над уровнем моря,  &#x20;

"grnd\_level": атмосферное давление над уровнем суши&#x20;

},&#x20;

"visibility": видимость в метрах,&#x20;

"wind": {  &#x20;

данные о ветре&#x20;

},&#x20;

"rain": { &#x20;

данные об осадках&#x20;

},&#x20;

"clouds": {&#x20;

&#x20;данные об облачности&#x20;

},&#x20;

"dt": 1661870592,&#x20;

"sys": { &#x20;

системные параметры&#x20;

},&#x20;

"timezone": часовой пояс,&#x20;

"id": 3163858,&#x20;

"name": "название города",&#x20;

"cod": системный параметр

}         &#x20;

21. Агент будет выводить Собеседнику данные о температуре. Для этого добавьте после Слота External Request Слот Memory.
22. 1. Дайте Слоту название “сохранение погоды”.<br>

       <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-ZERNuP7Z_3/fed1e6771f25fe4f9a475e8769c93f20f7d84dbc7f55cd21cf1a5afeeece83c52ed2428ff73510235b52141f3b72d7f1bc616a9babc4159798f272752eeb2b647a2edabfcd4d30e4ea4b5893be70fe15849aae2550318dd1e548dfcdc967a437164bdd0c" alt=""><figcaption></figcaption></figure>
    2. Для начала сохраним значение элемента "main", который содержит данные о температуре, в переменную. Ответ сервиса содержится в переменной result2, которая имеет формат словаря. Обращение к элементу словаря происходит через квадратные скобки с указанием названия элемента. Пропишите в поле Key значение “var1”, а в поле Value — значение {{ result2\['main'] }}.<br>

       <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-PWHNYoavQ-/85845df4406c038b1a6aa03ff6723641a5b088bae482ff592c073889cc7720a31390e93e2b266ca5e678793ef8abc39fef617bb8516600dec0017955af06462437e7e7b3a11e6381f1ba2d25c16c9482a8ecf9992d2819c2b7550e59c42077db95778e05" alt=""><figcaption></figcaption></figure>
    3. Далее сохраним значения фактической и ощущаемой температуры воздуха. Для этого добавьте еще две пары Key - Value. В полях Key пропишите значения var2 и var3, а в полях Value — {{ var1\['temp'] }} и {{ var1\['feels\_like'] }} соответственно.<br>

       <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-QnZp6_OIq6/c1b0cc73650d6f64b30390ef142b1e732cf86f563950bd34f7e9da954b4a94741d3c99c82e2cf45c29354123fa32183288c9209f2cb61d7ccd252b8f1530653bd7bc6230d3003dc23d1a726b8a09e50c1db2f50f520835bd4ae94ef1e36d55a8e545a52b" alt=""><figcaption></figcaption></figure>
    4. Поскольку сервис возвращает данные о температуре в градусах Кельвина, переведем их в градусы Цельсия. Температура в градусах Цельсия вычисляется по формуле {температура в градусах Кельвина}-273.15. Добавьте еще две пары Key - Value, в полях Key укажите значения “temperature” и “feels\_like”, а в полях Value соответственно {{ var2 - 273.15 }} и {{ var3 - 273.15 }}. Подробнее о математических операциях в синтаксисе: [Математические операции](/docs/proekty-na-platforme/proekt-i-ego-soderzhimoe/agenty-na-platforme/sintaksis.md).<br>

       <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-ORrq6K8tvc/5e5d504e0f47035bf8011b5f5be51a8b41f80b0c6effb624de758249dcd376f8d2bdee0253395aea199a6036f249522e67dcf12b46015398299aac833c9ecedfe819ab97fa3f48eee871e562b611ccba38cfc1ab32763a9f0127d43e9da3ac7ad41da0ee" alt=""><figcaption></figcaption></figure>
23. После Слота Memory добавьте Слот Text с текстом “Температура в городе {{ client\_message }} на данный момент {{ temperature }} ºC. Ощущается как {{ feels\_like }}ºC. Хотите попробовать с другим городом?” и Слот Jump с переходом в кнопочное меню.<br>

    <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl--knS7aVb9X/60082b79e2cea20ddb52e9fdda37566367862adfebe69ee959da77b3748839104c2f7889b3b7be16b7eb477abc383450eeab675c81e0ab68ce69869212a1046b58663622a2e81baaf9828a2c4e60f6f9e66240cef6ee10597dbe92faa6bb5e0ab806479a" alt=""><figcaption></figcaption></figure>
24. На этом создание Сценарий агента Агента закончено. У вас должен получиться следующий Сценарий агента:<br>

    <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-Ood_P4es7o/7ee87e0d2155d8da980444d50531789ef23e92db7a5cbae8a6cd6814bcd61e7098a98de5b9d4a288d76c67ab26881608c17ca86c2aa63e05c3b24b936470e49171237bab8f790b2eb322f786d84118947fac60f9590129dc626f9a5d3cef544874600e2e" alt=""><figcaption></figcaption></figure>

### Обучение и тестирование Агента

После создания Сценарий агента Агента необходимо обучить Агента и протестировать его Сценарий агента.

1. Обучите Агента, нажав кнопку TRAIN, расположенную в правом верхнем углу БотБилдера. После этого начнется процесс Валидация сценария, по окончании которого, если Сценарий агента соответствует требованиям, то Агент будет обучен. В противном случае Валидация сценария завершится неудачно и в правом нижнем углу появится текст ошибки. Подробнее: [Требования для успешного обучения Агента](/docs/kak-obuchit-i-protestirovat-agenta/trebovaniya-dlya-uspeshnogo-obucheniya-agenta.md)<br>

   <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-yYwWueUqHa/d4510f7c98c5c5cb14248f09abb60d460f2a2bc2bc6ece7a9b7132d1b866a794055e0d00f863d984c65317a0672d9270f967dc5baeabd3750843c3ecd1aa312773afd10b9fce00fc4e90a4276842a791a633735557329489e2f7947d64eb9a3d529edb63" alt=""><figcaption></figcaption></figure>
2. Если в Сценарий агента будут обнаружены ошибки, найдите проблемные места Сценарий агента с помощью информации в статье Требования для успешного обучения Агента и исправьте ошибки. После этого снова обучите Агента.
3. После успешного Обучение Агента откройте Дебаг виджет, нажав кнопку Debug.<br>

   <figure><img src="https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-68aSprGM8B/55b392e5e00fcfd5db62bcf5074991017f307920ec26bb68eb8066d8057f15e53fb5c4badb4d4b39d7cc2b581fa9a2567087d71b945aff69377bfb23282c0808f46ce7e950f52255b9a868cfed9e1cc8526fb026eee123ac6e978657c08bebca69e81266" alt=""><figcaption></figcaption></figure>
4. В открывшемся Дебаг виджете напишите что-нибудь Агенту, чтобы начать Сценарий агента.\
   ![image.png](https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-86BaeddFGc/90ede1de6fb10282e00768a926cd25fc6200267fb20ad96eb8f47a28c08c57c8df6ae90a8f32068868c05c953418e1fc12277233e061f7543d94db5fd08dfd50d020295a4174c3173238af057969bae398315bbf05d740c21ede9ad74d1205256c12c7ce)
5. Пообщайтесь с Агентом, пройдя все шаги Сценарий агента, попутно проверяя, что в текстах нет ошибок и логика Сценарий агента верна.
6. Если вы обнаружите ошибки, исправьте их, не забывая переобучать Агента после каждого изменения, чтобы оно вступило в силу. Если же все корректно — поздравляем, ваш Агент готов!

### Вывод Агента в Telegram

После того, как Сценарий агента Агента собран и протестирован, давайте выведем Агента в Telegram.

1. Воспользуйтесь статьей Telegram для создания Бота в Telegram и подключения в него нашего тестового Агента.\
   ![image.png](https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-gyve_54Am5/ef843753bff5e191779018a7ac3f57dfb9aaf220e9853ecd1542476630f077fbf8b99485cbd73d205cf2b60ad247deeb145b5f170bbbf86271aee7fa48e4bbd4df23a9f52bee0a249afdc527f88c9586a61cb5e05999c1e3885ab8b5a2a1cc81fdd8bc38)![image.png](https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-ceMNR09C7G/6cbe3705531b005bd0732e6600766cbe047e95efac93898dbdacfb84011e9275035f0d623a7b0f6ba89078a9c1adacb282a90100d798d05cd7a698b485506d4dd0f26bda820bbbe994034712b44e8c50092c3e9b089504cacfa7c9139539136712865625)
2. Перейдите в вашего только что созданного Бота в Telegram и протестируйте его работу в мессенджере.\
   ![image.png](https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-VdTkyU0Ndm/a4a3dd23fd0fec4d66543f43abc8d9f6a69749595e9a6728389d7cc2389d8896d16a1bb70fbf7cb5871d1a6004deb9083e0ffa440f8d7d7cd710adbcf51a2289329bc81fff2945feb7cec1da9e95f73bda31cfd711458329cd5b0bd6c28fcb1da9ebfbf9)

Итак, наш Агент создан, протестирован и готов к общению в Telegram!

{% file src="/files/WYI9vdhGi0D7UjjZqRyQ" %}
