寻求从旧版Twilio API迁移至Salesforce托管包的方案参考
Salesforce旧Twilio集成迁移至新版托管包说明
我们公司自2015年起使用TwilioRestClient、TwilioMessage实现Salesforce消息集成,因Salesforce将停用旧API,计划迁移至新版Twilio托管包。迁移中发现类名未变但新增TwilioSF命名空间,无法直接引用,同时对新版API的addUrlPart()作用、以及StatusCallback的处理方式存在疑问,以下是迁移相关的核心说明:
旧版实现代码
TwilioRestClient client; client = new TwilioRestClient(accountSid, authToken); // 创建参数Map Map<String, String> params = new Map<String, String> { 'To' => callTo, 'From' => callFrom, 'Body' => msg, 'StatusCallback' => 'salesforceMessageResponseURL' }; TwilioMessage twiMsg = client.getAccount().getMessages().create(params); String msgId = twiMsg.getSid();
新版实现示例代码
TwilioSF.TwilioApiClient client = new TwilioSF.TwilioApiClient(); // 开关:是否在请求失败时抛出异常 // client.setThrowExceptionsOnFailedResponses(); client.addUrlPart('Accounts'); client.addUrlPart('ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'); client.addUrlPart('Messages.json'); client.addParam('To','+15017122661'); client.addParam('From','+15558675310'); client.addParam('Body','Here is my message'); TwilioSF.TwilioApiClientResponse response = client.doPut(); system.debug(response.hasError()); system.debug(response.getErrorMessage());
迁移核心要点
1. 命名空间前缀
所有原Twilio相关类必须添加TwilioSF命名空间前缀,比如TwilioRestClient替换为TwilioSF.TwilioApiClient,原链式调用的资源操作(如getAccount().getMessages().create())改为手动拼接API路径+参数的方式。
2. addUrlPart()的作用
这个方法用来手动拼接Twilio API的请求路径。旧版通过链式方法(getAccount().getMessages())封装了API端点的路径,新版则需要通过addUrlPart()逐个拼接路径片段,最终组成完整的API请求地址:
- 示例中
addUrlPart('Accounts')+addUrlPart('你的Account SID')+addUrlPart('Messages.json'),最终拼接成/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages.json,对应Twilio发送短信的官方API端点。
3. StatusCallback的处理区别
旧版是将StatusCallback作为参数放入Map中,新版依然是通过client.addParam('StatusCallback', '你的回调URL')添加该参数,逻辑本质完全一致,只是参数传递方式从Map改为addParam()方法。
对应旧版代码的新版迁移示例
TwilioSF.TwilioApiClient client = new TwilioSF.TwilioApiClient(); // 可选:开启后请求失败会抛出异常,默认不开启 // client.setThrowExceptionsOnFailedResponses(); // 拼接API请求路径 client.addUrlPart('Accounts'); client.addUrlPart(accountSid); // 替换为你的Account SID client.addUrlPart('Messages.json'); // 添加请求参数,包含StatusCallback client.addParam('To', callTo); client.addParam('From', callFrom); client.addParam('Body', msg); client.addParam('StatusCallback', 'salesforceMessageResponseURL'); // 创建短信需使用POST请求(注意:新版示例中的doPut()是错误用法,Twilio创建消息用POST) TwilioSF.TwilioApiClientResponse response = client.doPost(); // 处理响应获取消息SID if (!response.hasError()) { Map<String, Object> responseData = (Map<String, Object>)JSON.deserializeUntyped(response.getResponseText()); String msgId = (String)responseData.get('sid'); } else { // 错误处理 System.debug('Twilio请求错误:' + response.getErrorMessage()); }
注意事项
- 新版创建短信必须使用
doPost()方法,示例中的doPut()用于更新资源,不符合创建消息的API规范。 - 旧版
TwilioMessage对象的封装被移除,需要手动解析响应JSON获取所需字段(如消息SID)。
内容的提问来源于stack exchange,提问作者Duncan Stewart
相关产品推荐
相关产品推荐

