0

TwilioForce REST API を使用して SMS を送受信する Salesforce と Twilio の統合を構築しています。主な問題は、Salesforce からの 10 回の呼び出し API 制限と、トリガーからの HTTP 呼び出しの禁止を回避することです。

Dan Appleman の Asynchronous Request プロセスに基づいて設計していますが、Batch モードまたは RequestAsync()、ASync()、Sync() のいずれかで繰り返します... まだ限界に達しています。

他の開発者がこれをどのように成功させたか知りたいです。統合はしばらく前からありましたが、例はほとんどありません。

4

3 に答える 3

0

次の構造を使用して現在動作しています(フォーマットについてはお詫び申し上げます-ほとんどが疑似コードです):

ASyncRequest オブジェクト: AsyncType (選択リスト: 今のところ「SMS to Twilio」)、Params (長いテキスト エリア: ID のコンマ区切りリスト)

メッセージ オブジェクト: To (電話)、From (電話)、Message (テキスト)、Sent (ブール値)、smsId (文字列)、Error (テキスト)

メッセージ トリガー: トリガーの詳細を CreateAsyncRequests() メソッドに渡します。

CreateAsyncRequests: 新規/更新された各 Message__c を評価します。いずれかのメッセージに対して Sent == false の場合、AsyncRequest、type=SMS to Twilio、Params += ',' + message.Id を作成します。

// すべてのメッセージが処理された後に挿入されるリストを作成します List requests = new List();

1 つの AsyncRequest.Params リストで 5 つの message.Ids に達したら、それをリクエストに追加します。すべてのメッセージが処理され、Params の ID が 5 つ未満のリクエストがある場合は、それもリクエストに追加します。

If requests.size() > 0 {
  insert requests;
  AsyncProcessor.StartBatch();
}

AsyncProcessor は .Batchable と .allowsCallouts を実装し、処理が必要なすべての要求 (この場合は Messages リスト) について ASyncRequest__c をクエリします。

execute() メソッドは、ASyncRequests のリストを取得し、各 Params 値をコンポーネントのメッセージ ID に分割してから、それらの特定のメッセージについてメッセージ オブジェクトをクエリします。

StartBatch() は、一度に 1 つのレコードで execute() を呼び出します。そのため、各 execute() プロセスには最大 10 個のコールアウトよりも少ない数のコールアウトが含まれます。

各メッセージは、SendMessage() を呼び出し、Message.smsId = Twilio.smsId を設定し、Message.Sent = true を設定する try/catch ブロックで処理されます。

smsId が返されない場合、メッセージは送信されていません。ブール値 bSidIsNull = true を設定して、(少なくとも) 1 つのメッセージが送信されなかったことを示します。

** いずれかのメッセージが失敗した場合、成功したメッセージであっても smsIds は返されません **

メッセージの各バッチが処理された後、bSidIsNull をチェックします。true の場合、メッセージのリストに戻り、smsId を持たないメッセージを、送信元の Twilio 番号でインデックス付けされたマップに配置します。

各 ASyncRequest を 5 メッセージに制限したので、コールアウトを使用して、現在の日付の Twilio.From 番号から送信されたすべてのメッセージを取得できます。

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

次に、成功したすべてのメッセージの Message.smsIds を更新し、失敗したメッセージの Message.Error_on_Send__c にエラー メッセージを追加します。

于 2014-01-22T21:07:51.830 に答える