Перейти к содержимому

Документация

От первого рабочего процесса до настроек каждого подключения.

Быстрый старт

  1. Зарегистрируйтесь и войдите в веб-версию.
  2. Создайте рабочий процесс — на холсте уже есть блок «Триггер», с которого он начинается.
  3. Перетащите блок «Действие», выберите подключение (например, электронную почту) и заполните его настройки.
  4. Соедините блок триггера с блоком действия и сохраните процесс.
  5. Нажмите «Запустить», введите тестовые данные и проверьте результат каждого блока в журнале запуска.

Создание рабочих процессов

Рабочий процесс состоит из трех типов блоков:

  • Триггер — начальная точка; в каждом процессе должен быть ровно один триггер. Данные, полученные при запуске, становятся его выходом.
  • Условие — принимает решение и имеет выходы «Да» и «Нет»; выполняется только соответствующая ветвь.
  • Действие — вызывает подключение, например отправляет письмо, обращается к API или записывает данные в базу.

При сохранении проверяется, что есть ровно один триггер, у каждого соединения подключены оба конца, циклов нет, выходы условий помечены «Да»/«Нет», а обязательные поля действий заполнены. Все проблемы перечисляются по отдельности.

При запуске процесс следует соединениям от триггера. Если любой блок завершается ошибкой, весь запуск сразу останавливается и помечается как неуспешный.

Условия

Условие состоит из левого значения, оператора и правого значения; любое из них может быть задано явно или ссылаться на данные (см. следующий раздел).

ОператорЗначениеПример
eq / neравно / не равно$.input.status eq "paid"
gt / gteбольше / больше или равно$.input.amount gt 1000
lt / lteменьше / меньше или равно$.input.stock lt 10
inлевое значение входит в правый список$.input.city in ["北京", "上海"]
containsлевое значение содержит правое$.input.tags contains "VIP"
existsполе существует и не пустое$.input.coupon exists

Если указанного поля нет, оператор exists возвращает «Нет»; все остальные операторы также возвращают «Нет».

Передача значений между блоками

В настройках условия или действия любое значение, начинающееся с $., заменяется данными во время запуска:

$.input.amount          运行时传入数据的 amount 字段
$.query.data.0.name     节点 query 输出中 data 列表第 1 项的 name
$.notify.status         节点 notify 输出的 status

Если значение поля целиком состоит из ссылки, исходный тип сохраняется (поддерживаются числа, списки и объекты). Чтобы вставить данные внутрь текста, используйте {{$.path}}:

大额订单 {{$.input.order_id}}:金额 {{$.input.amount}},请风控复核
  • Строки вставляются как есть; числа, списки и объекты преобразуются в JSON; пустые значения вставляются как пустые.
  • Если путь не существует, ничего не подставляется (ссылка, используемая как все значение, становится пустой). Блок не завершится ошибкой, но отсутствие данных будет отмечено в соответствующем шаге журнала запуска.
  • Ссылками считаются только значения, начинающиеся с $.; например, «скидка 100 $» — обычный текст.
  • Тема и текст письма также поддерживают шаблоны {{variable}}; значения переменных берутся из выходных данных предыдущего блока.

Руководство по подключениям

Где найти адрес и учетные данные для каждого подключения, посмотреть официальную документацию и устранить распространенные ошибки. Краткая версия этого руководства доступна в приложении в панели «Где это найти?» над формой каждого подключения.

HTTP

Шаги настройки

  1. Подготовьте URL конечной точки (url) и метод запроса (GET, POST и т. д.).
  2. Если API требует аутентификацию, выберите basic или bearer для auth_type и укажите имя пользователя с паролем либо токен. Не помещайте секреты непосредственно в заголовки — они будут сохранены в открытом виде.

Официальная документация ↗

Обязательно
url
Необязательно
method (по умолчанию GET), headers, body, query_params, auth_type (none / basic / bearer), timeout, retries

Если body пуст, отправляются выходные данные предыдущего блока. Доступны только публичные адреса.

Распространенные ошибки

  • «Адрес не является публичным»: целевой адрес внутренний или локальный (в том числе после перенаправления) и заблокирован в целях безопасности.
  • Поддерживаются только URL с http и https.
  • Если body пуст, отправляются выходные данные предыдущего блока.
  • По умолчанию тайм-аут составляет 30 секунд, максимум — 60 секунд.

