InfoGrab DocsInfoGrab Docs

외부 훅

요약

외부 훅을 사용하면 n8n이 특정 작업을 수행할 때마다 커스텀 코드를 실행할 수 있습니다. 훅 등록에 사용하는 환경 변수에 대한 내용은 외부 훅 환경 변수를 참고하세요. 훅 함수가 담긴 훅 파일을 등록하여 훅을 설정합니다.

외부 훅을 사용하면 n8n이 특정 작업을 수행할 때마다 커스텀 코드를 실행할 수 있습니다. 데이터를 로깅하거나, 데이터를 변경하거나, 오류를 발생시켜 특정 동작을 금지하는 데 활용할 수 있습니다.

훅의 유형은 두 가지입니다:

  • 백엔드 훅: 서버 측에서 실행되며, EXTERNAL_HOOK_FILES 환경 변수를 사용하여 등록합니다.
  • 프론트엔드 훅: 브라우저에서 실행되며, script 태그로 로드됩니다.

훅 등록에 사용하는 환경 변수에 대한 내용은 외부 훅 환경 변수를 참고하세요.

백엔드 훅#

사용 가능한 훅#

인수 설명
credentials.create [credentialData: ICredentialsDb] 새 자격 증명이 생성되기 전에 호출됩니다. 자격 증명 수를 제한하는 데 사용합니다.
credentials.delete [id: credentialId] 자격 증명이 삭제되기 전에 호출됩니다.
credentials.update [credentialData: ICredentialsDb] n8n이 기존 자격 증명을 저장하기 전에 호출됩니다.
frontend.settings [frontendSettings: IN8nUISettings] n8n 시작 시 호출됩니다. 예를 들어, 표시되는 OAuth URL 등 프론트엔드 데이터를 덮어쓸 수 있습니다.
n8n.ready [app: App] n8n이 준비되면 호출됩니다. 예를 들어, 커스텀 API 엔드포인트를 등록하는 데 사용합니다.
n8n.stop n8n 프로세스가 중지될 때 호출됩니다. 프로세스 데이터를 저장할 수 있습니다.
oauth1.authenticate [oAuthOptions: clientOAuth1.Options, oauthRequestData: {oauth_callback: string}] OAuth1 인증 전에 호출됩니다. OAuth 콜백 URL을 덮어쓰는 데 사용합니다.
oauth2.callback [oAuth2Parameters: {clientId: string, clientSecret: string | undefined, accessTokenUri: string, authorizationUri: string, redirectUri: string, scopes: string[]}] OAuth2 콜백 시 호출됩니다. OAuth 콜백 URL을 덮어쓰는 데 사용합니다.
workflow.activate [workflowData: IWorkflowDb] 워크플로가 활성화되기 전에 호출됩니다. 활성 워크플로 수를 제한하는 데 사용합니다.
workflow.afterCreate [workflowId: string] 워크플로가 생성된 후 호출됩니다.
workflow.afterDelete [workflowId: string] 워크플로가 삭제된 후 호출됩니다.
workflow.afterUpdate [workflowData: IWorkflowBase] 기존 워크플로가 저장된 후 호출됩니다.
workflow.create [workflowData: IWorkflowBase] 워크플로가 생성되기 전에 호출됩니다. 저장된 워크플로 수를 제한하는 데 사용합니다.
workflow.delete [workflowId: string] 워크플로가 삭제되기 전에 호출됩니다.
workflow.postExecute [run: IRun, workflowData: IWorkflowBase] 워크플로가 실행된 후 호출됩니다.
workflow.preExecute [workflow: Workflow, mode: WorkflowExecuteMode, workflowContext: WorkflowHookContextService] 워크플로가 실행되기 전에 호출됩니다. 워크플로 실행 횟수를 집계하거나 제한할 수 있습니다. workflowContext 인수를 사용하는 예제는 훅 예제를 참고하세요(버전 2.23.0부터 사용 가능).
workflow.update [workflowData: IWorkflowBase] 기존 워크플로가 저장되기 전에 호출됩니다.
workflow.afterArchive [workflowId: string] 워크플로를 아카이브한 후 호출됩니다.
workflow.afterUnarchive [workflowId: string] 아카이브에서 워크플로를 복원한 후 호출됩니다.

