Echolot
플로

블록

플로에 넣을 수 있는 모든 종류의 블록과 그 설정, 포트, 그리고 블록 사이에서 값, 템플릿, 조건이 작동하는 방식을 설명합니다.

각 블록은 한 가지 일을 합니다. 블록을 선택하면 인스펙터에 설정이 나타나고, 캔버스에서는 입력이 왼쪽에, 출력이 오른쪽에 포트로 표시됩니다. 이 페이지는 블록 선택기가 사용하는 그룹별로 모든 종류를 나열한 다음, 블록 사이를 오가는 값, {{body.id}} 같은 템플릿, 조건을 설명합니다.

실행이 진행되는 방식

  • 블록은 자신으로 들어오는 연결이 있는 입력에 모두 값이 들어온 뒤에 실행됩니다. 그런 다음 출력 중 일부로 값을 내보내며, 그 출력에 연결된 블록만 다음에 실행됩니다.
  • 시작 블록이 가장 먼저 실행됩니다. 아무것도 연결되지 않은 값과 변수 가져오기 블록도 시작 시점에 함께 실행됩니다.
  • 블록은 가능하면 동시에 실행됩니다. 표시 후 대기 블록이 사용자를 기다리는 동안 폴링 블록은 계속 진행할 수 있습니다.
  • 여러 블록이 실패할 수 있습니다. 요청, 폴링, 도구, 플로, 평가, 파일 쓰기에는 fail 출력이 있습니다. 이 출력이 연결되어 있으면 실패가 그곳으로 나가고 실행이 계속됩니다. 연결되어 있지 않으면 그 블록에서 실행 전체가 실패합니다.
  • 실행 중인 것이 더 이상 없으면 실행이 끝납니다.

모든 블록의 인스펙터에는 제목(블록에 표시되며, 비어 있으면 블록 종류의 이름)과 일시 정지됨(값이 그대로 통과함)도 있습니다. 일시 정지된 블록은 흐리게 표시되고 건너뜁니다. 들어온 값은 첫 번째 출력으로 그대로 나갑니다.

트리거

시작

실행이 시작되는 곳입니다. 실행 버튼, 에이전트(플로가 도구일 때), 일정, 웹훅, echolot flow run으로 시작합니다. 인스펙터에는 플로의 트리거가 있습니다. 실행과 트리거를 참조하세요.

포트방향전달하는 값
run출력플로의 모든 입력을 하나의 객체로 묶은 값.
입력마다 하나출력그 입력의 값.

플로에는 시작 블록이 정확히 하나 있습니다. 블록 선택기에는 나타나지 않습니다.

출력

실행이 돌려주는 값입니다. 플로를 호출한 에이전트, 명령줄, 웹훅을 호출한 쪽, 또는 상위 플로로 전달됩니다. 플로에는 최대 하나 있습니다.

포트방향전달하는 값
value입력결과.

동작

요청

작업 공간에 저장된 요청(HTTP, GraphQL 또는 MCP 요청)을 인증, 스크립트, 검사, 실행의 환경과 함께 보냅니다.

설정하는 일
요청목록에서 고른 저장된 요청(필수).
변수쉼표로 구분한 이름. 각 이름이 요청의 해당 {{variable}}을 채우는 입력이 됩니다.
포트방향전달하는 값
send입력요청을 보냅니다. 객체가 들어오면 그 객체의 각 키가 이번 전송의 변수가 됩니다.
변수의 이름마다 하나입력해당 변수의 값.
success출력요청이 성공했을 때의 응답.
fail출력2xx 이외로 응답했거나 검사가 실패했을 때의 응답, 또는 아무것도 돌아오지 않았을 때의 오류.

요청이 2xx로 응답하고 검사, 스크립트 테스트, 스크립트가 모두 통과하면 성공입니다. 실행과 같습니다. 플로가 전달하는 변수는 이번 전송에서만 환경의 변수보다 우선합니다.

Place a test order 플로에서는 Sign in의 success 출력이 Create order의 send에 연결되어 있습니다. 로그인이 성공한 뒤에만 주문이 이루어지며, Sign in이 캡처한 토큰은 이미 {{token}}에 들어 있습니다.

도구

모의 서버 시작, 폴더 실행, 명세 린트, MCP 서버의 도구 호출 등 Echolot 자체의 도구 하나를 에이전트와 같은 규칙으로 실행합니다.

