Skip to content

Commit 5cd3ece

Browse files
feat(messaging): adopt new SDK send signature and add awesome-template support (#6)
1 parent f4e6a69 commit 5cd3ece

File tree

4 files changed

+62
-6
lines changed

4 files changed

+62
-6
lines changed

typescript/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
"license": "MIT",
6161
"dependencies": {
6262
"@modelcontextprotocol/sdk": "^1.13.1",
63-
"@trysiren/node": "^0.1.0",
63+
"@trysiren/node": "^0.1.1",
6464
"zod": "^3.22.4",
6565
"zod-to-json-schema": "^3.22.4"
6666
},
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import { z } from 'zod';
2+
import { SirenClient, ProviderCode } from '@trysiren/node';
3+
import { Context } from '../configuration';
4+
import type { Tool } from '../tools';
5+
6+
const sendAwesomeSchema = z.object({
7+
recipient_value: z.string().describe('Identifier for the recipient (e.g., Slack user ID, email address)'),
8+
channel: z.string().describe('The channel to send the message through (e.g., "SLACK", "EMAIL")'),
9+
template_identifier: z.string().describe('Awesome template path/identifier'),
10+
template_variables: z.record(z.any()).optional().describe('Variables for the template'),
11+
provider_name: z.string().optional().describe('Provider integration name'),
12+
provider_code: z.nativeEnum(ProviderCode).optional().describe('Provider integration code'),
13+
});
14+
15+
export const sendAwesomeTemplate = async (
16+
sirenClient: SirenClient,
17+
context: Context,
18+
params: z.infer<typeof sendAwesomeSchema>
19+
) => {
20+
try {
21+
const notificationId = await sirenClient.message.sendAwesomeTemplate(
22+
params.recipient_value,
23+
params.channel,
24+
params.template_identifier,
25+
params.template_variables,
26+
params.provider_name,
27+
params.provider_code
28+
);
29+
return { notificationId };
30+
} catch (error) {
31+
console.error('Failed to send awesome template:', error);
32+
return {
33+
error: 'Failed to send awesome template',
34+
details: error instanceof Error ? error.message : String(error),
35+
};
36+
}
37+
};
38+
39+
const tool = (context: Context): Tool => ({
40+
method: 'send_awesome_template',
41+
name: 'Send Awesome Template Message',
42+
description: 'Send a message using an awesome template identifier via a chosen channel',
43+
parameters: sendAwesomeSchema,
44+
actions: {
45+
messaging: {
46+
create: true,
47+
},
48+
},
49+
execute: sendAwesomeTemplate,
50+
});
51+
52+
export default tool;

typescript/src/lib/messaging/sendMessage.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
import { z } from 'zod';
2-
import { SirenClient } from '@trysiren/node';
2+
import { SirenClient, ProviderCode } from '@trysiren/node';
33
import { Context } from '../configuration';
44
import type { Tool } from '../tools';
55

66
const sendMessageSchema = z.object({
7-
recipient_type: z.enum(['user_id', 'direct']).describe('The type of recipient'),
8-
recipient_value: z.string().describe('The identifier for the recipient (e.g., Slack user ID, email address)'),
7+
recipient_value: z.string().describe('Identifier for the recipient (e.g., Slack user ID, email address)'),
98
channel: z.string().describe('The channel to send the message through (e.g., "SLACK", "EMAIL")'),
109
body: z.string().optional().describe('Message body text (required if no template)'),
1110
template_name: z.string().optional().describe('Template name (required if no body)'),
1211
template_variables: z.record(z.any()).optional().describe('Template variables for template-based messages'),
12+
provider_name: z.string().optional().describe('Provider integration name'),
13+
provider_code: z.nativeEnum(ProviderCode).optional().describe('Provider integration code'),
1314
});
1415

1516
export const sendMessage = async (
@@ -19,12 +20,13 @@ export const sendMessage = async (
1920
) => {
2021
try {
2122
const notificationId = await sirenClient.message.send(
22-
params.recipient_type,
2323
params.recipient_value,
2424
params.channel,
2525
params.body,
2626
params.template_name,
27-
params.template_variables
27+
params.template_variables,
28+
params.provider_name,
29+
params.provider_code
2830
);
2931

3032
return { notificationId };

typescript/src/lib/tools.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { z } from 'zod';
33
import sendMessageTool from './messaging/sendMessage';
44
import getMessageStatusTool from './messaging/getMessageStatus';
55
import getMessageRepliesTool from './messaging/getMessageReplies';
6+
import sendAwesomeTemplateTool from './messaging/sendAwesomeTemplate';
67

78
import listTemplatesTool from './templates/listTemplates';
89
import createTemplateTool from './templates/createTemplate';
@@ -39,6 +40,7 @@ export type Tool = {
3940

4041
const tools = (context: Context): Tool[] => [
4142
sendMessageTool(context),
43+
sendAwesomeTemplateTool(context),
4244
getMessageStatusTool(context),
4345
getMessageRepliesTool(context),
4446

0 commit comments

Comments
 (0)