훅 등록#

훅 함수가 담긴 훅 파일을 등록하여 훅을 설정합니다. 훅을 등록하려면 환경 변수 EXTERNAL_HOOK_FILES를 설정하세요.

단일 파일로 변수를 설정할 수 있습니다:

EXTERNAL_HOOK_FILES=/data/hook.js

또는 콜론으로 구분하여 여러 파일을 포함할 수 있습니다:

EXTERNAL_HOOK_FILES=/data/hook1.js:/data/hook2.js

훅 파일#

훅 파일은 다음 형식의 일반 JavaScript 파일입니다:

module.exports = {
    "frontend": {
        "settings": [
            async function (settings) {
                settings.oauthCallbackUrls.oauth1 = 'https://n8n.example.com/oauth1/callback';
                settings.oauthCallbackUrls.oauth2 = 'https://n8n.example.com/oauth2/callback';
            }
        ]
    },
    "workflow": {
        "activate": [
            async function (workflowData) {
                const activeWorkflows = await this.dbCollections.Workflow.count({ active: true });

                if (activeWorkflows > 1) {
                    throw new Error(
                        'Active workflow limit reached.'
                    );
                }
            }
        ]
    }
}

훅 예제#

필수 태그가 없을 경우 워크플로 실행 차단#

참고: workflowContext 인수는 n8n 버전 2.23.0부터 workflow.preExecute 훅에만 제공됩니다.

워크플로에 필수 태그가 없을 때 실행을 중단하려면 workflow.preExecute를 사용하세요:

module.exports = {
	workflow: {
		preExecute: [
			async function (workflow, mode, workflowContext) {
				const requiredTag = 'exampleTag';
				const workflowTags = await workflowContext.getWorkflowTags(workflow.id);
				if (!workflowTags.includes(requiredTag)) {
					throw new Error(`Workflow is missing required tag "${requiredTag}", aborting`);
				}
			},
		],
	},
};

훅 함수#

하나의 훅 또는 훅 파일에는 여러 훅 함수를 포함할 수 있으며, 모든 함수는 순서대로 실행됩니다.

훅 함수의 매개변수가 객체인 경우, 해당 매개변수의 데이터를 변경하여 n8n의 동작을 변경할 수 있습니다.

또한 this.dbCollections를 사용하여 모든 훅 함수에서 데이터베이스(DB)에 접근할 수 있습니다(위의 훅 파일 코드 샘플 참고).

프론트엔드 외부 훅#

백엔드 외부 훅과 마찬가지로, 사용자가 특정 작업을 수행할 때마다 n8n이 실행하는 외부 훅을 프론트엔드 코드에서도 정의할 수 있습니다. 예를 들어, 데이터를 로깅하거나 변경하는 데 활용할 수 있습니다.

사용 가능한 훅#

설명
credentialsEdit.credentialTypeChanged 기존 자격 증명의 유형이 변경될 때 호출됩니다.
credentials.create 누군가 새 자격 증명을 생성할 때 호출됩니다.
credentialsList.dialogVisibleChanged
dataDisplay.nodeTypeChanged
dataDisplay.onDocumentationUrlClick 누군가 도움말 문서 링크를 선택할 때 호출됩니다.
execution.open 기존 실행이 열릴 때 호출됩니다.
executionsList.openDialog 누군가 기존 워크플로 실행 목록에서 실행을 선택할 때 호출됩니다.
expressionEdit.itemSelected
expressionEdit.dialogVisibleChanged
nodeCreateList.filteredNodeTypesComputed
nodeCreateList.nodeFilterChanged 누군가 노드 패널 필터를 변경할 때 호출됩니다.
nodeCreateList.selectedTypeChanged
nodeCreateList.mounted
nodeCreateList.destroyed
nodeSettings.credentialSelected
nodeSettings.valueChanged
nodeView.createNodeActiveChanged
nodeView.addNodeButton
nodeView.mount
pushConnection.executionFinished
showMessage.showError
runData.displayModeChanged
workflow.activeChange
workflow.activeChangeCurrent
workflow.afterUpdate 누군가 기존 워크플로를 업데이트할 때 호출됩니다.
workflow.open
workflowRun.runError
workflowRun.runWorkflow 워크플로가 실행될 때 호출됩니다.
workflowSettings.dialogVisibleChanged
workflowSettings.saveSettings 누군가 워크플로의 설정을 저장할 때 호출됩니다.