설정하는 일
도구목록에서 고른 도구(필수).
인수도구의 인수를 JSON으로 입력합니다(예: { "name": "{{value}}" }). 텍스트 값에는 템플릿을 쓸 수 있습니다.
포트방향전달하는 값
run입력도구를 실행합니다. 객체가 들어오면 그 키가 인수에 추가됩니다.
result출력도구가 돌려준 값.
fail출력실패한 이유.

도구 블록은 다른 플로를 실행할 수 없습니다. 그럴 때는 플로 블록을 사용하세요.

직접 다운로드 버전 전용

로컬 프로그램(stdio)으로 실행되는 MCP 서버를 호출하는 도구 블록은 직접 다운로드 버전에서 작동합니다. App Store 에디션에서는 Echolot이 그 프로그램을 시작할 수 없으므로, 블록에 경고가 표시되고 실행하면 실패합니다.

버전 비교하기

플로

작업 공간의 다른 플로를 실행하고, 그 출력 블록이 받은 값을 내보냅니다.

설정하는 일
플로다른 플로(필수). 플로는 자기 자신을 실행할 수 없으며, 플로끼리 순환하며 서로를 실행할 수도 없습니다.
포트방향전달하는 값
input입력다른 플로의 입력을 담은 객체.
output출력다른 플로가 돌려준 값.
fail출력다른 플로가 실패한 이유.

플로는 최대 8단계까지 서로를 실행할 수 있습니다. 비밀 값은 플로 사이에서 값으로 전달되지 않습니다. 대신 변수로 저장하세요.

사람

사람 블록은 실행을 멈추고 사용자에게 무언가를 묻습니다. 앱에서는 시트가 열리고, 에이전트가 시작한 경우에는 질문이 에이전트의 클라이언트로 전달되며, 명령줄에서는 터미널에서 묻습니다. 일정과 웹훅이 시작한 실행에는 물어볼 사람이 없으므로 그 경우 사람 블록은 실패하고, echolot flow run --no-input도 마찬가지입니다.

묻기

작은 양식으로 값을 묻습니다.

설정하는 일
메시지묻는 내용. 템플릿을 쓸 수 있습니다.
필드양식의 필드(필수). 각 필드에는 name(포트와 키), 옆에 표시되는 label, type(text, number, bool, secret, choice), 선택 항목용으로 쉼표로 구분한 choices, default가 있습니다.
포트방향전달하는 값
run입력묻습니다. 객체가 들어오면 메시지의 템플릿을 채웁니다.
answers출력모든 답변을 하나의 객체로 묶은 값.
필드마다 하나출력그 필드의 답변.
cancelled출력사용자가 취소를 클릭했을 때 true.

시트에는 취소와 계속이 있습니다. secret 필드의 답변은 실행 로그에서 숨겨집니다.

표시 후 대기

메시지, 복사할 코드, 열 링크를 보여 준 다음 계속을 누를 때까지, 또는 until로 값이 들어올 때까지 기다립니다. 기기 로그인에 사용하세요. 폴링 블록이 승인을 기다리는 동안 코드를 표시합니다.

설정하는 일
제목시트의 제목.
메시지표시할 내용(필수).
코드크게 표시되며 코드 복사 버튼이 함께 나옵니다(기기 코드).
링크브라우저에서 열기와 함께 표시됩니다.
QR링크를 QR 코드로도 표시합니다. 기본값은 꺼짐입니다.

다섯 설정 모두 템플릿을 쓸 수 있습니다.

포트방향전달하는 값
run입력시트를 표시합니다. 객체가 들어오면 템플릿을 채웁니다.
until입력폴링 블록의 success처럼 값이 들어오면 저절로 계속됩니다.
done출력run으로 들어온 값.

until이 연결되어 있으면 시트에 완료되면 자동으로 계속됩니다.라고 표시됩니다. 대기 중단은 시트를 닫고 블록을 실패시킵니다.

승인

되돌릴 수 없는 일을 하기 전에, 플로가 계속되기 전에 사용자의 승인을 요청합니다.

설정하는 일
메시지질문(필수). 템플릿을 쓸 수 있습니다.
포트방향전달하는 값
run입력묻습니다. 객체가 들어오면 메시지의 템플릿을 채웁니다.
approved출력승인을 누른 뒤, run으로 들어온 값.
declined출력거절을 누른 뒤, run으로 들어온 값.

