원클릭으로
custom-webhook
Call any custom HTTPS endpoint
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Call any custom HTTPS endpoint
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
Read or update contacts, opportunities, notes, and conversations in GoHighLevel
Save or retrieve records from Airtable bases
Send emails, SMS, or manage contacts via Brevo (formerly Sendinblue)
Manage bookings, availability, and event types in Cal.com
Check availability, create scheduling links, or list upcoming events in Calendly
Create or update tasks and lists in ClickUp
SOC 직업 분류 기준
| name | custom_webhook |
| display_name | Custom Webhook |
| description | Call any custom HTTPS endpoint |
| auth_type | api_key |
| category | custom |
When the user wants their voice agent to call a custom API or webhook that is not one of the built-in integrations. This is the escape hatch for any HTTPS endpoint. Common triggers:
Ask for details: What is the HTTPS endpoint URL? What HTTP method? What data should be sent? What does the response look like?
Use secret("custom_webhook") in tool scripts if authentication is
needed. The system will automatically emit the correct action card based
on the platform configuration. Do NOT emit action cards manually.
If the webhook uses a custom auth header name, read it from
secret('custom_webhook.header_name') instead of hardcoding the header.
Generate tool config: Use a QuickJS script field. The endpoint MUST use HTTPS.
{
"name": "webhook.notify",
"description": "POST caller data to the webhook",
"params": [
{"name": "caller_name", "type": "string", "required": true},
{"name": "summary", "type": "string", "required": false}
],
"script": "let resp = http_post('https://hooks.example.com/incoming', {caller_name: caller_name, summary: summary});\nif (resp.status >= 200 && resp.status < 300) { return 'Done'; }\nthrow new Error(`Webhook ${resp.status}: ${resp.body}`);",
"side_effect": true
}
{
"name": "webhook.notify",
"description": "POST caller data to the webhook using bearer auth",
"params": [
{"name": "caller_name", "type": "string", "required": true},
{"name": "summary", "type": "string", "required": false}
],
"script": "let key = secret('custom_webhook');\nlet resp = http_post_h('https://api.example.com/hook', {caller_name: caller_name, summary: summary}, {'Authorization': 'Bearer ' + key});\nif (resp.status >= 200 && resp.status < 300) { return 'Sent'; }\nthrow new Error(`Webhook ${resp.status}: ${resp.body}`);",
"side_effect": true
}
{
"name": "webhook.notify",
"description": "POST data using a custom auth header",
"params": [
{"name": "data", "type": "string", "required": true}
],
"script": "let key = secret('custom_webhook');\nlet header = secret('custom_webhook.header_name') || 'X-API-Key';\nlet headers = {};\nheaders[header] = key;\nlet resp = http_post_h('https://api.example.com/webhook', {data: data}, headers);\nif (resp.status >= 200 && resp.status < 300) { return 'OK'; }\nthrow new Error(`Webhook ${resp.status}: ${resp.body}`);",
"side_effect": true
}
secret('custom_webhook') for the primary key/tokensecret('custom_webhook.header_name') to read the custom header name fieldsecret() call entirelythrow using resp.status/resp.body instead of returning a plain-text error string