Convex Twilio 组件
使用 Twilio 在您的 Convex 应用程序中发送和接收短消息 .
import { Twilio } from "@convex-dev/twilio";
import { components } from "./_generated/api";
export const twilio = new Twilio(components.twilio, {
defaultFrom: process.env.TWILIO_PHONE_NUMBER!,
});
export const sendSms = internalAction({
handler: async (ctx, args) => {
return await twilio.sendMessage(ctx, {
to: "+14151234567",
body: "Hello, world!",
});
},
});
先决条件
Twilio 电话号码
创建一个Twilio账户,如果还没有,创建一个 Twilio 电话号码。 。 。 .
说明 电话号码SID 电话号码,你需要 马上就来.
Convex 应用程序
你需要一个Convex App来使用组件. 跟着任何 Convex 快速启动 来设置一个.
安装
安装组件包 :
npm install @convex-dev/twilio
创建一个 convex.config.ts 应用程序中的文件 convex/ 文件夹并安装
通过调用 use数字 :
// convex/convex.config.ts
import { defineApp } from "convex/server";
import twilio from "@convex-dev/twilio/convex.config.js";
const app = defineApp();
app.use(twilio);
export default app;
设置您的 API 证书 :
npx convex env set TWILIO_ACCOUNT_SID=ACxxxxx
npx convex env set TWILIO_AUTH_TOKEN=xxxxx
在您的应用程序中的文件里提供 Twilio 组件客户端的证明 convex/ 文件夹 :
// convex/example.ts
import { Twilio } from "@convex-dev/twilio";
import { components } from "./_generated/api";
export const twilio = new Twilio(components.twilio, {
// optionally pass in the default "from" phone number you'll be using
// this must be a phone number you've created with Twilio
defaultFrom: process.env.TWILIO_PHONE_NUMBER!,
});
通过创建一个 http.ts 文档中 convex/
文件夹并使用您导出于上面的客户端 :
// http.ts
import { twilio } from "./example";
import { httpRouter } from "convex/server";
const http = httpRouter();
// this call registers the routes necessary for the component
twilio.registerRoutes(http);
export default http;
发送信件
使用 Convex 动作发送消息 sendMessage数字 :
// convex/messages.ts
import { v } from "convex/values";
import { internalAction } from "./_generated/server";
export const sendSms = internalAction({
handler: async (ctx, args) => {
const status = await twilio.sendMessage(ctx, {
to: "+14158675309",
body: "Hey Jenny",
});
},
});
通过查询信件(参见 下级你可以检查一下 状态 (单位:千美元)Twilio 状态) (中文(简体) ). 组件订阅状态更新并写入最新状态 输入数据库.
接收信件
要接收消息,您将联系由您提供的网页处理器 包含您想要使用的Twilio电话号码.
twilio.registerRoutes 在您的 Convex 中注册两个 Webhook HTTP 处理器
应用程序的部署 :
YOUR_CONVEX_SITE_URL/twilio/message-status- 抓获和储存交货 信件状态 发送。 。 。 .YOUR_CONVEX_SITE_URL/twilio/incoming-message- 获取和存储信件 发送给 你的Twilio电话号码.
注意: 您可以通过习惯 httpPrefix 改为 Twilio 如果您想要通过 Twilio
结束点以外的地方 YOUR_CONVEX_SITE_URL/twilio/*。 。 。 .
例如,前往 YOUR_CONVEX_SITE_URL/custom-twilio/message-status, (中文(简体) ),
设定 :
export const twilio = new Twilio(components.twilio, {
httpPrefix: "/custom-twilio",
});
你可以用两种方式与你的Twilio电话号码联系起来:
-
使用 Twilio 控制台 在“配置”中 选项卡,“Message 配置” -> "一团乱来" 在" - >"URL"中读取.
-
打电话
registerIncomingSmsHandler被组件客户端曝光, 手机号码的ID:
export const registerIncomingSmsHandler = internalAction({
args: {},
handler: async (ctx) => {
return await twilio.registerIncomingSmsHandler(ctx, {
sid: "YOUR_TWILIO_PHONE_NUMBER_SID",
});
},
});
一旦配置完毕,接收到的信息将被组件捕获
登录在 messages 页:1.
您可以通过提供 twilio 组件客户端即时调用时调用:
// convex/example.ts
import { Twilio, messageValidator } from "@convex-dev/twilio";
const twilio = new Twilio(components.twilio);
twilio.incomingMessageCallback = internal.example.handleIncomingMessage;
export const handleIncomingMessage = internalMutation({
args: {
message: messageValidator,
},
handler: async (ctx, message) => {
// Use ctx here to update the database or schedule other actions.
// This is in the same transaction as the component's message insertion.
console.log("Incoming message", message);
},
});
如果 handleIncomingMessage 回调错误, 消息不会是
已保存,而 Webhook 将丢出一个错误。 特维利奥
不重试 webhook 请求, (中文(简体) ),
但你可以手动在Twilio"Error日志"控制台上重放.
查询信件
要列出所有 mssages,请使用 list 方法.
要列出所有收发信件,请使用 listIncoming 财务报告和审定财务报表
listOutgoing 方法:
// convex/messages.ts
// ...
export const list = query({
args: {},
handler: async (ctx) => {
const allMessages = await twilio.list(ctx);
const receivedMessages = await twilio.listIncoming(ctx);
const sentMessages = await twilio.listOutgoing(ctx);
return { allMessages, receivedMessages, sentMessages };
},
});
要得到一个单信息 通过它的id,使用 getMessageBySid数字 :
export const getMessageBySid = query({
args: {
sid: v.string(),
},
handler: async (ctx, args) => {
return await twilio.getMessageBySid(ctx, args);
},
});
以“ 到” 电话号码获取消息 :
export const getMessagesTo = query({
args: {
to: v.string(),
},
handler: async (ctx, args) => {
return await twilio.getMessagesTo(ctx, args);
},
});
通过"从"电话号码获取消息:
export const getMessagesFrom = query({
args: {
from: v.string(),
},
handler: async (ctx, args) => {
return await twilio.getMessagesFrom(ctx, args);
},
});
您也可以从特定号码获取所有消息 :
export const getMessagesByCounterparty = query({
args: {
from: v.string(),
},
handler: async (ctx, args) => {
return await twilio.getMessagesByCounterparty(ctx, args);
},
});