[{"data":1,"prerenderedAt":1286},["ShallowReactive",2],{"navigation":3,"/ru/cases/call-from-site-sdk":268,"/ru/cases/call-from-site-sdk-surround":1281},[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":166,"body":270,"description":1274,"extension":1275,"links":1276,"meta":1277,"navigation":1278,"path":167,"seo":1279,"stem":168,"__hash__":1280},"docs/ru/cases/call-from-site-sdk.md",{"type":271,"value":272,"toc":1256},"minimark",[273,277,287,292,316,320,323,328,354,358,365,483,487,552,555,559,563,578,582,623,627,846,850,984,988,1073,1077,1139,1143,1167,1171,1174,1237,1252],[274,275,276],"p",{},"Итак, вы хотите добавить агента в свое веб-приложение. Для этого вам понадобится 2 наших SDK:",[278,279,280,284],"ol",{},[281,282,283],"li",{},"Клиент - браузер пользователя, с которого он обращается к Серверу аутенфикации и console. На клиенте используем JavaScript SDK (aiva-client-js-sdk)",[281,285,286],{},"Сервер аутенфикации - ваш сервер, который будет выдавать Клиенту токены авторизации. На нем используем Python SDK (aiva)",[288,289,291],"h2",{"id":290},"_1-получите-api-ключ","🔑 1. Получите API ключ",[278,293,294,304,307,310,313],{},[281,295,296,297],{},"Зайдите на ",[298,299,303],"a",{"href":300,"rel":301},"https://app.aiva.chat/",[302],"nofollow","https://app.aiva.chat",[281,305,306],{},"Зарегистрируйтесь или войдите в аккаунт",[281,308,309],{},"Нажмите на свою аватарку -> API ключи",[281,311,312],{},"Создайте новый API ключ",[281,314,315],{},"Сохраните ключ в безопасном месте",[288,317,319],{"id":318},"️-2-создайте-сервер-аутенфикации-на-питоне","🖥️ 2. Создайте сервер аутенфикации на Питоне",[274,321,322],{},"Ваш API-ключ нельзя показывать браузерам, ведь тогда пользователи смогут его украсть. Поэтому console авторизует взаимодействия одноразовым токеном, который действует 30 секунд. Этот токен выдает API console. Python SDK упрощает взаимодействие с этим API",[324,325,327],"h3",{"id":326},"_21-установите-пакет","2.1. Установите пакет",[329,330,335],"pre",{"className":331,"code":332,"language":333,"meta":334,"style":334},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pip install aiva\n","bash","",[336,337,338],"code",{"__ignoreMap":334},[339,340,343,347,351],"span",{"class":341,"line":342},"line",1,[339,344,346],{"class":345},"sBMFI","pip",[339,348,350],{"class":349},"sfazB"," install",[339,352,353],{"class":349}," aiva\n",[324,355,357],{"id":356},"_22-создайте-простой-сервер-аутенфикации","2.2. Создайте простой сервер аутенфикации",[274,359,360,361,364],{},"Создайте файл ",[336,362,363],{},"token_server.py",":",[329,366,370],{"className":367,"code":368,"language":369,"meta":334,"style":334},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from aiva import aivaTokenServer\n\ndef main():\n    # Настройка сервера токенов\n    server = aivaTokenServer(\n        tos_base_url=\"https://app.aiva.chat\",  # URL бэкенда TOS\n        api_key=\"your-api-key\",                  # Ваш API ключ\n        host=\"0.0.0.0\",                         # Хост сервера\n        port=8001                               # Порт сервера\n    )\n\n    print(\"🚀 Запуск токен-сервера на http://localhost:8001\")\n    print(\"📖 Документация доступна на http://localhost:8001/docs\")\n\n    # Запуск сервера (блокирующий)\n    server.run()\n\nif __name__ == \"__main__\":\n    main()\n","python",[336,371,372,377,384,390,396,402,408,414,420,426,432,437,443,449,454,460,466,471,477],{"__ignoreMap":334},[339,373,374],{"class":341,"line":342},[339,375,376],{},"from aiva import aivaTokenServer\n",[339,378,380],{"class":341,"line":379},2,[339,381,383],{"emptyLinePlaceholder":382},true,"\n",[339,385,387],{"class":341,"line":386},3,[339,388,389],{},"def main():\n",[339,391,393],{"class":341,"line":392},4,[339,394,395],{},"    # Настройка сервера токенов\n",[339,397,399],{"class":341,"line":398},5,[339,400,401],{},"    server = aivaTokenServer(\n",[339,403,405],{"class":341,"line":404},6,[339,406,407],{},"        tos_base_url=\"https://app.aiva.chat\",  # URL бэкенда TOS\n",[339,409,411],{"class":341,"line":410},7,[339,412,413],{},"        api_key=\"your-api-key\",                  # Ваш API ключ\n",[339,415,417],{"class":341,"line":416},8,[339,418,419],{},"        host=\"0.0.0.0\",                         # Хост сервера\n",[339,421,423],{"class":341,"line":422},9,[339,424,425],{},"        port=8001                               # Порт сервера\n",[339,427,429],{"class":341,"line":428},10,[339,430,431],{},"    )\n",[339,433,435],{"class":341,"line":434},11,[339,436,383],{"emptyLinePlaceholder":382},[339,438,440],{"class":341,"line":439},12,[339,441,442],{},"    print(\"🚀 Запуск токен-сервера на http://localhost:8001\")\n",[339,444,446],{"class":341,"line":445},13,[339,447,448],{},"    print(\"📖 Документация доступна на http://localhost:8001/docs\")\n",[339,450,452],{"class":341,"line":451},14,[339,453,383],{"emptyLinePlaceholder":382},[339,455,457],{"class":341,"line":456},15,[339,458,459],{},"    # Запуск сервера (блокирующий)\n",[339,461,463],{"class":341,"line":462},16,[339,464,465],{},"    server.run()\n",[339,467,469],{"class":341,"line":468},17,[339,470,383],{"emptyLinePlaceholder":382},[339,472,474],{"class":341,"line":473},18,[339,475,476],{},"if __name__ == \"__main__\":\n",[339,478,480],{"class":341,"line":479},19,[339,481,482],{},"    main()\n",[324,484,486],{"id":485},"_23-проверьте-сервер-аутенфикации","2.3. Проверьте сервер аутенфикации",[329,488,490],{"className":331,"code":489,"language":333,"meta":334,"style":334},"# Запуск сервера\npython token_server.py\n\n# В другом терминале - тест токена\ncurl -X POST http://localhost:8001/token\n\n# Ответ:\n# {\n#   \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n# }\n",[336,491,492,498,505,509,514,528,532,537,542,547],{"__ignoreMap":334},[339,493,494],{"class":341,"line":342},[339,495,497],{"class":496},"sHwdD","# Запуск сервера\n",[339,499,500,502],{"class":341,"line":379},[339,501,369],{"class":345},[339,503,504],{"class":349}," token_server.py\n",[339,506,507],{"class":341,"line":386},[339,508,383],{"emptyLinePlaceholder":382},[339,510,511],{"class":341,"line":392},[339,512,513],{"class":496},"# В другом терминале - тест токена\n",[339,515,516,519,522,525],{"class":341,"line":398},[339,517,518],{"class":345},"curl",[339,520,521],{"class":349}," -X",[339,523,524],{"class":349}," POST",[339,526,527],{"class":349}," http://localhost:8001/token\n",[339,529,530],{"class":341,"line":404},[339,531,383],{"emptyLinePlaceholder":382},[339,533,534],{"class":341,"line":410},[339,535,536],{"class":496},"# Ответ:\n",[339,538,539],{"class":341,"line":416},[339,540,541],{"class":496},"# {\n",[339,543,544],{"class":341,"line":422},[339,545,546],{"class":496},"#   \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n",[339,548,549],{"class":341,"line":428},[339,550,551],{"class":496},"# }\n",[274,553,554],{},"NB: вы можете добавить свою логику аутенфикации на сервер. В руководстве показан сервер, который примет любый входящий запрос.",[288,556,558],{"id":557},"_3-настройка-клиента-на-джаваскрипте","🌐 3. Настройка клиента на Джаваскрипте",[324,560,562],{"id":561},"_31-установите-клиентский-sdk","3.1. Установите клиентский SDK",[329,564,566],{"className":331,"code":565,"language":333,"meta":334,"style":334},"npm install aiva-client-js-sdk\n",[336,567,568],{"__ignoreMap":334},[339,569,570,573,575],{"class":341,"line":342},[339,571,572],{"class":345},"npm",[339,574,350],{"class":349},[339,576,577],{"class":349}," aiva-client-js-sdk\n",[324,579,581],{"id":580},"_32-сконфигурируйте-обязательные-параметры","3.2. Сконфигурируйте обязательные параметры",[329,583,587],{"className":584,"code":585,"language":586,"meta":334,"style":334},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { aivaWebClient } from \"aiva-client-js-sdk\";\n\n// Создание клиента с аутентификацией по токену\nconst client = new aivaWebClient({\n  serverUrl: \"https://your-runtime-server.com\", // Сервер выполнения (/run/voice/offer)\n  tokenServerUrl: \"http://localhost:8001\", // Токен-сервер (/token)\n});\n","javascript",[336,588,589,594,598,603,608,613,618],{"__ignoreMap":334},[339,590,591],{"class":341,"line":342},[339,592,593],{},"import { aivaWebClient } from \"aiva-client-js-sdk\";\n",[339,595,596],{"class":341,"line":379},[339,597,383],{"emptyLinePlaceholder":382},[339,599,600],{"class":341,"line":386},[339,601,602],{},"// Создание клиента с аутентификацией по токену\n",[339,604,605],{"class":341,"line":392},[339,606,607],{},"const client = new aivaWebClient({\n",[339,609,610],{"class":341,"line":398},[339,611,612],{},"  serverUrl: \"https://your-runtime-server.com\", // Сервер выполнения (/run/voice/offer)\n",[339,614,615],{"class":341,"line":404},[339,616,617],{},"  tokenServerUrl: \"http://localhost:8001\", // Токен-сервер (/token)\n",[339,619,620],{"class":341,"line":410},[339,621,622],{},"});\n",[324,624,626],{"id":625},"_33-обрабатывайте-получаемые-события","3.3. Обрабатывайте получаемые события",[329,628,630],{"className":584,"code":629,"language":586,"meta":334,"style":334},"// Начало звонка\nclient.on(\"call_started\", () => {\n  console.log(\"🚀 Звонок начался\");\n  updateUI(\"connected\");\n});\n\n// Конец звонка\nclient.on(\"call_ended\", () => {\n  console.log(\"📞 Звонок завершен\");\n  updateUI(\"disconnected\");\n});\n\n// Агент начал говорить\nclient.on(\"agent_start_talking\", () => {\n  console.log(\"🎤 Агент начал говорить\");\n  showSpeakingIndicator(true);\n});\n\n// Агент закончил говорить\nclient.on(\"agent_stop_talking\", () => {\n  console.log(\"🔇 Агент закончил говорить\");\n  showSpeakingIndicator(false);\n});\n\n// Получение сообщений\nclient.on(\"update\", (message) => {\n  console.log(\"📨 Получено сообщение:\", message);\n  displayMessage(message);\n});\n\n// Обработка ошибок\nclient.on(\"error\", (error) => {\n  console.error(\"❌ Ошибка:\", error);\n  showError(error.message);\n});\n\n// Изменение состояния соединения\nclient.on(\"connection_state_change\", (state) => {\n  console.log(\"🔗 Состояние соединения:\", state);\n  updateConnectionStatus(state);\n});\n",[336,631,632,637,642,647,652,656,660,665,670,675,680,684,688,693,698,703,708,712,716,721,727,733,739,744,749,755,761,767,773,778,783,789,795,801,807,812,817,823,829,835,841],{"__ignoreMap":334},[339,633,634],{"class":341,"line":342},[339,635,636],{},"// Начало звонка\n",[339,638,639],{"class":341,"line":379},[339,640,641],{},"client.on(\"call_started\", () => {\n",[339,643,644],{"class":341,"line":386},[339,645,646],{},"  console.log(\"🚀 Звонок начался\");\n",[339,648,649],{"class":341,"line":392},[339,650,651],{},"  updateUI(\"connected\");\n",[339,653,654],{"class":341,"line":398},[339,655,622],{},[339,657,658],{"class":341,"line":404},[339,659,383],{"emptyLinePlaceholder":382},[339,661,662],{"class":341,"line":410},[339,663,664],{},"// Конец звонка\n",[339,666,667],{"class":341,"line":416},[339,668,669],{},"client.on(\"call_ended\", () => {\n",[339,671,672],{"class":341,"line":422},[339,673,674],{},"  console.log(\"📞 Звонок завершен\");\n",[339,676,677],{"class":341,"line":428},[339,678,679],{},"  updateUI(\"disconnected\");\n",[339,681,682],{"class":341,"line":434},[339,683,622],{},[339,685,686],{"class":341,"line":439},[339,687,383],{"emptyLinePlaceholder":382},[339,689,690],{"class":341,"line":445},[339,691,692],{},"// Агент начал говорить\n",[339,694,695],{"class":341,"line":451},[339,696,697],{},"client.on(\"agent_start_talking\", () => {\n",[339,699,700],{"class":341,"line":456},[339,701,702],{},"  console.log(\"🎤 Агент начал говорить\");\n",[339,704,705],{"class":341,"line":462},[339,706,707],{},"  showSpeakingIndicator(true);\n",[339,709,710],{"class":341,"line":468},[339,711,622],{},[339,713,714],{"class":341,"line":473},[339,715,383],{"emptyLinePlaceholder":382},[339,717,718],{"class":341,"line":479},[339,719,720],{},"// Агент закончил говорить\n",[339,722,724],{"class":341,"line":723},20,[339,725,726],{},"client.on(\"agent_stop_talking\", () => {\n",[339,728,730],{"class":341,"line":729},21,[339,731,732],{},"  console.log(\"🔇 Агент закончил говорить\");\n",[339,734,736],{"class":341,"line":735},22,[339,737,738],{},"  showSpeakingIndicator(false);\n",[339,740,742],{"class":341,"line":741},23,[339,743,622],{},[339,745,747],{"class":341,"line":746},24,[339,748,383],{"emptyLinePlaceholder":382},[339,750,752],{"class":341,"line":751},25,[339,753,754],{},"// Получение сообщений\n",[339,756,758],{"class":341,"line":757},26,[339,759,760],{},"client.on(\"update\", (message) => {\n",[339,762,764],{"class":341,"line":763},27,[339,765,766],{},"  console.log(\"📨 Получено сообщение:\", message);\n",[339,768,770],{"class":341,"line":769},28,[339,771,772],{},"  displayMessage(message);\n",[339,774,776],{"class":341,"line":775},29,[339,777,622],{},[339,779,781],{"class":341,"line":780},30,[339,782,383],{"emptyLinePlaceholder":382},[339,784,786],{"class":341,"line":785},31,[339,787,788],{},"// Обработка ошибок\n",[339,790,792],{"class":341,"line":791},32,[339,793,794],{},"client.on(\"error\", (error) => {\n",[339,796,798],{"class":341,"line":797},33,[339,799,800],{},"  console.error(\"❌ Ошибка:\", error);\n",[339,802,804],{"class":341,"line":803},34,[339,805,806],{},"  showError(error.message);\n",[339,808,810],{"class":341,"line":809},35,[339,811,622],{},[339,813,815],{"class":341,"line":814},36,[339,816,383],{"emptyLinePlaceholder":382},[339,818,820],{"class":341,"line":819},37,[339,821,822],{},"// Изменение состояния соединения\n",[339,824,826],{"class":341,"line":825},38,[339,827,828],{},"client.on(\"connection_state_change\", (state) => {\n",[339,830,832],{"class":341,"line":831},39,[339,833,834],{},"  console.log(\"🔗 Состояние соединения:\", state);\n",[339,836,838],{"class":341,"line":837},40,[339,839,840],{},"  updateConnectionStatus(state);\n",[339,842,844],{"class":341,"line":843},41,[339,845,622],{},[324,847,849],{"id":848},"_34-начните-звонок","3.4. Начните звонок",[329,851,853],{"className":584,"code":852,"language":586,"meta":334,"style":334},"async function startCall() {\n  try {\n    await client.startCall({\n      agentUuid: \"your-agent-uuid\", // UUID агента\n      allowedResponses: [\"text\", \"voice\"], // Разрешенные типы ответов\n      sampleRate: 24000, // Частота дискретизации аудио\n      emitRawAudioSamples: true, // Эмиссия сырых аудио данных\n      dataInput: {\n        // Начальные данные для агента\n        userId: \"user123\",\n        context: \"support_call\",\n      },\n      messages: [\n        // Начальные сообщения\n        {\n          type: \"system\",\n          content: \"Вы помощник службы поддержки\",\n        },\n      ],\n    });\n\n    console.log(\"✅ Звонок успешно начат\");\n  } catch (error) {\n    console.error(\"❌ Ошибка при начале звонка:\", error);\n  }\n}\n",[336,854,855,860,865,870,875,880,885,890,895,900,905,910,915,920,925,930,935,940,945,950,955,959,964,969,974,979],{"__ignoreMap":334},[339,856,857],{"class":341,"line":342},[339,858,859],{},"async function startCall() {\n",[339,861,862],{"class":341,"line":379},[339,863,864],{},"  try {\n",[339,866,867],{"class":341,"line":386},[339,868,869],{},"    await client.startCall({\n",[339,871,872],{"class":341,"line":392},[339,873,874],{},"      agentUuid: \"your-agent-uuid\", // UUID агента\n",[339,876,877],{"class":341,"line":398},[339,878,879],{},"      allowedResponses: [\"text\", \"voice\"], // Разрешенные типы ответов\n",[339,881,882],{"class":341,"line":404},[339,883,884],{},"      sampleRate: 24000, // Частота дискретизации аудио\n",[339,886,887],{"class":341,"line":410},[339,888,889],{},"      emitRawAudioSamples: true, // Эмиссия сырых аудио данных\n",[339,891,892],{"class":341,"line":416},[339,893,894],{},"      dataInput: {\n",[339,896,897],{"class":341,"line":422},[339,898,899],{},"        // Начальные данные для агента\n",[339,901,902],{"class":341,"line":428},[339,903,904],{},"        userId: \"user123\",\n",[339,906,907],{"class":341,"line":434},[339,908,909],{},"        context: \"support_call\",\n",[339,911,912],{"class":341,"line":439},[339,913,914],{},"      },\n",[339,916,917],{"class":341,"line":445},[339,918,919],{},"      messages: [\n",[339,921,922],{"class":341,"line":451},[339,923,924],{},"        // Начальные сообщения\n",[339,926,927],{"class":341,"line":456},[339,928,929],{},"        {\n",[339,931,932],{"class":341,"line":462},[339,933,934],{},"          type: \"system\",\n",[339,936,937],{"class":341,"line":468},[339,938,939],{},"          content: \"Вы помощник службы поддержки\",\n",[339,941,942],{"class":341,"line":473},[339,943,944],{},"        },\n",[339,946,947],{"class":341,"line":479},[339,948,949],{},"      ],\n",[339,951,952],{"class":341,"line":723},[339,953,954],{},"    });\n",[339,956,957],{"class":341,"line":729},[339,958,383],{"emptyLinePlaceholder":382},[339,960,961],{"class":341,"line":735},[339,962,963],{},"    console.log(\"✅ Звонок успешно начат\");\n",[339,965,966],{"class":341,"line":741},[339,967,968],{},"  } catch (error) {\n",[339,970,971],{"class":341,"line":746},[339,972,973],{},"    console.error(\"❌ Ошибка при начале звонка:\", error);\n",[339,975,976],{"class":341,"line":751},[339,977,978],{},"  }\n",[339,980,981],{"class":341,"line":757},[339,982,983],{},"}\n",[324,985,987],{"id":986},"_35-отправляйте-аудио","3.5. Отправляйте аудио",[329,989,991],{"className":584,"code":990,"language":586,"meta":334,"style":334},"// Включение эмиссии сырых аудио данных\nclient.on(\"audio\", (audioData) => {\n  console.log(\"🎵 Получены аудио данные:\", audioData.length, \"сэмплов\");\n\n  // audioData - это Float32Array с PCM данными\n  // Можно обработать, сохранить или передать дальше\n  processAudioData(audioData);\n});\n\nfunction processAudioData(float32Audio) {\n  // Пример: конвертация в другой формат\n  const uint8Audio = convertFloat32ToUnsigned8(float32Audio);\n\n  // Или анализ громкости\n  const volume = calculateVolume(float32Audio);\n  updateVolumeIndicator(volume);\n}\n",[336,992,993,998,1003,1008,1012,1017,1022,1027,1031,1035,1040,1045,1050,1054,1059,1064,1069],{"__ignoreMap":334},[339,994,995],{"class":341,"line":342},[339,996,997],{},"// Включение эмиссии сырых аудио данных\n",[339,999,1000],{"class":341,"line":379},[339,1001,1002],{},"client.on(\"audio\", (audioData) => {\n",[339,1004,1005],{"class":341,"line":386},[339,1006,1007],{},"  console.log(\"🎵 Получены аудио данные:\", audioData.length, \"сэмплов\");\n",[339,1009,1010],{"class":341,"line":392},[339,1011,383],{"emptyLinePlaceholder":382},[339,1013,1014],{"class":341,"line":398},[339,1015,1016],{},"  // audioData - это Float32Array с PCM данными\n",[339,1018,1019],{"class":341,"line":404},[339,1020,1021],{},"  // Можно обработать, сохранить или передать дальше\n",[339,1023,1024],{"class":341,"line":410},[339,1025,1026],{},"  processAudioData(audioData);\n",[339,1028,1029],{"class":341,"line":416},[339,1030,622],{},[339,1032,1033],{"class":341,"line":422},[339,1034,383],{"emptyLinePlaceholder":382},[339,1036,1037],{"class":341,"line":428},[339,1038,1039],{},"function processAudioData(float32Audio) {\n",[339,1041,1042],{"class":341,"line":434},[339,1043,1044],{},"  // Пример: конвертация в другой формат\n",[339,1046,1047],{"class":341,"line":439},[339,1048,1049],{},"  const uint8Audio = convertFloat32ToUnsigned8(float32Audio);\n",[339,1051,1052],{"class":341,"line":445},[339,1053,383],{"emptyLinePlaceholder":382},[339,1055,1056],{"class":341,"line":451},[339,1057,1058],{},"  // Или анализ громкости\n",[339,1060,1061],{"class":341,"line":456},[339,1062,1063],{},"  const volume = calculateVolume(float32Audio);\n",[339,1065,1066],{"class":341,"line":462},[339,1067,1068],{},"  updateVolumeIndicator(volume);\n",[339,1070,1071],{"class":341,"line":468},[339,1072,983],{},[324,1074,1076],{"id":1075},"_36-отправляйте-текстовые-сообщения","3.6. Отправляйте текстовые сообщения",[329,1078,1080],{"className":584,"code":1079,"language":586,"meta":334,"style":334},"function sendMessage(text) {\n  const success = client.sendMessage(text);\n  if (success) {\n    console.log(\"📤 Сообщение отправлено:\", text);\n    addMessageToChat(\"user\", text);\n  } else {\n    console.error(\"❌ Не удалось отправить сообщение\");\n  }\n}\n\n// Пример использования\nsendMessage(\"Привет, мне нужна помощь с заказом\");\n",[336,1081,1082,1087,1092,1097,1102,1107,1112,1117,1121,1125,1129,1134],{"__ignoreMap":334},[339,1083,1084],{"class":341,"line":342},[339,1085,1086],{},"function sendMessage(text) {\n",[339,1088,1089],{"class":341,"line":379},[339,1090,1091],{},"  const success = client.sendMessage(text);\n",[339,1093,1094],{"class":341,"line":386},[339,1095,1096],{},"  if (success) {\n",[339,1098,1099],{"class":341,"line":392},[339,1100,1101],{},"    console.log(\"📤 Сообщение отправлено:\", text);\n",[339,1103,1104],{"class":341,"line":398},[339,1105,1106],{},"    addMessageToChat(\"user\", text);\n",[339,1108,1109],{"class":341,"line":404},[339,1110,1111],{},"  } else {\n",[339,1113,1114],{"class":341,"line":410},[339,1115,1116],{},"    console.error(\"❌ Не удалось отправить сообщение\");\n",[339,1118,1119],{"class":341,"line":416},[339,1120,978],{},[339,1122,1123],{"class":341,"line":422},[339,1124,983],{},[339,1126,1127],{"class":341,"line":428},[339,1128,383],{"emptyLinePlaceholder":382},[339,1130,1131],{"class":341,"line":434},[339,1132,1133],{},"// Пример использования\n",[339,1135,1136],{"class":341,"line":439},[339,1137,1138],{},"sendMessage(\"Привет, мне нужна помощь с заказом\");\n",[324,1140,1142],{"id":1141},"_37-завершите-звонок","3.7. Завершите звонок",[329,1144,1146],{"className":584,"code":1145,"language":586,"meta":334,"style":334},"function stopCall() {\n  client.stopCall();\n  console.log(\"📞 Звонок остановлен\");\n}\n",[336,1147,1148,1153,1158,1163],{"__ignoreMap":334},[339,1149,1150],{"class":341,"line":342},[339,1151,1152],{},"function stopCall() {\n",[339,1154,1155],{"class":341,"line":379},[339,1156,1157],{},"  client.stopCall();\n",[339,1159,1160],{"class":341,"line":386},[339,1161,1162],{},"  console.log(\"📞 Звонок остановлен\");\n",[339,1164,1165],{"class":341,"line":392},[339,1166,983],{},[288,1168,1170],{"id":1169},"_4-все-слишком-сложно-ничего-не-понятно","🧪 4. Все слишком сложно, ничего не понятно",[274,1172,1173],{},"Вы можете воспрользоваться demo.py и test-browser.js в наших SDK, чтобы попробовать минимальные примеры",[329,1175,1177],{"className":331,"code":1176,"language":333,"meta":334,"style":334},"# В корневой папке python SDK\npython demo.py\n\n# В корневой папке javascript SDK\nnpm run build\n\n# Запуск тест-сервера\nnpm run demo\n\n# Откройте http://localhost:3000\n",[336,1178,1179,1184,1191,1195,1200,1210,1214,1219,1228,1232],{"__ignoreMap":334},[339,1180,1181],{"class":341,"line":342},[339,1182,1183],{"class":496},"# В корневой папке python SDK\n",[339,1185,1186,1188],{"class":341,"line":379},[339,1187,369],{"class":345},[339,1189,1190],{"class":349}," demo.py\n",[339,1192,1193],{"class":341,"line":386},[339,1194,383],{"emptyLinePlaceholder":382},[339,1196,1197],{"class":341,"line":392},[339,1198,1199],{"class":496},"# В корневой папке javascript SDK\n",[339,1201,1202,1204,1207],{"class":341,"line":398},[339,1203,572],{"class":345},[339,1205,1206],{"class":349}," run",[339,1208,1209],{"class":349}," build\n",[339,1211,1212],{"class":341,"line":404},[339,1213,383],{"emptyLinePlaceholder":382},[339,1215,1216],{"class":341,"line":410},[339,1217,1218],{"class":496},"# Запуск тест-сервера\n",[339,1220,1221,1223,1225],{"class":341,"line":416},[339,1222,572],{"class":345},[339,1224,1206],{"class":349},[339,1226,1227],{"class":349}," demo\n",[339,1229,1230],{"class":341,"line":422},[339,1231,383],{"emptyLinePlaceholder":382},[339,1233,1234],{"class":341,"line":428},[339,1235,1236],{"class":496},"# Откройте http://localhost:3000\n",[274,1238,1239,1240,1245,1246,1251],{},"Начните с простых примеров и постепенно добавляйте функциональность по мере необходимости. Удачи в разработке! Присоединяйтесь к нашему ",[298,1241,1244],{"href":1242,"rel":1243},"https://t.me/+QFTjIgf70NFmN2My",[302],"tg-каналу"," и ",[298,1247,1250],{"href":1248,"rel":1249},"https://t.me/+n20MsKSZzzMwNDgy",[302],"чату"," для обсуждения и поддержки.",[1253,1254,1255],"style",{},"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 .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 .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":334,"searchDepth":342,"depth":379,"links":1257},[1258,1259,1264,1273],{"id":290,"depth":379,"text":291},{"id":318,"depth":379,"text":319,"children":1260},[1261,1262,1263],{"id":326,"depth":386,"text":327},{"id":356,"depth":386,"text":357},{"id":485,"depth":386,"text":486},{"id":557,"depth":379,"text":558,"children":1265},[1266,1267,1268,1269,1270,1271,1272],{"id":561,"depth":386,"text":562},{"id":580,"depth":386,"text":581},{"id":625,"depth":386,"text":626},{"id":848,"depth":386,"text":849},{"id":986,"depth":386,"text":987},{"id":1075,"depth":386,"text":1076},{"id":1141,"depth":386,"text":1142},{"id":1169,"depth":379,"text":1170},"Интеграция агента в веб-приложение через SDK","md",null,{},{"icon":25},{"title":166,"description":1274},"DuPVMW3ImYyLxoVSA2tcYj5oUfohGhDwjKoKGYFhuHo",[1282,1284],{"title":10,"path":156,"stem":157,"description":1283,"icon":15,"children":-1},"WebRTC, WebSocket и REST",{"title":170,"path":171,"stem":172,"description":1285,"icon":30,"children":-1},"Подключение агента к телефонии Voximplant",1778099774332]