メニュー

Expand
Rate this page:

Thanks for rating this page!

We are always striving to improve our documentation quality, and your feedback is valuable to us. How could this documentation serve you better?

FAQ

Registration

  • これまでTwilioClient 1.2 SDKを使用しており、Programmable Voice SDKに移行したばかりです。 ケイパビリティートークンの使用すると「認証エラー」が表示されるのはなぜですか?
    • Programmable Voice SDKにおける認証には、Twilioアクセストークンと呼ばれる新しいトークン形式が必須です。 トークンを供給するエンドポイントでアプリケーションに対して Access Tokens を生成するよう更新してください。
  • アクセストークンを供給するエンドポイントを作成しましたが、着信通話のプッシュ通知に対する登録に失敗し続けるのはなぜですか?
    • Twilioのアクセストークンは複数の製品の認証をサポートしますが、Programmable Voice SDKについては VoiceGrant を使用しているか確認してください。
    • アクセストークンの作成に不正なAPIキーとシークレットを使用していた可能性があります。 APIキーが作成されたらこれを外部に公開しないよう管理してください。 またアクセストークンを作成するにはAPIキーとシークレット両方を使用してください。
    • Twilioによって許可されている最大有効期限は24時間、すなわち86,400秒です。 有効期限が <= (86400 -1) となっていることを確認してください。
    • APIキーとシークレットがメインアカウントとサブアカウントとの間で共有可能になっていません。
    • アクセストークンの identity が空ではないことを確認してください。
  • SDKが登録成功を知らせているにも関わらず、着信通話のプッシュ通知が受信されないのはなぜですか?
    • Twilio Programmable Voice Android SDKが通話の着信を知らせるためにプッシュ通知を送信するには、FCM SECRET または FCM Server Key が必須です。 これらの値を使用してプッシュクレデンシャルを作成することが必要です。 アプリケーションで使用されている google-services.json に関連づけられている FCM SECRET または FCM Server Key が正しいものではない場合、通知は失敗します。
  • 同一の identity で10を超過するアクティブな登録がないか確認してください。 Twilioは直近の10の登録デバイスにのみ通知を行い、残りのデバイスでは通知は受信されません。

Outbound Call

  • アクセストークンを使用していますが、通話を発信できないのはなぜですか?
    • アクセストークンで有効な Account SID 、有効な API signing key 、そして有効な secret を使用していることを確認してください。

プッシュ通知

My phone has been off for a while and when I turn it back on, I get calls that were already hung up

Note: This does not apply to version 2.1. The push notification sent to this version will expire within 30 seconds.

Twilio Voice SDKs use push notifications (APNS, FCM/GCM) as a mechanism to notify the callee of an incoming call. However, a problem presents itself when the callee‘s device is offline or not reachable: the push notification services cache the notification and re-attempt delivery at a much later time. The delayed notification may arrive after the call has already been terminated. The callee‘s device will briefly alert the user of a call that has already terminated leading to a poor user experience. Twilio plans to address this issue in a later release. However, in the meantime the following is a proposal for a work around you can implement to avoid the poor user experience.

The following 4 step proposal allows an app developer to use time information as an additional criteria to determine whether or not to display a call notification to the user.

Step 1 Generate a UTC based timestamp on the TwiML Application Server based on the Unix epoch in milliseconds.

var timeInMS = Date.now()

Step 2 Add this generated timestamp to the used to reach the callee

Parameters can be sent to a callee by initiating a TwiML . Use the attribute to specify your key/value parameters as shown below. The value shown below is an example of a timestamp obtained in step 1. You must pass the value as string. Pass the time as custom parameters in TwiML

<?xml version="1.0" encoding="UTF-8"?>
    <Response>
        <Dial answerOnBridge="false" callerId="client:alice">
            <Client>
                <Identity>bob</Identity>
                <Parameter name="timestamp" value="1555825985"  />
            </Client>
        </Dial>
    </Response>

When the call invite push message arrives to the callee it will have the specified parameters.

Step 3 Get the timestamp from the bundle or message provided by FCM when it arrives to the Android application.

2.X SDKs

When receiving the push notification from Twilio, you can obtain the parameter from the bundle or message. The parameters are provided by FCM payload as the key: twi_params. The following shows how you can parse the contents of the data to get a map of the parameters you passed into the Dial. The “data” variable is the map provided by FCM.

Map<String, String> customParameters = new HashMap<>();
String query_pairs = data.get(twi_params);
if (query_pairs != null) {
    final String[] pairs = query_pairs.split("&");
    for (String pair : pairs) {
        final int idx = pair.indexOf("=");
        final String key;
        try {
            key = idx > 0 ? pair.substring(0, idx) : pair;
            final String value = idx > 0 && pair.length() > idx + 1 ? URLDecoder.decode(pair.substring(idx + 1).replaceAll("\\+", "%20"), "UTF-8") : null;
            customParameters.put(key, value);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
}
3.X SDKs

When receiving the push notification from Twilio, you can obtain the parameter from CallInvite with the following:

Map<String, String> customParameters = callInvite.getCustomParameters();
String timestampString = customParameters.get(timestamp);

Step 4 Compare the UTC based timestamp to the UTC time on the device and discard the notification if the device time is significantly later than the timestamp generated by the server.

Android
// Get the timestamp from the customParameters map and the current device time
String timestampString = customParameters.get(timestamp);
long timestamp = Long.parseLong(timestampString);
long currentTimestamp = System.currentTimeMillis();

// Compare the time difference
if (currentTimestamp > timestamp + 60000) {
  // discard notification...
} else {
  // display notification...
}

役に立つツールとリンク集

サポートチケットとGitHubのIssueの作成方法

弊社ではご意見やご質問、ことにデバッグに役立つ情報の添えられたものを歓迎し、迅速に診断およびお答えします。 Issueやサポートチケットの送信時には、以下についてお知らせいただけると幸いです:

  • 説明 - 実現しようとしていること、再現手順、発生し散る事象。
  • SDKのバージョン
  • SDKのverbose log - 弊社チームがデバッグを行う上で、SDKログは常に最良の資料になります。 SDKのログレベルを構成するには、DEBUG: Voice.setLogLevel(LogLevel.DEBUG) と設定してください。
  • TwilioのアカウントSID
  • TwilioのCall SID

これらの役立つ情報の収集が済んだら、GitHub上のこちらでIssueを作成してください。

Voice SDK関連の一般的なご質問については、サポートチケットをお寄せください。

Rate this page:

ヘルプが必要ですか?

誰しもが一度は考える「コーディングって難しい」。そんな時は、お問い合わせフォームから質問してください。 または、Stack Overflow でTwilioタグのついた情報から欲しいものを探してみましょう。