DingTalk

Шаги настройки

  1. В группе DingTalk откройте «Настройки группы» → «Групповые помощники» → «Добавить бота» → «Пользовательский (через вебхук)».
  2. Для безопасности выберите «Подпись» или «Пользовательские ключевые слова» (можно включить оба варианта). Для подписи скопируйте в secret ключ, начинающийся с SEC. Для ключевых слов укажите слово, которое всегда будет в сообщениях, и добавьте Opengency: кнопка «Проверить подключение» отправляет фиксированный текст «Opengency 连接测试».
  3. Скопируйте созданный URL вебхука в webhook_url.

Официальная документация ↗

Обязательно
webhook_url
Необязательно
secret (ключ подписи), msg_type (text / markdown / link / card), message, at_mobiles, at_all

Найдите webhook_url в настройках группы DingTalk → «Групповые помощники» → «Добавить бота». Кнопка «Проверить подключение» действительно отправляет в группу тестовое сообщение «Opengency 连接测试». Если используются пользовательские ключевые слова, среди них должно быть Opengency, иначе тест не пройдет проверку. Если включена только подпись, это требование не действует.

Распространенные ошибки

  • Несовпадение подписи (sign not match): для бота включена проверка подписи, но secret пуст или указан неверно. Введите ключ подписи, начинающийся с SEC, а не access_token из URL вебхука.
  • Несовпадение ключевого слова: в сообщении нет ни одного ключевого слова бота. Добавьте его в сообщение или настройте бота на слово, которое будет в сообщениях.
  • Недопустимая временная метка: часы сервера Opengency отстают или спешат относительно DingTalk более чем на час. Исправьте время на сервере.
  • «Проверить подключение» — это не имитация: сообщение «Opengency 连接测试» действительно отправляется в группу.

WeCom

Шаги настройки

  1. В группе WeCom нажмите «…» в правом верхнем углу → «Групповые боты» → «Добавить бота».
  2. URL вебхука появится сразу после создания бота.
  3. Скопируйте этот URL в webhook_url.

Официальная документация ↗

Обязательно
webhook_url
Необязательно
msg_type (text / markdown / card), message, at_mobiles, at_all, url и title (для карточки)

Получите webhook_url в группе WeCom → «Групповой бот». Ключ в URL является секретом доступа. Упоминания через @ работают только для типа text. Кнопка «Проверить подключение» действительно отправляет сообщение в группу.

Распространенные ошибки

  • Ключ в URL вебхука — это секрет доступа: любой, у кого есть URL, может отправлять сообщения в группу. При утечке удалите бота из группы и создайте нового.
  • Упоминания через @ работают только с типом text. Для типа card также требуется url — ссылка, открываемая карточкой; без этого поля сохранить настройки не удастся.
  • WeCom ограничивает частоту сообщений ботов; если отправлять их слишком часто, сообщения перестанут проходить. Не задавайте слишком частое расписание.
  • Кнопка «Проверить подключение» действительно отправляет сообщение в группу.

Feishu

Шаги настройки

  1. В группе Feishu откройте «Настройки» → «Групповые боты» → «Добавить бота» → «Пользовательский бот».
  2. Для безопасности можно включить «Проверку подписи» и указать в secret секрет, показанный на этой странице. Также поддерживаются пользовательские ключевые слова — добавьте среди них Opengency.
  3. Скопируйте созданный URL вебхука в webhook_url.

Официальная документация ↗

Обязательно
webhook_url
Необязательно
secret (если включена проверка подписи), msg_type (text / post / markdown / card), message, title, at_open_ids, at_all

Получите webhook_url в настройках группы Feishu → «Групповые боты» → «Пользовательский бот». Кнопка «Проверить подключение» действительно отправляет сообщение в группу.

Распространенные ошибки

  • Проверка подписи включена, но secret пуст или указан неверно: Feishu отклоняет сообщение. Секрет можно снова посмотреть в настройках бота.
  • Заданы пользовательские ключевые слова, но сообщение не содержит ни одного из них — оно будет отклонено.
  • Для at_open_ids нужны open_ids, начинающиеся с ou_, а не номера телефонов или имена.
  • Кнопка «Проверить подключение» действительно отправляет сообщение в группу.

