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

В Платформа реализована возможность интеграции Бота с внешними системами, которые предоставляют открытый 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" %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://chatme-ai-4.gitbook.io/docs/poshagovye-instrukcii-po-sozdaniyu-shablonnykh-botov/sozdanie-bota-s-integraciei-s-servisom-pogody.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
