Документация ›Интеграции и API
Настройка агента из вашего кода (REST API)
Всё, что вы задаёте на странице Настройки, можно задать и скриптом — удобно, если у вас несколько филиалов или настройку ведёт агентство. Авторизация — полным API-ключом из раздела Аккаунт → API-ключи.
Прочитать текущие настройки:
curl https://sipmind.net/api/v1/agent/config \ -H "Authorization: Bearer sk-tenant-ВАШ_КЛЮЧ"
Поменять одно значение — отправляйте только те поля, которые меняете, остальное останется как было:
curl -X PATCH https://sipmind.net/api/v1/agent/config \
-H "Authorization: Bearer sk-tenant-ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{"welcome_message": "Здравствуйте! Слушаю вас.", "temperature": 0.5}'Полный справочник: документация для разработчика — на sipmind.net/developers (открытая, её можно просто отправить своему интегратору), машинночитаемая схема — /api/v1/openapi.json, её понимает большинство генераторов клиентов.
Что можно задавать: system_prompt, prompt_mode, business_context, welcome_message, voice, voice_speed, realtime_model, temperature, max_response_output_tokens, rag_top_k, rag_threshold, timezone, notification_language, customer_languages, spoken_facts, blocked_numbers. Ответ на GET перечисляет допустимые значения для каждого, а prompt_field называет поле для вашего текста — business_context у всех нынешних аккаунтов. То, как агент себя ведёт, — наше: поддерживается нами, не редактируется и не показывается. system_prompt можно писать только аккаунту, который ещё работает на промпте, написанном целиком. Незнакомое имя поля возвращается ошибкой, а не молчаливым «сохранено».
Факты дословно. Часы, адреса и телефоны клиент записывает, поэтому давайте их агенту точными словами, а не прозой в промпте, — это тот же список, что «Произносить дословно» в Настройках. spoken_facts — это {место: {факт: точные слова}}; тот же факт на другом языке — отдельный ключ, например "часы@kk". Отправляйте объект целиком; {} удаляет всё.
curl -X PATCH https://sipmind.net/api/v1/agent/config \
-H "Authorization: Bearer sk-tenant-ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{"spoken_facts": {"центр": {"часы": "с понедельника по субботу, с девяти до семи",
"адрес": "Гаванская улица, пятнадцать, второй этаж"}}}'blocked_numbers — номера, которым агент никогда не отвечает: номер целиком или префикс не короче семи цифр со звёздочкой, например +1555012*. Заблокированный звонок ничего не стоит и не оставляет расшифровки. voice_speed — темп речи от 0,25 до 1,5 от естественного; null возвращает естественный. Каждое значение, которое мы не можем принять, названо в ошибке — ничего не отбрасывается молча.
Лимиты тарифа. В ответе на GET есть объект limits — потолки вашего тарифа на длину system_prompt и business_context, на rag_top_k и на max_response_output_tokens. Именно эти четыре определяют стоимость каждого разговора, поэтому на недорогих тарифах они ограничены. Читайте limits до записи: превышение возвращается ошибкой 400 с названием поля и числом, и ничего не сохраняется. Пустой объект означает, что у вашего тарифа потолка нет. Отдельно ограничено число документов базы знаний в сутки — запас такой, что реальная загрузка в него не упирается, а зациклившийся скрипт — да.
Работайте с SIPmind из Claude. В claude.ai или приложении Claude: Настройки → Коннекторы → Добавить свой коннектор, вставьте https://sipmind.net/mcp, войдите сюда и нажмите Разрешить — выберите полный доступ или только чтение. Дальше просто просите: описать бизнес агенту, загрузить прайс, показать лиды за неделю. Подключение видно в Аккаунт → API-ключи и там же отключается. Разработчики в Claude Code, Cursor или Codex подключают тот же адрес с ключом или запускают скачиваемый файл — оба способа на странице для разработчиков. Он умеет настраивать, читать и проверять агента; звонить, слать платные шаблоны и удалять — намеренно не умеет.
Проверка агента из кода. POST /api/v1/agent/test (инструмент ask_agent) отвечает на сообщение клиента так же, как живой чат, и перечисляет действия, которые агент бы совершил — сохранить лид, позвать человека, записать, — не совершая ни одного. Ничего не отправляется и не сохраняется.
События, которые мы шлём вам. Укажите адрес в Настройках — и каждый новый лид придёт туда POST-запросом (lead.created), подписанным вашим секретом (X-SIPmind-Signature); при ошибке сервера отправка повторяется. Остальное — лид сменил стадию, создан или изменён контакт, объединены два контакта или два лида, закончился звонок, создана или отменена запись, поставлена или выполнена задача — начнёт приходить, когда вы подпишетесь на эти события через PUT /api/v1/events/subscription; GET по тому же адресу перечисляет их все (см. «Исходящие вебхуки» в разделе CRM-интеграции). Используйте события как подсказку, а источником истины держите опрос с updated_since: доставку можно потерять, опрос — нет.
Этот метод не может тронуть токены каналов
Он читает и пишет только поведение агента — токены WhatsApp / Telegram / Instagram, ваш собственный AI-ключ и пароли отсюда не читаются и не записываются. Так задумано: скрипт настройки не должен иметь возможности потерять подключённый канал. Каналы подключаются и отключаются в разделе Интеграции.
Подключение каналов из кода. GET /api/v1/channels показывает, где каждый канал на самом деле — и отдельно помечает полуподключённые: ключи сохранены, а рукопожатия с провайдером нет, и тогда все экраны показывают «подключено», а не приходит ни одного сообщения.
curl -X POST https://sipmind.net/api/v1/channels/telegram \
-H "Authorization: Bearer sk-tenant-ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{"bot_token": "123456:AA..."}'Этот один запрос проверяет токен у Telegram, сохраняет его и регистрирует вебхук — и возвращает ошибку, а не зелёный ответ, если вебхук не встал. Телефонные номера так же: GET/POST /api/v1/channels/phone и DELETE /api/v1/channels/phone/{id}. Токены везде только на запись: задать можно, прочитать обратно — нет.
WhatsApp из кода. Если номер уже живёт в приложении Meta, которым вы управляете — POST /api/v1/channels/whatsapp с phone_number_id (числовой идентификатор из WhatsApp Manager, а не сам номер) и, если приложение ваше, с access_token. Токен проверяется у Meta до записи, а номер, уже подключённый к другому аккаунту, отклоняется. Номера, которых ещё нет ни в одном приложении Meta, и Instagram по-прежнему требуют браузерного шага Meta: подключите один раз в Интеграциях, дальше работайте из кода.
Выгрузка ваших данных. GET /api/v1/leads, /api/v1/calls и /api/v1/contacts отдают вашу CRM, начиная с самых давних изменений, — и /api/v1/companies, компании, к которым относятся ваши контакты. В каждом ответе есть next_updated_since — верните его следующим запросом и получите только то, что изменилось с прошлого раза:
curl "https://sipmind.net/api/v1/leads?updated_since=2026-08-01T00:00:00Z&limit=100" \ -H "Authorization: Bearer sk-tenant-ВАШ_КЛЮЧ"
Записи с той же секундой, что и курсор, могут повториться в следующем запросе — сопоставляйте по id: повторить строку безопасно, потерять — нет. Расшифровки разговоров — персональные данные, поэтому в списках их нет: их забирают по одной через GET /api/v1/calls/{id}.
Воронки и этапы. У каждого лида есть поле pipeline — воронка, в которой он стоит. GET /api/v1/pipelines перечисляет ваши воронки и этапы каждой вместе с тем, что этап значит: в работе, успех или отказ. PATCH /api/v1/leads/{id}/stage принимает только этап воронки самого лида, а ошибка перечисляет допустимые: этап, для которого на его доске нет колонки, оставил бы карточку нигде не показанной.
Жалобы и вопросы. Воронка, работа в которой заканчивается ответом клиенту, отдаёт closes_when_answered: true в GET /api/v1/pipelines. У каждого обращения есть answered_at и answered_via (chat, marked или ai). Ответили клиенту в своей системе — POST /api/v1/leads/{id}/answered закроет обращение; повторный вызов безопасен.
Воронка Instagram из кода. После того как аккаунт подключён в Интеграциях, всё остальное делается запросами. GET/PATCH /api/v1/channels/instagram/settings — переключатели: публичные ответы, ответы в Директе, модерация, режим «только по кодовым словам», рабочие часы и дни и то, что происходит вне их. GET /api/v1/channels/instagram/scenarios — список ваших сценариев по кодовым словам; PUT /api/v1/channels/instagram/scenarios/{id} создаёт или меняет сценарий, DELETE удаляет. GET /api/v1/channels/instagram/funnel показывает, как воронка работает: увиденные комментарии, открытые диалоги, нажатия кнопок, лиды.
curl -X PUT https://sipmind.net/api/v1/channels/instagram/scenarios/spring \
-H "Authorization: Bearer sk-tenant-ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{"keywords": ["весна", "скидка"], "opener": "Держите — нажмите ниже.",
"buttons": ["Отправить"], "magnet": "https://example.com/offer", "active": true}'Кому уходит разговор и когда. GET/PATCH /api/v1/team/routing задаёт, куда AI переводит звонок: на телефон, на внутренний номер вашей АТС, например 602, или на целую очередь, например q-sales, — каждый под названием отдела или именем коллеги, которое агент может выбрать. work_schedule ({"mon": [["09:00", "18:00"]], …} — неделя с выходными; прежний operator_hours [8, 18] по-прежнему работает как одни часы на каждый день) и operator_holidays ("03-22" каждый год, "2026-12-31" один раз) говорят, когда люди на месте: вне этого времени агент оставляет звонящего у себя, говорит, когда вернутся люди, и принимает заявку на перезвон вместо звонка в пустой офис. Тем же запросом задаётся чат Telegram, куда приходят передачи оператору и новые лиды. Токены отдаются замаскированными, а замаскированное значение при записи отклоняется — поэтому скрипт «прочитал и записал обратно» не может незаметно заменить рабочий токен звёздочками, которые только что прочитал.
AI-сотрудники. GET /api/v1/employees перечисляет их вместе с линией, на которой каждый отвечает, и лимитом тарифа; POST нанимает, PATCH /api/v1/employees/{id} меняет, а PUT /api/v1/employees/{id}/lines выдаёт канал — или один конкретный номер на этом канале. Новый сотрудник создаётся черновиком и никому не отвечает, пока вы не поставите status в active: недонастроенный сотрудник не должен начать говорить с вашими клиентами. У линии ровно один владелец, поэтому привязка линии, занятой другим сотрудником, переносит её.
Исходящие звонки из кода. GET/PATCH /api/v1/outbound/settings — четыре вещи, которые нужны исходящим: номер, который видит человек, промпт и приветствие для случая, когда звоним мы, и часы, в которые агенту разрешено набирать, в вашем часовом поясе. GET дополнительно отвечает ready, а если нет — чего именно не хватает: тариф без телефонии и незаданный номер оба заканчиваются отказом, и знать заранее, что из двух, — это разница между починимой настройкой и загадкой. Сам звонок — POST /api/v1/outbound/call; GET /api/v1/outbound/dnc и POST/DELETE ведут список номеров, которым звонить нельзя.
Два поля здесь намеренно не задаются: транк оператора и адрес Asterisk, через который идёт набор. Их мы настраиваем вместе с вами, и неверное значение не возвращается ошибкой — звонок уходит и умирает где-то у оператора с пустым логом. Скрипт настройки не должен иметь возможности сделать это с рабочей линией.
Отвечать как человек, а не как скрипт. Публичный ответ, появившийся через две секунды после комментария, — самый явный признак, что аккаунт ведёт программа, а читают это ваши же подписчики. В Интеграциях → Instagram задаётся пауза в минутах, промежутком: для каждого комментария мы выбираем случайный момент внутри него, поэтому время никогда не повторяется. Оставьте 0 — ответы уходят сразу, как раньше.
Комментарий с вашим кодовым словом никогда не задерживается: человек написал слово, о котором просил пост, и ждёт. Сообщение в его Директ всегда уходило мгновенно и уходит; ждёт только публичная строка под постом. Отложенный ответ переживает перезапуск, а рабочие часы и суточный лимит проверяются в момент, когда он реально появляется, — поставленный в 20:55 на 21:10 не проскочит за отсечку в 21:00.
Два момента
- Голосовой движок выбирает SIPmind, пока ваш аккаунт не работает на собственном AI-ключе. До тех пор
realtime_modelчитается какnull,model_lockedравенtrue, а запись этого поля не применяется — ответ говорит об этом вnotice. - База знаний полностью управляется из кода:
GET /api/v1/documents— список,POST— добавить,DELETE /api/v1/documents/{id}— удалить,/documents/stats— счётчики. Лиды ходят в обе стороны:POST /api/v1/leads— прислать,PATCH /api/v1/leads/{id}/stage— передвинуть.