包信息
| 属性 | 值 |
|---|---|
| NuGet 包 | Bitzsoft.Integrations.OutboundCall.Twilio |
| Provider ID | twilio |
| 模型 | Per-call(逐通拨号) |
| 鉴权 | HTTP Basic Auth(AccountSid + AuthToken) |
配置字段(TwilioOutboundCallOptions)
Twilio 有独立 Options,不共用 OutboundCallOptions。
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
AccountSid | string | 是 | — | Twilio 账户 SID |
AuthToken | string | 是 | — | 鉴权 Token |
From | string | 是 | — | 默认主叫号(E.164 格式) |
Twiml | string? | 否 | — | 内联 TwiML(与 Url 二选一) |
Url | string? | 否 | — | TwiML 回调 URL(与 Twiml 二选一) |
Cps | int | 否 | 1 | 每秒并发呼叫数(账号级 CPS) |
EnableMachineDetection | bool | 否 | false | 答答检测(预测式外呼) |
StatusCallback | string? | 否 | — | 状态回调 URL |
Domain | string | 否 | api.twilio.com | API 域名 |
Version | string | 否 | 2010-04-01 | API 版本 |
配置示例
builder.Services.AddTwilioOutboundCall(options =>{ options.AccountSid = "ACxxxxxxxxxxxxxxxxxx"; options.AuthToken = "your-auth-token"; options.From = "+12025550123"; options.Cps = 3; options.Twiml = TwilioOutboundCallOptions.BuildInlineTwiml("您好,这是一条测试通知。"); options.EnableMachineDetection = true; options.StatusCallback = "https://your-app.com/callback";});DI 注册
builder.Services.AddTwilioOutboundCall(options => { /* 见上 */ });使用示例
// Twilio 通过 IOutboundCallService 映射到逐通拨号public class CallService(IOutboundCallService outbound){ public async Task StartBatchAsync(List<string> contacts) { // CreateCampaign 在内存中创建活动 var resp = await outbound.CreateCampaignAsync(new CreateCampaignRequest { Name = "batch-001" }); await outbound.ImportContactsAsync(new ImportContactsRequest { CampaignId = resp.CampaignId, Contacts = contacts, }); // StartCampaign 触发 CampaignDialer 逐通拨号(CPS 节流) await outbound.StartCampaignAsync(new StartCampaignRequest { CampaignId = resp.CampaignId }); }}已知限制
- CPS 是账号级限制,
options.Cps只做客户端节流,实际并发取决于 Twilio 账号配额。 EnableMachineDetection会增加约 1-2 秒延迟。
相关
- 外呼域手册:Per-call 模型与 CampaignDialer