Быстрый старт
- Зарегистрируйтесь и войдите в веб-версию.
- Создайте рабочий процесс — на холсте уже есть блок «Триггер», с которого он начинается.
- Перетащите блок «Действие», выберите подключение (например, электронную почту) и заполните его настройки.
- Соедините блок триггера с блоком действия и сохраните процесс.
- Нажмите «Запустить», введите тестовые данные и проверьте результат каждого блока в журнале запуска.
Создание рабочих процессов
Рабочий процесс состоит из трех типов блоков:
- Триггер — начальная точка; в каждом процессе должен быть ровно один триггер. Данные, полученные при запуске, становятся его выходом.
- Условие — принимает решение и имеет выходы «Да» и «Нет»; выполняется только соответствующая ветвь.
- Действие — вызывает подключение, например отправляет письмо, обращается к 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
Шаги настройки
- Подготовьте URL конечной точки (url) и метод запроса (GET, POST и т. д.).
- Если 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
Шаги настройки
- В группе DingTalk откройте «Настройки группы» → «Групповые помощники» → «Добавить бота» → «Пользовательский (через вебхук)».
- Для безопасности выберите «Подпись» или «Пользовательские ключевые слова» (можно включить оба варианта). Для подписи скопируйте в secret ключ, начинающийся с SEC. Для ключевых слов укажите слово, которое всегда будет в сообщениях, и добавьте Opengency: кнопка «Проверить подключение» отправляет фиксированный текст «Opengency 连接测试».
- Скопируйте созданный 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
Шаги настройки
- В группе WeCom нажмите «…» в правом верхнем углу → «Групповые боты» → «Добавить бота».
- URL вебхука появится сразу после создания бота.
- Скопируйте этот 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
Шаги настройки
- В группе Feishu откройте «Настройки» → «Групповые боты» → «Добавить бота» → «Пользовательский бот».
- Для безопасности можно включить «Проверку подписи» и указать в secret секрет, показанный на этой странице. Также поддерживаются пользовательские ключевые слова — добавьте среди них Opengency.
- Скопируйте созданный 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
Шаги настройки
- Откройте https://api.slack.com/apps, создайте приложение (или выберите существующее) и включите Incoming Webhooks в разделе Features.
- Нажмите Add New Webhook to Workspace, выберите канал для публикации и подтвердите подключение.
- Скопируйте созданный 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
Шаги настройки
- В Teams откройте канал для публикации → нажмите «…» рядом с названием канала → Workflows.
- Выберите шаблон «Send webhook alerts to a channel», укажите команду и канал по запросу, затем сохраните.
- После создания скопируйте 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» действительно публикуется в канале.
Электронная почта
Шаги настройки
- Включите SMTP в настройках почтового сервиса.
- Создайте пароль приложения (некоторые сервисы называют его паролем для внешнего приложения или кодом авторизации). Большинство сервисов, включая Gmail, Outlook и Yahoo, не позволяют сторонним приложениям отправлять почту с обычным паролем.
- Узнайте SMTP-сервер и порт, например smtp.gmail.com:587 или smtp.qq.com:465.
- Укажите свой адрес в 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
Шаги настройки
- Аккаунт и пароль не нужны: файл базы данных хранится в вашем каталоге данных.
- Укажите в 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
Шаги настройки
- Подготовьте хост, порт (по умолчанию 3306), имя пользователя, пароль и название базы данных.
- Создайте отдельную учетную запись базы данных для этого подключения; если нужны только запросы, предоставьте ей только право SELECT.
- Убедитесь, что база доступна из публичного интернета: брандмауэр или группа безопасности облачного провайдера должны разрешать этот порт.
- Обязательно
- 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.
- Тайм-аут подключения: вероятно, брандмауэр или группа безопасности не пропускает этот порт.
Вебхук
Шаги настройки
- Подготовьте публичный URL, принимающий запросы POST, и укажите его в webhook_url.
- Если получатель должен проверять, что запрос пришел от вашего процесса, согласуйте секрет и укажите его в secret_key.
- На стороне получателя: каждый запрос содержит 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.