2014-01-20 2 views
0

Я создаю интеграцию между Salesforce и Twilio, которая отправляет/получает SMS с использованием TwilioForce REST API. Основная проблема заключается в том, чтобы обойти ограничение API 10-Call от Salesforce, а также запрет на выходы HTTP из триггера.Внедрение массовых сообщений от Salesforce в/из Twilio, преодоление ограничений API Salesforce

Я основываю дизайн на процессах асинхронного запроса Дэна Эпплмана, но в обоих режимах пакетной или RequestAsync(), ASync(), Sync() повторяется ... Я все еще сталкиваюсь с ограничениями.

Я хотел бы знать, как другие разработчики сделали это успешно; интеграция была там на некоторое время, но примеров мало и далеко.

ответ

0

Вы отправляете уникальные сообщения для каждой обновленной записи? Если нет, то почему бы не отправить одно сообщение нескольким получателям, чтобы сохранить ограничения API?

К сожалению, если вам действительно нужно отправить более 10 уникальных сообщений, нет возможности отправлять сообщения с помощью Twilio API, вместо этого вы можете написать простое приложение, которое будет работать на Heroku или на другой платформе приложений, может обратиться к тому, что будет обрабатывать функции SMS для вас.

+0

Я не вижу способ отправить неоднократное даже с одним сообщением; To, From и Message для каждой выноски - единственный метод, с которым я столкнулся. –

+0

К сожалению, проблема снова решена, вы правы, мой опыт работы с twilio API немного устарел, и я вспомнил о возможности отправки групповых сообщений, но я был некорректен. На этом этапе единственным доступным решением было бы перенаправить данные на внешнюю службу, которая может отправлять вам сообщения без ограничений, налагаемых SFDC. –

+0

@ DuncanStewart - Я сталкиваюсь с одной и той же проблемой более 10 сообщений, и я пытаюсь понять, как вызывать процесс асинхронно. Вы говорите, что даже с Асинчем это проблема? – Ditty

0

У меня он работает сейчас, используя следующую структуру (я извиняюсь за форматирование - это в основном псевдокод):

AsyncRequest объект: AsyncType (PickList: 'SMS на Twilio' является его сейчас), Params (длинная область текста: разделенный запятыми список идентификаторов)

объект Сообщение: К (телефон), С (телефона), сообщения (текст), Отправленные (булево), smsId (строка), Error (текст)

Сообщение триггера: передается триггер детали для метода CreateAsyncRequests().

CreateAsyncRequests: оценивать каждое новое/обновленное Message__c; если Sent == false для любых сообщений, мы создаем AsyncRequest, type = SMS для Twilio, Params + = ',' + message.Id.

// Создайте список, который необходимо вставить после обработки всех сообщений Список запросов = новый Список();

Как только мы достигнем 5 message.Ids в одном списке AsyncRequest.Params, добавьте его в запросы. Если все сообщения обработаны и есть запрос с < 5 Идентификаторами в Params, добавьте его также в запросы.

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

AsyncProcessor реализует .Batchable и .AllowsCallouts, и запрашивает ASyncRequest__c для любых запросов, которые должны быть обработаны, в данном случае будет наш список сообщений.

Метод execute() принимает список ASyncRequests, разбивает каждое значение Params на свои идентификаторы сообщений компонента и затем запрашивает объект Message для этих конкретных сообщений.

StartBatch() вызывает execute() с 1 записью за раз, так что каждый процесс execute() будет содержать менее 10 выносок.

Каждое сообщение обрабатывается в блоке try/catch, который вызывает SendMessage(), устанавливает Message.smsId = Twilio.smsId и устанавливает Message.Sent = true.

Если smsId не возвращается, сообщение не было отправлено, и я установил boolean bSidIsNull = true, указав, что (по крайней мере) одно сообщение не было отправлено.

** Если какое-либо сообщение не удалось, не smsIds не возвращаются ДАЖЕ ДЛЯ СООБЩЕНИЙ, которые оказались успешными **

После каждой партии сообщений обрабатывается, я проверяю bSidIsNull; если true, тогда я возвращаюсь к списку сообщений и помещаю любые, у которых нет smsId, в карту, индексированную номером Twilio, который я пытаюсь отправить им.

Поскольку я ограничен каждый AsyncRequest 5 сообщений, я до сих пор использование выноски для извлечения всех сообщений, отправленных из этого числа Twilio.From на текущую дату, используя

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

Тогда я могу обновите Message.smsIds для всех успешных сообщений и добавьте сообщение об ошибке в Message.Error_on_Send__c для всех неудачных.

0

Большинство международных текстовых API (twilio, nexmo ...) не подходят для salesforce в соответствии с ограничениями.

Использование 1 вызова API для 1 SMS не является хорошим вариантом. Это не предлагается путем использования пакетного задания или будущих методов для обработки этих вызовов.

Динамическое создание сообщений также является сложной задачей, когда вы обращаетесь к полям кросс-объектов.

Мы создали приложение, в котором оно может обрабатывать до 40K SMS в «1» API-интерфейсе, и очень легко управлять шаблоном SMS, таким как шаблон электронной почты.

Вы также можете настроить СМС из рабочего процесса или Обработчика процесса, такого как электронная почта.

Вы можете использовать ValueText SMS Api для отправки массовых SMS-сообщений с любой платформы.

ValueText SMS App: https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3A00000EFoedUAD

Смежные вопросы