프론트엔드 훅 등록#

페이지에 훅 스크립트를 로드하여 훅을 설정할 수 있습니다. 이를 위한 한 가지 방법은 프로젝트에 훅 파일을 만들고 editor-ui/public/index.html 파일에 script 태그를 추가하는 것입니다:

<script src="frontend-hooks.js"></script>

프론트엔드 훅 파일#

프론트엔드 외부 훅 파일은 다음 형식의 일반 JavaScript 파일입니다:

window.n8nExternalHooks = {
  nodeView: {
    mount: [
      function (store, meta) {
        // do something
      },
    ],
    createNodeActiveChanged: [
      function (store, meta) {
        // do something
      },
      function (store, meta) {
        // do something else
      },
    ],
    addNodeButton: [
      function (store, meta) {
        // do something
      },
    ],
  },
};

프론트엔드 훅 함수#

훅당 여러 훅 함수를 정의할 수 있습니다. n8n은 각 훅 함수를 다음 인수와 함께 호출합니다:

  • store: Vuex 스토어 객체입니다. 스토어에서 데이터를 변경하거나 가져오는 데 사용할 수 있습니다.
  • metadata: 훅에서 제공하는 데이터를 담는 객체입니다. 전달되는 내용을 확인하려면 editor-ui 패키지에서 해당 훅을 검색하세요.

외부 훅

n8n v2.25
원문 보기
요약

외부 훅을 사용하면 n8n이 특정 작업을 수행할 때마다 커스텀 코드를 실행할 수 있습니다. 훅 등록에 사용하는 환경 변수에 대한 내용은 외부 훅 환경 변수를 참고하세요. 훅 함수가 담긴 훅 파일을 등록하여 훅을 설정합니다.

외부 훅을 사용하면 n8n이 특정 작업을 수행할 때마다 커스텀 코드를 실행할 수 있습니다. 데이터를 로깅하거나, 데이터를 변경하거나, 오류를 발생시켜 특정 동작을 금지하는 데 활용할 수 있습니다.

훅의 유형은 두 가지입니다:

  • 백엔드 훅: 서버 측에서 실행되며, EXTERNAL_HOOK_FILES 환경 변수를 사용하여 등록합니다.
  • 프론트엔드 훅: 브라우저에서 실행되며, script 태그로 로드됩니다.

훅 등록에 사용하는 환경 변수에 대한 내용은 외부 훅 환경 변수를 참고하세요.

백엔드 훅#

사용 가능한 훅#

