Отправка массовых SMS через Twilio Rest API с PHP

Я использую PHP-библиотеку Twilio и хочу отправлять SMS-сообщения большому списку люди, использующие Twilio PHP REST API. У меня есть текстовый файл, содержащий список уникальных телефонных номеров (около 1000 участников).

В настоящее время я планировал создать задание cron, которое анализирует текстовый файл и выполняет вызов REST API для каждого из телефонных номеров в файле.

Ex:

<?php
require_once 'vendor/autoload.php';
use Twilio\Rest\Client;
$sid = "ACXXXXXXXXXXXXXXXXXXXXXXXX";
$token = "XXXXXXXXXXXXXXXXXXXXXXXXXX";
$client = new Client($sid, $token);

$sms_sent = $client->messages->create(
    '+1xxxxxxxxxx',
    array(
        'from' => '+1xxxxxxxxxx',
        'body' => "XXXXXX XXXXXX",
        'statusCallback' => "http://myapplication_callback_url"
    )
);

Но я хотел знать, сможет ли Twilio выполнить эту работу за меня (например, я загружу текстовый файл в Twilio, а Twilio обработает файл и отправит SMS на каждый номер в нем).

Есть ли такой вариант с Twilio? Я прочитал о опции МАССОВЫЕ SMS здесь, но похоже, что он отправляет статическое сообщение всем пользователям. Мне нужно отправить уникальное сообщение каждому пользователю. Как это возможно с Twilio? Пожалуйста, дай мне знать.

РЕДАКТИРОВАТЬ: 27-09-2017: Я слышал о Twilio COPILOT, но не знаю, как использовать эту службу.


person shasi kanth    schedule 21.09.2017    source источник
comment
Почему бы не спросить support.twilio.com/hc/en-us/requests/new? Это не совсем вопрос программирования.   -  person Alex Blex    schedule 21.09.2017
comment
Откуда это unique message to each user, если вы говорите, что хотите загрузить текстовый файл с номерами в Twilio?   -  person Alex Baban    schedule 21.09.2017
comment
@AlexBaban Я также могу указать URL-адрес веб-службы, который выводит уникальное сообщение для каждого вызова, которое Twilio, вероятно, может использовать для отправки сообщений пользователям при анализе текстового файла.   -  person shasi kanth    schedule 22.09.2017


Ответы (3)


Проповедник разработчиков Twilio здесь.

Чтобы выявить проблему, вам нужно отправить пользователям около 1000 уникальных сообщений, верно?

Если это так, то это то, что вам нужно сделать.

Поскольку сообщение уникально для каждого номера, вам необходимо вызвать API к Twilio REST API для отправки каждого сообщения индивидуально. Twilio ограничивает отправку сообщения со скоростью 1 сообщение на номер в секунду. Если вы уже превысили этот лимит, Twilio поставит эти сообщения за вас в очередь. Это не должно занимать 5 секунд на один вызов API.

Это тот случай, если вы используете одно число, как в исходном примере. На отправку 1000 сообщений уйдет почти 17 минут.

Однако вы можете использовать службу обмена сообщениями, чтобы ускорить это. Служба обмена сообщениями - это набор номеров и других услуг, предоставляемых Copilot (включая сопоставление номеров по географическому признаку, резервное копирование буквенно-цифровых данных отправителя и другие подобные вещи). Для отправки большого количества сообщений, как в этом случае, номерной пул является важной частью, потому что каждый номер Twilio, с которого вы отправляете, может отправлять 1 сообщение в секунду. Итак, если вы добавите 2 номера в службу обмена сообщениями, вы можете отправлять 2 сообщения в секунду, если вы добавите 10 номеров в пул, вы можете отправлять 10 в секунду.

Чтобы отправлять сообщения с помощью службы обмена сообщениями и такого пула номеров, вам необходимо создать службу обмена сообщениями в вашу консоль Twilio. Добавьте или купите номера для пула. Затем получите SID службы обмена сообщениями:

Найдите SID службы обмена сообщениями в консоли Twilio, где вы создали эту службу.

Затем вы можете использовать SID службы обмена сообщениями вместо номера отправителя при вызове API.

