* Do not call dub if API key isn't present * Add `WorkflowOptOutContact` table * Add `sendTo` column to `WorkflowReminder` * Add `workflowOptOutContactRepository` * Add `WorkflowReminderRepository` * Write `sendTo` number when scheduling SMS messages * Add `p-limit` package * Add `determineOptOutType` to `TwilioProvider` * Add `deleteMultipleScheduledSMS` * Create `WorkflowOptOutService` * Add endpoint handler for Twilio SMS responses * Add `isOptedOut` method to `workflowOptOutContactRepository` * Verify phone number is not opted out before scheduling SMS * Use `smsReminderNumber` instead of `sendTo` * Type fix * Add .env variable if opt out is available * Add opt out message to SMS * Import `pLimit` directly in method * Address select comment * Guard against undefined phone number from form * Add early return to `deleteWorkflowReminders` * Add request validation from Twilio * Add fallback message as i18N string * Only delete SMS attendee scheduled reminders
29 lines
1.1 KiB
TypeScript
29 lines
1.1 KiB
TypeScript
import type { NextRequest } from "next/server";
|
|
import { NextResponse } from "next/server";
|
|
|
|
import { determineOptOutType } from "../lib/reminders/providers/twilioProvider";
|
|
import { WorkflowOptOutContactRepository } from "../lib/repository/workflowOptOutContact";
|
|
import { WorkflowOptOutService } from "../lib/service/workflowOptOutService";
|
|
|
|
const handleSMSResponse = async (request: NextRequest) => {
|
|
try {
|
|
const optOutResult = await determineOptOutType(request);
|
|
if ("error" in optOutResult) {
|
|
return NextResponse.json({ message: optOutResult.error }, { status: 400 });
|
|
}
|
|
|
|
if (optOutResult.optOutStatus) {
|
|
await WorkflowOptOutService.optOutPhoneNumber(optOutResult.phoneNumber);
|
|
} else {
|
|
await WorkflowOptOutContactRepository.removePhoneNumber(optOutResult.phoneNumber);
|
|
}
|
|
|
|
return NextResponse.json({ message: "Opt status updated successfully" }, { status: 200 });
|
|
} catch (e) {
|
|
console.error("Error processing user response webhook:", e);
|
|
return NextResponse.json({ message: "Internal server error" }, { status: 500 });
|
|
}
|
|
};
|
|
|
|
export default handleSMSResponse;
|