3

Twilio を使用して appengine で SMS を送信しています。Twilio は 160 文字を超える SMS を受け付けないので、分割する必要があります。SMSを分割して、次のように送信しています。

def send_sms_via_twilio(mobile_number, message_text):
    client = TwilioRestClient(twilio_account_sid , twilio_auth_token)
    message = client.sms.messages.create(to=mobile_number, from_=my_twilio_number, body=message_text)

split_list = split_sms(long_message)
for each_message in split_list:
    send_sms_via_twilio(each_message)

ただし、送信の順序が異なることがわかりました。たとえば、2/5、1/5、4/5 などのメッセージを受信することもあれば、順序が正しい場合もあります。split_list の順序は間違いなく正しいです。私が試したSMSの間違った順序を克服するために

for each_message in split_list:
    deferred.defer(send_sms_via_twilio, each_message, _countdown=1)

しかし、私は同じ問題に遭遇しました。私はそれから試しました

for each_message in split_list:
    deferred.defer(send_sms_via_twilio, each_message, _countdown=1, _queue="send-text-message")

私のキューを次のように定義しました

- name: send-text-message
  rate: 1/s
  bucket_size: 10
  max_concurrent_requests: 1
  retry_parameters:   
    task_retry_limit: 5

問題は同時実行性 (python27 で実行) であり、max_concurrent_requests を制限すればこの問題は解決されると考えています。ただし、問題は依然として存在します。つまり、テキストは依然として間違った順序で送信されます。ログを確認しましたが、タスクの失敗の通知が表示されませんでした。間違った順序で実行されているようです。

足りないものはありますか?この問題を解決するにはどうすればよいですか。

4

2 に答える 2

4

SMS メッセージング (具体的には SMPP などの基礎となるプロトコル) は、定義上非同期であることに注意してください。これは、個別のSMS メッセージの順序を指定する方法がないことを意味します。

これらのメッセージのバイナリ ボディでUDH (ユーザー定義ヘッダー)を使用して、SMS パケットの順序を指定する方法があります。ただし、これは長い SMS メッセージ、つまり 1 つのメッセージで送信するには長すぎるメッセージに対してのみ機能します。たとえば、メッセージが 160 GSM-7 文字または 80 UTF-16 文字を超える場合、UDH を使用して複数のメッセージとして送信されます。

その場合、携帯電話はメッセージ パーツが到着しても表示されません。最後のものが来るまでそれらをメモリに収集し、正しい順序で組み立てます。エンド ユーザーにとって、これは通常よりも長いメッセージであり、メッセージに「1/3」、「2/3」などと書く必要はありません。

免責事項: 私は、ユーザー指定ヘッダー (UDH) を使用した複数のバイナリ メッセージや標準の長いメッセージの両方を送受信できる会社で働いています。

于 2012-09-17T10:28:42.900 に答える
-1

Twilio に縛られていない場合は、SMSifiedを使用してみてください。彼らは自動的にメッセージを分割し、正しい順序であることを確認し、メッセージの最後に「1/2、2/2...」を追加します。つまり、長さに関係なく完全なメッセージを REST API に送信するだけで、残りは処理されます。REST API も使用するため、引き続き Python を使用できます。

于 2012-09-20T15:46:32.187 に答える