승인은 항상 사람이 해야 합니다. 에이전트가 플로를 실행하다 승인 블록에 답하려고 하면 Echolot이 먼저 사용자에게 질문을 전달합니다. Place a test order에서 승인 블록 Keep the order?는 상점이 방금 만든 주문으로 Keep order {{body.id}} for CHF {{body.total.amount}}?라고 묻고, 거절하면 값이 Cancel order로 넘어갑니다.

Place a test order의 승인 시트: Keep the order? 질문과 주문 ID, 스위스 프랑으로 표시된 합계, 거절과 승인 버튼

논리

조건 분기

들어온 값을 조건에 따라 true 또는 false로 보냅니다.

설정하는 일
조건JavaScript 표현식(필수). 예: value.status == 200.
포트방향전달하는 값
value입력검사할 값.
true, false출력같은 값이 두 출력 중 하나로 나갑니다.

Morning stock check는 상점이 돌려준 상품 목록에 value.body.items.some(p => p.stock.bern < 5)를 적용한 조건 분기 Running low?를 사용합니다.

다중 분기

들어온 값을 조건이 성립하는 첫 번째 경우로 보내고, 없으면 default로 보냅니다.

설정하는 일
경우목록(필수). 각 경우에는 name(출력 포트)과 condition이 있습니다.
포트방향전달하는 값
value입력검사할 값.
경우마다 하나출력그 경우가 성립하는 첫 번째 경우일 때의 값.
default출력성립하는 경우가 없을 때의 값.

평가

들어온 값에 JavaScript를 실행합니다. 마지막 표현식이 결과입니다. 예: ({ id: value.body.id }) 또는 a + b. 자체 return이 있는 코드는 함수의 본문으로 실행되며 return이 돌려주는 값이 결과입니다. 프라미스는 완료될 때까지 기다립니다. pm.test와 pm.expect는 스크립트에서처럼 작동하며, 그 결과는 실행의 테스트로 집계됩니다. console.log 줄은 실행 로그로 갑니다.

설정하는 일
코드JavaScript(필수).
입력쉼표로 구분한 입력 이름. 각 이름이 코드의 변수가 됩니다. 비어 있으면 value.
포트방향전달하는 값
입력의 이름마다 하나입력그 변수의 값.
result출력결과.
fail출력코드가 예외를 던졌을 때의 오류.
// 입력: pages. 수집 블록이 모은 목록들을 하나로 합칩니다.
return pages.flat();

지연

기다린 다음 값을 그대로 넘깁니다.

설정하는 일
밀리초기다릴 시간(필수). 숫자 또는 {{wait}} 같은 템플릿.

포트: value 입력, value 출력.

반복

반복

횟수만큼 0부터 세어 index를 보낸 다음 done을 보냅니다.

설정하는 일
횟수반복할 횟수(필수): 0에서 100,000까지. 숫자 또는 {{pages}} 같은 템플릿.
포트방향전달하는 값
run입력반복을 시작합니다.
index출력회차마다 0, 1, 2…
done출력마지막 회차 뒤에 run으로 들어온 값.

각 항목 반복

목록의 각 항목을 차례로 보낸 다음 done을 보냅니다. 설정은 없습니다.

포트방향전달하는 값
list입력목록. 다른 값이 들어오면 블록이 실패합니다.
item출력회차마다 항목 하나.
index출력항목의 위치(0부터).
done출력마지막 회차 뒤의 목록 전체.

수집

반복하는 동안 도착하는 값을 하나의 목록으로 모으고, 반복이 끝나면 보냅니다. 설정은 없습니다.

포트방향전달하는 값
item입력회차마다 값 하나.
list출력이 블록이 속한 반복이 끝났을 때 모인 모든 값.

반복의 각 회차는 다음 회차가 시작되기 전에 끝나며, 회차가 거치는 블록은 회차마다 다시 실행됩니다. 시작 블록의 입력처럼 반복 바깥에서 온 값은 모든 회차에서 계속 사용할 수 있습니다.

폴링

조건이 성립할 때까지(로그인이 승인되거나 작업이 끝날 때까지) 또는 기한이 지날 때까지 저장된 요청을 반복해서 보냅니다.

