Backend Developer (TypeScript / Node.js) – AI Telephony & Webhook Integration

Please login or register as jobseeker to apply for this job.

TYPE OF WORK

Any

SALARY

$6 and up

HOURS PER WEEK

40

DATE UPDATED

Mar 12, 2026

JOB OVERVIEW

About the Role

We are building a production AI-powered communications platform that handles:

Inbound phone calls (Twilio)

WhatsApp webhooks

Business-hours call routing logic

Background job scheduling

Compliance-sensitive request validation

We already have detailed technical specs and core logic defined.
Your role is to implement and integrate these utilities into our existing NestJS backend.

This is not a research role and not a frontend role.
This is structured backend integration work.

What You’ll Be Doing

Integrate TypeScript utilities into a NestJS backend

Implement Twilio webhook signature validation

Apply business-hours logic to outbound call routing

Add request guards and return proper HTTP 403 responses when needed

Write and run Jest tests

Debug edge cases (timezones, malformed payloads, webhook retries)

Follow written specifications precisely

You will not be redesigning the system architecture.

Required Skills

Strong TypeScript

Node.js experience

Experience with REST APIs and webhooks

Basic understanding of HMAC / request signing validation

Comfortable working in a structured codebase

Experience with testing (Jest or similar)

Nice to Have

NestJS experience

Twilio experience

Experience with queues (Redis / BullMQ)

Experience handling timezone logic

What This Role Is NOT

Not frontend/UI work

Not AI model training

Not chatbot prompt engineering

Not open-ended experimentation

This is backend systems execution.

Work Setup

Remote

Flexible hours (overlap with PST preferred but not required)

Task-based workflow

Clear written specs provided

Code reviewed before merge

To Apply

Please include:

Your years of experience with Node.js / TypeScript

A GitHub link (or code sample) showing backend work

A short explanation (2–3 sentences) of what a webhook is and why signature validation is important

Your expected hourly rate

Applications without code samples will not be considered.

SKILL REQUIREMENT
VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0010
Controller Execution Time ( Jobseekers / Job )  0.0155
Total Execution Time  0.0174
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,501,784 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Backend-Developer-TypeScript-Nodejs-AI-Telephony-Webhook-Integration-1579312
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0099 seconds)  (Hide)
0.0003   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0003   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1579312
 LIMIT 1 
0.0009   SELECT *
FROM `employers`
WHERE `employer_id` = 645697
 LIMIT 1 
0.0009   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `miscON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1579312
AND `misc`.`idIS NULL 
0.0006   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-04-16',ej.date_added) duration_daysDATEDIFF('2026-04-16',e.rebill_date) duration_rebillej.*, e.deactivate FROM employers eemployer_jobs ej WHERE e.employer_id ej.employer_id AND
                                   ((
e.user_level >= '500' AND ej.date_added <= e.rebill_date)
                                   OR 
e.employer_id '' OR (ej.date_approved <> '2000-01-01' and DATEDIFF('2026-04-16',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1579312' 
0.0007   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1579312 
0.0010   UPDATE employer_jobs SET hit_counts '***Feb-13-2026=36***Feb-14-2026=100***Feb-15-2026=30***Feb-16-2026=32***Feb-17-2026=11***Feb-18-2026=4***Feb-19-2026=10***Feb-20-2026=6***Feb-21-2026=6***Feb-22-2026=5***Feb-23-2026=1***Feb-24-2026=4***Feb-25-2026=10***Feb-26-2026=4***Feb-27-2026=1***Feb-28-2026=4***Mar-01-2026=1***Mar-02-2026=6***Mar-03-2026=3***Mar-04-2026=3***Mar-05-2026=1***Mar-06-2026=7***Mar-07-2026=3***Mar-08-2026=1***Mar-09-2026=7***Mar-10-2026=1***Mar-11-2026=1***Mar-12-2026=30***Mar-13-2026=39***Mar-14-2026=11***Mar-15-2026=9***Mar-16-2026=11***Mar-17-2026=14***Mar-18-2026=5***Mar-19-2026=6***Mar-20-2026=4***Mar-21-2026=1***Mar-22-2026=5***Mar-23-2026=4***Mar-24-2026=6***Mar-25-2026=4***Mar-26-2026=5***Mar-27-2026=5***Mar-28-2026=4***Mar-29-2026=1***Mar-30-2026=3***Mar-31-2026=93***Apr-01-2026=61***Apr-02-2026=11***Apr-03-2026=12***Apr-04-2026=7***Apr-05-2026=2***Apr-06-2026=2***Apr-08-2026=2***Apr-09-2026=1***Apr-10-2026=1***Apr-11-2026=1***Apr-14-2026=1***Apr-16-2026=1' WHERE job_id'1579312'  
0.0005   UPDATE employer_jobs SET monthly_hits '***Feb-2026=264***Mar-2026=294***Apr-2026=102' WHERE job_id'1579312'  
0.0015   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1579312' AND status LIKE 'sent%' ORDER BY id DESC  
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1579312 
0.0023   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '645697'
AND `date_added` >= '2022-06-08' 
0.0003   select from teasers 
0.0002   SELECT FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)