$sms_sent = $client->messages->create(
    '+1xxxxxxxxxx',
    array(
        'from' => 'MESSAGING SERVICE SID',
        'body' => "XXXXXX XXXXXX",
        'statusCallback' => "http://myapplication_callback_url"
    )
);

Тогда ваши сообщения будут разветвлены службой обмена сообщениями.

Примечательно, что если вам нужно отправить 1000 сообщений в день, мы рекомендуем вам распределить это по крайней мере по 4 номерам, поскольку операторы США начинают блокировать длинные кодовые номера, которые используются чаще. Ознакомьтесь с нашими рекомендациями по отправке SMS-сообщений в США.

Сообщите мне, если это поможет.

person philnash    schedule 28.09.2017
comment
Это определенно очень помогает. Спасибо за Ваш ответ. У меня есть один вопрос по отправке сообщений. Где в вашем коде указать несколько чисел? Насколько я могу судить, есть только один номер («+ 1xxxxxxxxxx»). Могу ли я сделать это массивом из 1000 чисел? - person shasi kanth; 28.09.2017
comment
Ой, извини. Вам нужно будет перебрать 1000 номеров и вызвать $client->messages->create для каждого из них. - person philnash; 28.09.2017
comment
Я бы попробовал и расскажу, как все прошло ... спасибо за быстрый ответ :) - person shasi kanth; 28.09.2017
comment
Не беспокойтесь, дайте мне знать, как это происходит! - person philnash; 28.09.2017
comment
Я хочу знать, можно ли использовать телефонный номер «От», который я использую при отправке отдельного сообщения, в качестве номера телефона в службе обмена сообщениями. Согласно документации по адресу: twilio.com/docs/api/messaging/, я не уверен, что я могу использовать купленный мной номер телефона. - person shasi kanth; 28.09.2017
comment
Да, вы можете добавить телефонный номер, который вы уже приобрели, в службу обмена сообщениями. Просто отредактируйте свою услугу и слева вы увидите пункт меню Numbers. Щелкните по нему, затем на следующей странице нажмите кнопку +. Это дает вам возможность добавлять существующие номера или покупать новые. - person philnash; 28.09.2017
comment
Наконец, я могу настроить номер телефона для своей службы обмена сообщениями в Twilio Dashboard и отправлять массовые SMS с помощью задания Cron (зацикливание массива из 1000 номеров). Спасибо :) - person shasi kanth; 03.10.2017
comment
Ура! Рад это слышать. Если это вам помогло, отметьте ответ как правильный, чтобы другие увидели, что это тоже помогло. Спасибо! - person philnash; 03.10.2017

Очень простой. Сначала настройте свой номер для уведомлений, а затем используйте мой код:

$message = 'Any text message';
$to = array();
foreach ($users as $user) { 
    $to[] = '{"binding_type":"sms", "address":"'.$user->phone_number.'"}';
}

$sid    = 'TWILIO_ACCOUNT_SID';
$token  = 'TWILIO_AUTH_TOKEN';
$services_id = 'TWILIO_SERVICE_ID';
$twilio = new Client($sid, $token);


$notification = $twilio
->notify->services($services_id)
->notifications->create([
    "toBinding" => $to,
    "body" => $message
]);
person MD. Shafayatul Haque    schedule 08.12.2018

у вас есть возможность создать соединение SQL? 1 столбец для номера, по которому следует позвонить, один столбец для содержания сообщения?

затем вы можете прокручивать строки в таблице с помощью приведенного выше сценария, чтобы отправлять сообщения по одному.

//spaghetti code, will not work
//1. Create MySQL Connection
//2. loop through table
foreach($row as $number=>$message) {
$sms_sent = $client->messages->create(
    $number,
    array(
        'from' => '+1xxxxxxxxxx',
        'body' => $message,
        'statusCallback' => "http://myapplication_callback_url"
        )
    );
}
person Brian Robbins    schedule 21.09.2017
comment
Эта идея кажется хорошей в качестве задания cron, но для перебора 1000 записей и отправки сообщений по одному требуется больше часа (при условии, что на вызов API 5 секунд). Я жду более простого решения от Twilio. - person shasi kanth; 21.09.2017