質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Twilio

Twilioは電話・SMS・ビデオ・チャット・SNS連携等、様々なコミュニケーションチャネルの融合を可能とするクラウドコミュニケーションAPIサービスです。 従来は大規模な設備投資が必要だった電話と連携したシステムも、汎用的な開発言語で容易に開発が可能となり、 様々なコミュニケーションチャネルを活用したシステム構築が可能となります。

Q&A

0回答

1939閲覧

Twilio Client の切断について

wwmakoto

総合スコア10

Twilio

Twilioは電話・SMS・ビデオ・チャット・SNS連携等、様々なコミュニケーションチャネルの融合を可能とするクラウドコミュニケーションAPIサービスです。 従来は大規模な設備投資が必要だった電話と連携したシステムも、汎用的な開発言語で容易に開発が可能となり、 様々なコミュニケーションチャネルを活用したシステム構築が可能となります。

0グッド

0クリップ

投稿2019/03/29 08:59

編集2019/04/01 06:06

Twilioを利用し、コンタクトセンター(現在は音声のみ)の開発を行っております。
通話機能を実装しているのですが、時々なのですが、意図しない切断や、TaskRouterの切断が発生し、
原因について調査を行っております。

・TaskRouterの切断について
no valid credentials availableのエラーが起因しているようなのですが、
トークン更新処理はドキュメントの通りに処理を行っているつもりです。

・通話中の切断について
エラーメッセージですが、31204(無効なJWTトークン)に起因しているようなのですが、
Twilio Clientで31205(トークン期限切れ)を検知した際は、トークンの更新処理も行っており、
なぜ31204エラーが発生するのか、頭を悩ませております。

トークンの取得、更新処理は以下のようになっております。
1)ログイン時(画面表示時)にTwilio Sync、Twilio TaskRouter、Twilio Clientのトークンをそれぞれ取得します。
2)Twilio Syncのトークン期限切れ3分まえに(1)のトークンをそれぞれ更新します。
3)その他、Twilio TaskRouterでエラー、もしくはトークン切れを検知すると自身のトークンを更新します。
4)その他、Twilio Clientでオフラインを検知すると自身のトークンを更新します。

それぞれのトークン関連部分のみですが、ソースコードを抜粋いたしましたので以下に記載いたします。
=============

JavaScript

1var VmInstance; 2export default { 3    data () { 4        return { 5            worker: null, 6            syncClient: null, 7        } 8    }, 9    mounted() { 10        this.VmInstance = this; 11        this.TwilioSync(); 12        this.TaskRouter(); 13        this.TwilioClient(); 14    }, 15    methods: { 16        TwilioSync: function() { axios.get("/api/token/generate/twiliosync/"+this.sid).then((res) => { this.EventTwilioSync(res.data); }); }, 17        TaskRouter: function() { axios.get("/api/token/generate/taskrouter/"+this.sid).then((res) => { this.EventTaskRouter(res.data); }); }, 18        TwilioClient: function() { axios.get("/api/token/generate/voip/"+this.sid).then((res) => { this.EventTwilioDevice(res.data); }); }, 19        EventTwilioSync: function(data) 20        { 21            var token = data.token; 22            console.log('Init token for Twilio Sync', token); 23            this.syncClient = new Twilio.Sync.Client(token); 24            this.syncClient.on('tokenAboutToExpire', function () { 25                console.log('Twilio Sync will be expired in three minutes'); 26                VmInstance.UpdateTwilioSyncToken(); 27                VmInstance.UpdateTaskRouterToken(); 28                VmInstance.UpdateTwilioClient(); 29            }); 30        }, 31        EventTaskRouter: function(token) 32        { 33            console.log('Init token for Twilio TaskRouter', token); 34            this.worker = new Twilio.TaskRouter.Worker(token); 35            this.worker.on("error", function(error) { 36                console.log('There is an error on TaskRouter', error); 37                VmInstance.UpdateTaskRouterToken(); 38            }); 39            this.worker.on("token.expired", function() { 40                console.log("worker token was expired."); 41                VmInstance.UpdateTaskRouterToken(); 42            }); 43            this.worker.on("connected", function() { 44                console.log("Websocket has connected"); 45            }); 46            this.worker.on("disconnected", function() { 47                console.log("Websocket has disconnected"); 48            }); 49        }, 50        EventTwilioDevice: function(token) 51        { 52            console.log('Init token for Twilio Client', token); 53            Twilio.Device.setup(token, { debug: true }); 54            Twilio.Device.offline(function (device) { 55                console.log('There is offline', device); 56                VmInstance.UpdateTwilioClient(); 57            }); 58        }, 59        UpdateTaskRouterToken: function() 60        { 61            axios.get("/api/token/generate/taskrouter/"+this.sid).then((res) => { 62                console.log('Update token for Twilio TaskRouter', res.data); 63                VmInstance.worker.updateToken(res.data); 64            }); 65        }, 66        UpdateTwilioSyncToken: function() 67        { 68            axios.get("/api/token/generate/twiliosync/"+this.sid).then((res) => { 69                console.log('Update token for Twilio Sync', res.data.token); 70                VmInstance.syncClient.updateToken(res.data.token); 71            }); 72        }, 73        UpdateTwilioClient: function() 74        { 75            axios.get("/api/token/generate/voip/"+this.sid).then((res) => { 76                console.log('Update token for Twilio Client', res.data); 77                Twilio.Device.setup(res.data); 78            }); 79        }, 80    } 81}

=============

例外処理など、ほかに考慮すべき点などございましたら、アドバイスなど頂戴できればと思います。

また、通話中の意図しない切断についてなのですが、
Twilioを利用した場合、クライアントPC側で発生する主な切断原因には、
どのようなものがありますでしょうか?

宜しくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/03/29 09:04

このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
t_obara

2019/03/29 09:17

twilio 側ではどの様な回答を提示されているのでしょうか?
wwmakoto

2019/04/01 02:41

y_waiwai様 プログラム部分を<code>に変更いたしました t_obara様 トークンの更新処理の見直しを行ってくださいとあったのですが、 勉強不足から更新処理を現在の処理から、 どのように見直せば良いのかわかっておりません
t_obara

2019/04/01 06:12

トークン更新処理が期待通りのタイミングで呼ばれているか、呼ばれたとして、想定通りの更新処理が行われているのかなどは確認しておりますか?またそれはどの様な方法で行ったのですか?その情報をtwilio側に提示した際にどの様な回答を提示されたのですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問