인수 설명
credentials.create [credentialData: ICredentialsDb] 새 자격 증명이 생성되기 전에 호출됩니다. 자격 증명 수를 제한하는 데 사용합니다.
credentials.delete [id: credentialId] 자격 증명이 삭제되기 전에 호출됩니다.
credentials.update [credentialData: ICredentialsDb] n8n이 기존 자격 증명을 저장하기 전에 호출됩니다.
frontend.settings [frontendSettings: IN8nUISettings] n8n 시작 시 호출됩니다. 예를 들어, 표시되는 OAuth URL 등 프론트엔드 데이터를 덮어쓸 수 있습니다.
n8n.ready [app: App] n8n이 준비되면 호출됩니다. 예를 들어, 커스텀 API 엔드포인트를 등록하는 데 사용합니다.
n8n.stop n8n 프로세스가 중지될 때 호출됩니다. 프로세스 데이터를 저장할 수 있습니다.
oauth1.authenticate [oAuthOptions: clientOAuth1.Options, oauthRequestData: {oauth_callback: string}] OAuth1 인증 전에 호출됩니다. OAuth 콜백 URL을 덮어쓰는 데 사용합니다.
oauth2.callback [oAuth2Parameters: {clientId: string, clientSecret: string | undefined, accessTokenUri: string, authorizationUri: string, redirectUri: string, scopes: string[]}] OAuth2 콜백 시 호출됩니다. OAuth 콜백 URL을 덮어쓰는 데 사용합니다.
workflow.activate [workflowData: IWorkflowDb] 워크플로가 활성화되기 전에 호출됩니다. 활성 워크플로 수를 제한하는 데 사용합니다.
workflow.afterCreate [workflowId: string] 워크플로가 생성된 후 호출됩니다.
workflow.afterDelete [workflowId: string] 워크플로가 삭제된 후 호출됩니다.
workflow.afterUpdate [workflowData: IWorkflowBase] 기존 워크플로가 저장된 후 호출됩니다.
workflow.create [workflowData: IWorkflowBase] 워크플로가 생성되기 전에 호출됩니다. 저장된 워크플로 수를 제한하는 데 사용합니다.
workflow.delete [workflowId: string] 워크플로가 삭제되기 전에 호출됩니다.
workflow.postExecute [run: IRun, workflowData: IWorkflowBase] 워크플로가 실행된 후 호출됩니다.
workflow.preExecute [workflow: Workflow, mode: WorkflowExecuteMode, workflowContext: WorkflowHookContextService] 워크플로가 실행되기 전에 호출됩니다. 워크플로 실행 횟수를 집계하거나 제한할 수 있습니다. workflowContext 인수를 사용하는 예제는 훅 예제를 참고하세요(버전 2.23.0부터 사용 가능).
workflow.update [workflowData: IWorkflowBase] 기존 워크플로가 저장되기 전에 호출됩니다.
workflow.afterArchive [workflowId: string] 워크플로를 아카이브한 후 호출됩니다.
workflow.afterUnarchive [workflowId: string] 아카이브에서 워크플로를 복원한 후 호출됩니다.

훅 등록#

훅 함수가 담긴 훅 파일을 등록하여 훅을 설정합니다. 훅을 등록하려면 환경 변수 EXTERNAL_HOOK_FILES를 설정하세요.

단일 파일로 변수를 설정할 수 있습니다:

EXTERNAL_HOOK_FILES=/data/hook.js

또는 콜론으로 구분하여 여러 파일을 포함할 수 있습니다:

EXTERNAL_HOOK_FILES=/data/hook1.js:/data/hook2.js

훅 파일#

훅 파일은 다음 형식의 일반 JavaScript 파일입니다:

module.exports = {
    "frontend": {
        "settings": [
            async function (settings) {
                settings.oauthCallbackUrls.oauth1 = 'https://n8n.example.com/oauth1/callback';
                settings.oauthCallbackUrls.oauth2 = 'https://n8n.example.com/oauth2/callback';
            }
        ]
    },
    "workflow": {
        "activate": [
            async function (workflowData) {
                const activeWorkflows = await this.dbCollections.Workflow.count({ active: true });

                if (activeWorkflows > 1) {
                    throw new Error(
                        'Active workflow limit reached.'
                    );
                }
            }
        ]
    }
}

훅 예제#

필수 태그가 없을 경우 워크플로 실행 차단#

참고: workflowContext 인수는 n8n 버전 2.23.0부터 workflow.preExecute 훅에만 제공됩니다.

워크플로에 필수 태그가 없을 때 실행을 중단하려면 workflow.preExecute를 사용하세요:

module.exports = {
	workflow: {
		preExecute: [
			async function (workflow, mode, workflowContext) {
				const requiredTag = 'exampleTag';
				const workflowTags = await workflowContext.getWorkflowTags(workflow.id);
				if (!workflowTags.includes(requiredTag)) {
					throw new Error(`Workflow is missing required tag "${requiredTag}", aborting`);
				}
			},
		],
	},
};

