[{"data":1,"prerenderedAt":2802},["ShallowReactive",2],{"navigation":3,"/ru/api":268,"/ru/api-surround":2797},[4,150],{"title":5,"path":6,"stem":7,"children":8,"page":61},"EN","/en","en",[9,16,62,70,95,110],{"title":10,"path":11,"stem":12,"children":13,"icon":15},"API","/en/api","en/api/index",[14],{"title":10,"path":11,"stem":12,"icon":15},"i-lucide-code",{"title":17,"path":18,"stem":19,"children":20,"page":61},"Use cases","/en/cases","en/cases",[21,26,31,36,41,46,51,56],{"title":22,"path":23,"stem":24,"icon":25},"Call from your site using the SDK","/en/cases/call-from-site-sdk","en/cases/call-from-site-sdk","i-lucide-phone-call",{"title":27,"path":28,"stem":29,"icon":30},"Connect Voximplant","/en/cases/connect-voximplant","en/cases/connect-voximplant","i-lucide-plug",{"title":32,"path":33,"stem":34,"icon":35},"Embed the widget","/en/cases/embed-widget","en/cases/embed-widget","i-lucide-layout-template",{"title":37,"path":38,"stem":39,"icon":40},"Inbound Call Handling with Telegram Notifications","/en/cases/inbound-telegram","en/cases/inbound-telegram","i-lucide-phone-incoming",{"title":42,"path":43,"stem":44,"icon":45},"Prompting","/en/cases/prompting","en/cases/prompting","i-lucide-pencil-line",{"title":47,"path":48,"stem":49,"icon":50},"Monitor agent quality","/en/cases/quality-monitoring","en/cases/quality-monitoring","i-lucide-activity",{"title":52,"path":53,"stem":54,"icon":55},"Build a sales agent","/en/cases/sales-agent","en/cases/sales-agent","i-lucide-shopping-bag",{"title":57,"path":58,"stem":59,"icon":60},"State, context, secrets","/en/cases/state-context-secrets","en/cases/state-context-secrets","i-lucide-key-round",false,{"title":63,"path":64,"stem":65,"children":66,"icon":69},"Getting Started","/en/getting-started","en/getting-started/index",[67],{"title":68,"path":64,"stem":65,"icon":69},"Getting started","i-lucide-rocket",{"title":71,"path":72,"stem":73,"children":74,"page":61},"Legal","/en/legal","en/legal",[75,80,85,90],{"title":76,"path":77,"stem":78,"icon":79},"Contacts","/en/legal/contacts","en/legal/contacts","i-lucide-mail",{"title":81,"path":82,"stem":83,"icon":84},"Offer","/en/legal/offer","en/legal/offer","i-lucide-file-text",{"title":86,"path":87,"stem":88,"icon":89},"Privacy policy","/en/legal/privacy","en/legal/privacy","i-lucide-lock",{"title":91,"path":92,"stem":93,"icon":94},"Terms of service","/en/legal/terms","en/legal/terms","i-lucide-scale",{"title":96,"path":97,"stem":98,"children":99,"page":61},"Pricing","/en/pricing","en/pricing",[100,105],{"title":101,"path":102,"stem":103,"icon":104},"Model pricing","/en/pricing/model-prices","en/pricing/model-prices","i-lucide-dollar-sign",{"title":106,"path":107,"stem":108,"icon":109},"Plans","/en/pricing/plans","en/pricing/plans","i-lucide-badge-dollar-sign",{"title":111,"path":112,"stem":113,"children":114,"page":61},"Product","/en/product","en/product",[115,120,125,130,135,140,145],{"title":116,"path":117,"stem":118,"icon":119},"Agent","/en/product/agent","en/product/agent","i-lucide-bot",{"title":121,"path":122,"stem":123,"icon":124},"Charts","/en/product/analytics","en/product/analytics","i-lucide-line-chart",{"title":126,"path":127,"stem":128,"icon":129},"Companies","/en/product/companies","en/product/companies","i-lucide-building-2",{"title":131,"path":132,"stem":133,"icon":134},"Procedures","/en/product/procedures","en/product/procedures","i-lucide-list-checks",{"title":136,"path":137,"stem":138,"icon":139},"RBAC","/en/product/rbac","en/product/rbac","i-lucide-shield",{"title":141,"path":142,"stem":143,"icon":144},"Simulations","/en/product/simulations","en/product/simulations","i-lucide-flask-conical",{"title":146,"path":147,"stem":148,"icon":149},"Tools","/en/product/tools","en/product/tools","i-lucide-wrench",{"title":151,"path":152,"stem":153,"children":154,"page":61},"RU","/ru","ru",[155,160,196,202,223,236],{"title":10,"path":156,"stem":157,"children":158,"icon":15},"/ru/api","ru/api/index",[159],{"title":10,"path":156,"stem":157,"icon":15},{"title":161,"path":162,"stem":163,"children":164,"page":61},"Кейсы","/ru/cases","ru/cases",[165,169,173,177,181,185,189,193],{"title":166,"path":167,"stem":168,"icon":25},"Звоним с сайта с помощью SDK","/ru/cases/call-from-site-sdk","ru/cases/call-from-site-sdk",{"title":170,"path":171,"stem":172,"icon":30},"Подключаем Voximplant","/ru/cases/connect-voximplant","ru/cases/connect-voximplant",{"title":174,"path":175,"stem":176,"icon":35},"Встраиваем виджет","/ru/cases/embed-widget","ru/cases/embed-widget",{"title":178,"path":179,"stem":180,"icon":40},"Входящие звонки с уведомлениями в Telegram","/ru/cases/inbound-telegram","ru/cases/inbound-telegram",{"title":182,"path":183,"stem":184,"icon":45},"Пишем успешные промты","/ru/cases/prompting","ru/cases/prompting",{"title":186,"path":187,"stem":188,"icon":50},"Контролируем качество агентов","/ru/cases/quality-monitoring","ru/cases/quality-monitoring",{"title":190,"path":191,"stem":192,"icon":55},"Делаем агента по продажам","/ru/cases/sales-agent","ru/cases/sales-agent",{"title":57,"path":194,"stem":195,"icon":60},"/ru/cases/state-context-secrets","ru/cases/state-context-secrets",{"title":197,"path":198,"stem":199,"children":200,"icon":69},"Начало работы","/ru/getting-started","ru/getting-started/index",[201],{"title":197,"path":198,"stem":199,"icon":69},{"title":203,"path":204,"stem":205,"children":206,"page":61},"Юридические документы","/ru/legal","ru/legal",[207,211,215,219],{"title":208,"path":209,"stem":210,"icon":79},"Контакты","/ru/legal/contacts","ru/legal/contacts",{"title":212,"path":213,"stem":214,"icon":84},"Оферта","/ru/legal/offer","ru/legal/offer",{"title":216,"path":217,"stem":218,"icon":89},"Политика конфиденциальности","/ru/legal/privacy","ru/legal/privacy",{"title":220,"path":221,"stem":222,"icon":94},"Пользовательское соглашение","/ru/legal/terms","ru/legal/terms",{"title":224,"path":225,"stem":226,"children":227,"page":61},"Цены","/ru/pricing","ru/pricing",[228,232],{"title":229,"path":230,"stem":231,"icon":104},"Цены на модели","/ru/pricing/model-prices","ru/pricing/model-prices",{"title":233,"path":234,"stem":235,"icon":109},"Тарифные планы","/ru/pricing/plans","ru/pricing/plans",{"title":237,"path":238,"stem":239,"children":240,"page":61},"Продукт","/ru/product","ru/product",[241,245,249,253,257,260,264],{"title":242,"path":243,"stem":244,"icon":119},"Агент","/ru/product/agent","ru/product/agent",{"title":246,"path":247,"stem":248,"icon":124},"Графики","/ru/product/analytics","ru/product/analytics",{"title":250,"path":251,"stem":252,"icon":129},"Компании","/ru/product/companies","ru/product/companies",{"title":254,"path":255,"stem":256,"icon":134},"Процедуры","/ru/product/procedures","ru/product/procedures",{"title":136,"path":258,"stem":259,"icon":139},"/ru/product/rbac","ru/product/rbac",{"title":261,"path":262,"stem":263,"icon":144},"Симуляции","/ru/product/simulations","ru/product/simulations",{"title":265,"path":266,"stem":267,"icon":149},"Инструменты","/ru/product/tools","ru/product/tools",{"id":269,"title":10,"body":270,"description":2790,"extension":2791,"links":2792,"meta":2793,"navigation":2794,"path":156,"seo":2795,"stem":157,"__hash__":2796},"docs/ru/api/index.md",{"type":271,"value":272,"toc":2765},"minimark",[273,278,282,305,411,415,423,428,431,436,564,569,715,722,726,734,737,741,746,772,777,804,808,856,861,864,869,896,901,918,922,954,959,997,1001,1005,1008,1184,1189,1208,1213,1244,1249,1268,1277,1281,1284,1292,1341,1349,1419,1426,1476,1484,1610,1618,1720,1731,1780,1784,1787,1793,1797,1821,1827,1831,1838,1868,1875,1889,1893,1896,1916,1920,1923,2177,2181,2186,2318,2323,2452,2456,2460,2463,2469,2472,2486,2601,2609,2657,2661,2664,2682,2685,2692,2720,2727,2730,2743,2747,2750,2761],[274,275,277],"h2",{"id":276},"варианты-api","Варианты API",[279,280,281],"p",{},"console поддерживает 3 способа запуска агентов через API:",[283,284,285,293,299],"ol",{},[286,287,288,292],"li",{},[289,290,291],"strong",{},"WebRTC"," - Для клиент-серверного взаимодействия (в приложении или на сайте)",[286,294,295,298],{},[289,296,297],{},"WebSocket"," - Для сервер-серверного взаимодействия (в телефонии, через прокси-сервер)",[286,300,301,304],{},[289,302,303],{},"REST"," - Клиент-серверное или сервер-серверное взаимодействие (только для чата)",[306,307,308,324],"table",{},[309,310,311],"thead",{},[312,313,314,318,320,322],"tr",{},[315,316,317],"th",{},"Функция",[315,319,291],{},[315,321,297],{},[315,323,303],{},[325,326,327,343,356,369,382,397],"tbody",{},[312,328,329,335,338,340],{},[330,331,332],"td",{},[289,333,334],{},"Реализовано",[330,336,337],{},"✅",[330,339,337],{},[330,341,342],{},"❌",[312,344,345,350,352,354],{},[330,346,347],{},[289,348,349],{},"Поддержка чата",[330,351,337],{},[330,353,337],{},[330,355,337],{},[312,357,358,363,365,367],{},[330,359,360],{},[289,361,362],{},"Стриминг",[330,364,337],{},[330,366,337],{},[330,368,342],{},[312,370,371,376,378,380],{},[330,372,373],{},[289,374,375],{},"Аудио",[330,377,337],{},[330,379,337],{},[330,381,342],{},[312,383,384,389,392,394],{},[330,385,386],{},[289,387,388],{},"Стейт",[330,390,391],{},"✅ На сервере",[330,393,391],{},[330,395,396],{},"❌ Клиент должен хранить 'interaction_id'",[312,398,399,404,407,409],{},[330,400,401],{},[289,402,403],{},"Авторизация",[330,405,406],{},"Временный token или API key",[330,408,406],{},[330,410,406],{},[274,412,414],{"id":413},"аутентификация-и-авторизация","Аутентификация и авторизация",[279,416,417,418,422],{},"Все API ключи следуют формату ",[419,420,421],"code",{},"sk_"," за которым следуют 32 случайных буквенно-цифровых символа. Ключи могут иметь опциональные даты истечения.",[424,425,427],"h4",{"id":426},"создание-ключа","Создание ключа",[279,429,430],{},"API ключи можно создать через веб-интерфейс или API:",[279,432,433],{},[289,434,435],{},"Через API (требует JWT аутентификацию):",[437,438,443],"pre",{"className":439,"code":440,"language":441,"meta":442,"style":442},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","POST /api/keys\nAuthorization: Bearer \u003Cjwt_token>\nContent-Type: application/json\n\n{\n  \"name\": \"My API Key\",\n  \"expiry_secs\": 2592000  // Optional: 30 days, null = immortal\n}\n","bash","",[419,444,445,458,481,490,497,503,525,558],{"__ignoreMap":442},[446,447,450,454],"span",{"class":448,"line":449},"line",1,[446,451,453],{"class":452},"sBMFI","POST",[446,455,457],{"class":456},"sfazB"," /api/keys\n",[446,459,461,464,467,471,474,478],{"class":448,"line":460},2,[446,462,463],{"class":452},"Authorization:",[446,465,466],{"class":456}," Bearer",[446,468,470],{"class":469},"sMK4o"," \u003C",[446,472,473],{"class":456},"jwt_toke",[446,475,477],{"class":476},"sTEyZ","n",[446,479,480],{"class":469},">\n",[446,482,484,487],{"class":448,"line":483},3,[446,485,486],{"class":452},"Content-Type:",[446,488,489],{"class":456}," application/json\n",[446,491,493],{"class":448,"line":492},4,[446,494,496],{"emptyLinePlaceholder":495},true,"\n",[446,498,500],{"class":448,"line":499},5,[446,501,502],{"class":469},"{\n",[446,504,506,509,513,516,519,522],{"class":448,"line":505},6,[446,507,508],{"class":452},"  \"name\"",[446,510,512],{"class":511},"s2Zo4",":",[446,514,515],{"class":469}," \"",[446,517,518],{"class":456},"My API Key",[446,520,521],{"class":469},"\"",[446,523,524],{"class":456},",\n",[446,526,528,531,533,537,540,543,546,549,552,555],{"class":448,"line":527},7,[446,529,530],{"class":452},"  \"expiry_secs\"",[446,532,512],{"class":511},[446,534,536],{"class":535},"sbssI"," 2592000",[446,538,539],{"class":456},"  //",[446,541,542],{"class":456}," Optional:",[446,544,545],{"class":535}," 30",[446,547,548],{"class":456}," days,",[446,550,551],{"class":456}," null",[446,553,554],{"class":456}," =",[446,556,557],{"class":456}," immortal\n",[446,559,561],{"class":448,"line":560},8,[446,562,563],{"class":469},"}\n",[279,565,566],{},[289,567,568],{},"Ответ:",[437,570,574],{"className":571,"code":572,"language":573,"meta":442,"style":442},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"id\": 123,\n  \"name\": \"My API Key\",\n  \"key\": \"sk_AbC123...\", // Only returned once!\n  \"created_at\": \"2024-01-01T00:00:00Z\",\n  \"expires_at\": \"2024-01-31T00:00:00Z\",\n  \"revoked\": false,\n  \"revocation_reason\": null\n}\n","json",[419,575,576,580,598,617,642,662,682,696,710],{"__ignoreMap":442},[446,577,578],{"class":448,"line":449},[446,579,502],{"class":469},[446,581,582,585,589,591,593,596],{"class":448,"line":460},[446,583,584],{"class":469},"  \"",[446,586,588],{"class":587},"spNyl","id",[446,590,521],{"class":469},[446,592,512],{"class":469},[446,594,595],{"class":535}," 123",[446,597,524],{"class":469},[446,599,600,602,605,607,609,611,613,615],{"class":448,"line":483},[446,601,584],{"class":469},[446,603,604],{"class":587},"name",[446,606,521],{"class":469},[446,608,512],{"class":469},[446,610,515],{"class":469},[446,612,518],{"class":456},[446,614,521],{"class":469},[446,616,524],{"class":469},[446,618,619,621,624,626,628,630,633,635,638],{"class":448,"line":492},[446,620,584],{"class":469},[446,622,623],{"class":587},"key",[446,625,521],{"class":469},[446,627,512],{"class":469},[446,629,515],{"class":469},[446,631,632],{"class":456},"sk_AbC123...",[446,634,521],{"class":469},[446,636,637],{"class":469},",",[446,639,641],{"class":640},"sHwdD"," // Only returned once!\n",[446,643,644,646,649,651,653,655,658,660],{"class":448,"line":499},[446,645,584],{"class":469},[446,647,648],{"class":587},"created_at",[446,650,521],{"class":469},[446,652,512],{"class":469},[446,654,515],{"class":469},[446,656,657],{"class":456},"2024-01-01T00:00:00Z",[446,659,521],{"class":469},[446,661,524],{"class":469},[446,663,664,666,669,671,673,675,678,680],{"class":448,"line":505},[446,665,584],{"class":469},[446,667,668],{"class":587},"expires_at",[446,670,521],{"class":469},[446,672,512],{"class":469},[446,674,515],{"class":469},[446,676,677],{"class":456},"2024-01-31T00:00:00Z",[446,679,521],{"class":469},[446,681,524],{"class":469},[446,683,684,686,689,691,693],{"class":448,"line":527},[446,685,584],{"class":469},[446,687,688],{"class":587},"revoked",[446,690,521],{"class":469},[446,692,512],{"class":469},[446,694,695],{"class":469}," false,\n",[446,697,698,700,703,705,707],{"class":448,"line":560},[446,699,584],{"class":469},[446,701,702],{"class":587},"revocation_reason",[446,704,521],{"class":469},[446,706,512],{"class":469},[446,708,709],{"class":469}," null\n",[446,711,713],{"class":448,"line":712},9,[446,714,563],{"class":469},[279,716,717,718,721],{},"⚠️ ",[289,719,720],{},"Важно",": Значение API ключа возвращается только один раз при создании. Сохраните его.",[424,723,725],{"id":724},"использование-ключей","Использование ключей",[437,727,732],{"className":728,"code":730,"language":731,"meta":442},[729],"language-text","Authorization: Bearer sk_your_api_key_here\n","text",[419,733,730],{"__ignoreMap":442},[279,735,736],{},"Эта форма принимается всеми REST / WebSocket / WebRTC эндпоинтами.",[424,738,740],{"id":739},"управление-ключами","Управление ключами",[279,742,743],{},[289,744,745],{},"Список API ключей:",[437,747,749],{"className":439,"code":748,"language":441,"meta":442,"style":442},"GET /api/keys\nAuthorization: Bearer \u003Cjwt_token>\n",[419,750,751,758],{"__ignoreMap":442},[446,752,753,756],{"class":448,"line":449},[446,754,755],{"class":452},"GET",[446,757,457],{"class":456},[446,759,760,762,764,766,768,770],{"class":448,"line":460},[446,761,463],{"class":452},[446,763,466],{"class":456},[446,765,470],{"class":469},[446,767,473],{"class":456},[446,769,477],{"class":476},[446,771,480],{"class":469},[279,773,774],{},[289,775,776],{},"Отзыв API ключа:",[437,778,780],{"className":439,"code":779,"language":441,"meta":442,"style":442},"DELETE /api/keys/{key_id}\nAuthorization: Bearer \u003Cjwt_token>\n",[419,781,782,790],{"__ignoreMap":442},[446,783,784,787],{"class":448,"line":449},[446,785,786],{"class":452},"DELETE",[446,788,789],{"class":456}," /api/keys/{key_id}\n",[446,791,792,794,796,798,800,802],{"class":448,"line":460},[446,793,463],{"class":452},[446,795,466],{"class":456},[446,797,470],{"class":469},[446,799,473],{"class":456},[446,801,477],{"class":476},[446,803,480],{"class":469},[424,805,807],{"id":806},"ответы-с-ошибками","Ответы с ошибками",[306,809,810,823],{},[309,811,812],{},[312,813,814,817,820],{},[315,815,816],{},"Status",[315,818,819],{},"Error",[315,821,822],{},"Описание",[325,824,825,836,846],{},[312,826,827,830,833],{},[330,828,829],{},"401",[330,831,832],{},"\"Invalid API key\"",[330,834,835],{},"Ключ не найден или неверный формат",[312,837,838,840,843],{},[330,839,829],{},[330,841,842],{},"\"API key revoked: expired\"",[330,844,845],{},"Срок действия ключа истек",[312,847,848,850,853],{},[330,849,829],{},[330,851,852],{},"\"API key revoked: banned\"",[330,854,855],{},"Вы нарушили условия использования ключа",[857,858,860],"h3",{"id":859},"временные-токены","Временные токены",[279,862,863],{},"В клиентских приложениях нужно генерировать недолговечные токены (30 секунд) вместо прямого использования статических API ключей:",[279,865,866],{},[289,867,868],{},"Генерация временного токена с API ключом:",[437,870,872],{"className":439,"code":871,"language":441,"meta":442,"style":442},"POST /api/token/generate\nAuthorization: Bearer sk_your_api_key_here\nContent-Type: application/json\n",[419,873,874,881,890],{"__ignoreMap":442},[446,875,876,878],{"class":448,"line":449},[446,877,453],{"class":452},[446,879,880],{"class":456}," /api/token/generate\n",[446,882,883,885,887],{"class":448,"line":460},[446,884,463],{"class":452},[446,886,466],{"class":456},[446,888,889],{"class":456}," sk_your_api_key_here\n",[446,891,892,894],{"class":448,"line":483},[446,893,486],{"class":452},[446,895,489],{"class":456},[279,897,898],{},[289,899,900],{},"Генерация временного токена без API ключа (с ограничением частоты):",[437,902,904],{"className":439,"code":903,"language":441,"meta":442,"style":442},"POST /api/token/generate\nContent-Type: application/json\n",[419,905,906,912],{"__ignoreMap":442},[446,907,908,910],{"class":448,"line":449},[446,909,453],{"class":452},[446,911,880],{"class":456},[446,913,914,916],{"class":448,"line":460},[446,915,486],{"class":452},[446,917,489],{"class":456},[279,919,920],{},[289,921,568],{},[437,923,925],{"className":571,"code":924,"language":573,"meta":442,"style":442},"{\n  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n}\n",[419,926,927,931,950],{"__ignoreMap":442},[446,928,929],{"class":448,"line":449},[446,930,502],{"class":469},[446,932,933,935,938,940,942,944,947],{"class":448,"line":460},[446,934,584],{"class":469},[446,936,937],{"class":587},"token",[446,939,521],{"class":469},[446,941,512],{"class":469},[446,943,515],{"class":469},[446,945,946],{"class":456},"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",[446,948,949],{"class":469},"\"\n",[446,951,952],{"class":448,"line":483},[446,953,563],{"class":469},[279,955,956],{},[289,957,958],{},"Использование токена в соединениях:",[437,960,964],{"className":961,"code":962,"language":963,"meta":442,"style":442},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","// Use ephemeral token instead of API key\n{\n  \"agent_uuid\": \"your-agent-uuid\",\n  \"api_key\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",  // ephemeral token\n  \"response_medium\": \"chat\"\n}\n","javascript",[419,965,966,971,975,980,988,993],{"__ignoreMap":442},[446,967,968],{"class":448,"line":449},[446,969,970],{},"// Use ephemeral token instead of API key\n",[446,972,973],{"class":448,"line":460},[446,974,502],{},[446,976,977],{"class":448,"line":483},[446,978,979],{},"  \"agent_uuid\": \"your-agent-uuid\",\n",[446,981,982,985],{"class":448,"line":492},[446,983,984],{},"  \"api_key\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",",[446,986,987],{},"  // ephemeral token\n",[446,989,990],{"class":448,"line":499},[446,991,992],{},"  \"response_medium\": \"chat\"\n",[446,994,995],{"class":448,"line":505},[446,996,563],{},[274,998,1000],{"id":999},"общие-элементы","Общие элементы",[857,1002,1004],{"id":1003},"инициализация","Инициализация",[279,1006,1007],{},"И WebRTC, и WebSocket соединения используют одинаковую структуру инициализации:",[437,1009,1011],{"className":571,"code":1010,"language":573,"meta":442,"style":442},"{\n  \"agent_uuid\": \"\u003Cuuid or b-number>\",\n  \"api_key\": \"sk_your_api_key_here\",\n  \"response_medium\": \"chat|voice|both\",\n  \"response_format\": \"raw|base64\",\n  \"messages\": [{ \"role\": \"user\", \"content\": \"initial message\" }],\n  \"data_input\": {},\n  \"vendor\": \"default|voximplant|jivo\"\n}\n",[419,1012,1013,1017,1037,1057,1077,1097,1148,1162,1180],{"__ignoreMap":442},[446,1014,1015],{"class":448,"line":449},[446,1016,502],{"class":469},[446,1018,1019,1021,1024,1026,1028,1030,1033,1035],{"class":448,"line":460},[446,1020,584],{"class":469},[446,1022,1023],{"class":587},"agent_uuid",[446,1025,521],{"class":469},[446,1027,512],{"class":469},[446,1029,515],{"class":469},[446,1031,1032],{"class":456},"\u003Cuuid or b-number>",[446,1034,521],{"class":469},[446,1036,524],{"class":469},[446,1038,1039,1041,1044,1046,1048,1050,1053,1055],{"class":448,"line":483},[446,1040,584],{"class":469},[446,1042,1043],{"class":587},"api_key",[446,1045,521],{"class":469},[446,1047,512],{"class":469},[446,1049,515],{"class":469},[446,1051,1052],{"class":456},"sk_your_api_key_here",[446,1054,521],{"class":469},[446,1056,524],{"class":469},[446,1058,1059,1061,1064,1066,1068,1070,1073,1075],{"class":448,"line":492},[446,1060,584],{"class":469},[446,1062,1063],{"class":587},"response_medium",[446,1065,521],{"class":469},[446,1067,512],{"class":469},[446,1069,515],{"class":469},[446,1071,1072],{"class":456},"chat|voice|both",[446,1074,521],{"class":469},[446,1076,524],{"class":469},[446,1078,1079,1081,1084,1086,1088,1090,1093,1095],{"class":448,"line":499},[446,1080,584],{"class":469},[446,1082,1083],{"class":587},"response_format",[446,1085,521],{"class":469},[446,1087,512],{"class":469},[446,1089,515],{"class":469},[446,1091,1092],{"class":456},"raw|base64",[446,1094,521],{"class":469},[446,1096,524],{"class":469},[446,1098,1099,1101,1104,1106,1108,1111,1113,1116,1118,1120,1122,1125,1127,1129,1131,1134,1136,1138,1140,1143,1145],{"class":448,"line":505},[446,1100,584],{"class":469},[446,1102,1103],{"class":587},"messages",[446,1105,521],{"class":469},[446,1107,512],{"class":469},[446,1109,1110],{"class":469}," [{",[446,1112,515],{"class":469},[446,1114,1115],{"class":452},"role",[446,1117,521],{"class":469},[446,1119,512],{"class":469},[446,1121,515],{"class":469},[446,1123,1124],{"class":456},"user",[446,1126,521],{"class":469},[446,1128,637],{"class":469},[446,1130,515],{"class":469},[446,1132,1133],{"class":452},"content",[446,1135,521],{"class":469},[446,1137,512],{"class":469},[446,1139,515],{"class":469},[446,1141,1142],{"class":456},"initial message",[446,1144,521],{"class":469},[446,1146,1147],{"class":469}," }],\n",[446,1149,1150,1152,1155,1157,1159],{"class":448,"line":527},[446,1151,584],{"class":469},[446,1153,1154],{"class":587},"data_input",[446,1156,521],{"class":469},[446,1158,512],{"class":469},[446,1160,1161],{"class":469}," {},\n",[446,1163,1164,1166,1169,1171,1173,1175,1178],{"class":448,"line":560},[446,1165,584],{"class":469},[446,1167,1168],{"class":587},"vendor",[446,1170,521],{"class":469},[446,1172,512],{"class":469},[446,1174,515],{"class":469},[446,1176,1177],{"class":456},"default|voximplant|jivo",[446,1179,949],{"class":469},[446,1181,1182],{"class":448,"line":712},[446,1183,563],{"class":469},[279,1185,1186],{},[289,1187,1188],{},"Обязательные параметры:",[1190,1191,1192,1197],"ul",{},[286,1193,1194,1196],{},[419,1195,1023],{},": UUID агента (или маппинг B-номера)",[286,1198,1199,1201,1202,1204,1205],{},[419,1200,1043],{},": Ваш API ключ для аутентификации (формат: ",[419,1203,421],{}," + 32 символа) или токен. ",[289,1206,1207],{},"Обязателен для всех соединений.",[279,1209,1210],{},[289,1211,1212],{},"Опциональные параметры:",[1190,1214,1215,1220,1229,1234,1239],{},[286,1216,1217,1219],{},[419,1218,1063],{},": Как агент будет отвечать (\"chat\", \"voice\", или \"both\"). По умолчанию: \"both\"",[286,1221,1222,1224,1225,1228],{},[419,1223,1083],{},": ",[446,1226,1227],{},"Только WebSockets"," Будут ли аудиоданные предоставлены как байты или base64-кодированная строка (\"raw\" или \"base64\"). По умолчанию: \"raw\"",[286,1230,1231,1233],{},[419,1232,1103],{},": Начальная история разговора. Должна чередоваться между пользователем и ассистентом, заканчиваясь пользователем. Может быть пустой",[286,1235,1236,1238],{},[419,1237,1154],{},": Входные данные для агента. Любые входные данные разрешены, но будут обработаны только ключи, определенные в агенте",[286,1240,1241,1243],{},[419,1242,1168],{},": Поставщик клиента для специальной обработки данных. В большинстве случаев используйте значение по умолчанию: \"default\"",[279,1245,1246],{},[289,1247,1248],{},"Методы аутентификации:",[1190,1250,1251,1260],{},[286,1252,1253,1256,1257,1259],{},[289,1254,1255],{},"Статические API Keys",": Долгоживущие ключи, начинающиеся с ",[419,1258,421],{},", созданные через веб-интерфейс или API",[286,1261,1262,1264,1265],{},[289,1263,860],{}," (Рекомендуется): Недолговечные токены (30 секунд), генерируемые через endpoint ",[419,1266,1267],{},"/api/token/generate",[1269,1270,1271],"blockquote",{},[279,1272,717,1273,1276],{},[289,1274,1275],{},"Примечание по безопасности",": WebRTC обязаны должны использовать временные токены, в то время как WebSocket соединения могут использовать любой метод.",[857,1278,1280],{"id":1279},"типы-ответов","Типы ответов",[279,1282,1283],{},"Все ответы от сервера (независимо от типа соединения) используют эти типы ответов:",[283,1285,1286],{},[286,1287,1288,1291],{},[289,1289,1290],{},"Content",": Обычное текстовое содержимое от агента. Содержимое поступает частями.",[437,1293,1295],{"className":571,"code":1294,"language":573,"meta":442,"style":442},"{\n  \"emission_type\": \"content\",\n  \"content\": \"message text here\"\n}\n",[419,1296,1297,1301,1320,1337],{"__ignoreMap":442},[446,1298,1299],{"class":448,"line":449},[446,1300,502],{"class":469},[446,1302,1303,1305,1308,1310,1312,1314,1316,1318],{"class":448,"line":460},[446,1304,584],{"class":469},[446,1306,1307],{"class":587},"emission_type",[446,1309,521],{"class":469},[446,1311,512],{"class":469},[446,1313,515],{"class":469},[446,1315,1133],{"class":456},[446,1317,521],{"class":469},[446,1319,524],{"class":469},[446,1321,1322,1324,1326,1328,1330,1332,1335],{"class":448,"line":483},[446,1323,584],{"class":469},[446,1325,1133],{"class":587},[446,1327,521],{"class":469},[446,1329,512],{"class":469},[446,1331,515],{"class":469},[446,1333,1334],{"class":456},"message text here",[446,1336,949],{"class":469},[446,1338,1339],{"class":448,"line":492},[446,1340,563],{"class":469},[283,1342,1343],{"start":460},[286,1344,1345,1348],{},[289,1346,1347],{},"Completion",": Сигнализирует о завершении взаимодействия или передаче. Сервер разорвет соединение после этой эмиссии.",[437,1350,1352],{"className":571,"code":1351,"language":573,"meta":442,"style":442},"{\n  \"emission_type\": \"completion\",\n  \"completion_type\": \"turn|termination|transfer\",\n  \"target\": \"optional target for transfer\"\n}\n",[419,1353,1354,1358,1377,1397,1415],{"__ignoreMap":442},[446,1355,1356],{"class":448,"line":449},[446,1357,502],{"class":469},[446,1359,1360,1362,1364,1366,1368,1370,1373,1375],{"class":448,"line":460},[446,1361,584],{"class":469},[446,1363,1307],{"class":587},[446,1365,521],{"class":469},[446,1367,512],{"class":469},[446,1369,515],{"class":469},[446,1371,1372],{"class":456},"completion",[446,1374,521],{"class":469},[446,1376,524],{"class":469},[446,1378,1379,1381,1384,1386,1388,1390,1393,1395],{"class":448,"line":483},[446,1380,584],{"class":469},[446,1382,1383],{"class":587},"completion_type",[446,1385,521],{"class":469},[446,1387,512],{"class":469},[446,1389,515],{"class":469},[446,1391,1392],{"class":456},"turn|termination|transfer",[446,1394,521],{"class":469},[446,1396,524],{"class":469},[446,1398,1399,1401,1404,1406,1408,1410,1413],{"class":448,"line":492},[446,1400,584],{"class":469},[446,1402,1403],{"class":587},"target",[446,1405,521],{"class":469},[446,1407,512],{"class":469},[446,1409,515],{"class":469},[446,1411,1412],{"class":456},"optional target for transfer",[446,1414,949],{"class":469},[446,1416,1417],{"class":448,"line":499},[446,1418,563],{"class":469},[283,1420,1421],{"start":483},[286,1422,1423,1425],{},[289,1424,819],{},": Сообщения об ошибках сервера.",[437,1427,1429],{"className":571,"code":1428,"language":573,"meta":442,"style":442},"{\n  \"emission_type\": \"error\",\n  \"error_message\": \"error details\"\n}\n",[419,1430,1431,1435,1454,1472],{"__ignoreMap":442},[446,1432,1433],{"class":448,"line":449},[446,1434,502],{"class":469},[446,1436,1437,1439,1441,1443,1445,1447,1450,1452],{"class":448,"line":460},[446,1438,584],{"class":469},[446,1440,1307],{"class":587},[446,1442,521],{"class":469},[446,1444,512],{"class":469},[446,1446,515],{"class":469},[446,1448,1449],{"class":456},"error",[446,1451,521],{"class":469},[446,1453,524],{"class":469},[446,1455,1456,1458,1461,1463,1465,1467,1470],{"class":448,"line":483},[446,1457,584],{"class":469},[446,1459,1460],{"class":587},"error_message",[446,1462,521],{"class":469},[446,1464,512],{"class":469},[446,1466,515],{"class":469},[446,1468,1469],{"class":456},"error details",[446,1471,949],{"class":469},[446,1473,1474],{"class":448,"line":492},[446,1475,563],{"class":469},[283,1477,1478],{"start":492},[286,1479,1480,1483],{},[289,1481,1482],{},"Tool Call",": Агент использует инструмент",[437,1485,1487],{"className":571,"code":1486,"language":573,"meta":442,"style":442},"{\n  \"emission_type\": \"tool_call\",\n  \"call\": {\n    \"tool_name\": \"name of tool\",\n    \"tool_type\": \"tool type\",\n    \"call_reason\": \"reason for call\",\n    \"arguments\": {}\n  }\n}\n",[419,1488,1489,1493,1512,1526,1547,1567,1587,1601,1606],{"__ignoreMap":442},[446,1490,1491],{"class":448,"line":449},[446,1492,502],{"class":469},[446,1494,1495,1497,1499,1501,1503,1505,1508,1510],{"class":448,"line":460},[446,1496,584],{"class":469},[446,1498,1307],{"class":587},[446,1500,521],{"class":469},[446,1502,512],{"class":469},[446,1504,515],{"class":469},[446,1506,1507],{"class":456},"tool_call",[446,1509,521],{"class":469},[446,1511,524],{"class":469},[446,1513,1514,1516,1519,1521,1523],{"class":448,"line":483},[446,1515,584],{"class":469},[446,1517,1518],{"class":587},"call",[446,1520,521],{"class":469},[446,1522,512],{"class":469},[446,1524,1525],{"class":469}," {\n",[446,1527,1528,1531,1534,1536,1538,1540,1543,1545],{"class":448,"line":492},[446,1529,1530],{"class":469},"    \"",[446,1532,1533],{"class":452},"tool_name",[446,1535,521],{"class":469},[446,1537,512],{"class":469},[446,1539,515],{"class":469},[446,1541,1542],{"class":456},"name of tool",[446,1544,521],{"class":469},[446,1546,524],{"class":469},[446,1548,1549,1551,1554,1556,1558,1560,1563,1565],{"class":448,"line":499},[446,1550,1530],{"class":469},[446,1552,1553],{"class":452},"tool_type",[446,1555,521],{"class":469},[446,1557,512],{"class":469},[446,1559,515],{"class":469},[446,1561,1562],{"class":456},"tool type",[446,1564,521],{"class":469},[446,1566,524],{"class":469},[446,1568,1569,1571,1574,1576,1578,1580,1583,1585],{"class":448,"line":505},[446,1570,1530],{"class":469},[446,1572,1573],{"class":452},"call_reason",[446,1575,521],{"class":469},[446,1577,512],{"class":469},[446,1579,515],{"class":469},[446,1581,1582],{"class":456},"reason for call",[446,1584,521],{"class":469},[446,1586,524],{"class":469},[446,1588,1589,1591,1594,1596,1598],{"class":448,"line":527},[446,1590,1530],{"class":469},[446,1592,1593],{"class":452},"arguments",[446,1595,521],{"class":469},[446,1597,512],{"class":469},[446,1599,1600],{"class":469}," {}\n",[446,1602,1603],{"class":448,"line":560},[446,1604,1605],{"class":469},"  }\n",[446,1607,1608],{"class":448,"line":712},[446,1609,563],{"class":469},[283,1611,1612],{"start":499},[286,1613,1614,1617],{},[289,1615,1616],{},"Tool Response",": Ответ от вызова инструмента. Может содержать ошибки.",[437,1619,1621],{"className":571,"code":1620,"language":573,"meta":442,"style":442},"{\n  \"emission_type\": \"tool_response\",\n  \"response\": {\n    \"tool_name\": \"name of tool\",\n    \"tool_type\": \"tool type\",\n    \"content\": \"response content\"\n  }\n}\n",[419,1622,1623,1627,1646,1659,1677,1695,1712,1716],{"__ignoreMap":442},[446,1624,1625],{"class":448,"line":449},[446,1626,502],{"class":469},[446,1628,1629,1631,1633,1635,1637,1639,1642,1644],{"class":448,"line":460},[446,1630,584],{"class":469},[446,1632,1307],{"class":587},[446,1634,521],{"class":469},[446,1636,512],{"class":469},[446,1638,515],{"class":469},[446,1640,1641],{"class":456},"tool_response",[446,1643,521],{"class":469},[446,1645,524],{"class":469},[446,1647,1648,1650,1653,1655,1657],{"class":448,"line":483},[446,1649,584],{"class":469},[446,1651,1652],{"class":587},"response",[446,1654,521],{"class":469},[446,1656,512],{"class":469},[446,1658,1525],{"class":469},[446,1660,1661,1663,1665,1667,1669,1671,1673,1675],{"class":448,"line":492},[446,1662,1530],{"class":469},[446,1664,1533],{"class":452},[446,1666,521],{"class":469},[446,1668,512],{"class":469},[446,1670,515],{"class":469},[446,1672,1542],{"class":456},[446,1674,521],{"class":469},[446,1676,524],{"class":469},[446,1678,1679,1681,1683,1685,1687,1689,1691,1693],{"class":448,"line":499},[446,1680,1530],{"class":469},[446,1682,1553],{"class":452},[446,1684,521],{"class":469},[446,1686,512],{"class":469},[446,1688,515],{"class":469},[446,1690,1562],{"class":456},[446,1692,521],{"class":469},[446,1694,524],{"class":469},[446,1696,1697,1699,1701,1703,1705,1707,1710],{"class":448,"line":505},[446,1698,1530],{"class":469},[446,1700,1133],{"class":452},[446,1702,521],{"class":469},[446,1704,512],{"class":469},[446,1706,515],{"class":469},[446,1708,1709],{"class":456},"response content",[446,1711,949],{"class":469},[446,1713,1714],{"class":448,"line":527},[446,1715,1605],{"class":469},[446,1717,1718],{"class":448,"line":560},[446,1719,563],{"class":469},[283,1721,1722],{"start":505},[286,1723,1724,1730],{},[289,1725,1726,1729],{},[446,1727,1728],{},"опционально"," Recognized Speech",": Результаты распознавания речи. Примечание: предоставляется только если аудио отправляется от клиента",[437,1732,1734],{"className":571,"code":1733,"language":573,"meta":442,"style":442},"{\n  \"emission_type\": \"recognized_speech\",\n  \"content\": \"recognized text\"\n}\n",[419,1735,1736,1740,1759,1776],{"__ignoreMap":442},[446,1737,1738],{"class":448,"line":449},[446,1739,502],{"class":469},[446,1741,1742,1744,1746,1748,1750,1752,1755,1757],{"class":448,"line":460},[446,1743,584],{"class":469},[446,1745,1307],{"class":587},[446,1747,521],{"class":469},[446,1749,512],{"class":469},[446,1751,515],{"class":469},[446,1753,1754],{"class":456},"recognized_speech",[446,1756,521],{"class":469},[446,1758,524],{"class":469},[446,1760,1761,1763,1765,1767,1769,1771,1774],{"class":448,"line":483},[446,1762,584],{"class":469},[446,1764,1133],{"class":587},[446,1766,521],{"class":469},[446,1768,512],{"class":469},[446,1770,515],{"class":469},[446,1772,1773],{"class":456},"recognized text",[446,1775,949],{"class":469},[446,1777,1778],{"class":448,"line":492},[446,1779,563],{"class":469},[274,1781,1783],{"id":1782},"websocket-api","WebSocket API",[279,1785,1786],{},"Инициализация агента по вебсокету происходит по адресу:",[437,1788,1791],{"className":1789,"code":1790,"language":731,"meta":442},[729],"wss://app.aiva.chat/run/ws\n",[419,1792,1790],{"__ignoreMap":442},[857,1794,1796],{"id":1795},"поток-соединения","Поток соединения",[283,1798,1799,1805,1815],{},[286,1800,1801,1804],{},[289,1802,1803],{},"Начальное соединение",": Подключение к WebSocket endpoint",[286,1806,1807,1810,1811,1814],{},[289,1808,1809],{},"Инициализация сессии",": Отправка ",[419,1812,1813],{},"AgentStartRequest"," как первого сообщения",[286,1816,1817,1820],{},[289,1818,1819],{},"Ответ на handshake",": Сервер отвечает со статусом и interaction ID",[437,1822,1825],{"className":1823,"code":1824,"language":731,"meta":442},[729],"json\n{\n  \"status\": \"ready\",\n  \"message\": \"Ready to receive messages\",\n  \"interaction_id\": \"\u003Cinteraction_id>\"\n}\n",[419,1826,1824],{"__ignoreMap":442},[857,1828,1830],{"id":1829},"отправка-сообщений","Отправка сообщений",[283,1832,1833],{},[286,1834,1835],{},[289,1836,1837],{},"Текстовые сообщения",[437,1839,1841],{"className":571,"code":1840,"language":573,"meta":442,"style":442},"{\n  \"text\": \"your message here\"\n}\n",[419,1842,1843,1847,1864],{"__ignoreMap":442},[446,1844,1845],{"class":448,"line":449},[446,1846,502],{"class":469},[446,1848,1849,1851,1853,1855,1857,1859,1862],{"class":448,"line":460},[446,1850,584],{"class":469},[446,1852,731],{"class":587},[446,1854,521],{"class":469},[446,1856,512],{"class":469},[446,1858,515],{"class":469},[446,1860,1861],{"class":456},"your message here",[446,1863,949],{"class":469},[446,1865,1866],{"class":448,"line":483},[446,1867,563],{"class":469},[283,1869,1870],{"start":460},[286,1871,1872],{},[289,1873,1874],{},"Аудио сообщения",[1190,1876,1877,1880],{},[286,1878,1879],{},"Бинарный формат: Необработанные аудио байты",[286,1881,1882,1883],{},"Base64 формат:\n",[437,1884,1887],{"className":1885,"code":1886,"language":731,"meta":442},[729],"json\n{\n\"audio\": \"\u003Cbase64-encoded-audio>\",\n\"timestamp\": \"\u003Coptional-timestamp>\"\n}\n",[419,1888,1886],{"__ignoreMap":442},[857,1890,1892],{"id":1891},"получение-ответов","Получение ответов",[279,1894,1895],{},"Все ответы используют общие типы ответов, описанные выше. Аудио отправляется как:",[1190,1897,1898,1904],{},[286,1899,1900,1901,1903],{},"Необработанные бинарные данные, если ",[419,1902,1083],{}," равен \"raw\"",[286,1905,1906,1907,1909,1910],{},"Base64 кодированные в JSON сообщении, если ",[419,1908,1083],{}," равен \"base64\"\n",[437,1911,1914],{"className":1912,"code":1913,"language":731,"meta":442},[729],"json\n{\n  \"audio\": \"\u003Cbase64-encoded-audio>\"\n}\n",[419,1915,1913],{"__ignoreMap":442},[857,1917,1919],{"id":1918},"минимальный-пример","Минимальный пример",[279,1921,1922],{},"Начните работу с websockets, запустив этот минимальный пример кода Python для командной строки:",[437,1924,1928],{"className":1925,"code":1926,"language":1927,"meta":442,"style":442},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import asyncio, json, websockets\nfrom prompt_toolkit import PromptSession\nfrom prompt_toolkit.patch_stdout import patch_stdout\n\nURL = \"wss://app.aiva.chat/run/ws\"\nUUID = \"YOUR_AGENT_UUID\" # возьмите uuid с URL страницы агента /talk\nKEY = \"YOUR_API_KEY\" # ваш api key доступен в настройках аккаунта\n\nasync def main():\n    async with websockets.connect(URL) as ws:\n        # Отправка инициализационного сообщения с API ключом\n        await ws.send(json.dumps({\n            \"agent_uuid\": UUID,\n            \"api_key\": KEY,  # API ключ для аутентификации\n            \"messages\": [],\n            \"data_input\": {},\n            \"response_medium\": \"chat\"\n        }))\n\n        # Ожидание ответа на handshake\n        handshake = json.loads(await ws.recv())\n        print(f\"Подключено: {handshake.get('message', 'Ready')}\")\n\n        session = PromptSession()\n\n        async def send():\n            while True:\n                msg = await session.prompt_async(\"You: \")\n                if msg.strip():\n                    await ws.send(json.dumps({\"text\": msg.strip()}))\n\n        async def recv():\n            async for raw in ws:\n                data = json.loads(raw)\n                if data.get(\"emission_type\") == \"content\":\n                    print(f\"Bot: {data.get('content', '')}\", end='', flush=True)\n                elif data.get(\"emission_type\") == \"completion\":\n                    print(f\"\\n[Session ended: {data.get('completion_type')}]\")\n                    break\n\n        with patch_stdout():\n            await asyncio.gather(send(), recv())\n\nasyncio.run(main())\n","python",[419,1929,1930,1935,1940,1945,1949,1954,1959,1964,1968,1973,1979,1985,1991,1997,2003,2009,2015,2021,2027,2032,2038,2044,2050,2055,2061,2066,2072,2078,2084,2090,2096,2101,2107,2113,2119,2125,2131,2137,2143,2149,2154,2160,2166,2171],{"__ignoreMap":442},[446,1931,1932],{"class":448,"line":449},[446,1933,1934],{},"import asyncio, json, websockets\n",[446,1936,1937],{"class":448,"line":460},[446,1938,1939],{},"from prompt_toolkit import PromptSession\n",[446,1941,1942],{"class":448,"line":483},[446,1943,1944],{},"from prompt_toolkit.patch_stdout import patch_stdout\n",[446,1946,1947],{"class":448,"line":492},[446,1948,496],{"emptyLinePlaceholder":495},[446,1950,1951],{"class":448,"line":499},[446,1952,1953],{},"URL = \"wss://app.aiva.chat/run/ws\"\n",[446,1955,1956],{"class":448,"line":505},[446,1957,1958],{},"UUID = \"YOUR_AGENT_UUID\" # возьмите uuid с URL страницы агента /talk\n",[446,1960,1961],{"class":448,"line":527},[446,1962,1963],{},"KEY = \"YOUR_API_KEY\" # ваш api key доступен в настройках аккаунта\n",[446,1965,1966],{"class":448,"line":560},[446,1967,496],{"emptyLinePlaceholder":495},[446,1969,1970],{"class":448,"line":712},[446,1971,1972],{},"async def main():\n",[446,1974,1976],{"class":448,"line":1975},10,[446,1977,1978],{},"    async with websockets.connect(URL) as ws:\n",[446,1980,1982],{"class":448,"line":1981},11,[446,1983,1984],{},"        # Отправка инициализационного сообщения с API ключом\n",[446,1986,1988],{"class":448,"line":1987},12,[446,1989,1990],{},"        await ws.send(json.dumps({\n",[446,1992,1994],{"class":448,"line":1993},13,[446,1995,1996],{},"            \"agent_uuid\": UUID,\n",[446,1998,2000],{"class":448,"line":1999},14,[446,2001,2002],{},"            \"api_key\": KEY,  # API ключ для аутентификации\n",[446,2004,2006],{"class":448,"line":2005},15,[446,2007,2008],{},"            \"messages\": [],\n",[446,2010,2012],{"class":448,"line":2011},16,[446,2013,2014],{},"            \"data_input\": {},\n",[446,2016,2018],{"class":448,"line":2017},17,[446,2019,2020],{},"            \"response_medium\": \"chat\"\n",[446,2022,2024],{"class":448,"line":2023},18,[446,2025,2026],{},"        }))\n",[446,2028,2030],{"class":448,"line":2029},19,[446,2031,496],{"emptyLinePlaceholder":495},[446,2033,2035],{"class":448,"line":2034},20,[446,2036,2037],{},"        # Ожидание ответа на handshake\n",[446,2039,2041],{"class":448,"line":2040},21,[446,2042,2043],{},"        handshake = json.loads(await ws.recv())\n",[446,2045,2047],{"class":448,"line":2046},22,[446,2048,2049],{},"        print(f\"Подключено: {handshake.get('message', 'Ready')}\")\n",[446,2051,2053],{"class":448,"line":2052},23,[446,2054,496],{"emptyLinePlaceholder":495},[446,2056,2058],{"class":448,"line":2057},24,[446,2059,2060],{},"        session = PromptSession()\n",[446,2062,2064],{"class":448,"line":2063},25,[446,2065,496],{"emptyLinePlaceholder":495},[446,2067,2069],{"class":448,"line":2068},26,[446,2070,2071],{},"        async def send():\n",[446,2073,2075],{"class":448,"line":2074},27,[446,2076,2077],{},"            while True:\n",[446,2079,2081],{"class":448,"line":2080},28,[446,2082,2083],{},"                msg = await session.prompt_async(\"You: \")\n",[446,2085,2087],{"class":448,"line":2086},29,[446,2088,2089],{},"                if msg.strip():\n",[446,2091,2093],{"class":448,"line":2092},30,[446,2094,2095],{},"                    await ws.send(json.dumps({\"text\": msg.strip()}))\n",[446,2097,2099],{"class":448,"line":2098},31,[446,2100,496],{"emptyLinePlaceholder":495},[446,2102,2104],{"class":448,"line":2103},32,[446,2105,2106],{},"        async def recv():\n",[446,2108,2110],{"class":448,"line":2109},33,[446,2111,2112],{},"            async for raw in ws:\n",[446,2114,2116],{"class":448,"line":2115},34,[446,2117,2118],{},"                data = json.loads(raw)\n",[446,2120,2122],{"class":448,"line":2121},35,[446,2123,2124],{},"                if data.get(\"emission_type\") == \"content\":\n",[446,2126,2128],{"class":448,"line":2127},36,[446,2129,2130],{},"                    print(f\"Bot: {data.get('content', '')}\", end='', flush=True)\n",[446,2132,2134],{"class":448,"line":2133},37,[446,2135,2136],{},"                elif data.get(\"emission_type\") == \"completion\":\n",[446,2138,2140],{"class":448,"line":2139},38,[446,2141,2142],{},"                    print(f\"\\n[Session ended: {data.get('completion_type')}]\")\n",[446,2144,2146],{"class":448,"line":2145},39,[446,2147,2148],{},"                    break\n",[446,2150,2152],{"class":448,"line":2151},40,[446,2153,496],{"emptyLinePlaceholder":495},[446,2155,2157],{"class":448,"line":2156},41,[446,2158,2159],{},"        with patch_stdout():\n",[446,2161,2163],{"class":448,"line":2162},42,[446,2164,2165],{},"            await asyncio.gather(send(), recv())\n",[446,2167,2169],{"class":448,"line":2168},43,[446,2170,496],{"emptyLinePlaceholder":495},[446,2172,2174],{"class":448,"line":2173},44,[446,2175,2176],{},"asyncio.run(main())\n",[857,2178,2180],{"id":2179},"примеры-аутентификации","Примеры аутентификации",[279,2182,2183],{},[289,2184,2185],{},"Использование Authorization Header с curl:",[437,2187,2189],{"className":439,"code":2188,"language":441,"meta":442,"style":442},"# WebSocket соединение с API ключом\ncurl -H \"Authorization: Bearer your_api_key_here\" \\\n     -H \"Upgrade: websocket\" \\\n     -H \"Connection: Upgrade\" \\\n     \"wss://app.aiva.chat/run/ws\"\n\n# REST API вызов с API ключом\ncurl -X POST \"https://app.aiva.chat/api/agents/start\" \\\n     -H \"Authorization: Bearer your_api_key_here\" \\\n     -H \"Content-Type: application/json\" \\\n     -d '{\"agent_uuid\": \"your-uuid\", \"message\": \"Hello\"}'\n",[419,2190,2191,2196,2214,2228,2241,2251,2255,2260,2279,2291,2304],{"__ignoreMap":442},[446,2192,2193],{"class":448,"line":449},[446,2194,2195],{"class":640},"# WebSocket соединение с API ключом\n",[446,2197,2198,2201,2204,2206,2209,2211],{"class":448,"line":460},[446,2199,2200],{"class":452},"curl",[446,2202,2203],{"class":456}," -H",[446,2205,515],{"class":469},[446,2207,2208],{"class":456},"Authorization: Bearer your_api_key_here",[446,2210,521],{"class":469},[446,2212,2213],{"class":476}," \\\n",[446,2215,2216,2219,2221,2224,2226],{"class":448,"line":483},[446,2217,2218],{"class":456},"     -H",[446,2220,515],{"class":469},[446,2222,2223],{"class":456},"Upgrade: websocket",[446,2225,521],{"class":469},[446,2227,2213],{"class":476},[446,2229,2230,2232,2234,2237,2239],{"class":448,"line":492},[446,2231,2218],{"class":456},[446,2233,515],{"class":469},[446,2235,2236],{"class":456},"Connection: Upgrade",[446,2238,521],{"class":469},[446,2240,2213],{"class":476},[446,2242,2243,2246,2249],{"class":448,"line":499},[446,2244,2245],{"class":469},"     \"",[446,2247,2248],{"class":456},"wss://app.aiva.chat/run/ws",[446,2250,949],{"class":469},[446,2252,2253],{"class":448,"line":505},[446,2254,496],{"emptyLinePlaceholder":495},[446,2256,2257],{"class":448,"line":527},[446,2258,2259],{"class":640},"# REST API вызов с API ключом\n",[446,2261,2262,2264,2267,2270,2272,2275,2277],{"class":448,"line":560},[446,2263,2200],{"class":452},[446,2265,2266],{"class":456}," -X",[446,2268,2269],{"class":456}," POST",[446,2271,515],{"class":469},[446,2273,2274],{"class":456},"https://app.aiva.chat/api/agents/start",[446,2276,521],{"class":469},[446,2278,2213],{"class":476},[446,2280,2281,2283,2285,2287,2289],{"class":448,"line":712},[446,2282,2218],{"class":456},[446,2284,515],{"class":469},[446,2286,2208],{"class":456},[446,2288,521],{"class":469},[446,2290,2213],{"class":476},[446,2292,2293,2295,2297,2300,2302],{"class":448,"line":1975},[446,2294,2218],{"class":456},[446,2296,515],{"class":469},[446,2298,2299],{"class":456},"Content-Type: application/json",[446,2301,521],{"class":469},[446,2303,2213],{"class":476},[446,2305,2306,2309,2312,2315],{"class":448,"line":1981},[446,2307,2308],{"class":456},"     -d",[446,2310,2311],{"class":469}," '",[446,2313,2314],{"class":456},"{\"agent_uuid\": \"your-uuid\", \"message\": \"Hello\"}",[446,2316,2317],{"class":469},"'\n",[279,2319,2320],{},[289,2321,2322],{},"Пример JavaScript/Node.js:",[437,2324,2326],{"className":961,"code":2325,"language":963,"meta":442,"style":442},"const WebSocket = require(\"ws\");\n\nconst ws = new WebSocket(\"wss://app.aiva.chat/run/ws\", {\n  headers: {\n    Authorization: \"Bearer your_api_key_here\",\n  },\n});\n\nws.on(\"open\", function () {\n  // Отправка инициализации\n  ws.send(\n    JSON.stringify({\n      agent_uuid: \"your-agent-uuid\",\n      api_key: \"your_api_key_here\",\n      response_medium: \"chat\",\n      messages: [],\n    })\n  );\n});\n\nws.on(\"message\", function (data) {\n  const message = JSON.parse(data);\n  if (message.emission_type === \"content\") {\n    console.log(\"Bot:\", message.content);\n  }\n});\n",[419,2327,2328,2333,2337,2342,2347,2352,2357,2362,2366,2371,2376,2381,2386,2391,2396,2401,2406,2411,2416,2420,2424,2429,2434,2439,2444,2448],{"__ignoreMap":442},[446,2329,2330],{"class":448,"line":449},[446,2331,2332],{},"const WebSocket = require(\"ws\");\n",[446,2334,2335],{"class":448,"line":460},[446,2336,496],{"emptyLinePlaceholder":495},[446,2338,2339],{"class":448,"line":483},[446,2340,2341],{},"const ws = new WebSocket(\"wss://app.aiva.chat/run/ws\", {\n",[446,2343,2344],{"class":448,"line":492},[446,2345,2346],{},"  headers: {\n",[446,2348,2349],{"class":448,"line":499},[446,2350,2351],{},"    Authorization: \"Bearer your_api_key_here\",\n",[446,2353,2354],{"class":448,"line":505},[446,2355,2356],{},"  },\n",[446,2358,2359],{"class":448,"line":527},[446,2360,2361],{},"});\n",[446,2363,2364],{"class":448,"line":560},[446,2365,496],{"emptyLinePlaceholder":495},[446,2367,2368],{"class":448,"line":712},[446,2369,2370],{},"ws.on(\"open\", function () {\n",[446,2372,2373],{"class":448,"line":1975},[446,2374,2375],{},"  // Отправка инициализации\n",[446,2377,2378],{"class":448,"line":1981},[446,2379,2380],{},"  ws.send(\n",[446,2382,2383],{"class":448,"line":1987},[446,2384,2385],{},"    JSON.stringify({\n",[446,2387,2388],{"class":448,"line":1993},[446,2389,2390],{},"      agent_uuid: \"your-agent-uuid\",\n",[446,2392,2393],{"class":448,"line":1999},[446,2394,2395],{},"      api_key: \"your_api_key_here\",\n",[446,2397,2398],{"class":448,"line":2005},[446,2399,2400],{},"      response_medium: \"chat\",\n",[446,2402,2403],{"class":448,"line":2011},[446,2404,2405],{},"      messages: [],\n",[446,2407,2408],{"class":448,"line":2017},[446,2409,2410],{},"    })\n",[446,2412,2413],{"class":448,"line":2023},[446,2414,2415],{},"  );\n",[446,2417,2418],{"class":448,"line":2029},[446,2419,2361],{},[446,2421,2422],{"class":448,"line":2034},[446,2423,496],{"emptyLinePlaceholder":495},[446,2425,2426],{"class":448,"line":2040},[446,2427,2428],{},"ws.on(\"message\", function (data) {\n",[446,2430,2431],{"class":448,"line":2046},[446,2432,2433],{},"  const message = JSON.parse(data);\n",[446,2435,2436],{"class":448,"line":2052},[446,2437,2438],{},"  if (message.emission_type === \"content\") {\n",[446,2440,2441],{"class":448,"line":2057},[446,2442,2443],{},"    console.log(\"Bot:\", message.content);\n",[446,2445,2446],{"class":448,"line":2063},[446,2447,1605],{},[446,2449,2450],{"class":448,"line":2068},[446,2451,2361],{},[274,2453,2455],{"id":2454},"webrtc-api","WebRTC API",[857,2457,2459],{"id":2458},"детали-соединения","Детали соединения",[279,2461,2462],{},"WebRTC endpoint доступен по адресу:",[437,2464,2467],{"className":2465,"code":2466,"language":731,"meta":442},[729],"POST https://\u003Cyour-server>/offer\n",[419,2468,2466],{"__ignoreMap":442},[857,2470,1796],{"id":2471},"поток-соединения-1",[283,2473,2474,2480],{},[286,2475,2476,2479],{},[289,2477,2478],{},"Создание Offer",": Создание WebRTC offer на стороне клиента",[286,2481,2482,2485],{},[289,2483,2484],{},"Отправка Offer",": Отправка offer вместе с данными инициализации агента",[437,2487,2489],{"className":571,"code":2488,"language":573,"meta":442,"style":442},"{\n  \"sdp\": \"\u003Csession-description>\",\n  \"type\": \"offer\",\n  \"agent_uuid\": \"\u003Cuuid>\",\n  \"api_key\": \"\u003Capi-key>\",\n  \"response_medium\": \"both\",\n  ...other initialization parameters\n}\n",[419,2490,2491,2495,2515,2535,2554,2573,2592,2597],{"__ignoreMap":442},[446,2492,2493],{"class":448,"line":449},[446,2494,502],{"class":469},[446,2496,2497,2499,2502,2504,2506,2508,2511,2513],{"class":448,"line":460},[446,2498,584],{"class":469},[446,2500,2501],{"class":587},"sdp",[446,2503,521],{"class":469},[446,2505,512],{"class":469},[446,2507,515],{"class":469},[446,2509,2510],{"class":456},"\u003Csession-description>",[446,2512,521],{"class":469},[446,2514,524],{"class":469},[446,2516,2517,2519,2522,2524,2526,2528,2531,2533],{"class":448,"line":483},[446,2518,584],{"class":469},[446,2520,2521],{"class":587},"type",[446,2523,521],{"class":469},[446,2525,512],{"class":469},[446,2527,515],{"class":469},[446,2529,2530],{"class":456},"offer",[446,2532,521],{"class":469},[446,2534,524],{"class":469},[446,2536,2537,2539,2541,2543,2545,2547,2550,2552],{"class":448,"line":492},[446,2538,584],{"class":469},[446,2540,1023],{"class":587},[446,2542,521],{"class":469},[446,2544,512],{"class":469},[446,2546,515],{"class":469},[446,2548,2549],{"class":456},"\u003Cuuid>",[446,2551,521],{"class":469},[446,2553,524],{"class":469},[446,2555,2556,2558,2560,2562,2564,2566,2569,2571],{"class":448,"line":499},[446,2557,584],{"class":469},[446,2559,1043],{"class":587},[446,2561,521],{"class":469},[446,2563,512],{"class":469},[446,2565,515],{"class":469},[446,2567,2568],{"class":456},"\u003Capi-key>",[446,2570,521],{"class":469},[446,2572,524],{"class":469},[446,2574,2575,2577,2579,2581,2583,2585,2588,2590],{"class":448,"line":505},[446,2576,584],{"class":469},[446,2578,1063],{"class":587},[446,2580,521],{"class":469},[446,2582,512],{"class":469},[446,2584,515],{"class":469},[446,2586,2587],{"class":456},"both",[446,2589,521],{"class":469},[446,2591,524],{"class":469},[446,2593,2594],{"class":448,"line":527},[446,2595,2596],{"class":476},"  ...other initialization parameters\n",[446,2598,2599],{"class":448,"line":560},[446,2600,563],{"class":469},[283,2602,2603],{"start":483},[286,2604,2605,2608],{},[289,2606,2607],{},"Обработка Answer",": Получение и обработка SDP answer от сервера",[437,2610,2612],{"className":571,"code":2611,"language":573,"meta":442,"style":442},"{\n  \"sdp\": \"\u003Csession-description>\",\n  \"type\": \"answer\"\n}\n",[419,2613,2614,2618,2636,2653],{"__ignoreMap":442},[446,2615,2616],{"class":448,"line":449},[446,2617,502],{"class":469},[446,2619,2620,2622,2624,2626,2628,2630,2632,2634],{"class":448,"line":460},[446,2621,584],{"class":469},[446,2623,2501],{"class":587},[446,2625,521],{"class":469},[446,2627,512],{"class":469},[446,2629,515],{"class":469},[446,2631,2510],{"class":456},[446,2633,521],{"class":469},[446,2635,524],{"class":469},[446,2637,2638,2640,2642,2644,2646,2648,2651],{"class":448,"line":483},[446,2639,584],{"class":469},[446,2641,2521],{"class":587},[446,2643,521],{"class":469},[446,2645,512],{"class":469},[446,2647,515],{"class":469},[446,2649,2650],{"class":456},"answer",[446,2652,949],{"class":469},[446,2654,2655],{"class":448,"line":492},[446,2656,563],{"class":469},[857,2658,2660],{"id":2659},"каналы-данных","Каналы данных",[279,2662,2663],{},"WebRTC использует канал данных с названием \"messages\" со следующими параметрами:",[1190,2665,2666,2671,2677],{},[286,2667,2668,2670],{},[419,2669,588],{},": 0",[286,2672,2673,2676],{},[419,2674,2675],{},"ordered",": true",[286,2678,2679,2676],{},[419,2680,2681],{},"negotiated",[857,2683,1830],{"id":2684},"отправка-сообщений-1",[283,2686,2687],{},[286,2688,2689,2691],{},[289,2690,1837],{},": Отправка JSON через канал данных",[437,2693,2694],{"className":571,"code":1840,"language":573,"meta":442,"style":442},[419,2695,2696,2700,2716],{"__ignoreMap":442},[446,2697,2698],{"class":448,"line":449},[446,2699,502],{"class":469},[446,2701,2702,2704,2706,2708,2710,2712,2714],{"class":448,"line":460},[446,2703,584],{"class":469},[446,2705,731],{"class":587},[446,2707,521],{"class":469},[446,2709,512],{"class":469},[446,2711,515],{"class":469},[446,2713,1861],{"class":456},[446,2715,949],{"class":469},[446,2717,2718],{"class":448,"line":483},[446,2719,563],{"class":469},[283,2721,2722],{"start":460},[286,2723,2724,2726],{},[289,2725,1874],{},": Аудио автоматически отправляется через аудио трек",[857,2728,1892],{"id":2729},"получение-ответов-1",[283,2731,2732,2738],{},[286,2733,2734,2737],{},[289,2735,2736],{},"Текстовые/контрольные сообщения",": Получаются через канал данных используя общие типы ответов",[286,2739,2740,2742],{},[289,2741,375],{},": Получается через WebRTC аудио трек",[274,2744,2746],{"id":2745},"завершение-соединения","Завершение соединения",[279,2748,2749],{},"Соединение может быть завершено:",[283,2751,2752,2755,2758],{},[286,2753,2754],{},"Отключением клиента",[286,2756,2757],{},"Сервером, отправляющим completion emission с типом \"termination\"",[286,2759,2760],{},"Выключением сервера Восстановление соединения в случае отключения со стороны сервера невозможно.",[2762,2763,2764],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":442,"searchDepth":449,"depth":460,"links":2766},[2767,2768,2771,2775,2782,2789],{"id":276,"depth":460,"text":277},{"id":413,"depth":460,"text":414,"children":2769},[2770],{"id":859,"depth":483,"text":860},{"id":999,"depth":460,"text":1000,"children":2772},[2773,2774],{"id":1003,"depth":483,"text":1004},{"id":1279,"depth":483,"text":1280},{"id":1782,"depth":460,"text":1783,"children":2776},[2777,2778,2779,2780,2781],{"id":1795,"depth":483,"text":1796},{"id":1829,"depth":483,"text":1830},{"id":1891,"depth":483,"text":1892},{"id":1918,"depth":483,"text":1919},{"id":2179,"depth":483,"text":2180},{"id":2454,"depth":460,"text":2455,"children":2783},[2784,2785,2786,2787,2788],{"id":2458,"depth":483,"text":2459},{"id":2471,"depth":483,"text":1796},{"id":2659,"depth":483,"text":2660},{"id":2684,"depth":483,"text":1830},{"id":2729,"depth":483,"text":1892},{"id":2745,"depth":460,"text":2746},"WebRTC, WebSocket и REST","md",null,{},{"icon":15},{"title":10,"description":2790},"PtQykS946-1gt7pFmQGlNPe9yWaXZ4AsCq2UYC0Y1TI",[2798,2800],{"title":146,"path":147,"stem":148,"description":2799,"icon":149,"children":-1},"Integrations and functions for agents",{"title":166,"path":167,"stem":168,"description":2801,"icon":25,"children":-1},"Интеграция агента в веб-приложение через SDK",1778099775680]