AI 음성 전화 로봇 - OpenAI GPT-4o + ElevenLabs + Twilio 통합
중급
이것은Support Chatbot, AI Chatbot분야의자동화 워크플로우로, 10개의 노드를 포함합니다.주로 If, OpenAi, Webhook, ElevenLabs, HttpRequest 등의 노드를 사용하며. GPT-4o, ElevenLabs 및 Twilio를 통해 다국어 음성 전화 로봇 생성
사전 요구사항
- •OpenAI API Key
- •HTTP Webhook 엔드포인트(n8n이 자동으로 생성)
- •대상 API의 인증 정보가 필요할 수 있음
- •Google Sheets API 인증 정보
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"id": "ai-voice-calling-bot",
"meta": {
"instanceId": "12345abcde67890fghij",
"templateCredsSetupCompleted": true
},
"name": "AI Voice Calling Bot - OpenAI GPT-4o + ElevenLabs + Twilio Integration",
"tags": [
{
"id": "ai-voice-bot",
"name": "AI Voice Bot",
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-01T00:00:00.000Z"
}
],
"nodes": [
{
"id": "webhook-start",
"name": "Twilio Voice Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
240,
300
],
"webhookId": "voice-webhook-start",
"parameters": {
"path": "voice-webhook",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 1
},
{
"id": "check-speech-input",
"name": "음성 입력 확인",
"type": "n8n-nodes-base.if",
"position": [
460,
300
],
"parameters": {
"conditions": {
"options": {
"leftValue": "={{ $json.SpeechResult }}",
"operation": "exists",
"caseSensitive": true
}
}
},
"typeVersion": 1
},
{
"id": "openai-gpt",
"name": "OpenAI GPT-4o 응답 생성",
"type": "n8n-nodes-base.openAi",
"position": [
680,
200
],
"parameters": {
"model": "gpt-4o",
"options": {
"maxTokens": 150,
"temperature": 0.7
},
"messages": {
"values": [
{
"role": "system",
"content": "You are a helpful AI assistant for a service business. You can help customers:\n1. Schedule appointments (collect name, phone, preferred date/time, service type)\n2. Order pizza (collect size, toppings, address, phone)\n3. Book other services (collect relevant details)\n\nAlways be polite, concise, and gather necessary information step by step. Keep responses under 100 words for voice calls. End with a clear question or next step."
},
{
"role": "user",
"content": "={{ $json.SpeechResult || 'Hello, how can I help you today?' }}"
}
]
}
},
"credentials": {
"openAiApi": {
"id": "openai-creds",
"name": "OpenAI API"
}
},
"typeVersion": 1
},
{
"id": "elevenlabs-tts",
"name": "ElevenLabs 텍스트 음성 변환",
"type": "n8n-nodes-base.elevenLabs",
"position": [
900,
200
],
"parameters": {
"text": "={{ $json.choices[0].message.content }}",
"model_id": "eleven_monolingual_v1",
"voice_id": "21m00Tcm4TlvDq8ikWAM",
"voice_settings": {
"style": 0,
"stability": 0.75,
"similarity_boost": 0.75,
"use_speaker_boost": true
}
},
"credentials": {
"elevenLabsApi": {
"id": "elevenlabs-creds",
"name": "ElevenLabs API"
}
},
"typeVersion": 1
},
{
"id": "upload-audio",
"name": "오디오 저장소 업로드",
"type": "n8n-nodes-base.httpRequest",
"position": [
1120,
200
],
"parameters": {
"operation": "upload",
"additionalFields": {
"fileName": "response.mp3",
"contentType": "audio/mpeg"
},
"binaryPropertyName": "data"
},
"typeVersion": 3
},
{
"id": "twilio-response",
"name": "Twilio TwiML 응답",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
1340,
200
],
"parameters": {
"twiml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Response>\n <Play>{{ $json.audio_url }}</Play>\n <Gather input=\"speech\" timeout=\"10\" speechTimeout=\"auto\" action=\"{{ $node.webhook.getWebhookUrl() }}\" method=\"POST\">\n <Say voice=\"alice\">Please speak after the tone.</Say>\n </Gather>\n <Say voice=\"alice\">I didn't hear anything. Goodbye!</Say>\n <Hangup/>\n</Response>"
},
"typeVersion": 1
},
{
"id": "initial-greeting",
"name": "초기 인사말",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
680,
400
],
"parameters": {
"twiml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Response>\n <Say voice=\"alice\">Hello! I'm your AI assistant. I can help you schedule appointments, order pizza, or book services. How can I help you today?</Say>\n <Gather input=\"speech\" timeout=\"10\" speechTimeout=\"auto\" action=\"{{ $node['Twilio Voice Webhook'].getWebhookUrl() }}\" method=\"POST\">\n <Say voice=\"alice\">Please speak after the tone.</Say>\n </Gather>\n <Say voice=\"alice\">I didn't hear anything. Please call back. Goodbye!</Say>\n <Hangup/>\n</Response>"
},
"typeVersion": 1
},
{
"id": "log-conversation",
"name": "대화 기록",
"type": "n8n-nodes-base.googleSheets",
"position": [
900,
400
],
"parameters": {
"columns": {
"value": {
"call_sid": "={{ $json.CallSid }}",
"caller_id": "={{ $json.From }}",
"timestamp": "={{ $now }}",
"ai_response": "={{ $json.choices[0].message.content }}",
"speech_input": "={{ $json.SpeechResult }}"
},
"mappingMode": "defineBelow"
},
"options": {},
"operation": "append",
"sheetName": "Call_Logs",
"documentId": "your-google-sheet-id"
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "google-sheets-creds",
"name": "Google Sheets"
}
},
"typeVersion": 3
},
{
"id": "check-appointment",
"name": "예약 확인",
"type": "n8n-nodes-base.if",
"position": [
1120,
400
],
"parameters": {
"conditions": {
"options": {
"leftValue": "={{ $json.choices[0].message.content.toLowerCase() }}",
"operation": "contains",
"rightValue": "appointment",
"caseSensitive": false
}
}
},
"typeVersion": 1
},
{
"id": "save-appointment",
"name": "예약 요청 저장",
"type": "n8n-nodes-base.googleSheets",
"position": [
1340,
500
],
"parameters": {
"columns": {
"value": {
"status": "pending",
"call_sid": "={{ $json.CallSid }}",
"caller_id": "={{ $json.From }}",
"timestamp": "={{ $now }}",
"request_details": "={{ $json.SpeechResult }}"
},
"mappingMode": "defineBelow"
},
"operation": "append",
"sheetName": "Appointments",
"documentId": "your-appointments-sheet-id"
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "google-sheets-creds",
"name": "Google Sheets"
}
},
"typeVersion": 3
}
],
"active": true,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "1",
"connections": {
"log-conversation": {
"main": [
[
{
"node": "check-appointment",
"type": "main",
"index": 0
}
]
]
},
"check-speech-input": {
"main": [
[
{
"node": "openai-gpt",
"type": "main",
"index": 0
}
],
[
{
"node": "initial-greeting",
"type": "main",
"index": 0
}
]
]
},
"webhook-start": {
"main": [
[
{
"node": "check-speech-input",
"type": "main",
"index": 0
}
]
]
},
"check-appointment": {
"main": [
[
{
"node": "save-appointment",
"type": "main",
"index": 0
}
],
[]
]
},
"openai-gpt": {
"main": [
[
{
"node": "elevenlabs-tts",
"type": "main",
"index": 0
},
{
"node": "log-conversation",
"type": "main",
"index": 0
}
]
]
},
"upload-audio": {
"main": [
[
{
"node": "twilio-response",
"type": "main",
"index": 0
}
]
]
},
"elevenlabs-tts": {
"main": [
[
{
"node": "upload-audio",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
중급 - 지원 챗봇, AI 챗봇
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
고급 SEO, 코어 웹 바이탈 및 챗봇 자동화 키트
GPT-4 어드바이저, PageSpeed Insights 및 Slack 알림을 사용한 SEO 성능 검토 및 모니터링
If
Set
Cron
+
If
Set
Cron
22 노드Candra Reza
시장 조사
항공사 FAQ 봇
GPT-4 및 문제 분류를 사용한 항공사 고객 지원 자동화
If
Code
Merge
+
If
Code
Merge
27 노드Oneclick AI Squad
지원 챗봇
WhatsApp AI 어시스턴트 및 Google 문서, Gemini를 사용한 고객 지원 자동 처리
WhatsApp AI 어시스턴트, Google 문서 및 Gemini를 사용한 고객 지원 자동 처리
If
Code
Webhook
+
If
Code
Webhook
14 노드Jamot
지원 챗봇
다중 채널 DHL 상태 봇
웹 양식 및 이메일 문의를 위한 자동화된 DHL 소포 추적 봇
If
Code
Gmail
+
If
Code
Gmail
15 노드Yusuke Yamamoto
지원 챗봇
대화형 여행 예약기: AI를 사용한 항공편 및 호텔 예약 자동화
대화형 여행 예약 프로그램: GPT-3.5를 사용하여 항공편 및 호텔 예약 자동화
Code
Open Ai
Switch
+
Code
Open Ai
Switch
21 노드Oneclick AI Squad
지원 챗봇
AI 기반 음식 주문 처리 시스템, Facebook Messenger, Google 스프레드시트 및 캘린더 통합
AI 기반 음식 주문 처리 시스템, Facebook Messenger, Google 스프레드시트 및 캘린더 통합
If
Code
Webhook
+
If
Code
Webhook
26 노드Hans Wilhelm Radam
리드 육성
워크플로우 정보
난이도
중급
노드 수10
카테고리2
노드 유형7
저자
Shiva
@shivp1413Several years of Experience in AI, LLMs, Robotics, Electronics. I create N8N templates which are open-source and free!!
외부 링크
n8n.io에서 보기 →
이 워크플로우 공유