Sms 实现Salesforce与Twilio之间的批量消息传递,达到Salesforce API的限制

Sms 实现Salesforce与Twilio之间的批量消息传递,达到Salesforce API的限制,sms,salesforce,twilio,apex,callouts,Sms,Salesforce,Twilio,Apex,Callouts,我正在构建Salesforce和Twilio之间的集成,该集成使用TwilioForce REST API发送/接收短信。主要问题是绕过Salesforce的10次调用API限制,以及禁止从触发器调用HTTP 我的设计基于Dan Appleman的异步请求流程,但在批处理模式或RequestAsync(),ASync(),Sync(),repeat。。。我仍在达到极限 我想知道其他开发者是如何成功做到这一点的;集成已经有一段时间了,但示例很少。您是否为每个已更新的记录发送唯一的消息?如果不是,那

我正在构建Salesforce和Twilio之间的集成,该集成使用TwilioForce REST API发送/接收短信。主要问题是绕过Salesforce的10次调用API限制,以及禁止从触发器调用HTTP

我的设计基于Dan Appleman的异步请求流程,但在批处理模式或RequestAsync(),ASync(),Sync(),repeat。。。我仍在达到极限


我想知道其他开发者是如何成功做到这一点的;集成已经有一段时间了,但示例很少。

您是否为每个已更新的记录发送唯一的消息?如果不是,那么为什么不向多个收件人发送一封邮件以保存API限制


不幸的是,如果您确实需要发送10条以上的唯一消息,那么使用Twilio API无法批量发送消息,您可以编写一个简单的应用程序,运行在Heroku或其他应用程序平台上,您可以调用该应用程序平台来为您处理SMS功能。

我现在使用以下结构(很抱歉格式化-大部分是伪代码):

异步请求对象: AsyncType(选择列表:“SMS到Twilio”是现在的选择), 参数(长文本区域:以逗号分隔的ID列表)

消息对象: 收件人(电话)、发件人(电话)、消息(文本)、已发送(布尔)、smsId(字符串)、错误(文本)

消息触发器:将触发器详细信息传递给CreateAsyncRequests()方法

CreateAsyncRequests:评估每个新的/更新的消息;如果任何消息的Sent==false,我们将创建一个AsyncRequest,type=SMS to Twilio,Params+=','+message.Id

//创建要在处理完所有邮件后插入的列表 列表请求=新列表()

一旦我们在一个AsyncRequest.Params列表中找到5个message.id,就将其添加到请求中。 如果所有消息都已处理,并且Params中有一个ID小于5的请求,那么也将其添加到请求中

If requests.size() > 0 {
  insert requests;
  AsyncProcessor.StartBatch();
}
AsyncProcessor实现.Batchable和.AllowsCallout,并查询ASyncRequest\uu\c中需要处理的任何请求,在本例中,这将是我们的消息列表

execute()方法获取异步请求列表,将每个参数值拆分为其组件消息ID,然后查询消息对象中的特定消息

StartBatch()一次调用一条记录的execute(),因此每个execute()进程包含的调用数仍然少于最多10个

每个消息都在一个try/catch块中处理,该块调用SendMessage(),设置Message.smsId=Twilio.smsId并设置Message.Sent=true

如果没有返回smsId,则消息未发送,我设置了一个布尔值bsidisnll=true,表示(至少)一条消息未发送

**如果任何消息失败,则即使对于成功的消息,也不会返回SMSID**

在处理每一批消息之后,我检查BSIDisnll;如果为true,那么我将返回消息列表,并将任何没有smsId的消息放入一个映射中,该映射由我试图发送它们的Twilio编号索引

由于我将每个ASyncRequest限制为5条消息,所以我仍然可以使用callout来检索从该Twilio.from号发送的当前日期的所有消息,使用

client.getAccount().getMessages('From' => fromNumber, 'DateSent' => currentDate)

然后,我可以为所有成功的消息更新Message.smsIds,并为任何失败的消息添加一条错误消息到Message.error\u on\u\u\c。

根据限制,大多数国际短信API(twilio、nexmo…)不适合salesforce

使用1个API调用1个SMS不是一个好的选择。不建议使用批处理作业或将来的方法来处理这些调用

当您引用跨对象字段时,动态消息创建也是一项挑战

我们已经创建了一个应用程序,它可以处理多达40K短信在“1”API调用,它是非常容易管理短信模板,如电子邮件模板

您还可以通过工作流或Process builder(如电子邮件)设置SMS

您可以使用Api从任何平台发送批量SMS


ValueText短信应用程序:

我看不到一条短信就能发送到多个用户的方法;To、From和Message,per callout,是我遇到的唯一方法。不幸的是,重新审视这个问题,您是正确的,我使用twilio API的经验有点过时,我回忆起发送组消息的能力,但我不正确。在这一点上,我唯一可行的解决方案是将数据推送到一个外部服务,该服务可以在不受SFDC限制的情况下为您发送消息。@DuncanStewart-我遇到了10多条消息的同一问题,我正在尝试了解如何异步调用该进程。你是说即使使用Asynch,这也是一个问题吗?@DuncanStewart-你是在用TwiML回复文本吗?如果是,则有10条消息限制。所以在这种情况下,使用他们的RESTAPI。@dity-reply完全是另一回事;我有一个在Sandbox/Dev orgs中运行良好的流程,但在生产中遇到了涉及服务器证书的问题。但不,我没有使用TwiML——我是从Salesforce调用Twilio Rest API,问题出在Salesforce对单个事务调用的限制上。但现在它起作用了:D