Slack

Шаги настройки

  1. Откройте https://api.slack.com/apps, создайте приложение (или выберите существующее) и включите Incoming Webhooks в разделе Features.
  2. Нажмите Add New Webhook to Workspace, выберите канал для публикации и подтвердите подключение.
  3. Скопируйте созданный URL вебхука (он начинается с https://hooks.slack.com/services/) в webhook_url.

Официальная документация ↗

Обязательно
webhook_url
Необязательно
message, username, icon_emoji, channel

Сам webhook_url является секретом доступа: любой, у кого есть этот URL, может публиковать сообщения в канале. Opengency хранит его в зашифрованном виде и маскирует в интерфейсе и журналах. Вебхук, созданный в текущем приложении Slack, всегда публикует в выбранный при создании канал, поэтому username, icon_emoji и channel игнорируются. Чтобы публиковать в другом канале, создайте отдельный вебхук. Кнопка «Проверить подключение» действительно публикует сообщение в канале.

Распространенные ошибки

  • no_service: вебхук удален или отключен либо указан неверный адрес. Проверьте страницу Incoming Webhooks приложения, при необходимости создайте вебхук заново и обновите подключение.
  • channel_not_found: канал не существует или у вебхука нет к нему доступа. Проверьте название канала или создайте вебхук для нужного канала.
  • channel_is_archived: канал архивирован. Разархивируйте его или используйте вебхук другого канала.
  • action_prohibited: администратор рабочего пространства ограничил действия этого вебхука. Обратитесь к администратору Slack.
  • invalid_payload или no_text: сообщение пустое или имеет неверный формат. Убедитесь, что message не пуст.
  • HTTP 429: вы отправляете слишком часто, и Slack ограничивает частоту запросов. Попробуйте позже и не задавайте слишком частое расписание.
  • «Проверить подключение» — это не имитация: сообщение «Opengency connection test» действительно публикуется в канале.

Teams

Шаги настройки

  1. В Teams откройте канал для публикации → нажмите «…» рядом с названием канала → Workflows.
  2. Выберите шаблон «Send webhook alerts to a channel», укажите команду и канал по запросу, затем сохраните.
  3. После создания скопируйте URL вебхука со страницы сведений о потоке в webhook_url.

Официальная документация ↗

Обязательно
webhook_url
Необязательно
message, title

Сам webhook_url является секретом доступа (sig в адресе — подпись потока); Opengency хранит его в зашифрованном виде и маскирует в интерфейсе и журналах. Поддерживаются только вебхуки Workflows (Power Automate); старые вебхуки коннектора Office 365 (outlook.office.com/webhook/…) выводятся Microsoft из эксплуатации и не поддерживаются. Сообщения отправляются в виде Adaptive Card: title — жирный заголовок карточки, message — ее текст (поддерживается базовый Markdown). Размер сообщения не должен превышать 28 КБ, поэтому слишком длинный текст обрезается. Кнопка «Проверить подключение» действительно публикует тестовое сообщение в канале.

Распространенные ошибки

  • HTTP 401 / 403 (неверный или отозванный адрес): подпись в URL вебхука неверна или была создана заново. Откройте поток в Teams, скопируйте актуальный адрес и обновите подключение.
  • HTTP 404 (поток не найден): возможно, он был удален. Создайте его заново из шаблона и обновите адрес в подключении.
  • Сообщение о том, что поток отключен или остановлен: включите его в приложении Teams Workflows или Power Automate. Поток принадлежит создателю и может отключиться, если тот покинет организацию или его аккаунт будет деактивирован; попросите администратора передать поток другому пользователю.
  • HTTP 400 (триггер отклонил сообщение): убедитесь, что поток создан из шаблона «Send webhook alerts to a channel», использует триггер When a Teams webhook request is received и формат принимаемых сообщений не менялся.
  • HTTP 429: Teams ограничивает частоту вебхуков (примерно до четырех запросов в секунду) и отклоняет слишком частые сообщения. Попробуйте позже и не задавайте слишком частое расписание.
  • «Проверить подключение» — это не имитация: сообщение «Opengency connection test» действительно публикуется в канале.

Электронная почта

Шаги настройки

  1. Включите SMTP в настройках почтового сервиса.
  2. Создайте пароль приложения (некоторые сервисы называют его паролем для внешнего приложения или кодом авторизации). Большинство сервисов, включая Gmail, Outlook и Yahoo, не позволяют сторонним приложениям отправлять почту с обычным паролем.
  3. Узнайте SMTP-сервер и порт, например smtp.gmail.com:587 или smtp.qq.com:465.
  4. Укажите свой адрес в sender_email, а пароль приложения из шага 2 — в sender_password.

Официальная документация ↗

Обязательно
smtp_server, sender_email, sender_password, to
Необязательно
smtp_port (по умолчанию 587), smtp_ssl (auto / implicit / starttls / none), use_tls, cc, bcc, subject, body, format (text / html / markdown)

subject и body поддерживают шаблоны {{variables}}; значения переменных берутся из выходных данных предыдущего блока. Большинство почтовых сервисов требуют пароль приложения, а не обычный пароль.

Распространенные ошибки

  • Ошибка аутентификации: в sender_password указан обычный пароль. Используйте пароль приложения или код авторизации.
  • Тайм-аут подключения или ошибка согласования: порт и режим шифрования не совпадают. Для порта 465 используется неявный TLS, для 587 — STARTTLS. При smtp_ssl=auto режим выбирается по порту, поэтому обычно менять его не нужно.
  • «Адрес не является публичным»: SMTP-сервер указывает на внутренний или локальный адрес (часто так бывает с корпоративными почтовыми серверами), поэтому заблокирован в целях безопасности. Используйте SMTP-сервер, доступный из публичного интернета.
  • В поле to должен быть указан хотя бы один получатель; несколько адресов разделяйте запятыми.

SQLite

Шаги настройки

  1. Аккаунт и пароль не нужны: файл базы данных хранится в вашем каталоге данных.
  2. Укажите в database_path только имя файла, например orders.db. Если файла нет, он будет создан.

Официальная документация ↗

Обязательно
database_path, sql
Необязательно
params, operation (select / insert / update / delete / execute), return_type (по умолчанию dict), timeout

Для database_path достаточно указать имя файла (например, orders.db) — он автоматически сохраняется в вашем каталоге данных. Используйте заполнители ? в SQL, а значения указывайте в params.

Распространенные ошибки

  • «no such table»: опечатка в имени файла не вызывает ошибку «файл не найден». Вместо этого создается новая пустая база, поэтому таблицы в ней нет. Сначала проверьте имя файла.
  • В database_path указывается только имя файла. База остается в вашем каталоге данных и не может обращаться к другим файлам.
  • Используйте заполнители ? и указывайте значения в params.

MySQL

Шаги настройки

  1. Подготовьте хост, порт (по умолчанию 3306), имя пользователя, пароль и название базы данных.
  2. Создайте отдельную учетную запись базы данных для этого подключения; если нужны только запросы, предоставьте ей только право SELECT.
  3. Убедитесь, что база доступна из публичного интернета: брандмауэр или группа безопасности облачного провайдера должны разрешать этот порт.

Официальная документация ↗

Обязательно
host, user, password, database, sql
Необязательно
port (по умолчанию 3306), ssl (disabled / required / verify), params, read_only (включен по умолчанию), max_rows (по умолчанию 1000), timeout

Используйте заполнители %s в SQL, а значения указывайте в params (литеральный знак % при использовании params нужно записывать как %%). По умолчанию включен режим чтения: чтобы записывать данные, отключите read_only. Для блоков чтения используйте учетную запись только с правом SELECT. За раз выполняется только один оператор; доступны только публичные адреса.

Распространенные ошибки

  • «Адрес не является публичным»: хост имеет внутренний адрес (10.x, 172.16–31.x, 192.168.x, 127.0.0.1). Подключение работает только с публичными адресами, поэтому базе нужна публичная конечная точка.
  • Запись отклонена: read_only включен по умолчанию, и запрос выполняется в транзакции только для чтения. Если запись действительно нужна, отключите read_only и убедитесь, что у учетной записи есть права на запись.
  • Результаты неполные: по умолчанию возвращается не более 1000 строк (max_rows можно увеличить максимум до 10000). Остальные строки обрезаются, а результат помечается как усеченный.
  • За раз выполняется только один оператор SQL. Используйте заполнители %s и передавайте значения в params; не вставляйте значения прямо в строку SQL.
  • Тайм-аут подключения: вероятно, брандмауэр или группа безопасности не пропускает этот порт.

Вебхук

Шаги настройки

  1. Подготовьте публичный URL, принимающий запросы POST, и укажите его в webhook_url.
  2. Если получатель должен проверять, что запрос пришел от вашего процесса, согласуйте секрет и укажите его в secret_key.
  3. На стороне получателя: каждый запрос содержит X-Webhook-Timestamp; если задан secret_key, добавляется X-Webhook-Signature — шестнадцатеричный HMAC-SHA256 от (timestamp + "." + raw_body), вычисленный с этим секретом.
Обязательно
webhook_url
Необязательно
secret_key, verify_signature, event_types, retry_count, timeout

Если задан secret_key, запросы содержат заголовок X-Webhook-Signature (HMAC-SHA256), по которому получатель может проверить подпись.

Распространенные ошибки

  • Кнопка «Проверить подключение» действительно отправляет получателю событие с типом ping.
  • Для ответа 4xx или 500, а также при тайм-ауте повторной попытки не будет (получатель уже мог обработать запрос). Повторы выполняются только для кодов 429, 502, 503, 504 и подключений, которые не удалось установить.
  • «Адрес не является публичным»: URL получателя внутренний или локальный.
  • Если event_types пуст, передаются все события. Если в списке есть значения, события с отсутствующим в нем event_type пропускаются.

Ограничение безопасности: HTTP, DingTalk, WeCom, Feishu, Slack, Teams, электронная почта, MySQL и вебхуки могут обращаться только к публичным адресам (внутренние адреса, например 127.0.0.1, 10.x и 192.168.x, отклоняются); SQLite имеет доступ только к вашему каталогу данных.

Ключи API

Ключи API позволяют скриптам и другим системам обращаться к API, например запускать процесс по расписанию. Создайте ключ в приложении: «Аккаунт» → «Ключи API». Полный ключ показывается только один раз — сразу сохраните его. В списке отображаются только первые несколько символов для идентификации. Лимиты: 1 для Free, 5 для Pro, без ограничений для Business и Enterprise (учитываются только неотозванные ключи).

curl -X POST https://app.opengency.ai/api/executions/workflows/<工作流 ID>/execute \
  -H "Authorization: Bearer ofk_…" \
  -H "Content-Type: application/json" \
  -d '{"input_data": {"order_id": 7}}'
  • Ключ имеет те же права, что и создавшая его учетная запись. Запуски с этим ключом помечаются «API» в журнале, где также показаны первые символы ключа.
  • Для управления ключами API, смены пароля и удаления учетной записи требуется пароль аккаунта; ключ API не позволяет выполнять эти действия.
  • Отзыв ключа вступает в силу сразу (запросы возвращают 401). Смена пароля не аннулирует существующие ключи. Если вы подозреваете утечку, отзовите соответствующий ключ отдельно.
  • Храните ключи только на сервере. Никогда не помещайте их в клиентский веб-код и не отправляйте в чаты.

Частые вопросы

Почему HTTP-блок сообщает «адрес не является публичным»?
Целевой адрес является внутренним или локальным, поэтому он заблокирован в целях безопасности. Используйте публично доступный адрес.
Можно ли получать уведомления о сбое процесса?
Да, на любом тарифе. В разделе «Аккаунт» → «Уведомления об ошибках» выберите адрес электронной почты аккаунта или сохраненное подключение DingTalk, WeCom, Feishu либо электронной почты. Сбои, произошедшие примерно за 10 минут, объединяются в одно сообщение с числом ошибок по каждому процессу, проблемным блоком и ссылкой на подробности. При ручной отмене запуска уведомление не отправляется.
Могут ли рабочие процессы зацикливаться?
Пока нет: рабочий процесс не может содержать цикл. Если вы попробуете его создать, ошибка будет показана при сохранении.
Можно ли запускать процессы по расписанию?
Да. В редакторе выберите триггер «По расписанию», задайте частоту (каждые N минут, ежечасно, ежедневно или еженедельно) либо укажите выражение cron и выберите часовой пояс. Сохраните процесс, затем включите переключатель «Активен» на странице сведений о нем. На тарифе Free можно одновременно иметь 1 активный процесс по расписанию, на Pro — 10.