Twilioクライアントをより大きなアプリケーションに統合しようとしています。電話をかけるまでは、すべて正常に機能しているようdevice.connect(parameters, connectionListener)
です。31100 Generic Malformed Request
エラーが発生しました。それだけです。
同じデバイスで、同じTwilioアカウントと同じTwilioアプリケーションを使用して、Twilio Android SDK(MonkeyPhone)で提供されるサンプルコードは完全に機能します。
エラーの意味や考えられる原因について、これ以上の詳細を見つけることができません。無効なデータを送信していると想定していますが、それがどのように可能かわかりません。機能トークンはOKです。MonkeyPhoneサンプルアプリで生成されたものと照合して検証しました。作品の作成はDevice
問題なく、エラーはありません。メソッドでパラメーターを送信していない場合でも、エラーがスローされますconnect()
。のonConnecting()
メソッドConnectionListener
がonDisconnected(Connection inConnection, int inErrorCode, String inErrorMessage)
呼び出されますが、Malformed Request
エラーが発生して呼び出されます。
Voice TwiMLのコードは正常に機能しています。これは、<Dial>
可能な限り最も単純な動詞を生成する単純なPHPスクリプトです。
<Response>
<Dial>someone</Dial>
</Response>
その他の特定の情報...アプリケーションで別のサービスを実行しており、他のさまざまな操作を実行するために使用されています。これは何らかの形で干渉する可能性がありますか?また、私はトライアルアカウントを使用しており、実際の電話番号への発信がサポートされていないルーマニアに住んでいます(ただし、とにかく電話番号を使用していません)。これは私に何らかの影響を与える可能性がありますか?
巨大なコードの壁を投げてしまったことを前もってお詫びしますが、2番目の目で何か問題を見つけられることを願っています。これは、MonkeyPhoneサンプルに最も類似したコードのバージョンです。唯一の違いは、AsyncTaskを使用して機能トークン(JsonAsyncRequestWithError
クラス)を取得していることです。
public class MonkeyPhone implements Twilio.InitListener, DeviceListener {
private static final String TAG = "MonkeyPhone";
private Context context;
private Device device;
private Connection connection;
public MonkeyPhone(Context context) {
this.context = context;
Twilio.initialize(context, this /* Twilio.InitListener */);
}
@Override
/* Twilio.InitListener method */
public void onInitialized() {
Log.d(TAG, "Twilio SDK is ready");
// the Emulator has a somewhat unique "product" name
String clientName = "doug";
HttpGet get = new HttpGet("http://teamphoenix.zzl.org/capability.php?ClientName=" + clientName);
JsonAsyncRequestWithError asyncRequestWithError = new JsonAsyncRequestWithError(context, "test", new AsyncRequestWithErrorListener() {
@Override
public void onResult(AsyncRequestResponse response, Object destination) {
createDevice(response.getMessage());
}
@Override
public void onErrorResult(AsyncRequestResponse response, Object destination) {
}
});
asyncRequestWithError.execute(get);
}
public void createDevice(String token) {
try {
device = Twilio.createDevice(token, this /* DeviceListener */);
Intent intent = new Intent(context, SpringshotPhoneActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
device.setIncomingIntent(pendingIntent);
} catch (Exception e) {
Log.e(TAG, "", e);
}
}
@Override
/* Twilio.InitListener method */
public void onError(Exception e) {
Log.e(TAG, "Twilio SDK couldn't start: " + e.getLocalizedMessage());
}
@Override
/* DeviceListener method */
public void onStartListening(Device inDevice) {
Log.i(TAG, "Device is now listening for incoming connections");
}
@Override
/* DeviceListener method */
public void onStopListening(Device inDevice) {
Log.i(TAG, "Device is no longer listening for incoming connections");
}
@Override
/* DeviceListener method */
public void onStopListening(Device inDevice, int inErrorCode, String inErrorMessage) {
Log.i(TAG, "Device is no longer listening for incoming connections due to error " + inErrorCode + ": " + inErrorMessage);
}
@Override
/* DeviceListener method */
public boolean receivePresenceEvents(Device inDevice) {
return false; // indicate we don't care about presence events
}
@Override
/* DeviceListener method */
public void onPresenceChanged(Device inDevice, PresenceEvent inPresenceEvent) {
}
public void connect(String phoneNumber) {
Map<String, String> parameters = new HashMap<String, String>(1);
parameters.put("PhoneNumber", phoneNumber);
/// ---------------- THIS IS THE CALL THAT FAILS ------------------------------------//
connection = device.connect(parameters, null /* ConnectionListener */);
if (connection == null)
Log.w(TAG, "Failed to create new connection");
}
public void disconnect() {
if (connection != null) {
connection.disconnect();
connection = null;
}
}
public void handleIncomingConnection(Device inDevice, Connection inConnection) {
Log.i(TAG, "Device received incoming connection");
if (connection != null)
connection.disconnect();
connection = inConnection;
connection.accept();
}
@Override
protected void finalize() {
if (connection != null)
connection.disconnect();
if (device != null)
device.release();
}
}
どうもありがとうございます!