훅 함수#

하나의 훅 또는 훅 파일에는 여러 훅 함수를 포함할 수 있으며, 모든 함수는 순서대로 실행됩니다.

훅 함수의 매개변수가 객체인 경우, 해당 매개변수의 데이터를 변경하여 n8n의 동작을 변경할 수 있습니다.

또한 this.dbCollections를 사용하여 모든 훅 함수에서 데이터베이스(DB)에 접근할 수 있습니다(위의 훅 파일 코드 샘플 참고).

프론트엔드 외부 훅#

백엔드 외부 훅과 마찬가지로, 사용자가 특정 작업을 수행할 때마다 n8n이 실행하는 외부 훅을 프론트엔드 코드에서도 정의할 수 있습니다. 예를 들어, 데이터를 로깅하거나 변경하는 데 활용할 수 있습니다.

사용 가능한 훅#

설명
credentialsEdit.credentialTypeChanged 기존 자격 증명의 유형이 변경될 때 호출됩니다.
credentials.create 누군가 새 자격 증명을 생성할 때 호출됩니다.
credentialsList.dialogVisibleChanged
dataDisplay.nodeTypeChanged
dataDisplay.onDocumentationUrlClick 누군가 도움말 문서 링크를 선택할 때 호출됩니다.
execution.open 기존 실행이 열릴 때 호출됩니다.
executionsList.openDialog 누군가 기존 워크플로 실행 목록에서 실행을 선택할 때 호출됩니다.
expressionEdit.itemSelected
expressionEdit.dialogVisibleChanged
nodeCreateList.filteredNodeTypesComputed
nodeCreateList.nodeFilterChanged 누군가 노드 패널 필터를 변경할 때 호출됩니다.
nodeCreateList.selectedTypeChanged
nodeCreateList.mounted
nodeCreateList.destroyed
nodeSettings.credentialSelected
nodeSettings.valueChanged
nodeView.createNodeActiveChanged
nodeView.addNodeButton
nodeView.mount
pushConnection.executionFinished
showMessage.showError
runData.displayModeChanged
workflow.activeChange
workflow.activeChangeCurrent
workflow.afterUpdate 누군가 기존 워크플로를 업데이트할 때 호출됩니다.
workflow.open
workflowRun.runError
workflowRun.runWorkflow 워크플로가 실행될 때 호출됩니다.
workflowSettings.dialogVisibleChanged
workflowSettings.saveSettings 누군가 워크플로의 설정을 저장할 때 호출됩니다.

프론트엔드 훅 등록#

페이지에 훅 스크립트를 로드하여 훅을 설정할 수 있습니다. 이를 위한 한 가지 방법은 프로젝트에 훅 파일을 만들고 editor-ui/public/index.html 파일에 script 태그를 추가하는 것입니다:

<script src="frontend-hooks.js"></script>

프론트엔드 훅 파일#

프론트엔드 외부 훅 파일은 다음 형식의 일반 JavaScript 파일입니다:

window.n8nExternalHooks = {
  nodeView: {
    mount: [
      function (store, meta) {
        // do something
      },
    ],
    createNodeActiveChanged: [
      function (store, meta) {
        // do something
      },
      function (store, meta) {
        // do something else
      },
    ],
    addNodeButton: [
      function (store, meta) {
        // do something
      },
    ],
  },
};

프론트엔드 훅 함수#

훅당 여러 훅 함수를 정의할 수 있습니다. n8n은 각 훅 함수를 다음 인수와 함께 호출합니다:

  • store: Vuex 스토어 객체입니다. 스토어에서 데이터를 변경하거나 가져오는 데 사용할 수 있습니다.
  • metadata: 훅에서 제공하는 데이터를 담는 객체입니다. 전달되는 내용을 확인하려면 editor-ui 패키지에서 해당 훅을 검색하세요.