refactor: share voice call message actions

This commit is contained in:
Peter Steinberger 2026-03-13 22:04:19 +00:00
parent c5dc61e795
commit 9b24f890b2
1 changed files with 42 additions and 22 deletions

View File

@ -227,6 +227,35 @@ const voiceCallPlugin = {
params.respond(true, { callId: result.callId, initiated: true }); params.respond(true, { callId: result.callId, initiated: true });
}; };
const respondToCallMessageAction = async (params: {
requestParams: GatewayRequestHandlerOptions["params"];
respond: GatewayRequestHandlerOptions["respond"];
action: (request: Awaited<ReturnType<typeof resolveCallMessageRequest>>) => Promise<{
success: boolean;
error?: string;
transcript?: string;
}>;
failure: string;
includeTranscript?: boolean;
}) => {
const request = await resolveCallMessageRequest(params.requestParams);
if ("error" in request) {
params.respond(false, { error: request.error });
return;
}
const result = await params.action(request);
if (!result.success) {
params.respond(false, { error: result.error || params.failure });
return;
}
params.respond(
true,
params.includeTranscript
? { success: true, transcript: result.transcript }
: { success: true },
);
};
api.registerGatewayMethod( api.registerGatewayMethod(
"voicecall.initiate", "voicecall.initiate",
async ({ params, respond }: GatewayRequestHandlerOptions) => { async ({ params, respond }: GatewayRequestHandlerOptions) => {
@ -264,17 +293,13 @@ const voiceCallPlugin = {
"voicecall.continue", "voicecall.continue",
async ({ params, respond }: GatewayRequestHandlerOptions) => { async ({ params, respond }: GatewayRequestHandlerOptions) => {
try { try {
const request = await resolveCallMessageRequest(params); await respondToCallMessageAction({
if ("error" in request) { requestParams: params,
respond(false, { error: request.error }); respond,
return; action: (request) => request.rt.manager.continueCall(request.callId, request.message),
} failure: "continue failed",
const result = await request.rt.manager.continueCall(request.callId, request.message); includeTranscript: true,
if (!result.success) { });
respond(false, { error: result.error || "continue failed" });
return;
}
respond(true, { success: true, transcript: result.transcript });
} catch (err) { } catch (err) {
sendError(respond, err); sendError(respond, err);
} }
@ -285,17 +310,12 @@ const voiceCallPlugin = {
"voicecall.speak", "voicecall.speak",
async ({ params, respond }: GatewayRequestHandlerOptions) => { async ({ params, respond }: GatewayRequestHandlerOptions) => {
try { try {
const request = await resolveCallMessageRequest(params); await respondToCallMessageAction({
if ("error" in request) { requestParams: params,
respond(false, { error: request.error }); respond,
return; action: (request) => request.rt.manager.speak(request.callId, request.message),
} failure: "speak failed",
const result = await request.rt.manager.speak(request.callId, request.message); });
if (!result.success) {
respond(false, { error: result.error || "speak failed" });
return;
}
respond(true, { success: true });
} catch (err) { } catch (err) {
sendError(respond, err); sendError(respond, err);
} }