I've self-hosted callin.io, and the webhook production URL is showing as HTTP instead of HTTPS. In test mode, it correctly displays HTTPS. This also happens in the cloud version. Additionally, it automatically switches to test mode even when I've enabled production. Since HTTP cannot connect to Webflow, I'm unable to get this working.
It appears your topic is missing some crucial details. Could you please provide the following information, if relevant?
- callin.io version:
- Database (default: SQLite):
- callin.io EXECUTIONS_PROCESS setting (default: own, main):
- Running callin.io via (Docker, npm, callin.io cloud, desktop app):
- Operating system:
Hi,
What version of callin.io are you using? Could you also provide your setup details?
- callin.io version:
- Database (default: SQLite):
- callin.io EXECUTIONS_PROCESS setting (default: own, main):
- Running callin.io via (Docker, npm, callin.io cloud, desktop app):
- Operating system:
Additionally, would you be able to share the workflow that's causing problems? A short video demonstrating the issue would be incredibly helpful.
Using callin.io version 1.64.3, self-hosted on n8n.adslab360.io.
Here is the workflow: {
"name": "Roofing Work Experts: Form Submission 2",
"nodes": [
{
"parameters": {
"content": "Currently, it's setup to call back immediately after form submission if within work hours, if not - wait till 3pm EST (convenient for both West and East coast) next day.nnScheduling would be better though, can add additional emails and SMS.nnAdd status of the call, setup follow-up call flow if call wasn't answered.",
"height": 220,
"width": 392,
"color": 7
},
"id": "d550d5b3-4383-4214-a5b1-79d5402b29e5",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
1660,
80
]
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 2
},
"conditions": [
{
"id": "bf4094ef-5b0e-4292-abfa-05cee41b6fec",
"leftValue": "={{ $json.proceed }}",
"rightValue": "true",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"looseTypeValidation": true,
"options": {}
},
"id": "4732cab8-7f42-4505-9d46-1c43878f4355",
"name": "If",
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
2020,
380
]
},
{
"parameters": {},
"id": "4b8baa6e-b5c3-4d7c-91e2-4ac3a90c69f5",
"name": "Wait 5 sec",
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
1600,
380
],
"webhookId": "31319ef1-fd61-4198-8bd2-ee84ac40ad9b"
},
{
"parameters": {
"amount": 30,
"unit": "minutes"
},
"id": "759b7350-ba45-4601-aae2-8cdedbfdacdd",
"name": "Wait 30 min",
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
2300,
480
],
"webhookId": "7a98aa50-e92a-4727-a34a-148a10f2888b"
},
{
"parameters": {
"jsCode": "// Access the phone number fieldnlet phoneNumber = $json.body.payload.data['Phone Number'];nn// Remove all non-numeric charactersnlet cleanedNumber = phoneNumber.replace(/D/g, '');nn// Check if the cleaned number has at least 10 digits (basic validation)nif (cleanedNumber.length < 10) {n throw new Error('Invalid phone number format');n}nn// Add '+1' if the number has 10 digits (assuming it's a US number)nlet formattedPhoneNumber;nif (cleanedNumber.length === 10) {n formattedPhoneNumber = '+1' + cleanedNumber;n} else if (cleanedNumber.startsWith('1') && cleanedNumber.length === 11) {n formattedPhoneNumber = '+' + cleanedNumber;n} else if (cleanedNumber.startsWith('+')) {n formattedPhoneNumber = cleanedNumber;n} else {n throw new Error('Unexpected phone number format');n}nnreturn {n formattedPhoneNumber: formattedPhoneNumbern};n"
},
"id": "74ec5574-6569-4116-8aab-1a9aabac72c8",
"name": "Format phone number",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1200,
380
]
},
{
"parameters": {
"jsCode": "const now = new Date();nconst estOffset = -5; // EST offset in hoursnn// Convert current UTC time to ESTnlet currentHourEST = now.getUTCHours() + estOffset;nconst currentMinute = now.getUTCMinutes();nn// Adjust for cases where the hour calculation may roll over midnightnif (currentHourEST < 0) {n currentHourEST += 24;n} else if (currentHourEST >= 24) {n currentHourEST -= 24;n}nn// Define start and end hours for EST (07:00 - 19:00)nconst startHour = 7;nconst endHour = 19;nnif (currentHourEST >= startHour && currentHourEST < endHour) {n // Within allowed time windown return [{ json: { proceed: true } }];n} else {n // Outside allowed time window - calculate the next 3 PM ESTn let nextCallTime = new Date(now);nn if (currentHourEST >= endHour) {n // If it's after 7 PM EST, set for 3 PM the next dayn nextCallTime.setDate(now.getDate() + 1); // Move to the next dayn }n // Set time to 3:00 PM EST (15:00 - EST offset in UTC)n nextCallTime.setUTCHours(15 - estOffset, 0, 0, 0);nn return [{ json: { proceed: false, waitUntil: nextCallTime.toISOString() } }];n}n"
},
"id": "c0cf6c78-af23-4014-95a3-ba9db67aa00f",
"name": "Check if offer is live",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1820,
380
]
},
{
"parameters": {
"method": "POST",
"url": "https://api.twilio.com/2010-04-01/Accounts/ACd79578bada37ff02fade421934632efb/Calls.json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "twilioApi",
"sendBody": true,
"contentType": "form-urlencoded",
"bodyParameters": {
"parameters": [
{
"name": "To",
"value": "={{ $('Format phone number').item.json.formattedPhoneNumber }}"
},
{
"name": "From",
"value": "+15392523777"
},
{
"name": "Url",
"value": "https://studio.twilio.com/v2/Flows/FW0065f5c8ca1258309bdf4df9dc456e96/Executions"
}
]
},
"options": {}
},
"id": "63be57ce-d1be-48c0-a51e-fee1029b803f",
"name": "Call",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
2300,
260
],
"credentials": {
"twilioApi": {
"id": "cbhmIRIJ9kaRE4XK",
"name": "Twilio account"
}
}
},
{
"parameters": {
"authentication": "airtableOAuth2Api",
"operation": "create",
"base": {
"__rl": true,
"value": "appkxWljGmAAbnNTV",
"mode": "list",
"cachedResultName": "Roofing Work Experts",
"cachedResultUrl": "https://airtable.com/appkxWljGmAAbnNTV"
},
"table": {
"__rl": true,
"value": "tblrrZbPOkJ5pKgVC",
"mode": "list",
"cachedResultName": "Form Leads",
"cachedResultUrl": "https://airtable.com/appkxWljGmAAbnNTV/tblrrZbPOkJ5pKgVC"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"Email Address": "={{ $('Get form submission data from Webflow').item.json.body.payload.data.Email }}",
"Last Name": "={{ $('Get form submission data from Webflow').item.json.body.payload.data['Last Name'] }}",
"First Name": "={{ $('Get form submission data from Webflow').item.json.body.payload.data['First Name'] }}",
"Phone Number": "={{ $json.formattedPhoneNumber }}",
"TrustedForm Certificate": "={{ $('Get form submission data from Webflow').item.json.body.payload.data.xxTrustedFormCertUrl }}"
},
"matchingColumns": [],
"schema": [
{
"id": "Email Address",
"displayName": "Email Address",
"required": false,
"defaultMatch": false,
"canBeUsedToMatch": true,
"display": true,
"type": "string",
"readOnly": false,
"removed": false
},
{
"id": "Phone Number",
"displayName": "Phone Number",
"required": false,
"defaultMatch": false,
"canBeUsedToMatch": true,
"display": true,
"type": "string",
"readOnly": false,
"removed": false
},
{
"id": "First Name",
"displayName": "First Name",
"required": false,
"defaultMatch": false,
"canBeUsedToMatch": true,
"display": true,
"type": "string",
"readOnly": false,
"removed": false
},
{
"id": "Last Name",
"displayName": "Last Name",
"required": false,
"defaultMatch": false,
"canBeUsedToMatch": true,
"display": true,
"type": "string",
"readOnly": false,
"removed": false
},
{
"id": "TrustedForm Certificate",
"displayName": "TrustedForm Certificate",
"required": false,
"defaultMatch": false,
"canBeUsedToMatch": true,
"display": true,
"type": "string",
"readOnly": false,
"removed": false
},
{
"id": "Created Time",
"displayName": "Created Time",
"required": false,
"defaultMatch": false,
"canBeUsedToMatch": true,
"display": true,
"type": "string",
"readOnly": true,
"removed": true
}
]
},
"options": {}
},
"id": "a9b8675b-889a-41db-8bac-e87b98471eb9",
"name": "Add data to Airtable",
"type": "n8n-nodes-base.airtable",
"typeVersion": 2.1,
"position": [
1400,
380
],
"credentials": {
"airtableOAuth2Api": {
"id": "Md5aY40YjsjjVB7J",
"name": "Airtable"
}
}
},
{
"parameters": {
"httpMethod": "POST",
"path": "=",
"options": {}
},
"id": "3168d1ae-5a97-4b43-a1bb-12c367acfbe1",
"name": "Get form submission data from Webflow",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
980,
380
],
"webhookId": "eb13c304-3200-4edf-bfaf-0c82f5044376"
}
],
"pinData": {},
"connections": {
"If": {
"main": [
[
{
"node": "Call",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait 30 min",
"type": "main",
"index": 0
}
]
]
},
"Wait 5 sec": {
"main": [
[
{
"node": "Check if offer is live",
"type": "main",
"index": 0
}
]
]
},
"Wait 30 min": {
"main": [
[
{
"node": "Check if offer is live",
"type": "main",
"index": 0
}
]
]
},
"Format phone number": {
"main": [
[
{
"node": "Add data to Airtable",
"type": "main",
"index": 0
}
]
]
},
"Check if offer is live": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"Add data to Airtable": {
"main": [
[
{
"node": "Wait 5 sec",
"type": "main",
"index": 0
}
]
]
},
"Get form submission data from Webflow": {
"main": [
[
{
"node": "Format phone number",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "b5b1e958-8ab5-4653-a8fb-c81e6fc3d100",
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "4238bb3dd8ad45c891932178f20d9c7b47b75fa1a2456debcb5e2856f7d6a86e"
},
"id": "TWaeml3U5PhbavuQ",
"tags": []
}
When I enable production mode on my self-hosted instance, I'm unable to add 'http' to Webflow. It's currently set to active but isn't collecting any data, unlike when I enable listening.
This thread was automatically closed 90 days following the last response. New replies are no longer permitted.