refactor: small improvements for cal ai (#23444)
* refactor: small improvements follow up * fix: add docs
This commit is contained in:
@@ -817,7 +817,7 @@
|
||||
"delete_phone_number_confirmation": "Are you sure you want to delete this phone number? This action cannot be undone.",
|
||||
"yes_delete_phone_number": "Yes, delete phone number",
|
||||
"phone_number_info_tooltip": "The number you are trying to import must be in E.164 format (+country code followed by the number, with no spaces or special characters), e.g. +1234567890",
|
||||
"termination_uri_info_tooltip": "The termination uri to uniquely identify your elastic SIP trunk. This is used for outbound calls. For Twilio elastic SIP trunks it always ends with .pstn.twilio.com.",
|
||||
"termination_uri_info_tooltip": "The termination URI to uniquely identify your elastic SIP trunk. This is used for outbound calls. For Twilio elastic SIP trunks it always ends with .pstn.twilio.com.",
|
||||
"sip_trunk_username_info_tooltip": "The username used to authenticate the SIP trunk.",
|
||||
"sip_trunk_password_info_tooltip": "The password used to authenticate the SIP trunk.",
|
||||
"nickname_info_tooltip": "Nickname of the number. This is for your reference only.",
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
import { v4 as uuidv4 } from "uuid";
|
||||
|
||||
import { generateUniqueAPIKey as generateHashedApiKey } from "@calcom/ee/api-keys/lib/apiKeys";
|
||||
import { timeZoneSchema } from "@calcom/lib/dayjs/timeZone.schema";
|
||||
import { HttpError } from "@calcom/lib/http-error";
|
||||
import logger from "@calcom/lib/logger";
|
||||
import prisma from "@calcom/prisma";
|
||||
import { PrismaApiKeyRepository } from "@calcom/lib/server/repository/PrismaApiKeyRepository";
|
||||
|
||||
import type {
|
||||
AIPhoneServiceUpdateModelParams,
|
||||
@@ -27,24 +26,12 @@ export class AgentService {
|
||||
) {}
|
||||
|
||||
private async createApiKey({ userId, teamId }: { userId: number; teamId?: number }) {
|
||||
const [hashedApiKey, apiKey] = generateHashedApiKey();
|
||||
await prisma.apiKey.create({
|
||||
data: {
|
||||
id: uuidv4(),
|
||||
userId,
|
||||
teamId,
|
||||
// And here we pass a null to expiresAt if never expires is true
|
||||
expiresAt: null,
|
||||
hashedKey: hashedApiKey,
|
||||
note: `Cal AI Phone API Key for agent ${userId} ${teamId ? `for team ${teamId}` : ""}`,
|
||||
},
|
||||
return await PrismaApiKeyRepository.createApiKey({
|
||||
userId,
|
||||
teamId,
|
||||
expiresAt: null,
|
||||
note: `Cal AI Phone API Key for agent ${userId} ${teamId ? `for team ${teamId}` : ""}`,
|
||||
});
|
||||
|
||||
const apiKeyPrefix = process.env.API_KEY_PREFIX ?? "cal_";
|
||||
|
||||
const prefixedApiKey = `${apiKeyPrefix}${apiKey}`;
|
||||
|
||||
return prefixedApiKey;
|
||||
}
|
||||
|
||||
async getAgent(agentId: string): Promise<AIPhoneServiceAgent<AIPhoneServiceProviderType.RETELL_AI>> {
|
||||
|
||||
@@ -934,12 +934,13 @@ export function AgentConfigurationSheet({
|
||||
{t("learn_how_to_get_your_terminator")}
|
||||
</p>
|
||||
</div>
|
||||
{/*TODO: Create a doc and link to it */}
|
||||
<Button
|
||||
type="button"
|
||||
color="secondary"
|
||||
size="base"
|
||||
EndIcon="external-link"
|
||||
href="https://cal.com/help/importing/import-numbers"
|
||||
target="_blank"
|
||||
className="text-emphasis my-auto">
|
||||
{t("learn")}
|
||||
</Button>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { parsePhoneNumberWithError } from "libphonenumber-js";
|
||||
import { parsePhoneNumberWithError } from "libphonenumber-js/max";
|
||||
|
||||
export const formatPhoneNumber = (phoneNumber: string) => {
|
||||
const parsedPhoneNumber = parsePhoneNumberWithError(phoneNumber);
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
import { v4 as uuidv4 } from "uuid";
|
||||
|
||||
import { generateUniqueAPIKey as generateHashedApiKey } from "@calcom/ee/api-keys/lib/apiKeys";
|
||||
import prisma from "@calcom/prisma";
|
||||
|
||||
export class PrismaApiKeyRepository {
|
||||
@@ -25,4 +28,34 @@ export class PrismaApiKeyRepository {
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
static async createApiKey({
|
||||
userId,
|
||||
teamId,
|
||||
note,
|
||||
expiresAt,
|
||||
}: {
|
||||
userId: number;
|
||||
teamId?: number;
|
||||
note?: string;
|
||||
expiresAt?: Date | null;
|
||||
}) {
|
||||
const [hashedApiKey, apiKey] = generateHashedApiKey();
|
||||
await prisma.apiKey.create({
|
||||
data: {
|
||||
id: uuidv4(),
|
||||
userId,
|
||||
teamId,
|
||||
expiresAt,
|
||||
hashedKey: hashedApiKey,
|
||||
note: note,
|
||||
},
|
||||
});
|
||||
|
||||
const apiKeyPrefix = process.env.API_KEY_PREFIX ?? "cal_";
|
||||
|
||||
const prefixedApiKey = `${apiKeyPrefix}${apiKey}`;
|
||||
|
||||
return prefixedApiKey;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -803,7 +803,10 @@ export const updateHandler = async ({ ctx, input }: UpdateOptions) => {
|
||||
|
||||
if (externalToolErrors.length > 0) {
|
||||
log.error(`Agent tool update errors for workflow ${id}:`, externalToolErrors);
|
||||
throw new Error(`${externalToolErrors.join("; ")}`);
|
||||
throw new TRPCError({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
message: externalToolErrors.join("; "),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user