설정하는 일
요청저장된 요청(필수).
변수쉼표로 구분한 이름. 각 이름이 해당 {{variable}}을 채우는 입력이 됩니다.
종료 조건마지막 응답인 response에 대한 조건. 기본값: response.status >= 200 && response.status < 300.
간격전송 사이의 초. 기본값 5. 숫자 또는 템플릿.
기한포기하기까지의 초. 기본값 300. 숫자 또는 템플릿.
포트방향전달하는 값
send입력폴링을 시작합니다. 객체가 들어오면 그 키가 변수가 됩니다.
변수의 이름마다 하나입력해당 변수의 값.
success출력조건을 만족한 응답.
timeout출력기한이 지났을 때의 마지막 응답. timeout이 연결되어 있지 않으면 블록이 대신 실패합니다.
fail출력전송이 실패했을 때의 오류.

요청 블록과 달리 2xx 이외의 응답은 폴링을 실패시키지 않습니다. 종료 조건이 성립할 때까지 다시 보냅니다.

데이터

값

고정된 값입니다. 텍스트, 숫자, true 또는 false, 목록, 객체를 쓸 수 있습니다.

설정하는 일
값텍스트, 숫자 또는 JSON(필수).
포트방향전달하는 값
run입력무언가 들어올 때마다 값을 다시 보냅니다.
value출력값. run에 아무것도 연결되어 있지 않으면 시작할 때 한 번 보냅니다.

템플릿

들어온 객체와 실행의 변수로 {{name}}을 채운 텍스트입니다.

설정하는 일
텍스트템플릿이 들어 있는 텍스트(필수).

포트: values 입력(객체), text 출력.

추출

들어온 값에서 경로로 값을 골라 하나씩 출력으로 보냅니다.

설정하는 일
필드목록(필수). 각 필드에는 name(출력 포트)과 $.body.user_code 같은 path가 있습니다.
포트방향전달하는 값
value입력값을 고를 대상. 보통 응답입니다.
필드마다 하나출력그 경로의 값. 아무것도 없으면 null.
all출력모든 필드를 하나의 객체로 묶은 값.

경로는 JSONPath의 공통 부분입니다.

경로고르는 값
$.body.items[0].sku키, 그다음 목록의 첫 번째 항목.
$.body.items[-1]마지막 항목.
$.body.items[*].sku모든 항목의 sku를 목록으로.
$['content-type']점으로는 쓸 수 없는 문자가 들어 있는 키.
body.id$가 없으면 경로는 값에서 시작합니다.

변수 설정

값을 변수로 저장하므로 이후의 블록과 요청이 {{name}}으로 읽을 수 있습니다.

설정하는 일
변수목록(필수). 각 항목에는 name, 들어온 값 안의 path(비어 있으면 전체), scope, secret이 있습니다.
범위값이 저장되는 곳
run이 실행과 이 실행이 보내는 요청에서만.
environment활성 환경(기본값). 선택한 환경이 없으면 여기서 실행이 실패합니다.
workspace작업 공간 자체의 변수.
global플로에서는 쓸 수 없음: 실행이 실패하고 환경이나 작업 공간에 저장하라고 안내합니다.

secret을 켜면 값은 파일이 아닌 키체인에 저장되고, 앞 블록에서 나오는 순간부터 실행 로그와 에이전트가 보는 내용에서 숨겨집니다. path가 아무것도 찾지 못하면 변수는 이전 값을 유지하므로, 새 리프레시 토큰이 없는 토큰 응답이 이미 가지고 있는 토큰을 지우지 않습니다. 비밀 값을 참조하세요.

포트: value 입력, value 출력(들어온 값을 그대로 넘김).

변수 가져오기

요청이 보는 방식으로 변수를 읽습니다. 실행 자체의 변수, 그다음 환경, 작업 공간, 전역 변수 순입니다.

설정하는 일
이름변수(필수).
포트방향전달하는 값
run입력무언가 들어올 때마다 다시 읽습니다.
value출력변수의 값. 없으면 null. run에 아무것도 연결되어 있지 않으면 시작할 때 한 번 읽습니다.

출력

표시

들어온 값을 그대로 넘겨서 살펴볼 수 있게 합니다. 실행이 끝난 뒤 블록을 선택하고 인스펙터의 마지막 실행을 읽으세요.

설정하는 일
형식auto, text, json, table, image. 기본값 auto.

포트: value 입력, value 출력.

로그

실행 로그에 한 줄을 씁니다.

설정하는 일
메시지줄의 내용. 템플릿을 쓸 수 있습니다. {{value}}는 들어온 값이며, 메시지가 비어 있으면 값 전체입니다.

