Практически все SMS-шлюзы позволяют отправлять и получать сообщения. Наиболее распространенный способ отправки сообщений - через своего рода HTTP API (SOAP, REST, RPC). Например, чтобы отправить сообщение с использованием Twilio (там, где я работаю), вы бы отправили запрос POST нашему API с тремя параметрами: To
(получатель), From
(ваш номер Twilio), и Body
(что включить в сообщение). Многие другие шлюзы используют аналогичные методы.
Из-за ограничений системы SMS во всем мире невозможно однозначно идентифицировать сообщения. Это означает, что, если получатель сообщения вручную не содержит идентификатор, невозможно связать ответ с исходным сообщением, не сопоставив номера телефонов отправителя и получателя. Это может усложнить обработку случаев, когда существует несколько невыполненных запросов к одному получателю. Есть несколько стратегий, которые вы можете использовать, чтобы обойти это ограничение.
Запрос уникальных токенов ответа - Для каждого запроса, отправленного получателю, необходимо, чтобы ответ был уникальным для этого запроса. Например, в первом сообщении используйте что-то вроде «Для подтверждения, ответьте с помощью A1», а в последующих невыполненных запросах используйте другой уникальный ответ.
Использовать разные телефонные номера «От» - Для каждого запроса, отправленного получателю, отправлять с другого номера. Затем вы можете сопоставить ответ с номером телефона, на который ответили. Во многих случаях это неоптимальная система, поскольку вам нужно больше телефонных номеров, и пользователи могут получать сообщения с разных номеров, что может привести к путанице.
Срок действия невыполненных запросов - Если ответы на каждый запрос не важны, просто предположите, что они отвечают на самый последний запрос, или попросите их уточнить после ответа.
Что касается получения сообщений, большинство шлюзов будут уведомлять вас по HTTP. Например, когда на ваш номер Twilio приходит сообщение, мы отправляем запрос POST на URL-адрес, который вы указываете с включенными параметрами To
, From
и Body
. Вы обрабатываете это, как любая другая форма подачи заявки в вашем приложении. Другие шлюзы используют аналогичные методы, но я не могу засвидетельствовать детали.