Skip to main content
@senddio/openai-tools · live

Give your ChatGPT assistant the power to send messages.

Five pre-built tools — for sending, checking status, listing messages, reading replies and pulling stats — shipped as plain JSON schemas. Drop them into your OpenAI Assistants tools array and your assistant can send on every channel through the same endpoint your team already uses.

Free forever · No card · All 6 channels · AI credits
assistant.tools · OpenAI Assistants API
JSON-Schema
{
  "type": "function",
  "function": {
    "name": "send_message",
    "description": "Send a transactional message on any channel.",
    "parameters": {
      "type": "object",
      "properties": {
        "channel": { "type": "string",
                     "enum": ["email","sms","whatsapp","push","slack","telegram"] },
        "to":      { "type": "string", "description": "Recipient (email, +E.164, device token, slack channel, etc.)" },
        "subject": { "type": "string" },
        "body":    { "type": "string" },
        "template":{ "type": "string" },
        "variables": { "type": "object", "additionalProperties": true }
      },
      "required": ["channel","to"]
    }
  }
}
The shift

Stop hand-writing tool definitions at 1am for every new assistant.

  • No more drift between your docs and your tool schemas.
  • No more “why won’t GPT call my tool?” debugging sessions.
  • No more rebuilding the same handler for every new app.
  • No more agents holding administrator keys you will regret giving them.

Five schemas. One handler. Assistants that genuinely ship work.

The toolbelt

Five tools, fully typed.

send_message
Send on any channel.
get_message_status
Look up status by id.
list_recent_messages
Recent message history.
list_inbound_messages
Read inbound replies.
get_delivery_stats
Aggregate stats over a window.
How it pairs

One package. Schemas + handler.

Import the schemas to declare the tool surface to OpenAI. Import the handler to actually execute the tool calls against /v1/send. Stateful idempotency keys, per-tool error mapping, and observability are baked in.

  • Schemas exported as plain JSON-Schema
  • Handler returns standard tool-output objects
  • Per-tool error code mapping to OpenAI's tool_error contract
  • Idempotency keys propagated end-to-end
  • Works in serverless (Vercel, Cloudflare Workers)
Node · usage
@senddio/openai-tools
import OpenAI from 'openai';
import { tools, handleToolCall } from '@senddio/openai-tools';

const openai = new OpenAI();

const run = await openai.beta.threads.runs.create(threadId, {
  assistant_id: ASSISTANT_ID,
  tools,                              // ← our schemas
  additional_instructions: 'You may send messages.'
});

// When run.required_action arrives:
for (const call of run.required_action.submit_tool_outputs.tool_calls) {
  const output = await handleToolCall(call, {
    apiKey: process.env.SENDDIO_API_KEY,
    agent:  'gpt-4-shipping-bot'
  });
  await openai.beta.threads.runs.submitToolOutputs(threadId, run.id, {
    tool_outputs: [{ tool_call_id: call.id, output }],
  });
}
From teams who switched

Assistants that actually ship.

Composite quotes from teams putting GPT assistants in front of real users.

I added the @senddio/openai-tools package and the assistant just worked. Five lines of glue code. I keep waiting for the catch.
Mateo F.
Backend engineer · SaaS
Our shipping bot is GPT plus the Senddio tools. It is remarkably competent. Customer-care tickets fell 22% in the first week.
Reina G.
Customer-experience lead · e-commerce
The handler is generic, so AI sends and human sends share the same code paths. Logs are unified. Our auditors were very happy.
Phil O.
Security engineer · fintech
Your next 30 days

Your first 30 days as an assistant-driven product.

01
Day 1
First assistant turn ends with a real send
02
Day 3
Agent-scoped key live; original dev key revoked
03
Week 1
Tool calls tagged in Logs by assistant name
04
Day 30
Daily standup agent posts to Slack on its own
Every milestone above ships on the Free plan. No card, no upgrade gate.
FAQ

OpenAI tools — FAQ

They run in your code. The cleanest pattern is to import the @senddio/openai-tools package, pass the schemas to the Assistants API's tools array, and use the included handler to forward each tool call to Senddio. You wire it up once.

Yes. The schemas are plain JSON Schema, so they work with both the modern Responses API and the older ChatCompletion function-calling style. We test against the latest GPT model families.

You can, but we recommend giving each assistant its own agent-scoped key. That way your audit trail clearly shows which assistant sent which message. Same endpoint, different keys, much cleaner reporting.

The handler is a simple synchronous call and return. OpenAI's streaming model orchestrates the interleaving on its side. Senddio does not add latency to the response stream.

Give your GPT a send tool today.

Free plan includes agent-scoped keys and 20 AI credits.

Start free Read the docs
300 emails/day · All 6 channels · AI credits · No card