포트: value 입력, value 출력. Place a test order에서 Order failed는 주문이 이루어지지 않을 때 Create order answered {{status}}를 기록합니다.

검증

들어온 값을 검사합니다. 각 검사는 실행의 테스트 결과이며, 하나라도 실패하면 echolot flow run이 실패합니다.

설정하는 일
검사목록(필수). 각 검사에는 name과 value에 대한 condition이 있습니다.
포트방향전달하는 값
value입력검사할 값.
passed출력모든 검사가 성립할 때의 값.
failed출력검사가 하나라도 실패할 때의 값.
value.status === 200   // Answers 200
value.time < 2000      // Within two seconds

알림

Echolot의 macOS 알림을 표시합니다. macOS는 처음에 권한을 요청합니다. 명령줄에서는 알림 대신 내용이 출력됩니다.

설정하는 일
제목알림의 제목(필수). 템플릿을 쓸 수 있습니다.
메시지알림의 텍스트. 템플릿을 쓸 수 있습니다.

포트: value 입력, value 출력. Morning stock check는 제목이 Restock Bern인 알림 Restock으로 끝납니다.

파일 쓰기

들어온 값을 작업 공간 폴더 안의 파일에 씁니다.

설정하는 일
경로작업 공간 폴더 기준 경로(예: exports/items.json, 필수). 템플릿을 쓸 수 있습니다.
형식json(들여쓰기 적용), text, csv. 기본값 json.
포트방향전달하는 값
value입력쓸 내용.
path출력작업 공간 기준 파일 경로.
fail출력쓸 수 없었던 이유.

이미 있는 파일은 교체됩니다. 작업 공간 자체의 파일은 쓸 수 없습니다. requests, flows, environments, mocks, mcp-servers, specs 폴더, workspace.toml, 숨김 파일이 그렇습니다. CSV에서는 객체 목록이 객체당 한 행, 키당 한 열이 되며, 그 밖의 값은 한 줄에 값 하나씩 기록됩니다.

블록 사이의 값

값은 JSON입니다. 텍스트, 숫자, true와 false, 목록, 객체, null입니다.

응답 객체

요청과 폴링은 응답을 객체로 보냅니다.

{
  "status": 201,
  "reason": "Created",
  "headers": { "content-type": "application/json", "location": "/v1/orders/ord_9Px3Kd" },
  "body": { "id": "ord_9Px3Kd", "total": { "amount": 449, "currency": "CHF" } },
  "time": 182.4,
  "url": "https://demo.echolot.dev/v1/orders"
}
  • body는 응답이 JSON이면 파싱된 JSON, 아니면 텍스트이며, 비어 있으면 null입니다.
  • 헤더 이름은 소문자입니다. 두 번 이상 보낸 헤더는 , 로 이어 붙입니다.
  • time은 교환 전체의 시간(밀리초)입니다.
  • 8 MB를 넘는 본문은 null과 "truncated": true로 도착합니다. 전체 응답은 기록에 그대로 남아 있습니다.

템플릿

“템플릿을 쓸 수 있습니다”라고 표시된 설정은 블록으로 들어온 값에서 {{name}}을 채웁니다.

  • {{status}}, {{body.id}}, {{body.items[0].sku}}: 들어온 객체의 키 또는 그 안으로 들어가는 경로.
  • 로그, 알림, 파일 쓰기의 {{value}}: 들어온 값 전체.
  • 변수 설정 블록이 run 범위로 저장한 변수.

일치하는 것이 없는 이름은 그대로 남으므로, 요청 블록 자체의 {{variables}}는 보낼 때 환경에서 계속 해석됩니다. 객체와 목록은 JSON 텍스트로 기록됩니다.

조건

조건 분기, 다중 분기, 폴링, 검증은 참 또는 거짓이 되는 JavaScript 표현식을 받습니다. value는 들어온 값이며, 폴링의 종료 조건은 이를 response로 읽으며, 이 이름은 다른 곳에서도 작동합니다.

value.status == 200
response.status === 200 && !!(response.body && response.body.access_token)
value.body.items.length > 0

예외를 던지는 표현식은 블록을 실패시킵니다(검증에서는 해당 검사가 실패합니다).

한도

잘못된 연결 때문에 실행이 끝없이 이어지지 않도록, 실행은 블록이 10,000번 실행되거나 한 시간이 지나면 멈춥니다. 웹훅이 시작한 실행은 2분 뒤에 멈춥니다.

이 페이지에서