You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Twilio为Discord机器人添加自定义来电显示功能的咨询

实现前置准备
  • 先完成Twilio侧的基础配置:
    1. 购买至少1个支持自定义来电显示呼出权限的Twilio号码,如果你用的是Twilio试用账号,还需要把作为被叫的myphonenumber本机号码在Twilio后台完成身份验证
    2. 从Twilio控制台获取你的Account SID和Auth Token,这两个是调用Twilio API的核心凭证
  • 完成Discord机器人侧的准备:已经获取Discord Bot Token,机器人已加入目标服务器,且已开启读取消息、发送消息的权限
具体实现步骤

1. 依赖安装

以下以Node.js技术栈为例,你也可以替换成Python等其他你熟悉的技术栈,对应安装依赖即可:

npm install discord.js twilio dotenv

2. 敏感信息配置

创建.env文件存储凭证,不要把敏感信息硬编码到代码中:

DISCORD_BOT_TOKEN=你的Discord机器人Token
TWILIO_ACCOUNT_SID=你的Twilio账户SID
TWILIO_AUTH_TOKEN=你的Twilio认证Token
TWILIO_BASE_NUMBER=你购买的Twilio基础号码

3. 核心逻辑编写

核心逻辑分为指令监听匹配、参数校验、Twilio API调用三个部分,参考代码片段如下:

require('dotenv').config();
const { Client, GatewayIntentBits } = require('discord.js');
const twilio = require('twilio');

// 初始化Discord机器人和Twilio客户端
const client = new Client({ 
  intents: [
    GatewayIntentBits.Guilds, 
    GatewayIntentBits.GuildMessages, 
    GatewayIntentBits.MessageContent
  ] 
});
const twilioClient = twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);

client.on('messageCreate', async message => {
  // 过滤非!call指令和机器人自己发的消息
  if (!message.content.startsWith('!call') || message.author.bot) return;

  // 解析带引号的三个入参
  const args = message.content.match(/(".*?"|\S+)/g).slice(1);
  if (args.length !== 3) {
    return message.reply('参数格式错误,正确格式为:!call "你的本机号码" "自定义来电显示" "服务标识"');
  }

  // 去除参数外层引号
  const [myPhoneNumber, callerId, yourService] = args.map(arg => arg.replace(/"/g, ''));

  try {
    // 调用Twilio发起呼叫
    const call = await twilioClient.calls.create({
      url: '你的TwiML服务地址', // 用于指定呼叫接通后的播放内容、流程逻辑,测试可使用Twilio官方默认待接听音乐地址
      to: myPhoneNumber,
      from: callerId, // 该字段即为自定义的来电显示内容
    });
    message.reply(`呼叫已发起,关联服务:${yourService},呼叫标识ID:${call.sid}`);
  } catch (err) {
    message.reply(`呼叫发起失败:${err.message}`);
  }
});

// 启动机器人
client.login(process.env.DISCORD_BOT_TOKEN);

4. 注意事项

  • 你要用作callerid的内容如果是号码,必须先在Twilio后台完成身份验证,否则会呼叫失败;如果是纯文字内容,需要提前向Twilio申请开通文字来电显示权限,同时确认被叫号码所属运营商支持透传文字来电显示
  • 所有号码都需要按照E.164格式填写,也就是带国家码前缀的完整格式(比如中国号码为+8613xxxxxxxxx),不要使用本地短号格式

内容的提问来源于stack exchange,提问作者Stevie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:27:02